Re: [sage-combinat-devel] Re: the unfortunate case of affine type A twisted

2012-03-12 Thread Nicolas M. Thiery
On Sat, Mar 10, 2012 at 02:04:44PM +0100, Christian Stump wrote:
  Christian: I had to slightly rebase
  trac_11187-finite_reflection_groups-cs.patch for the doctests I just
  added to apply_simple_reflection and friends.

This time I rebased nonnesting_partitions-cs.patch which was touching
RootLatticeRealizations whose file got renamed and reindented.
Hopefully the root system patch is now finished!

Cheers,
Nicolas
--
Nicolas M. Thiéry Isil nthi...@users.sf.net
http://Nicolas.Thiery.name/

-- 
You received this message because you are subscribed to the Google Groups 
sage-combinat-devel group.
To post to this group, send email to sage-combinat-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.



Re: [sage-combinat-devel] Re: the unfortunate case of affine type A twisted

2012-03-10 Thread Nicolas M. Thiery
Hi Anne,

On Fri, Mar 09, 2012 at 04:09:13PM -0800, Anne Schilling wrote:
 Impressive patch! Thanks for working on this.

:-)

Thanks so much for your very useful and quick review. I really
appreciate that!

Followup on http://trac.sagemath.org/sage_trac/ticket/6588

Cheers,
Nicolas
--
Nicolas M. Thiéry Isil nthi...@users.sf.net
http://Nicolas.Thiery.name/

-- 
You received this message because you are subscribed to the Google Groups 
sage-combinat-devel group.
To post to this group, send email to sage-combinat-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.



Re: [sage-combinat-devel] Re: the unfortunate case of affine type A twisted

2012-03-10 Thread Nicolas M. Thiery

Christian: I had to slightly rebase
trac_11187-finite_reflection_groups-cs.patch for the doctests I just
added to apply_simple_reflection and friends.

Cheers,
Nicolas
--
Nicolas M. Thiéry Isil nthi...@users.sf.net
http://Nicolas.Thiery.name/

-- 
You received this message because you are subscribed to the Google Groups 
sage-combinat-devel group.
To post to this group, send email to sage-combinat-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.



Re: [sage-combinat-devel] Re: the unfortunate case of affine type A twisted

2012-03-10 Thread Christian Stump
Hi --

as you are currently discussing root systems (including 6588, thanks a
lot for working on that!): here are some issues that made it very hard
for me to work with root systems for finite reflection groups:

# the first and the second seem to behave very differently:

sage: x = CartanType([['A',4]])
sage: type(x)
class 'sage.combinat.root_system.type_reducible.CartanType_with_superclass'
sage: x.is_irreducible()
False

sage: x = CartanType(['A',4])
sage: type(x)
class 'sage.combinat.root_system.type_A.CartanType'
sage: x.is_irreducible()
True

# there is a typo here (a double ll in the middle):

sage: x.is_crystalographic()
True

# the standard index set is not python/sage convention, is that on purpose?

sage: x.index_set()
[1, 2, 3, 4]

# the convention for the exceptional node in types B/C is the other
choice that in chevie (compare
http://www.math.jussieu.fr/~jmichel/gap3/htm/chap071.htm):

sage: x = CartanType(['B',4])
sage: x.dynkin_diagram()
O---O---O==O
1   2   3   4
B4

# the roots are accessible only in the root space, my impression is
that a root system has roots, why not having a method there calling
them?
# the order in which the roots are given comes from the backtracker:

sage: x = CartanType(['A',4])
sage: r = x.root_system().root_space()
sage:. r.positive_roots()
sage.combinat.backtrack.TransitiveIdeal

sage: [ beta for beta in r.positive_roots() ]
[alpha[2], alpha[2] + alpha[3], alpha[1], alpha[3], alpha[1] +
alpha[2], alpha[1] + alpha[2] + alpha[3], alpha[2] + alpha[3] +
alpha[4], alpha[4], alpha[3] + alpha[4], alpha[1] + alpha[2] +
alpha[3] + alpha[4]]

# it would be great if we were able to get the same order as obtained
from chevie, as this gives directly the permutation representation of
the corresponding Coxeter group (acting on positions of roots).

finally, the non-crystallographic types are missing. using the
universal cyclotomic field we should also be able to get these root
systems into sage.

I would be happy to work on (parts of) the things above, but first
wanted to hear what might be good to get into 6588, and your opinion
on others.

Best, Christian

-- 
You received this message because you are subscribed to the Google Groups 
sage-combinat-devel group.
To post to this group, send email to sage-combinat-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.



Re: [sage-combinat-devel] Re: the unfortunate case of affine type A twisted

2012-03-10 Thread Anne Schilling
Hi Christian,

 as you are currently discussing root systems (including 6588, thanks a
 lot for working on that!): here are some issues that made it very hard
 for me to work with root systems for finite reflection groups:
 
 # the first and the second seem to behave very differently:
 
 sage: x = CartanType([['A',4]])
 sage: type(x)
 class 'sage.combinat.root_system.type_reducible.CartanType_with_superclass'
 sage: x.is_irreducible()
 False
 
 sage: x = CartanType(['A',4])
 sage: type(x)
 class 'sage.combinat.root_system.type_A.CartanType'
 sage: x.is_irreducible()
 True

This is definitely strange.

 # there is a typo here (a double ll in the middle):
 
 sage: x.is_crystalographic()
 True

Please fix this!

 # the standard index set is not python/sage convention, is that on purpose?
 
 sage: x.index_set()
 [1, 2, 3, 4]

I think this is intentional. The nodes in the Dynkin diagram are labeled
1,2,...,rank of g.

 # the convention for the exceptional node in types B/C is the other
 choice that in chevie (compare
 http://www.math.jussieu.fr/~jmichel/gap3/htm/chap071.htm):
 
 sage: x = CartanType(['B',4])
 sage: x.dynkin_diagram()
 O---O---O==O
 1   2   3   4
 B4

There are many different conventions. I think in sage the default is the one
used in Kac. There is also a relabeling option if you want to use a different
convention.

 # the roots are accessible only in the root space, my impression is
 that a root system has roots, why not having a method there calling
 them?

I am confused. This also exists for other spaces:

sage: R = RootSystem(['A',4])
sage: R.weight_lattice().roots()
[-Lambda[2] + 2*Lambda[3] - Lambda[4], -Lambda[1] + Lambda[2] + Lambda[3] - 
Lambda[4], 2*Lambda[1] - Lambda[2], -Lambda[1] + 2*Lambda[2] - Lambda[3], 
Lambda[1] + Lambda[2] - Lambda[3], -Lambda[1] +
Lambda[2] + Lambda[4], Lambda[1] + Lambda[3] - Lambda[4], -Lambda[2] + 
Lambda[3] + Lambda[4], -Lambda[3] + 2*Lambda[4], Lambda[1] + Lambda[4], 
Lambda[2] - 2*Lambda[3] + Lambda[4], Lambda[1] -
Lambda[2] - Lambda[3] + Lambda[4], -2*Lambda[1] + Lambda[2], Lambda[1] - 
2*Lambda[2] + Lambda[3], -Lambda[1] - Lambda[2] + Lambda[3], Lambda[1] - 
Lambda[2] - Lambda[4], -Lambda[1] - Lambda[3] +
Lambda[4], Lambda[2] - Lambda[3] - Lambda[4], Lambda[3] - 2*Lambda[4], 
-Lambda[1] - Lambda[4]]
sage: R.root_lattice().roots()
[alpha[2], alpha[2] + alpha[3], alpha[1], alpha[3], alpha[1] + alpha[2], 
alpha[1] + alpha[2] + alpha[3], alpha[2] + alpha[3] + alpha[4], alpha[4], 
alpha[3] + alpha[4], alpha[1] + alpha[2] + alpha[3] +
alpha[4], -alpha[2], -alpha[2] - alpha[3], -alpha[1], -alpha[3], -alpha[1] - 
alpha[2], -alpha[1] - alpha[2] - alpha[3], -alpha[2] - alpha[3] - alpha[4], 
-alpha[4], -alpha[3] - alpha[4], -alpha[1] -
alpha[2] - alpha[3] - alpha[4]]

 I would be happy to work on (parts of) the things above, but first
 wanted to hear what might be good to get into 6588, and your opinion
 on others.

As far as I understand Nicolas would like to finish this patch soon. If there 
are some things that
can be implemented quickly, why don't you write a quick patch on top of 
Nicolas? Otherwise it might
be better to open a new ticket.

Best,

Anne

-- 
You received this message because you are subscribed to the Google Groups 
sage-combinat-devel group.
To post to this group, send email to sage-combinat-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.



Re: [sage-combinat-devel] Re: the unfortunate case of affine type A twisted

2012-03-09 Thread Anne Schilling
Hi Nicolas,

Impressive patch! Thanks for working on this.
Here are some first comments:

- In /sage/categories/affine_weyl_groups.py there is a new import
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
which is not used. Please either remove this line or add InfiniteEnumeratedSets
in the class (which is probably preferable).

- In /sage/categories/affine_weyl_groups.py please add a `TestSuite(s).run()` 
doctest.

- I am not sure this is related to the patch, but there are some
strange methods in /sage/categories/coxeter_groups.py without doctests:

@abstract_method(optional = True)
def has_right_descent(self, i):

Returns whether i is a right descent of self.

#EXAMPLES::
#
#sage:


def has_left_descent(self, i):

Returns whether `i` is a left descent of self.

This default implementation uses that a left descent of
`w` is a right descent of `w^{-1}`.

return (~self).has_right_descent(i)

Should has_left_descent also be an abstract_method? Or is that implicit through
has_right_descent?

- Why is the cateogry RootLatticeRealization in
/sage/combinat/root_system/root_lattice_realization.py
here and not in categories (if it is a category as specified in the docstring)?

The same question holds for WeightLatticeRealizations(Category_over_base_ring)
in /sage/combinat/root_system/weight_lattice_realization.py.

- When using the extended weight lattice, the list of fundamental weights
does not include `\delta`. On the other hand it is possible to input
`\delta` into the method fundamental_weight. This seems a little inconsistent.

{{{
sage: Q = RootSystem(['A', 3, 1]).weight_lattice(extended = True); Q
Extended weight lattice of the Root system of type ['A', 3, 1]
sage: Q.fundamental_weights()
Finite family {0: Lambda[0], 1: Lambda[1], 2: Lambda[2], 3: Lambda[3]}
sage: Q.fundamental_weight('delta')
delta
}}}

Also, I posted a first reviewer's patch on sage-combinat with mostly just
trivial changes and some extra doc tests. Please fold it if you are satisfied.

Thanks!

Anne



On 3/9/12 1:18 AM, Nicolas M. Thiery wrote:
   Hi Mark,
 
 On Thu, Mar 08, 2012 at 11:01:59PM -0500, msh...@math.vt.edu wrote:
 Unfortunately, in type A_{2n}^{(2)}, the implementation of the
 extended weight lattice is (slightly) incorrect.

 The usual definition of delta in general is the linear
 combination of simple roots whose coefficients are given by the
 unique relatively prime tuple of positive integers
 which give a linear dependence on the columns of the Cartan matrix
 (where the i,j-th entry is the pairing of alpha_i^\vee with alpha_j).

 In type A_4^{(2)} we have

 delta = 2 alpha_0 + 2 alpha_1 + alpha_2.

 Therefore

 alpha_0 = delta/2 - alpha_1 - 1/2 alpha_2
= delta/2 - 2 Lambda_0 - Lambda_1.

 Note that the 1/2 alpha_2 is ok: other than delta/2
 you get no denominator.

 In other words, in this unfortunate root system,
 the Z-basis of the extended weight lattice
 consists of the fundamental weights and delta/2.

 In every other affine root system the extra generator is delta,
 that is, the coefficient of alpha_0 in delta is 1.

 Awkward to fix (making delta/2 the
 basis element) but it is the standard notation.
 
 The implementation is in fact correct (computationally speaking):
 
 sage: L=RootSystem([A,4,2]).weight_lattice(extended=True)
 sage: L.null_root()
 2*delta
 
 Granted, the output is suboptimal: naming delta the basis element
 used to perturbate the simple root for the special node is a slight
 abuse since, as you point out, in the literature, delta is instead
 the null root. A trivial workaround would be to tweak _repr_monomial
 and _latex_monomial to *output* that basis element as delta/2 for
 A_2n^(2). A better fix would be to choose a type free name for this
 basis element, to be used for:
 
  - output
  - indexing the basis element (as in the current L.basis()[delta])
 
 A further guide for choosing that name is that we want it to admit
 natural generalizations for Kac-Moody where we will need more basis
 elements to perturbate more simple roots (something like delta_0,
 delta_1, ...).
 
 I do claim that their is strong value in keeping the code as type-free
 as possible (it currently is completely type free up to a single
 thing: the choice of the special node which is hard coded in the
 predefined affine Cartan Type). By the way, as a personal opinion, the
 literature would be far more accessible to newcomers if it was written
 in a more type free way, without all those nitty-gritty type specific
 details that are impossible to all keep in mind at once. But that's a
 different discussion.
 
 Now for the practical aspect: I have added the following warning to
 the documentation:
 
 .. warning::
 
 By a slight notational abuse, the extra basis element used to