Here we give some simple examples that display some of the functionality of Forms.
Consider the three-dimensional vector space \(V\) over the finite field \(\mathrm{GF}(8)\) , and consider the following quadratic polynomial in 3 variables:
\[x_1^2+x_2x_3.\]
Then this polynomial defines a quadratic form on \(V\) and the zeros form a conic of the associated projective plane. So in particular, our quadratic form defines a degenerate parabolic quadric of Witt Index 1. We will see now how we can use Forms to view this example.
gap> gf := GF(8); GF(2^3) gap> vec := gf^3; ( GF(2^3)^3 ) gap> r := PolynomialRing( gf, 3); PolynomialRing(..., [ x_1, x_2, x_3 ]) gap> poly := r.1^2 + r.2 * r.3; x_1^2+x_2*x_3 gap> form := QuadraticFormByPolynomial( poly, r ); < quadratic form > gap> Display( form ); Quadratic form Gram Matrix: 1 . . . . 1 . . . Polynomial: x_1^2+x_2*x_3 gap> IsDegenerateForm( form ); #I Testing degeneracy of the *associated bilinear form* true gap> IsSingularForm( form ); false gap> WittIndex( form ); 1 gap> IsParabolicForm( form ); true gap> RadicalOfForm( form ); <vector space over GF(2^3), with 0 generators>
Now our conic is stabilised by a group isomorphic to \(\mathrm{GO}(3,8)\), but which is not identical to the group returned by the GAP command GO(3,8)
. However, our conic is the canonical conic given in Forms.
gap> canonical := IsometricCanonicalForm( form ); < parabolic quadratic form > gap> form = canonical; true
So we ``change forms''...
gap> go := GO(3,8); GO(0,3,8) gap> mat := InvariantQuadraticForm( go )!.matrix; [ [ Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2) ] ] gap> gapform := QuadraticFormByMatrix( mat, GF(8) ); < quadratic form > gap> b := BaseChangeToCanonical( gapform ); [ [ Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ] ] gap> hom := BaseChangeHomomorphism( b, GF(8) ); ^[ [ Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ] ] gap> newgo := Image(hom, go); Group( [ [ [ Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2^3), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2^3)^6 ] ], [ [ Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ] ] ])
Now we look at the action of our new \(\mathrm{GO}(3,8)\) on the conic.
gap> conic := Filtered(vec, x -> IsZero( x^form ));; gap> Size(conic); 64 gap> orbs := Orbits(newgo, conic, OnRight);; gap> List(orbs,Size); [ 1, 63 ]
So we see that there is a fixed point, which is actually the nucleus of the conic, or in other words, the radical of the form.
The symplectic polar space \(\mathrm{W}(5,q)\) is defined by an alternating reflexive bilinear form on the six-dimensional vector space over the finite field \(\mathrm{GF}(q)\). Any invertible \(6 \times 6\) matrix \(A\) which satisfies \(A+A^T=0\) is a candidate for the Gram matrix of a symplectic polarity. The canonical form we adopt in Forms for an alternating form is
\[f(x,y)=x_1y_2-x_2y_1+x_3y_4-x_4y_3\cdots+x_{2n-1}y_{2n}-x_{2n}y_{2n-1}.\]
gap> f := GF(3); GF(3) gap> gram := [ > [0,0,0,1,0,0], > [0,0,0,0,1,0], > [0,0,0,0,0,1], > [-1,0,0,0,0,0], > [0,-1,0,0,0,0], > [0,0,-1,0,0,0]] * One(f);; gap> form := BilinearFormByMatrix( gram, f ); < bilinear form > gap> IsSymplecticForm( form ); true gap> Display( form ); Symplectic form Gram Matrix: . . . 1 . . . . . . 1 . . . . . . 1 2 . . . . . . 2 . . . . . . 2 . . . gap> b := BaseChangeToCanonical( form ); [ [ Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ] gap> Display( b ); 1 . . . . . . . . 1 . . . 1 . . . . . . . . 1 . . . 1 . . . . . . . . 1 gap> Display( b * gram * TransposedMat(b) ); . 1 . . . . 2 . . . . . . . . 1 . . . . 2 . . . . . . . . 1 . . . . 2 .
Here we start with a matrix group which is available in GAP, namely \(\mathrm{GO}(5,5)\). We then conjugate this group by an element of \(\mathrm{GL}(5,5)\), and then we find the forms left invariant by this copy of \(\mathrm{GO}(5,5)\) (which we expect to be a symmetric bilinear form).
gap> go := GO(5, 5); GO(0,5,5) gap> x := > [ [ Z(5)^0, Z(5)^3, 0*Z(5), Z(5)^3, Z(5)^3 ], > [ Z(5)^2, Z(5)^3, 0*Z(5), Z(5)^2, Z(5) ], > [ Z(5)^2, Z(5)^2, Z(5)^0, Z(5), Z(5)^3 ], > [ Z(5)^0, Z(5)^3, Z(5), Z(5)^0, Z(5)^3 ], > [ Z(5)^3, 0*Z(5), Z(5)^0, 0*Z(5), Z(5) ] > ];; gap> go2 := go^x; <matrix group of size 18720000 with 2 generators> gap> forms := PreservedSesquilinearForms( go2 ); [ < bilinear form > ] gap> Display( forms[1] ); Bilinear form Gram Matrix: 4 2 4 3 3 2 2 2 3 3 4 2 3 1 4 3 3 1 2 4 3 3 4 4 3
generated by GAPDoc2HTML