# An issue with Root systems in sage

Here is a problem that I cannot seem to understand.


R=RootSystem(['A', 2])
F=R.ambient_space().fundamental_weights()
D=R.ambient_space().simple_roots()

The output we get is as follows:

F=Finite family {1: (1, 0, 0), 2: (1, 1, 0)}
D=Finite family {1: (1, -1, 0), 2: (0, 1, -1)}

  The issue is the root lattice is contained in the weight lattice but clearly D[2] is not contained in the lattice generated by F. Perhaps I am missing something simple.

I need to write a program I would need the weyl group action on some weights and roots at the same time. How can this be done? Thank you for your time in advance.

EDIT: Consider now the Weyl group action on weight lattice. We will continue using the notations above.


W= R.ambient_space(). weyl_group()
S= W.gens()
s1, s2= S
s1.action(F[1])

Gives an output
 
ValueError                                Traceback (most recent call last)
<ipython-input-12-4b0b8fd74264> in <module>()
---- 1 s1.action(F[Integer(1)]) /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/combinat/root_system/weyl_group.pyc in action(self, v)
843         """
844         if v not in self.domain():
--> 845             raise ValueError("{} is not in the domain".format(v))
846         return self.domain().from_vector(self.__matrixv.to_vector())
847
ValueError: Lambda[1] is not in the domain

  The only way I have been able to make it work is that

L = R. weight_lattice()
F=L.fundamental_weights()
f= L.to_ambient_space-morphism()
s1.action(f(F[1]))
(1,0,0)

This is what I can get but the problem is  s2
 f(F[2]) = (0,0,1).  So we are in a situation of the original problem again. I need to calculate the Weyl group action on the fundamental weights. If there is a better way to do it I would like to know.

edit retag close merge delete

Sort by » oldest newest most voted

Yes, this looks strange indeed. You can proceed like that instead:

sage: R = RootSystem(['A', 2])
sage: WL = R.weight_lattice()
sage: FW = R.weight_lattice().basis()
sage: SR = WL.simple_roots()
sage: FW
Finite family {1: Lambda[1], 2: Lambda[2]}
sage: SR
Finite family {1: 2*Lambda[1] - Lambda[2], 2: -Lambda[1] + 2*Lambda[2]}


EDIT: here is how to get the Weyl group acting on the weight lattice

sage: W = WL.weyl_group()
sage: s = W.gens()
sage: s[0].action(FW[1])
-Lambda[1] + Lambda[2]


EDIT: with the same notations

sage: v=s[0].action(SR[1])
sage: v.to_ambient().is_positive_root()
False
sage: v=s[0].action(SR[2])
sage: v.to_ambient().is_positive_root()
True
sage: v=s[1].action(SR[2])
sage: v.to_ambient().is_positive_root()
False
sage: v=s[1].action(SR[1])
sage: v.to_ambient().is_positive_root()
True

more

Thank you for your answer. But there is a problem with this approach. I have edited the question accordingly!

( 2016-02-28 07:50:27 -0500 )edit

This solves part of my problem. The other part is how can I simultaneously check id weyl group action on a simple root makes it positive or negative. The issue is if I redefine Weyl group in term of root lattice again I cannot make it operate on weight lattice.

( 2016-02-28 15:25:35 -0500 )edit

Thank you this helps me a lot!

( 2016-03-01 08:47:57 -0500 )edit

I didn't remember seeing the methods .to_ambient and to_vector in the documentation on Weyl Group/ root space realizations etc. It is probably because I was looking at the wrong places. Can you suggest where I should be looking?

( 2016-03-01 17:59:18 -0500 )edit