Some Extended Examples

In this section some further examples are presented to demonstrate some uses of this package.

Contents

Distinguishing Groups

Example Multilinear_Payne_Grps (H62E79)

We can use these functions to build groups from bilinear maps and distinguish seemingly indistinguishable groups. In 2004, S. E. Payne asked if two elation groups were isomorphic but suspected they were not [Pay06].

The first group, Gf, is the elation group of the generalized quadrangle H(3, q2), the Hermitian geometry. This group is defined as a Heisenberg group whose bilinear map is the usual dot product.

> p := 3;
> e := 4;
> q := p^e; // q = 3^e >= 27
> F := [KSpace(GF(q),2), KSpace(GF(q),2), KSpace(GF(q),1)];
>
> DotProd := function(x)
>   return KSpace(GF(q),1)!(x[1]*Matrix(2,1,x[2]));
> end function;
>
> DoubleForm := function(T)
>   F := SystemOfForms(T)[1];
>   K := BaseRing(F);
>   n := Nrows(F);
>   m := Ncols(F);
>   MS := KMatrixSpace(K,n,m);
>   Z := MS!0;
>   M1 := HorizontalJoin(Z,-Transpose(F));
>   M2 := HorizontalJoin(F,Z);
>   D := VerticalJoin( M1, M2 );
>   return Tensor( D, 2, 1 );
> end function;
>
> f := DoubleForm( Tensor( F, DotProd ) );
> f;
Tensor of valence 3, U2 x U1 >-> U0
U2 : Full Vector space of degree 4 over GF(3^4)
U1 : Full Vector space of degree 4 over GF(3^4)
U0 : Full Vector space of degree 1 over GF(3^4)
>
> IsAlternating(f);
true
> Gf := HeisenbergGroupPC(f);

Now we define Payne's second group, G_(bar(f)), which is the elation group of the Roman quadrangle with parameters (q2, q). In this example, bar(f) is a biadditive map, but is bilinear over the prime field F3. Therefore, we construct a vector space isomorphism from F3e to F3e and the bilinear commutator map, induced by bar(f). Hence, G_(bar(f)) is the Heisenberg group of this bilinear commutator map.

> n := PrimitiveElement(GF(q)); // nonsquare
> MS := KMatrixSpace(GF(q),2,2);
> A := MS![-1,0,0,n];
> B := MS![0,1,1,0];
> C := MS![0,0,0,n^-1];
> F1 := Frame(f);
> F2 := [KSpace(GF(p),4*e), KSpace(GF(p),4*e), KSpace(GF(p),e)];
>
> // take 1/3^r root
> Root := function(v,r)
>   k := Eltseq(v)[1];
>   K := Parent(k);
>   if k eq K!0 then return k; end if;
>   R<x> := PolynomialRing(K);
>   f := Factorization(x^(3^r)-k)[1][1];
>   return K!(x-f);
> end function;
>
> // bi-additive map defining elation grp
> RomanGQ := function(x)
>   u := Matrix(1,2,x[1]);
>   v := Matrix(2,1,x[2]);
>   M := [A,B,C];
>   f := &+[Root(u*M[i]*v,i-1) : i in [1..3]];
>   return KSpace(GF(q),1)![f];
> end function;
>
> // vector space isomorphisms
> phi := map< F2[1] -> F1[1] |
>   x :-> F1[1]![ GF(q)![ s : s in Eltseq(x)[i+1..e+i] ] :
>     i in [0,e,2*e,3*e] ] >;
> gamma := map< F1[3] -> F2[3] |
>   x :-> F2[3]!&cat[ Eltseq(s) : s in Eltseq(x) ] >;
>
> // bilinear commutator from RomanGQ
> RomanGQComm := function(x)
>   x1 := Eltseq(x[1]@phi)[1..2];
>   x2 := Eltseq(x[1]@phi)[3..4];
>   y1 := Eltseq(x[2]@phi)[1..2];
>   y2 := Eltseq(x[2]@phi)[3..4];
>   comm := RomanGQ( <x2,y1> ) - RomanGQ( <y2,x1> );
>   return comm @ gamma;
> end function;
>
> f_bar := Tensor( F2, RomanGQComm );
> f_bar;
Tensor of valence 3, U2 x U1 >-> U0
U2 : Full Vector space of degree 16 over GF(3)
U1 : Full Vector space of degree 16 over GF(3)
U0 : Full Vector space of degree 4 over GF(3)
>
> IsAlternating(f_bar);
true
> Gfb := HeisenbergGroupPC(f_bar);

The groups Gf and G_(bar(f)) have order 320 and are class 2, exponent 3, and minimally generated by 16 elements. In other words, the groups Gf and G_(bar(f)) are central extensions of Z316 by Z34 and have exponent 3. Using standard heuristics, these groups are indistinguishable. However, the invariants associated to their exponent-p central tensor are vastly different, and thus, they determine that these groups are nonisomorphic. We show that the centroids of the tensors are not isomorphic.

> Tf := pCentralTensor(Gf,1,1);
> Tf;
Tensor of valence 3, U2 x U1 >-> U0
U2 : Full Vector space of degree 32 over GF(3)
U1 : Full Vector space of degree 32 over GF(3)
U0 : Full Vector space of degree 4 over GF(3)
>
> Tfb := pCentralTensor(Gfb,1,1);
> Tfb;
Tensor of valence 3, U2 x U1 >-> U0
U2 : Full Vector space of degree 32 over GF(3)
U1 : Full Vector space of degree 32 over GF(3)
U0 : Full Vector space of degree 4 over GF(3)
>
> Cf := Centroid(Tf);
> Cfb := Centroid(Tfb);
> Dimension(Cf) eq Dimension(Cfb);
false

Simplifying Automorphism Group Computations

Example Multilinear_ExtOverAdj (H62E80)

We demonstrate how to simplify the automorphism group computation as discussed in [BW14]. We construct a class 2, exponent p, p-group G which is a quotient of a maximal unipotent subgroup of GL(3, 3174).
> p := 317;
> e := 4;
> H := ClassicalSylow( GL(3,p^e), p );
> U := UnipotentMatrixGroup(H);
> P := PCPresentation(U);
> Z := Center(P);
>
> N := sub< P | >;
> while #N lt p^2 do
>   N := sub< P | Random(Z), N >;
> end while;
>
> G := P/N;
> G;
GrpPC : G of order 10246902931634286779441449 = 317^10
PC-Relations:
    G.5^G.1 = G.5 * G.9^62 * G.10^133,
    G.5^G.2 = G.5 * G.9^312 * G.10^295,
    G.5^G.3 = G.5 * G.9^316,
    G.5^G.4 = G.5 * G.10^316,
    G.6^G.1 = G.6 * G.9^312 * G.10^295,
    G.6^G.2 = G.6 * G.9^316,
    G.6^G.3 = G.6 * G.10^316,
    G.6^G.4 = G.6 * G.9^138 * G.10^163,
    G.7^G.1 = G.7 * G.9^316,
    G.7^G.2 = G.7 * G.10^316,
    G.7^G.3 = G.7 * G.9^138 * G.10^163,
    G.7^G.4 = G.7 * G.9^188 * G.10^50,
    G.8^G.1 = G.8 * G.10^316,
    G.8^G.2 = G.8 * G.9^138 * G.10^163,
    G.8^G.3 = G.8 * G.9^188 * G.10^50,
    G.8^G.4 = G.8 * G.9^125 * G.10^151
We construct the exponent-p central tensor of G and compute its adjoint *-algebra A.
> T := pCentralTensor(G,1,1);
> T;
Tensor of valence 3, U2 x U1 >-> U0
U2 : Full Vector space of degree 8 over GF(317)
U1 : Full Vector space of degree 8 over GF(317)
U0 : Full Vector space of degree 2 over GF(317)
>
> A := AdjointAlgebra(T);
> Dimension(A);
16
> star := Star(A);
If V=G/Φ(G) is the Frattini quotient of G, then our goal is to get the cotensor space V^A V. Note that dim V^ V=28, so standard methods will compute a stabilizer of GL(8, 317) inside V^ V. We will decrease the size of the ambient space resulting in an easier stabilizer computation.
> V := Domain(T)[1];
> E := ExteriorCotensorSpace(V,2);
> E;
Cotensor space of dimension 28 over GF(317) with valence 1
U2 : Full Vector space of degree 8 over GF(317)
U1 : Full Vector space of degree 8 over GF(317)
Now we create a sub cotensor space S generated by all (eiX)^ ej - ei^ (ejX) for X∈A, and then quotient V^ V by S. The result is a 4 dimensional space.
> L := [];
> for E_gen in Generators(E) do
>   F := SystemOfForms(E_gen)[1];
>   for X in Basis(A) do
>     L cat:= [E!Eltseq(X*F - F*Transpose(X@star))];
>   end for;
> end for;
>
> S := SubtensorSpace(E,L);
> S;
Cotensor space of dimension 24 over GF(317) with valence 1
U2 : Full Vector space of degree 8 over GF(317)
U1 : Full Vector space of degree 8 over GF(317)
>
> Q := E/S;
> Q;
Cotensor space of dimension 4 over GF(317) with valence 1
U2 : Full Vector space of degree 8 over GF(317)
U1 : Full Vector space of degree 8 over GF(317)
V2.28, 13 July 2023