#18034: symmetric_form weirdness for affine roots
------------------------------------------+------------------------
Reporter: bump | Owner:
Type: defect | Status: new
Priority: major | Milestone: sage-6.6
Component: PLEASE CHANGE | Resolution:
Keywords: days64, symmetric_form | Merged in:
Authors: | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
Dependencies: | Stopgaps:
------------------------------------------+------------------------
Description changed by bump:
Old description:
> Affine weight lattices have a method called symmetric_form which
> implements the symmetric bilinear form on the weight lattice (or weight
> space) used extensively in representation theory. See Kac, *Infinite-
> dimensional Lie algebras* Chapter 2. It is an inner product, that is, a
> pairing of the space with itself. Here are some examples where it doesn't
> work right unless you coerce the root into the weight lattice.
>
> {{{
> sage: RS = RootSystem(['A',2,1])
> sage: P = RS.weight_lattice(extended=true)
> sage: Q = RS.root_lattice()
> sage: alpha = Q.simple_roots()
> sage: alphacheck = Q.simple_coroots()
> sage: omega = P.fundamental_weights()
> sage: [alpha[1].symmetric_form(omega[i]) for i in [0,1,2]]
> [-1, 2, -1]
> sage: [alpha[1].symmetric_form(alphacheck[i]) for i in [0,1,2]]
> [-1, 2, -1]
> sage: [P(alpha[1]).symmetric_form(alphacheck[i]) for i in [0,1,2]]
> [0, 1, 0]
> sage: [P(alpha[1]).symmetric_form(omega[i]) for i in [0,1,2]]
> [0, 1, 0]
> }}}
>
> The first three answers are (in my opinion) wrong for the following
> reasons.
> The last answer is correct. The first one is therefore wrong since
> the symmetric form should not depend on whether alpha is regarded as
> an element of Q or of P. The second two pairings should be undefined
> since
> alphacheck cannot be coerced into P.
>
> The pairing self.scalar(other) can be used to pair roots with coroots.
> The
> pairing self.symmetric_form(other) should then be defined for elements
> of the same space.
New description:
Affine weight lattices have a method called symmetric_form which
implements the symmetric bilinear form on the weight lattice (or weight
space) used extensively in representation theory. See Kac, *Infinite-
dimensional Lie algebras* Chapter 2. It is an inner product, that is, a
pairing of the space with itself. Here are some examples where it doesn't
work right unless you coerce the root into the weight lattice.
{{{
sage: RS = RootSystem(['A',2,1])
sage: P = RS.weight_lattice(extended=true)
sage: Q = RS.root_lattice()
sage: alpha = Q.simple_roots()
sage: alphacheck = Q.simple_coroots()
sage: omega = P.fundamental_weights()
sage: [alpha[1].symmetric_form(omega[i]) for i in [0,1,2]]
[-1, 2, -1]
sage: [alpha[1].symmetric_form(alphacheck[i]) for i in [0,1,2]]
[-1, 2, -1]
sage: [P(alpha[1]).symmetric_form(alphacheck[i]) for i in [0,1,2]]
[0, 1, 0]
sage: [P(alpha[1]).symmetric_form(omega[i]) for i in [0,1,2]]
[0, 1, 0]
}}}
The first three answers are (in my opinion) wrong for the following
reasons.
The last answer is correct. The first one is therefore wrong since
the symmetric form should not depend on whether alpha is regarded as
an element of Q or of P. The second two pairings should be undefined since
alphacheck cannot be coerced into P.
The pairing self.scalar(other) can be used to pair roots with coroots. The
pairing self.symmetric_form(other) should then be defined for elements
of the same space.
This seem to be wrong also in a different way for type ['B',3,1]. The
following is
probably correct behavior:
{{{
sage: RS = RootSystem(['B',3,1])
sage: Q = RS.root_lattice()
sage: P = RS.weight_lattice(extended=true)
sage: Matrix([[a.symmetric_form(b) for a in Q.simple_roots()] for b in
Q.simple_roots()])
[ 4 0 -2 0]
[ 0 4 -2 0]
[-2 -2 4 -2]
[ 0 0 -2 2]
sage: RS.cartan_matrix()
[ 2 0 -1 0]
[ 0 2 -1 0]
[-1 -1 2 -1]
[ 0 0 -2 2]
}}}
So far so good. The symmetric form implements the symmetrized Cartan
matrix. But the fundamental weights should be dual to the roots.
{{{
sage: Matrix([[a.symmetric_form(b) for a in Q.simple_roots()] for b in
P.fundamental_weights()])
[ 4 0 -2 0]
[ 0 4 -2 0]
[-2 -2 4 -2]
[ 0 0 -2 2]
}}}
For type A we can fix this by coercing a into P (as shown above). But for
type B this doesn't seem to work:
{{{
age: Matrix([[P(a).symmetric_form(b) for a in Q.simple_roots()] for b in
P.fundamental_weights()])
[ 1 0 0 0]
[-1 2 0 0]
[-2 0 2 0]
[-1 0 0 1]
}}}
I think this should be a diagonal matrix. It almost is, except the first
column. I think the following is the state of affairs. For affine Cartan
types, the symmetric form works correctly as a pairing of the root lattice
with itself. It is defined as a pairing of the extended weight lattice
with itself, or of the extended weight lattice with the root lattice.
These pairings should be the same, that is, coercing from Q to P should
not affect the result, but it does. For type A, we can get accurate
results by pairing the weight lattice with itself, so if we wish to pair
an element of Q with an element of P, we coerce the element of Q into P,
and then the pairing gives the right result. But this doesn't work with
Type B.
--
--
Ticket URL: <http://trac.sagemath.org/ticket/18034#comment:5>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.