Hey Dinakar,
I wrote that part of the code and was assuming the user would be
checking if a root is real or imaginary. However I'm definitely for adding
this feature and having a method `is_root`. We can check if an element in
the root space is a root in a finite root system by (the perhaps somewhat
dumb) checking if it is in the (finite) set of all roots, which Sage can
generate as you're probably aware. Also what's there for
is_short/long/imaginary_root follows Prop 5.10 in Kac, so we could probably
combine all 3 into a simple is_root for finite, affine, and (to be
implemented #15974 http://trac.sagemath.org/ticket/15974) hyperbolic
types. Please create a ticket on trac and cc me (tscrim) and we can fix
things up.
Best,
Travis
On Sunday, October 12, 2014 1:49:39 PM UTC-7, vdelecroix wrote:
Hi Dinakar,
It makes more sense to post it on sage-devel as it concerns Sage
development and not a question you have about Sage. So I did the
forward.
Vincent
-- Forwarded message --
From: Dinakar Muthiah dmut...@gmail.com javascript:
Date: Sun, 12 Oct 2014 11:51:56 -0700 (PDT)
Subject: [sage-support] A mathematical mistake in
root_lattice_realizations.py
To: sage-s...@googlegroups.com javascript:
I claim there is currently a mathematical mistake in the way the
is_real_root method in the file root_lattice_realizations.py is
implemented. There is also a parallel mistake in is_imaginary_root. Let
me illustrate with an example:
sage: R = RootSystem([A,2,1]).weight_lattice()
sage: alpha = R.simple_roots()
sage: alpha[0].is_real_root()
True
sage: b = 2*alpha[0]
sage: b.is_real_root()
True
b.is_real_root() should return false because 2*alpha[0] is not a real
root.
In particular, 2*alpha[0] is not a root.
Looking at the implementation of is_real_root(), it is easy to see why
this isn't working properly.
def is_real_root(self):
r
Return ``True`` if ``self`` is a real root.
A root `\alpha` is real if it is `W` conjugate to a simple
root where `W` is the corresponding Weyl group.
EXAMPLES::
sage: Q = RootSystem(['B',2,1]).root_lattice()
sage: alpha = Q.simple_roots()
sage: alpha[0].is_real_root()
True
sage: elt = alpha[0] + alpha[1] + 2*alpha[2]
sage: elt.is_real_root()
False
return self.norm_squared() 0
self.norm_squared() is not the way to check whether an element of the root
space or weight_space is a real root.
The problem is that there is no check to see whether self is a root. In
affine types, the following should work:
return (self.norm_squared() 0) and self.is_root()
where is_root() would be a method that checks whether self is a root. But
this isn't currently implemented, and I don't know what would be the most
intelligent way to implement this. In affine types, this is fairly
straight
forward assuming you have a test for checking whether something is a root
in the finite root system, but I don't know for general Cartan types.
What do people think about this? I have not contributed to sage in the
past, but I am interested in implementing the fix.
Also, is there a better place for me to post this bug. I looked
here: http://wiki.sagemath.org/support/ReportingBugs, and it suggested I
post on sage-support since I don't have experience developing sage or
using
trac.
Best,
Dinakar
--
You received this message because you are subscribed to the Google Groups
sage-devel group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.