Some Extended Examples#
In this section some further examples are presented to demonstrate some uses of this package.
Distinguishing Groups#
- Example: Payne Grps (ex-d908f2)#
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 [Payne, 2006].
The first group, \(G_f\), is the elation group of the generalized quadrangle \(H(3,q^2)\), 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 \((q^2,q)\). In this example, \(\bar{f}\) is a biadditive map, but is bilinear over the prime field \({\mathbb{F}}_3\). Therefore, we construct a vector space isomorphism from \({\mathbb{F}}_3^e\) to \({\mathbb{F}}_{3^e}\) 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 \(G_f\) and \(G_{\bar{f}}\) have order \(3^{20}\) and are class 2, exponent 3, and minimally generated by 16 elements. In other words, the groups \(G_f\) and \(G_{\bar{f}}\) are central extensions of \({\mathbb{Z}}_3^{16}\) by \({\mathbb{Z}}_3^{4}\) 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: Ext Over Adj (ex-c87b8b)#
We demonstrate how to simplify the automorphism group computation as discussed in [Brooksbank and Wilson, 2014]. We construct a class 2, exponent \(p\), \(p\)-group \(G\) which is a quotient of a maximal unipotent subgroup of \({\operatorname{GL}}(3,317^4)\).
> 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/\Phi(G)\) is the Frattini quotient of \(G\), then our goal is to get the cotensor space \(V\wedge_A V\). Note that \(\dim V\wedge V=28\), so standard methods will compute a stabilizer of \({\operatorname{GL}}(8,317)\) inside \(V\wedge 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 \((e_iX)\wedge e_j - e_i\wedge (e_jX)\) for \(X\in A\), and then quotient \(V\wedge 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)