#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.

Reply via email to