> < ^ Date: Fri, 01 Mar 2002 11:06:20 +0100 (CET)
< ^ From: Volkmar Felsch <Volkmar.Felsch@Math.RWTH-Aachen.DE >
> < ^ Subject: Re: A matrix group

Dear Gap Forum, dear Nicola Sottocornola, dear Jan Draisma,

in a letter to the gap-forum on February 22nd, Nicola Sottocornola
wrote:

I'd like to generate a group using two elements A and S: G = <A,S>. I
don't know if this group is finite. Someone can help me?

```S = diag(1,1,-1,-1)

A =
[0,                 0,             cos(s),     -sin(s)]
[-sin(t),         cos(t),             0,             0]
[cos(t),         sin(t),             0,             0]
[0,                 0,             sin(s),     cos(s)]
```

with

```cos(t) := 1/4 + 1/4 sqrt(5)
sin(t) := 1/4 sqrt(2) sqrt(5 - sqrt(5))
cos(s):= 3/4 - 1/4 sqrt(5)
sin(s):= 1/4 sqrt(2 + 6 sqrt(5))
```

In a first reply to gap-forum Jan Draisma wrote:

```I would express the algebraic numbers occuring in your example in a
suitable cyclotomic field (see E and CF in the manual); in your case
CF(20) should do; for instance, cos(t) and sin(t) should be sg like
this:
c1:=(-E(5)^2-E(5)^3)/2;
s1:=(-E(5)^2+E(5)^3)/(2*E(4));
Then define A and S, and simply call Size(Group([A,S])).
```

Our attempt to follow this suggestion for sin(s) failed. It turned out
that sin(s) has the minimal polynomial

```x^4 - 1/4*x^2 - 11/16
```

and its Galois group is a dihedral group of order 8. Hence the extension
field Q(sin(s)) is not abelian and cannot be embedded into a cyclotomic
field. So the idea does not work in this case and we have to apply a
different approach to find a description of the algebraic field that
contains the given irrationalities, suitable for the intended computations.

```If we set
a := sin(s)
and         b := sin(t)
```

it follows immediately from the above definitions that

```            cos(s) = 3/4 - 1/24*((4*a)^2 - 2)
and         cos(t) = 1/4 + 1/24*((4*a)^2 - 2).
```

Hence we can do the computations in Q(a,b). From the theorem on the
existence of a primitive element we know that there is a q in Q such
that Q(c) = Q(a,b) for c = a + q*b. We simply try the easiest case
and check if q = 1 will do, i. e. if there is a solution for

```a = q_0*c^0 + q_1*c^1 + ... + q_7*c^7 with c = a+b.
```

As GAP cannot handle numbers like a = 1/4 sqrt(2 + 6 sqrt(5)) we use
Maple for this purpose and in fact get a solution

```a = 21/8*c - c^3 + c^5 - 3/8*c^7.
```

Similarly, starting with the approach

```c^8 = q_0*c^0 + q_1*c^1 + ... + q_7*c^7,
```

we compute the minimal polynomial p of c to

```p = x^8 - 3*x^6 + 4*x^4 - 7*x^2 + 1.
```

As GAP cannot handle the field Q(c) itself we perform the subsequent
computations in the matrix field generated by the companion matrix
m of p which is isomorphic to Q(c). This leads to the following GAP
job.

```gap> # Verify that p is irreducible.
gap> x := Indeterminate( Rationals );;
gap> p := x^8 - 3*x^6 + 4*x^4 - 7*x^2 + 1;;
gap> Factors( p );
[ 1-7*x_1^2+4*x_1^4-3*x_1^6+x_1^8 ]
gap>
gap> # Get the isomorphic matrices for the given sinus and cosinus values.
gap> e := IdentityMat( 8 );;
gap> m := CompanionMat( p );
[ [ 0, 0, 0, 0, 0, 0, 0, -1 ], [ 1, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0, 7 ], [ 0, 0, 1, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 1, 0, 0, 0, -4 ], [ 0, 0, 0, 0, 1, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 1, 0, 3 ], [ 0, 0, 0, 0, 0, 0, 1, 0 ] ]
gap> sins := 21/8*m - m^3 + m^5 - 3/8*m^7;
[ [ 0, 3/8, 0, 1/8, 0, -1/8, 0, -7/8 ], [ 21/8, 0, 3/8, 0, 1/8, 0, -1/8, 0 ],
[ 0, 0, 0, -1/2, 0, 1, 0, 6 ], [ -1, 0, 0, 0, -1/2, 0, 1, 0 ],
[ 0, 1/2, 0, 1/2, 0, -1, 0, -5/2 ], [ 1, 0, 1/2, 0, 1/2, 0, -1, 0 ],
[ 0, -1/8, 0, 1/8, 0, 7/8, 0, 13/8 ], [ -3/8, 0, -1/8, 0, 1/8, 0, 7/8, 0 ] ]
gap> sint := m - sins;
[ [ 0, -3/8, 0, -1/8, 0, 1/8, 0, -1/8 ],
[ -13/8, 0, -3/8, 0, -1/8, 0, 1/8, 0 ], [ 0, 1, 0, 1/2, 0, -1, 0, 1 ],
[ 1, 0, 1, 0, 1/2, 0, -1, 0 ], [ 0, -1/2, 0, 1/2, 0, 1, 0, -3/2 ],
[ -1, 0, -1/2, 0, 1/2, 0, 1, 0 ], [ 0, 1/8, 0, -1/8, 0, 1/8, 0, 11/8 ],
[ 3/8, 0, 1/8, 0, -1/8, 0, 1/8, 0 ] ]
gap> coss := 3/4*e - 1/24*( (4*sins)^2 - 2*e );
[ [ 1/8, 0, -1/8, 0, 1/8, 0, 3/8, 0 ], [ 0, 1/8, 0, -1/8, 0, 1/8, 0, 3/8 ],
[ 1/2, 0, 1, 0, -1, 0, -5/2, 0 ], [ 0, 1/2, 0, 1, 0, -1, 0, -5/2 ],
[ -1/2, 0, 0, 0, 3/2, 0, 1/2, 0 ], [ 0, -1/2, 0, 0, 0, 3/2, 0, 1/2 ],
[ 1/8, 0, -1/8, 0, -3/8, 0, 3/8, 0 ], [ 0, 1/8, 0, -1/8, 0, -3/8, 0, 3/8 ] ]
gap> cost := 1/4*e + 1/24*( (4*sins)^2 - 2*e );
[ [ 7/8, 0, 1/8, 0, -1/8, 0, -3/8, 0 ], [ 0, 7/8, 0, 1/8, 0, -1/8, 0, -3/8 ],
[ -1/2, 0, 0, 0, 1, 0, 5/2, 0 ], [ 0, -1/2, 0, 0, 0, 1, 0, 5/2 ],
[ 1/2, 0, 0, 0, -1/2, 0, -1/2, 0 ], [ 0, 1/2, 0, 0, 0, -1/2, 0, -1/2 ],
[ -1/8, 0, 1/8, 0, 3/8, 0, 5/8, 0 ], [ 0, -1/8, 0, 1/8, 0, 3/8, 0, 5/8 ] ]
gap>
gap> # Get the two generators of G.
gap> S := IdentityMat( 32 );;
gap> for i in [ 17 .. 32 ] do S[i][i] := -1; od;
gap> A := MatrixByBlockMatrix( BlockMatrix(
>         [ [1,3,coss], [1,4,-sins],
>           [2,1,-sint], [2,2,cost],
>           [3,1,cost], [3,2,sint],
>           [4,3,sins], [4,4,coss] ], 4,4 ) );;
gap>
gap> # Compute the orders of the groups <S>, <A>, and G = <A,S>.
gap> Size( Group( S ) );
2
gap> Size( Group( A ) );
6
gap> G := Group( A, S );
<matrix group with 2 generators>
gap> Size( G );
infinity
gap> time;
957210
```

The last command in the preceding job shows that the computation of the
size of a matrix group like G is relatively time consuming. It took us
about 16 minutes CPU time on a Pentium 4 processor with 1.7 GHz.

We hope that we didn't make a mistake in the hand calculations preceding
the GAP job. Perhaps control them yourself.

With kind regards, Volkmar Felsch and Joachim Neubueser

P.S.:
As you may guess from the above letter, answering such a question has
taken us some time. We have enjoyed solving the problem, however we would
also really appreciate to know a little bit about the person who asked the
question (a commercial email address doesn't even tell us where you are).
May we therefore generally suggest to the Forum members that such
questions to the Forum are complemented by a full address and affiliation.

P.P.S.:
We aren't even quite sure that the name Nicola tells us that we are talking