[GAP Forum] Square root of cyclotomic real number

Dmitrii Pasechnik dmitrii.pasechnik at cs.ox.ac.uk
Thu May 19 10:32:21 BST 2016


Dear Marek,

On Thu, May 19, 2016 at 07:48:05AM +0200, Marek Mitros wrote:
> Thank you for advice. Let me explain my plan, then we can judge whether
> this advice work for me or it doesn't.
> 
> I have group of size 5120 of complex matrices of size 16x16. In this group
> I listed two conjugacy classes of involutions of size 10 and 80. Next I
> wanted to change the basis in a way that mentioned 10 matrices are
> diagonal. Therefore I obtained 16 vectors as intersections of eigenspaces.

Another way to get a diagonalising transformation H 
would be to sum up g^*g, with g running through your size 10 conjugacy
class T (and ^* denotes taking conjugate transpose). 
H is the matrix of a positive definite Hermitean form stabilised by the subgroup
generated by T. Then you'd need to factor H=UU^* (A Cholesky
factorisation), and conjugate the group by U.
This is basically the standard way to show that every representation of
a finite groups is unitary). Computing U needs taking square roots.
However, there is also a decomposition of the form H=VDV^*, with V being
lower-triangular with 1s on the diagonal, and D a diaginal matrix;
such a decomposition does not need square roots, IIRC. To pass between
U and V you'd need to take square roots of the elements of D.
But you can conjugate your group by V, still getting a representation
hopefully close to the form you want to see. 
(Computing V and D can be done in GAP, although you probably would need
to program it yourself).

> Unfortunately these vectors are not unit length, so I tried to normalize
> them. This doesn't work in GAP, because complex numbers are cyclotomics
> there. Then my question appeared on GAP forum. If I could normalize those
> vectors, then obtained matrix A built with orthonormal hermitian vectors is
> unitary and I can apply x-> A^-1 x A to group elements.

using Sage, and the data type AA, as proposed by Samuel,
one would see quickly whether building A is feasible in the
sense that you do not get to deal with algebraic numbers of huge degree.
(If you go the way I described above, you'd get to compute the Cholesky
decomposition of H, something that is implemented in Sage).

Converting a Sage matrix of algebraic numbers to a GAP one isn't implemented well,
but should be doable.

HTH,
Dima

> 
> Can this plan be done in GAP or Sage ?
> 
> Mentioned group is index 2 in involution stabilizer of Tits group ^2F4(2)'.
> 
> Regards,
> Marek
> 19-05-2016 04:30 użytkownik "Samuel Lelièvre" <samuel.lelievre at gmail.com>
> napisał:
> 
> > Dear forum,
> >
> > To complement Dima's answer, if you are using Sage,
> > you should be aware that Sage provides two useful
> > exact fields:
> > - QQbar, the algebraic closure of QQ,
> > - AA, the "algebraic real field", which is the intersection
> >   of QQbar with the reals.
> >
> > I would advise you to work in AA for your problem.
> >
> > Defining, as Dima suggested,
> >
> >     sage: a = libgap.eval('E(20)-E(20)^9').sage()
> >
> > you get an element in a cyclotomic field:
> >
> >     sage: a
> >     -zeta20^7 + zeta20^5 - zeta20^3 + 2*zeta20
> >     sage: a.parent()
> >     Cyclotomic Field of order 20 and degree 8
> >
> > Now if you take its square root naively, you end up
> > in Sage's "Symbolic Ring" which is something to avoid
> > in general.
> >
> >     sage: b = a.sqrt()
> >     sage: b
> >     sqrt(-(1/4*I*sqrt(5) + 1/4*sqrt(2*sqrt(5) + 10) - 1/4*I)^7
> >     + (1/4*I*sqrt(5) + 1/4*sqrt(2*sqrt(5) + 10) - 1/4*I)^5
> >     - (1/4*I*sqrt(5) + 1/4*sqrt(2*sqrt(5) + 10) - 1/4*I)^3
> >     + 1/2*I*sqrt(5) + 1/2*sqrt(2*sqrt(5) + 10) - 1/2*I)
> >     sage: b.parent()
> >     Symbolic Ring
> >
> > The best is to work with AA
> >
> >     sage: AA
> >     Algebraic Real Field
> >
> > by moving there explicitly
> >
> >     sage: aa = AA(a)
> >     sage: aa
> >     1.902113032590308?
> >     sage: aa.parent()
> >     Algebraic Real Field
> >
> > Elements of AA are exact, and well-defined:
> >
> >     sage: aa.minpoly()
> >     x^4 - 5*x^2 + 5
> >
> > Taking square roots stays in AA
> >
> >     sage: bb = aa.sqrt()
> >     sage: bb
> >     1.379171139703231?
> >     sage: bb.parent()
> >     Algebraic Real Field
> >     sage: bb.minpoly()
> >     x^8 - 5*x^4 + 5
> >
> > I hope this helps.
> > Samuel
> >



More information about the Forum mailing list