In this chapter we give a very brief overview of the theory of sesquilinear and quadratic forms. The reader can find more in the texts: Cameron [Cam00], Taylor [Tay92], Aschbacher [Asc00], or Kleidman and Liebeck [KL90].

A *sesquilinear form* on an \(n\)-dimensional vector space \(V\) over a field \(F\), is a map \(f\) from \(V\times V\) to \(F\) which is linear in the first coordinate, but semilinear in the second coordinate; that is, there is a field automorphism \(\alpha\) (the *companion automorphism* of \(f\)) such that

\[f(v,\lambda w)=\lambda^\alpha f(v,w),\]

for all \(v,w \in V\) and \(\lambda \in F\). If \(\alpha\) is the identity, then \(f\) is *bilinear*.

A bilinear form is *reflexive* if \(f(v,w)=0 \Rightarrow f(w,v)=0\) for all \(v,w \in V\). A bilinear form is *symmetric* if \(f(v,w)=f(w,v)\) for all \(v,w \in V\). It is clear that a symmetric bilinear form is reflexive. A bilinear form is *alternating* if \(f(v,v)=0\) for all \(v \in V\). Using the linearity to compute \(f(v+w,v+w)\), we see that an alternating form is also reflexive. When the characteristic of the field differs from 2, an alternating form \(f\) can also be characterised as \(f(v,w) = -f(w,v)\) for all \(v,w \in V\). It can be proved (see Chapter 7 of [Tay92]) that symmetric and alternating bilinear forms are the only reflexive bilinear forms.

For a given sesquilinear form \(f\), the choice of the basis determines uniquely an \(n\times n\) matrix \(M\) such that \(f(v, w) = v M {w^{\alpha}}^T.\)

This matrix is also called the *Gram matrix* of \(f\). Given a sesquilinear form \(f\), we will denote its Gram matrix by \(M_f.\) In **Forms**, sesquilinear forms can be constructed using matrices or polynomials, where we always suppose that the basis of the vector space is the standard basis (i.e., the rows of the identity matrix).

One proves easily that a bilinear form \(f\) is symmetric if and only if \(M_f\) is a symmetric matrix, i.e., \(M_f^T=M_f,\) and that a bilinear form \(f\) is alternating if and only if \(M_f\) is a skew symmetric matrix, i.e., \(M_f^T=-M_f\). When the characteristic of the field is two, the condition that \(f(v,v)=0\) for all \(v \in V\) implies \(M_f^T=M_f\) **and** \((M_{ii})=0\) for all \(i\) (and where the matrix \(M_f = (M_{ij})\) ). Since any skew symmetric odd dimensional matrix is singular, it follows that an alternating form of an odd dimensional vector space is degenerate.

A sesquilinear form \(f\) is *hermitian* (n.b., *conjugate-symmetric* in [CCN+85]) if \(f(v,w)=f(w,v)^\alpha\) holds for all vectors \(v,w\), with \(\alpha\) an involutory field automorphism only dependent on \(f\). Again, it can be easily proved that a sesquilinear form \(f\) is hermitian if and only if \(M_f^T = M_f^{\alpha}\) (i.e., a hermitian matrix). It is proved (see Chapter 7 of [Tay92]) that hermitian forms are the only reflexive sesquilinear forms that are not bilinear. Hence, in general, all reflexive sesquilinear forms are known, they are either hermitian or bilinear, and in the latter case, they are either symmetric or alternating (again, see Chapter 7 of [Tay92]).

In **Forms**, only the construction of **reflexive** sesquilinear forms is allowed. An error message will be displayed if any attempt to construct a non-reflexive sesquilinear form is made. As a consequence, the Gram Matrix of a sesquilinear form is always a symmetric, a skew symmetric or a hermitian matrix. From now on, the notion of a ``sesquilinear form'' will always refer to a ``reflexive sesquilinear form''.

Given a sesquilinear form \(f\), two vectors \(v\) and \(w\) are *orthogonal* with respect to \(f\) if \(f(v,w) = 0\). Note that the reflexivity makes orthogonality between two vectors a symmetric relation. A vector \(v\) is called *isotropic* if \(f(v,v)=0\). The *radical* of \(f\) (n.b., *kernel* in [CCN+85]) is the subspace consisting of vectors which are orthogonal to every vector. That is,

\[\mathrm{Rad}(f) = \{v \in V | f(v,w) = 0,\, \forall w \in V\},\]

and we say that \(f\) is *non-degenerate* if its radical is trivial (and *degenerate* otherwise).

Given a subspace \(W\), we denote the set of vectors of \(V\) orthogonal with all vectors of \(W\) by \(W^\perp\) . We call a subspace \(W\) *totally isotropic* with respect to \(f\) if \(W\) is contained in \(W^\perp\) W^{⊥}, i.e.

\[f(v,w) = 0,\, \forall v,w \in W.\]

Suppose that \(f\) is a non-degenerate sesquilinear form. The *Witt index* of \(f\) is the maximum dimension of a totally isotropic subspace with respect to \(f\).

Let \(f\) be a sesquilinear form on \(V(n,q)\), with radical \(R\), a \(k\)-dimensional subspace of \(V(n,q)\), \(0 \leq k \leq n\). Then \(f\) induces a non-degenerate form \(g\) on \(V/R\). When \(dim(R)=0\), then \(g=f\) and \(f\) is non-degenerate. Notice that all totally isotropic subspaces of maximal dimension of a degenerate form \(f\) contain the radical of \(f\). In **Forms**, the notion Witt index will **always refer to the induced non-degenerate form** \(g\). Hence, given a degenerate form \(f\), computing its Witt index will return the Witt index of the induced form \(g\). **This also holds for the notions elliptic, parabolic and hyperbolic for a bilinear form, which are notions defined using the Witt index, see below**.

We end this section with a short description of the conventions used in **Forms** for the notions orthogonal, symplectic, pseudo, hyperbolic, elliptic and parabolic. We call a form \(f\) *symplectic* if and only if \(f\) is alternating. When the characteristic of the field is odd, we call a form \(f\) *orthogonal* if and only \(f\) is symmetric, and when the characteristic of the field is even, we call a form \(f\) *pseudo* if and only if \(f\) is symmetric but not alternating. This terminology is related to the theory of polar spaces, and in the case of orthogonal forms, we adopt the terms *hyperbolic*, *elliptic* and *parabolic* for the three different isometry types of orthogonal forms. From the point of view of matrix groups, these three types correspond as follows. Recall that, as explained above, the Witt index refers to the Witt index of the **induced non-degenerate form** \(g\) when \(f\) is degenerate.

Hyperbolic | Orthogonal of + type | \(V/\mathrm{Rad}(f)\) has even dimension, \(g\) has maximal Witt index |

Elliptic | Orthogonal of - type | \(V/\mathrm{Rad}(f)\) has even dimension, \(g\) has non-maximal Witt index |

Parabolic | Orthogonal of o type | \(V/\mathrm{Rad}(f)\) has odd dimension |

The examples we present in this section do not demonstrate the entire suite of operations entailed in **Forms**. They are intended to allow the user to become familiar with particular aspects of this package. All the functionality for sesquilinear forms will be listed in detail in the next chapter.

We try to construct a bilinear form...

gap> mat := [[1,0,0],[0,1,4],[1,2,1]]*Z(5)^0; [ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, Z(5)^2 ], [ Z(5)^0, Z(5), Z(5)^0 ] ] gap> form := BilinearFormByMatrix(mat,GF(5)); Error, Invalid Gram matrix called from BilinearFormByMatrixOp( MutableCopyMat( m ), f ) at ./pkg/forms/lib/forms.gi:164 called from <function "unknown">( <arguments> ) called from read-eval loop at line 8 of *stdin* you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> quit;

It is clear that the matrix used is not defining a reflexive bilinear form, which causes the system to generate the error message.

We construct now a reflexive bilinear form. We investigate also the radical of the form.

gap> mat := [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,-1]]*Z(9)^0; [ [ Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3) ] ] gap> form := BilinearFormByMatrix(mat,GF(9)); < bilinear form > gap> Display(form); Bilinear form Gram Matrix: 1 . . . . 1 . . . . 1 . . . . 2 gap> IsReflexiveForm(form); true gap> IsSymmetricForm(form); true gap> IsAlternatingForm(form); false gap> r := RadicalOfForm(form); <vector space over GF(3^2), with 0 generators> gap> Dimension(r); 0

Degenerate forms are allowed. As an example we construct an alternating bilinear form on an odd dimensional vector space.

gap> mat := [[0,0,-2],[0,0,1],[2,-1,0]]*Z(7)^0; [ [ 0*Z(7), 0*Z(7), Z(7)^5 ], [ 0*Z(7), 0*Z(7), Z(7)^0 ], [ Z(7)^2, Z(7)^3, 0*Z(7) ] ] gap> form := BilinearFormByMatrix(mat,GF(7)); < bilinear form > gap> Display(form); Bilinear form Gram Matrix: . . 5 . . 1 2 6 . gap> IsSymmetricForm(form); false gap> IsAlternatingForm(form); true gap> r := RadicalOfForm(form); <vector space over GF(7), with 1 generators> gap> Dimension(r); 1

When the characteristic of the field equals two, alternating forms are also symmetric. We construct an example.

gap> mat := [[0,1,0,0,0,0],[1,0,0,0,0,0],[0,0,0,0,0,1], > [0,0,0,0,1,0],[0,0,0,1,0,0],[0,0,1,0,0,0]]*Z(16)^0; [ [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ] ] gap> form := BilinearFormByMatrix(mat,GF(16)); < bilinear form > gap> Display(form); Bilinear form Gram Matrix: . 1 . . . . 1 . . . . . . . . . . 1 . . . . 1 . . . . 1 . . . . 1 . . . gap> IsSymmetricForm(form); true gap> IsAlternatingForm(form); true gap> IsDegenerateForm(form); false gap> WittIndex(form); 3

To define a hermitian form, we need a matrix and the companion automorphism. Since this automorphism has order 2, it exists and is unique if the ground field has square order. In the next example, the chosen matrix is somewhat special. Together with the companion automorphism, it determines a hermitian sesquilinear form. Without the companion automorphism, it determines an alternating bilinear form.

gap> mat := [[0*Z(5),0*Z(5),0*Z(25),Z(25)^3],[0*Z(5),0*Z(5),Z(25)^3,0*Z(25)], > [0*Z(5),-Z(25)^3,0*Z(5),0*Z(5)],[-Z(25)^3,0*Z(5),0*Z(25),0*Z(25)]]; [ [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5^2)^3 ], [ 0*Z(5), 0*Z(5), Z(5^2)^3, 0*Z(5) ], [ 0*Z(5), Z(5^2)^15, 0*Z(5), 0*Z(5) ], [ Z(5^2)^15, 0*Z(5), 0*Z(5), 0*Z(5) ] ] gap> form := HermitianFormByMatrix(mat,GF(25)); < hermitian form > gap> Display(form); Hermitian form Gram Matrix: z = Z(25) . . . z^3 . . z^3 . . z^15 . . z^15 . . . gap> WittIndex(form); 2 gap> form2 := BilinearFormByMatrix(mat,GF(25)); < bilinear form > gap> Display(form2); Bilinear form Gram Matrix: z = Z(25) . . . z^3 . . z^3 . . z^15 . . z^15 . . . gap> IsAlternatingForm(form2); true gap> Display(IsometricCanonicalForm(form)); Hermitian form Gram Matrix: 1 . . . . 1 . . . . 1 . . . . 1 Witt Index: 2 gap> Display(IsometricCanonicalForm(form2)); Bilinear form Gram Matrix: . 1 . . 4 . . . . . . 1 . . 4 . Witt Index: 2

We continue the previous example by exploring a little bit the sesquilinear form `form`, and hence demonstrate some of the functionality of the **Forms** package. Eventually, we find a 2-dimensional totally isotropic subspace, which lets us conclude that the Witt index of \(form\) is at least 2, which is confirmed afterwards by calling the appropriate function.

gap> V := GF(25)^4; ( GF(5^2)^4 ) gap> u := [Z(5)^0,Z(5^2)^11,Z(5)^3,Z(5^2)^13 ]; [ Z(5)^0, Z(5^2)^11, Z(5)^3, Z(5^2)^13 ] gap> [u,u]^form; 0*Z(5) gap> v := [Z(5)^0,Z(5^2)^5,Z(5^2),Z(5^2)^13 ]; [ Z(5)^0, Z(5^2)^5, Z(5^2), Z(5^2)^13 ] gap> [v,v]^form; 0*Z(5) gap> [u,v]^form; Z(5^2)^7 gap> ([v,u]^form)^5; Z(5^2)^7 gap> w := [Z(5^2)^21,Z(5^2)^19,Z(5^2)^4,Z(5)^3 ]; [ Z(5^2)^21, Z(5^2)^19, Z(5^2)^4, Z(5)^3 ] gap> [w,w]^form; Z(5) gap> v := [Z(5)^0,Z(5^2)^10,Z(5^2)^15,Z(5^2)^3 ]; [ Z(5)^0, Z(5^2)^10, Z(5^2)^15, Z(5^2)^3 ] gap> u := [Z(5)^3,Z(5^2)^9,Z(5^2)^4,Z(5^2)^16 ]; [ Z(5)^3, Z(5^2)^9, Z(5^2)^4, Z(5^2)^16 ] gap> w := [Z(5)^2,Z(5^2)^9,Z(5^2)^23,Z(5^2)^11 ]; [ Z(5)^2, Z(5^2)^9, Z(5^2)^23, Z(5^2)^11 ] gap> [u,v]^form; 0*Z(5) gap> [u,w]^form; 0*Z(5) gap> [v,w]^form; 0*Z(5) gap> s := Subspace(V,[v,u,w]); <vector space over GF(5^2), with 3 generators> gap> Dimension(s); 2 gap> WittIndex(form); 2

A *quadratic form* on an \(n\)-dimensional vector space \(V\) over a field \(F\), is a map \(Q\) from \(V\) to \(F\) satisfying the following two conditions:

\[Q(\lambda v) = \lambda^2 Q(v),\, \forall \lambda \in F, \forall v \in V,\]

and, the map \(f\) defined from \(V\times V\) to \(F\) as follows,

\[f(v,w) := Q(v+w) - Q(v) - Q(w),\]

is a bilinear form on \(V\). From this definition it follows that \(f(v,v) = Q(2v) - 2Q(v) = 2Q(v)\).

The associated bilinear form \(f\) (which is called the *polar form* of \(Q\) in [CCN+85]) is clearly reflexive. When the characteristic of the field is odd, it is clear that \(f\) is a symmetric bilinear form. The equation \(f(v,v) = 2Q(v)\) allows us to reconstruct the quadratic form from the bilinear form, and hence there is a one-to-one correspondence between quadratic forms and symmetric bilinear forms. When the characteristic of the field equals 2, the bilinear form \(f\) is alternating (from the fact that \(f(v,v) = 2Q(v) = 0\)). Note, however, that different quadratic forms can determine the same alternating form.

As in the case of sesquilinear forms, we will associate a matrix to a quadratic form. Choosing a basis of the vector space \(V\), it is clear that an \(n \times n\) matrix determines the quadratic form completely. In **Forms**, the *Gram matrix* of a quadratic form is always an upper triangle matrix \(M\), such that

\[Q(v) = vMv^T,\]

where the basis of \(V\) is the standard basis. Although the Gram matrix stored with the quadratic form is always an upper triangle matrix, the user is allowed to use any matrix to define the quadratic form, since any matrix \(M\) defines a quadratic form \(Q(v) := vMv^T\) . During the construction, an appropriate upper triangle matrix is computed and stored as the Gram matrix. So the Gram matrix of the associated bilinear form is \(M+M^T\).

The associated bilinear form could be used to define the notions ``isotropic'', ``totally isotropic'' and ``non-degenerate'', however, under these restrictions the geometry of quadratic forms in even characteristic is lost. In most of the literature, these notions refer indeed to the associated bilinear form, and the notion of ``singularity'' is added to regain the geometrical structure.

In **Forms**, we use the above described approach. This means that a vector is isotropic if and only if it is isotropic with respect to the associated bilinear form. A subspace is totally isotropic if and only if it is totally isotropic with respect to the associated bilinear form, and we call the quadratic form degenerate if and only if the associated bilinear form is degenerate.

A vector \(v\) is called *singular* with relation to the quadratic form \(Q\) if and only if \(Q(v)=0\). two vectors \(v\) and \(w\) are *orthogonal* with respect to \(Q\) if and only if they are orthogonal with respect to the associated bilinear form \(f\). The *radical* of the quadratic form \(Q\), is the intersection of the set of all singular vectors with relation to \(Q\) and the radical of the associated bilinear form \(f\), i.e.

\[\mathrm{Rad}(Q) = \{v \in V | Q(v) = 0\,\, \mathrm{and}\,\, v \in \mathrm{Rad}(f)\}.\]

We call a quadratic form \(Q\) *non-singular* if and only if the radical contains only the zero vector, and *singular* otherwise.

A subspace \(W\) of the vector space is called *totally singular* if and only if all vectors of \(W\) are singular, i.e., \(Q\) vanishes totally on \(W\). Necessarily, a totally singular subspace is also totally isotropic with relation to the associated bilinear form \(f\), but the converse is only true when the characteristic of the field is odd.

Suppose now that \(Q\) is a non-singular quadratic form. The *Witt index* of \(Q\) is the maximum dimension of a totally singular subspace with respect to \(Q\).

Let \(Q\) be a quadratic form on \(V(n,q)\), with radical \(R\), a \(k\)-dimensional subspace of \(V(n,q)\), \(0 \leq k \leq n\). Then \(Q\) induces a non-singular form \(Q'\) on \(V/R\). When \(dim(R)=0\), then \(Q=Q'\) and \(Q\) is non-singular. Notice that all totally singular subspaces of maximal dimension of a singular form \(Q\) contain the radical of \(Q\). In **Forms**, the notion Witt index will **always refer to the induced non-singular form** \(Q'\). Hence, given a singular form \(Q\), computing its Witt index will return the Witt index of the induced form \(Q'\). **This also holds for the notions elliptic, parabolic and hyperbolic for a quadratic form, which are notions defined using the Witt index, see below**.

The terminology*hyperbolic*, *elliptic* and *parabolic* is also used for quadratic forms, and is defined analogously as for the bilinear forms using the Witt index. Also in the case of quadratic forms, this terminology is related to the theory of polar spaces. Recall that, as explained above, the Witt index refers to the Witt index of the **induced non-singular form** \(Q\) when \(Q'\) is singular.

Hyperbolic | Orthogonal of + type | \(V/\mathrm{Rad}(Q)\) has even dimension, \(Q'\) has maximal Witt index |

Elliptic | Orthogonal of - type | \(V/\mathrm{Rad}(Q)\) has even dimension, \(Q'\) has non-maximal Witt index |

Parabolic | Orthogonal of o type | \(V/\mathrm{Rad}(Q)\) has odd dimension |

From the above definitions, it follows that, when the characteristic of the field differs from 2, a quadratic form \(Q\) is non-singular if and only if its associated bilinear form \(f\) is non-degenerate. When the characteristic of the field is 2, one can easily construct non-singular quadratic forms, with a degenerate associated bilinear form. We will give an example of this situation in the next section.

We construct some quadratic forms to demonstrate some funcionality of **Forms**. As in the previous example section, they are intended to allow the user to gain some familiarity. All the functionality for quadratic forms will be listed in detail in the next chapter.

The user can construct quadratic forms using any matrix (provided it has the right dimension). The Gram matrix is always stored as an upper triangle matrix, as explained above.

gap> V := GF(4)^3; ( GF(2^2)^3 ) gap> mat := [[Z(2^2)^2,Z(2^2),Z(2^2)^2],[Z(2^2)^2,Z(2)^0,Z(2)^0], > [0*Z(2),Z(2)^0,0*Z(2)]]; [ [ Z(2^2)^2, Z(2^2), Z(2^2)^2 ], [ Z(2^2)^2, Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, 0*Z(2) ] ] gap> qform := QuadraticFormByMatrix(mat, GF(4)); < quadratic form > gap> Display( qform ); Quadratic form Gram Matrix: z = Z(4) z^2 1 z^2 . 1 . . . . gap> PolynomialOfForm( qform ); Z(2^2)^2*x_1^2+x_1*x_2+Z(2^2)^2*x_1*x_3+x_2^2

In the previous example, we saw how we used a polynomial to display a quadratic form. Conversely, **Forms** allows the user to construct (quadratic) forms using a polynomial.

gap> r := PolynomialRing(GF(8),4); GF(2^3)[x_1,x_2,x_3,x_4] gap> poly := r.1*r.2+r.3*r.4; x_1*x_2+x_3*x_4 gap> qform := QuadraticFormByPolynomial(poly, r); < quadratic form > gap> Display(qform); Quadratic form Gram Matrix: . 1 . . . . . . . . . 1 . . . . Polynomial: x_1*x_2+x_3*x_4 gap> RadicalOfForm(qform); <vector space over GF(2^3), with 0 generators>

We construct now two different quadratic forms with the same associated bilinear form.

gap> mat := [[Z(16)^3,1,0,0],[0,Z(16)^5,0,0], > [0,0,Z(16)^3,1],[0,0,0,Z(16)^12]]*Z(16)^0; [ [ Z(2^4)^3, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2^4)^3, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2^4)^12 ] ] gap> qform := QuadraticFormByMatrix(mat,GF(16)); < quadratic form > gap> Display( qform ); Quadratic form Gram Matrix: z = Z(16) z^3 1 . . . z^5 . . . . z^3 1 . . . z^12 gap> mat2 := [[Z(16)^7,1,0,0],[0,0,0,0], > [0,0,Z(16)^2,1],[0,0,0,Z(16)^9]]*Z(16)^0; [ [ Z(2^4)^7, Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2^4)^2, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2^4)^9 ] ] gap> qform2 := QuadraticFormByMatrix(mat2, GF(16)); < quadratic form > gap> Display( qform2 ); Quadratic form Gram Matrix: z = Z(16) z^7 1 . . . . . . . . z^2 1 . . . z^9 gap> biform := AssociatedBilinearForm( qform2 ); < bilinear form > gap> Display( biform ); Bilinear form Gram Matrix: . 1 . . 1 . . . . . . 1 . . 1 .

We end with an example of a non-singular quadratic form with a degenerate associated bilinear form.

gap> mat := [ [ Z(2^2), Z(2^2), Z(2^2), Z(2^2), Z(2^2) ], > [ 0*Z(2), Z(2^2), Z(2^2)^2, 0*Z(2), Z(2)^0 ], > [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ], > [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], > [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] ];; gap> qform := QuadraticFormByMatrix(mat,GF(4)); < quadratic form > gap> IsSingularForm(qform); false gap> IsDegenerateForm(qform); #I Testing degeneracy of the *associated bilinear form* true gap> biform := AssociatedBilinearForm(qform); < bilinear form > gap> Display(biform); Bilinear form Gram Matrix: z = Z(4) . z^1 z^1 z^1 z^1 z^1 . z^2 . 1 z^1 z^2 . 1 1 z^1 . 1 . 1 z^1 1 1 1 . gap> IsDegenerateForm(biform); true

generated by GAPDoc2HTML