#18644: Fix method is_real_root() in root_lattice_realizations.py
-------------------------------------+-------------------------------------
Reporter: jonathan.judge | Owner: jonathan.judge
Type: defect | Status: new
Priority: major | Milestone: sage-6.8
Component: combinatorics | Resolution:
Keywords: days65 | Merged in:
Authors: | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
u/jonathan.judge/fix_method_is_real_root___in_root_lattice_realizations_py|
c7a1b37e4636c11d8fd84a0a12b24c0274a12c76
Dependencies: #18000, #18645 | Stopgaps:
-------------------------------------+-------------------------------------
Changes (by jonathan.judge):
* commit: => c7a1b37e4636c11d8fd84a0a12b24c0274a12c76
* dependencies: => #18000, #18645
Old description:
> Currently, the element method {{{is_real_root()}}} of
> root_lattice_realizations.py is not quite correct. It checks only if
> {{{norm_squared()}}} is positive. This is correct in a root system, but
> not when in the root lattice. We can add an additional check in this
> situation: see Proposition 5.10b in Kac's book.
>
> {{{
> sage: R = RootSystem(['A',1,1])
> sage: Q = R.root_lattice()
> sage: alpha = Q.simple_roots()
> sage: beta = 3*alpha[0] + alpha[1] # not a root
> sage: beta.norm_squared()
> 8
> sage: beta.is_real_root()
> True
> }}}
>
> {{{
> sage: R = RootSystem("A2")
> sage: Q = R.root_lattice()
> sage: alpha = Q.simple_roots()
> sage: beta = 2*alpha[1] + alpha[2] # not a root
> sage: beta.norm_squared()
> 6
> sage: beta.is_real_root()
> True
> }}}
New description:
Currently, the element method {{{is_real_root()}}} of
root_lattice_realizations.py is not quite correct. It checks only if
{{{norm_squared()}}} is positive. This is correct in a root system, but
not when in the root lattice. We can add an additional check in this
situation: see Proposition 5.10b in Kac's book.
{{{
sage: R = RootSystem(['A',1,1])
sage: Q = R.root_lattice()
sage: alpha = Q.simple_roots()
sage: beta = 3*alpha[0] + alpha[1] # not a root
sage: beta.norm_squared()
8
sage: beta.is_real_root()
True
}}}
{{{
sage: R = RootSystem("A2")
sage: Q = R.root_lattice()
sage: alpha = Q.simple_roots()
sage: beta = 2*alpha[1] + alpha[2] # not a root
sage: beta.norm_squared()
6
sage: beta.is_real_root()
True
}}}
Updated: Kac's Proposition 5.10b applies to finite, affine, and hyperbolic
types. Ticket #18645 implements the checks for these. More generally, the
correct check for a real root is to see if its {{{ norm_squared() }}} is
positive and if its multiplicity (#18000) is positive.
--
Comment:
New commits:
||[http://git.sagemath.org/sage.git/commit/?id=c7a1b37e4636c11d8fd84a0a12b24c0274a12c76
c7a1b37]||{{{Fixed element method is_real_root() in
root_lattice_realizations.py}}}||
--
Ticket URL: <http://trac.sagemath.org/ticket/18644#comment:3>
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.