The subgroup of $SL_2(F)$ generated by 2 elements in GAP

142 Views Asked by At

Edited:How we should find the order of $A$ in $S = SL_2(F)$? (Solved)

$F = GF(2)[x] / \langle x^{63}+x+1 \rangle. $

x:=X(GF(2),"x");
pol:=x^63+x+1;
e:=AlgebraicExtension(GF(2),pol);
alpha:=PrimitiveElement(e);
A:=[[alpha^3+One(e),1],[1,0]]*One(e);
B:=[[alpha^5+alpha+One(e),alpha],[1,0]]*One(e);
g:=Group(A,B);

Second question: How we should define a group generated by $A, B$ $\in SL_2(F)$? and analysis it (StructureDescription(g), or at least calculate the size of $g$)

1

There are 1 best solutions below

2
On BEST ANSWER

There way you describe the input there is some confusion between what x is and what the appropriate 1 and 0 are. GAP will distinguish between 1 (as an element of the rational numbers) and the one of GF(2), the one of the polynomial ring, and the one of the quotient ring. You need to create these as different objects. Also there is no need to construct the Lie algebra.

So my suggestion for building this example would be to use AlgebraicExtension to construct the particular field you need. That is:

gap> x:=X(GF(2),"x");
x
gap> pol:=x^63+x+1;
x^63+x+Z(2)^0
gap> e:=AlgebraicExtension(GF(2),pol);
<algebra-with-one of dimension 63 over GF(2)>
gap> alpha:=PrimitiveElement(e);
a

Now construct the matrices, ensuring all elements lie over the correct field, and you can construct a group:

gap> A:=[[alpha^3+One(e),1],[1,0]]*One(e);
[ [ a^3+Z(2)^0, !Z(2)^0 ], [ !Z(2)^0, !0*Z(2) ] ]
gap> B:=[[alpha^5+alpha+One(e),alpha],[1,0]]*One(e);
[ [ a^5+a+Z(2)^0, a ], [ !Z(2)^0, !0*Z(2) ] ]
gap> g:=Group(A,B);

Caveat: This being an abstract field, most calculations defer to generic routines, and thus are slow. Furthermore the matrices you give have high order. You might want to experiment with field extensions of smaller degree first.

If you really need this particular case of matrices, probably starting with the minimal polynomial will be the best bet:

gap> MinimalPolynomial(e,A);
x_1^2+(a^3+Z(2)^0)*x_1+!Z(2)^0

This is irreducible, but the minimal polynomial of $B$ splits:

gap> Factors(MinimalPolynomial(e,B));

    [x_1(a^60+a^57+a^56+a^55+a^53+a^52+a^51+a^50+a^49+a^46+a^45+a^40+a^39+a^38+a^34+a^32+a^31+a^29+a^28+a^26+a^24+a^21+a^20+a^12+a^11+a^10+a^9+a^4+a^3),
    x_1(a^60+a^57+a^56+a^55+a^53+a^52+a^51+a^50+a^49+a^46+a^45+a^40+a^39+a^38+a^34+a^32+a^31+a^29+a^28+a^26+a^24+a^21+a^20+a^12+a^11+a^10+a^9+a^5+a^4+a^3+a+Z(2)^0)]
gap> r:=RootsOfPolynomial(MinimalPolynomial(e,B));

Thus the order of $B$ is the lcm of the multiplicative orders of the two eigenvalues in $r$. In this case both are primitive elements, that is the order of $B$ will be $2^{63}-1$:

gap> mo:=2^63-1;
9223372036854775807
gap> f:=Set(Factors(mo));
[ 7, 73, 127, 337, 92737, 649657 ]
gap> Filtered(f,x->IsOne(r[1]^(mo/x)));
[  ]
gap> Filtered(f,x->IsOne(r[2]^(mo/x)));
[  ]

As the minimal polynomial of $A$ is irreducible, it will split over a degree 2 extension, i.e. a field of order $2^{126}-1$. We verify that indeed this must be a multiple of the order of $A$:

gap> mo:=2^(2*63)-1;
85070591730234615865843651857942052863
gap> IsOne(A^mo);
true

Now we proceed in a standard way, dividing off primes that do not occur in the order:

gap> aord:=mo;                         
85070591730234615865843651857942052863
gap> f:=Set(Factors(mo));
[ 3, 7, 19, 43, 73, 127, 337, 5419, 92737, 649657, 77158673929 ]
gap> sel:=Filtered(f,x->aord mod x=0 and IsOne(A^(aord/x)));
[ 7, 73, 127, 337, 92737, 649657 ]
gap> aord:=aord/Product(sel);   
64563604257983430663
gap> IsOne(A^aord);
true
gap> sel:=Filtered(f,x->aord mod x=0 and IsOne(A^(aord/x)));
[ 7 ]
gap> aord:=aord/Product(sel);
9223372036854775809
gap> sel:=Filtered(f,x->aord mod x=0 and IsOne(A^(aord/x)));
[  ]

So the order of $A$ is (drumroll...) $9223372036854775809=3^3\cdot 19\cdot 43\cdot 5419\cdot 77158673929$.