#18034: symmetric_form weirdness for affine roots
------------------------------------------+------------------------
Reporter: bump | Owner:
Type: defect | Status: new
Priority: major | Milestone: sage-6.6
Component: combinatorics | 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.
>
> This seem to be wrong also in a different way for type ['B',3,1]. The
> following is
> essentially 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]
> }}}
> The symmetric form is twice the symmetric form defined by Kac (Infinite-
> Dimensional Lie Algebras, third edition, (6.2.2) on page 81 but the
> doubling is harmless for applications. So far so good.
> 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.
>
> For affine Cartan types, the symmetric form works correctly as a pairing
> of the root lattice Q with itself. It is defined as a pairing of the
> extended weight lattice p with itself, or of P with Q. 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.
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
essentially 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]
}}}
The symmetric form is twice the symmetric form defined by Kac (Infinite-
Dimensional Lie Algebras, third edition, (6.2.2) on page 81). The doubling
is harmless for applications. So far so good.
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.
For affine Cartan types, the symmetric form works correctly as a pairing
of the root lattice Q with itself. It is defined as a pairing of the
extended weight lattice p with itself, or of P with Q. 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:8>
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.