Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 91213ddcfbe7f54821d42c2d9e091326 > files > 1116

gap-system-packages-4.4.12-5mdv2010.0.i586.rpm

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (Forms) - Chapter 4: Functionality</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
</head>
<body>


<div class="pcenter"><table class="chlink"><tr><td class="chlink1">Goto Chapter: </td><td><a href="chap0.html">Top</a></td><td><a href="chap1.html">1</a></td><td><a href="chap2.html">2</a></td><td><a href="chap3.html">3</a></td><td><a href="chap4.html">4</a></td><td><a href="chapBib.html">Bib</a></td><td><a href="chapInd.html">Ind</a></td></tr></table><br /></div>
<p><a id="s0ss0" name="s0ss0"></a></p>

<h3>4. Functionality</h3>

<p><a id="s1ss0" name="s1ss0"></a></p>

<h4>4.1 Functions for creating forms</h4>

<p><a id="s1ss1" name="s1ss1"></a></p>

<h5>4.1-1 BilinearFormByMatrix</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; BilinearFormByMatrix</code>( <var>m, f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>a bilinear form</p>

<p>The argument <var>m</var> must be a square matrix over the finite field <var>f</var>. The field must be specified, as only the characteristic of the underlying field can be determined by the entries of <var>m</var>. The output will be a record rec( matrix, basefield, type ).</p>


<table class="example">
<tr><td><pre>

gap&gt; gf := GF(3^2);
GF(3^2)
gap&gt; mat := IdentityMat(4, gf);
[ [ 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)^0 ] ]
gap&gt; f := BilinearFormByMatrix( mat, gf );
&lt; bilinear form &gt;
gap&gt; Display(f);
Bilinear form
Gram Matrix:
 1 . . .
 . 1 . .
 . . 1 .
 . . . 1

</pre></td></tr></table>

<p><a id="s1ss2" name="s1ss2"></a></p>

<h5>4.1-2 QuadraticFormByMatrix</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; QuadraticFormByMatrix</code>( <var>m, f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>a quadratic form</p>

<p>The argument <var>m</var> must be a square matrix over the finite field <var>f</var>. The field must be specified, as only the characteristic of the underlying field can be determined by the entries of <var>m</var>. The output will be a record rec( matrix, basefield, type ).</p>


<table class="example">
<tr><td><pre>

gap&gt; gf := GF(2^2);
GF(2^2)
gap&gt; mat := InvariantQuadraticForm( SO(-1, 4, 4) )!.matrix;
[ [ 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), Z(2^2)^2, Z(2)^0 ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2)^2 ] ]
gap&gt; f := QuadraticFormByMatrix( mat, gf );
&lt; quadratic form &gt;
gap&gt; Display(f);
Quadratic form
Gram Matrix:
z = Z(4)
   .   1   .   .
   .   .   .   .
   .   . z^2   1
   .   .   . z^2

</pre></td></tr></table>

<p><a id="s1ss3" name="s1ss3"></a></p>

<h5>4.1-3 HermitianFormByMatrix</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HermitianFormByMatrix</code>( <var>m, f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>a quadratic form</p>

<p>The argument <var>m</var> must be a square matrix over the finite field <var>f</var> of square order. The field must be specified, as only the characteristic of the underlying field can be determined by the entries of <var>m</var>. The output will be a record rec( matrix, basefield, type ).</p>


<table class="example">
<tr><td><pre>

gap&gt; gf := GF(3^2);
gap&gt; mat := IdentityMat(4, gf);
gap&gt; f := HermitianFormByMatrix( mat, gf );
&lt; hermitian form &gt;
gap&gt; Display(f);
Hermitian form
Gram Matrix:
 1 . . .
 . 1 . .
 . . 1 .
 . . . 1
Witt Index: 2

</pre></td></tr></table>

<p><a id="s1ss4" name="s1ss4"></a></p>

<h5>4.1-4 BilinearFormByPolynomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; BilinearFormByPolynomial</code>( <var>poly, r, n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; BilinearFormByPolynomial</code>( <var>poly, r</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>a bilinear form</p>

<p>The argument <var>poly</var> must be a polynomial in the polynomial ring <var>r</var>. The (optional) last argument is the dimension for the underlying vector space of the resulting form, which by default is the number of indeterminates specified by <var>poly</var>.</p>


<table class="example">
<tr><td><pre>

gap&gt; r := PolynomialRing( GF(11), 4);
GF(11)[x_1,x_2,x_3,x_4]
gap&gt; vars := IndeterminatesOfPolynomialRing( r );
[ x_1, x_2, x_3, x_4 ]
gap&gt; pol := vars[1]*vars[2]+vars[3]*vars[4];
x_1*x_2+x_3*x_4
gap&gt; form := BilinearFormByPolynomial(pol, r, 4);
&lt; bilinear form &gt;
gap&gt; Display(form);
Bilinear form
Gram Matrix:
  .  6  .  .
  6  .  .  .
  .  .  .  6
  .  .  6  .
Polynomial: x_1*x_2+x_3*x_4
gap&gt; ## Projective Points...
gap&gt; projpoints := List(Subspaces( GF(11)^4, 1 ), Representative);;
gap&gt; ## Number of totally isotropic points
gap&gt; Number(projpoints, t -&gt; IsZero( [t, t]^form ));
144

</pre></td></tr></table>

<p><a id="s1ss5" name="s1ss5"></a></p>

<h5>4.1-5 QuadraticFormByPolynomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; QuadraticFormByPolynomial</code>( <var>poly, r, n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; QuadraticFormByPolynomial</code>( <var>poly, r</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>a quadratic form</p>

<p>The argument <var>poly</var> must be a polynomial in the polynomial ring <var>r</var>. The (optional) last argument is the dimension for the underlying vector space of the resulting form, which by default is the number of indeterminates specified by <var>poly</var>.</p>


<table class="example">
<tr><td><pre>

gap&gt; r := PolynomialRing( GF(8), 3);
GF(2^3)[x_1,x_2,x_3]
gap&gt; poly := r.1^2 + r.2^2 + r.3^2;
x_1^2+x_2^2+x_3^2
gap&gt; form := QuadraticFormByPolynomial(poly, r);
&lt; quadratic form &gt;
gap&gt; RadicalOfForm(form);
&lt;vector space over GF(2^3), with 3 generators&gt;

</pre></td></tr></table>

<p><a id="s1ss6" name="s1ss6"></a></p>

<h5>4.1-6 HermitianFormByPolynomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HermitianFormByPolynomial</code>( <var>poly, r, n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HermitianFormByPolynomial</code>( <var>poly, r</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>an hermitian form</p>

<p>The argument <var>poly</var> must be a polynomial in the polynomial ring <var>r</var> (defined over a finite field of square order). The (optional) last argument is the dimension for the underlying vector space of the resulting form, which by default is the number of indeterminates specified by <var>poly</var>.</p>


<table class="example">
<tr><td><pre>

gap&gt; r := PolynomialRing( GF(9), 4);
GF(3^2)[x_1,x_2,x_3,x_4]
gap&gt; vars := IndeterminatesOfPolynomialRing( r );
[ x_1, x_2, x_3, x_4 ]
gap&gt; poly := vars[1]*vars[2]^3+vars[1]^3*vars[2]+vars[3]*vars[4]^3+vars[3]^3*vars[4];
x_1^3*x_2+x_1*x_2^3+x_3^3*x_4+x_3*x_4^3
gap&gt; form := HermitianFormByPolynomial(poly,r);
&lt; hermitian form &gt;
gap&gt; Display(form);
Hermitian form
Gram Matrix:
 . 1 . .
 1 . . .
 . . . 1
 . . 1 .
Polynomial: x_1^3*x_2+x_1*x_2^3+x_3^3*x_4+x_3*x_4^3

</pre></td></tr></table>

<p><a id="s2ss0" name="s2ss0"></a></p>

<h4>4.2 Attributes and properties of forms</h4>

<p><a id="s2ss1" name="s2ss1"></a></p>

<h5>4.2-1 IsReflexiveForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IsReflexiveForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>true or false.</p>

<p>A sesquilinear form f is <em>reflexive</em> if whenever we have f(u,v)=0, then we also have f(v,u)=0. This operation simply returns <var>true</var> or <var>false</var>.</p>

<p><a id="s2ss2" name="s2ss2"></a></p>

<h5>4.2-2 IsAlternatingForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IsAlternatingForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>true or false.</p>

<p>A bilinear form f is <em>alternating</em> if f(v,v)=0 for all v. This operation simply returns <var>true</var> or <var>false</var>.</p>

<p><a id="s2ss3" name="s2ss3"></a></p>

<h5>4.2-3 IsSymmetricForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IsSymmetricForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>true or false.</p>

<p>A bilinear form f is <em>symmetric</em> if f(u,v)=f(v,u) for all pairs of vectors u and v. This operation simply returns <var>true</var> or <var>false</var>.</p>

<p><a id="s2ss4" name="s2ss4"></a></p>

<h5>4.2-4 IsDegenerateForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IsDegenerateForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>true or false.</p>

<p>A sesquilinear form f is <em>degenerate</em> if there exists a nonzero vector v which is orthogonal to every other vector. That is, f(v,w)=0 for all w. Likewise, a quadratic form Q is degenerate if there is a nonzero vector v such that Q(v)=0. This operation simply returns <var>true</var> or <var>false</var>.</p>

<p><a id="s2ss5" name="s2ss5"></a></p>

<h5>4.2-5 BaseField</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; BaseField</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>the underlying field of <var>f</var>.</p>

<p><a id="s2ss6" name="s2ss6"></a></p>

<h5>4.2-6 GramMatrix</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; GramMatrix</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>the associated Gram matrix of <var>f</var>.</p>

<p><a id="s2ss7" name="s2ss7"></a></p>

<h5>4.2-7 WittIndex</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; WittIndex</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>the Witt index of <var>f</var>.</p>

<p>The Witt index is the maximum dimension of a totally singular subspace. So for example, if <var>f</var> is a symplectic form and d is the dimension of its underlying vector space, then the Witt index of <var>f</var> is d/2.</p>

<p><a id="s2ss8" name="s2ss8"></a></p>

<h5>4.2-8 RadicalOfForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; RadicalOfForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>a subspace, the radical, of the vectors space associated with <var>f</var>.</p>


<table class="example">
<tr><td><pre>

gap&gt; r := PolynomialRing( GF(8), 3 );
GF(2^3)[x_1,x_2,x_3]
gap&gt; poly := r.1^2 + r.2 * r.3;
x_1^2+x_2*x_3
gap&gt; form := QuadraticFormByPolynomial( poly, r );
&lt; quadratic form &gt;
gap&gt; RadicalOfForm( form );
&lt;vector space of dimension 1 over GF(2^3)&gt;

</pre></td></tr></table>

<p><a id="s2ss9" name="s2ss9"></a></p>

<h5>4.2-9 PolynomialOfForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; PolynomialOfForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>the polynomial associated with <var>f</var>.</p>


<table class="example">
<tr><td><pre>
 
gap&gt; mat := [ [ Z(8) , 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
 [ 0*Z(2), Z(2)^0, Z(2^3)^5, 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), 0*Z(2), Z(2)^0 ], 
 [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ] ];;
gap&gt; form := QuadraticFormByMatrix(mat,GF(8));
&lt; quadratic form &gt;
gap&gt; PolynomialOfForm(form);
Z(2^3)*x_1^2+x_2^2+Z(2^3)^5*x_2*x_3+x_4*x_5

</pre></td></tr></table>

<p><a id="s2ss10" name="s2ss10"></a></p>

<h5>4.2-10 DiscriminantOfForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; DiscriminantOfForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>a string</p>

<p>Given a quadratic or sesquilinear form <var>f</var>, this operation returns a string: ``square'' or ``nonsquare''. Discriminants can be used to delineate the isometry type of an orthogonal form in even (algebraic) dimension.</p>


<table class="example">
<tr><td><pre>

gap&gt; gram := InvariantQuadraticForm(GO(-1,4,5))!.matrix;;
gap&gt; f := QuadraticFormByMatrix(gram, GF(5));
&lt; quadratic form &gt;
gap&gt; DiscriminantOfForm(f);
"nonsquare"

</pre></td></tr></table>

<p><a id="s3ss0" name="s3ss0"></a></p>

<h4>4.3 Functions for changing forms</h4>

<p><a id="s3ss1" name="s3ss1"></a></p>

<h5>4.3-1 BaseChangeToCanonical</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; BaseChangeToCanonical</code>( <var>f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>a base-transition matrix</p>

<p>The argument <var>f</var> is a sesquilinear or quadratic form. For every isometry class of forms, there is a canonical representative, which is in block diagonal form. If <var>M</var> is the Gram matrix of the form <var>f</var>, then <var>b * M * TransposedMat(b)</var> is the Gram matrix of the canonical representative.</p>


<table class="example">
<tr><td><pre>

gap&gt; f := GF(3);
GF(3)
gap&gt; 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&gt; form := BilinearFormByMatrix( gram, f );
&lt; bilinear form &gt;
gap&gt; b := BaseChangeToCanonical( form );;
gap&gt; Display( b * gram * TransposedMat(b) );
 . 1 . . . .
 2 . . . . .
 . . . 1 . .
 . . 2 . . .
 . . . . . 1
 . . . . 2 .

</pre></td></tr></table>

<p><a id="s3ss2" name="s3ss2"></a></p>

<h5>4.3-2 IsometricCanonicalForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IsometricCanonicalForm</code>( <var>f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>the canonical form isometric to the sesquilinear or quadratic form <var>f</var>.</p>

<p>For every isometry type of sesquilinear or quadratic form, there is a canonical one. In <strong class="pkg">Forms</strong>, the canonical form of each class is that which preserves the natural hyperbolic line decomposition (see Secton <a href="chap3.html#s5ss0"><b>3.5</b></a>).</p>


<table class="example">
<tr><td><pre>

gap&gt; mat := [ [ Z(8) , 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
[ 0*Z(2), Z(2)^0, Z(2^3)^5, 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), 0*Z(2), Z(2)^0 ], 
[ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ] ];;
gap&gt; form := QuadraticFormByMatrix(mat,GF(8));
&lt; quadratic form &gt;
gap&gt; iso := IsometricCanonicalForm(form);
&lt; quadratic form &gt;
gap&gt; Display(form);
Quadratic form
Gram Matrix:
z = Z(8)
 z^1   .   .   .   .
   .   1 z^5   .   .
   .   .   .   .   .
   .   .   .   .   1
   .   .   .   .   .
Witt Index: 2
gap&gt; Display(iso);
Quadratic form
Gram Matrix:
 1 . . . .
 . . 1 . .
 . . . . .
 . . . . 1
 . . . . .
Witt Index: 2

</pre></td></tr></table>

<p><a id="s4ss0" name="s4ss0"></a></p>

<h4>4.4 Operations on forms</h4>

<p><a id="s4ss1" name="s4ss1"></a></p>

<h5>4.4-1 BaseChangeHomomorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; BaseChangeHomomorphism</code>( <var>b, gf</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>the inner automorphism of GL(d,q) associated to the base-transition <var>b</var>.</p>

<p>The argument <var>b</var> must be an invertible matrix over the finite field <var>gf</var>.</p>


<table class="example">
<tr><td><pre>

gap&gt; gl:=GL(3,3);
GL(3,3)
gap&gt; go:=GO(3,3);
GO(0,3,3)
gap&gt; gram:=InvariantBilinearForm(go)!.matrix;
[ [ 0*Z(3), Z(3)^0, 0*Z(3) ], [ Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3) ] ]
gap&gt; f:=FormByMatrix(gram,GF(3),"parabolic");
&lt; bilinear form &gt;
gap&gt; b:=BaseChangeToCanonical(f);;
gap&gt; hom := BaseChangeHomomorphism(b, GF(3));
^[ [ 0*Z(3), 0*Z(3), Z(3) ], [ Z(3), Z(3), Z(3)^0 ], [ Z(3), 0*Z(3), Z(3) ] ]
gap&gt; newgo := Image(hom, go); 
Group(
[ [ [ Z(3)^0, 0*Z(3), Z(3) ], [ Z(3)^0, Z(3), Z(3)^0 ], [ 0*Z(3), 0*Z(3), Z(3) ] ], 
  [ [ Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3) ], [ Z(3)^0, Z(3)^0, Z(3) ] ] ])
gap&gt; gens:=GeneratorsOfGroup(newgo);;
gap&gt; canonical := b * gram * TransposedMat(b);
[ [ Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0 ], [ 0*Z(3), Z(3)^0, 0*Z(3) ] ]
gap&gt; ForAll(gens, y -&gt; y * canonical * TransposedMat(y) = canonical);
true

</pre></td></tr></table>

<p><a id="s4ss2" name="s4ss2"></a></p>

<h5>4.4-2 EvaluateForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; EvaluateForm</code>( <var>f, u, v</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; EvaluateForm</code>( <var>f, u</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>a finite field element</p>

<p>The argument <var>f</var> is either a sesquilinear or quadratic form defined over a finite field GF(q). The other argument is a pair of vectors or matrices, or a single vector or matrix, which represent the bases of given subspaces of GF(q)^d. There is also an overloading of the operation <var>\^</var> which we show in the following example:</p>


<table class="example">
<tr><td><pre>

gap&gt; mat := [[Z(8),0,0,0],[0,0,Z(8)^4,0],[0,0,0,1],[0,0,0,0]]*Z(8)^0;;
gap&gt; form := QuadraticFormByMatrix(mat,GF(8));
&lt; quadratic form &gt;
gap&gt; u := [ Z(2^3)^4, Z(2^3)^4, Z(2)^0, Z(2^3)^3 ];
[ Z(2^3)^4, Z(2^3)^4, Z(2)^0, Z(2^3)^3 ]
gap&gt; EvaluateForm( form, u );
Z(2^3)^6
gap&gt; u^form;
Z(2^3)^6

</pre></td></tr></table>

<p>Here is an example using sesquilinear forms...</p>


<table class="example">
<tr><td><pre>

gap&gt; gram := [[0,0,0,0,0,2],[0,0,0,0,2,0],[0,0,0,1,0,0],[0,0,1,0,0,0],
 [0,2,0,0,0,0],[2,0,0,0,0,0]]*Z(3)^0;;
gap&gt; form := BilinearFormByMatrix(gram,GF(3));
&lt; bilinear form &gt;
gap&gt; u := [ [ Z(3)^0, 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ], 
  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3)^0, Z(3), 0*Z(3) ] ];;
gap&gt; v := [ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3), 0*Z(3), Z(3) ], 
  [ 0*Z(3), Z(3)^0, 0*Z(3), Z(3), Z(3), Z(3) ] ];;
gap&gt; EvaluateForm( form, u, v);
[ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), 0*Z(3) ] ]
gap&gt; [u,v]^form;
[ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), 0*Z(3) ] ]

</pre></td></tr></table>


<div class="pcenter">
<table class="chlink"><tr><td><a href="chap0.html">Top of Book</a></td><td><a href="chap3.html">Previous Chapter</a></td><td><a href="chapBib.html">Next Chapter</a></td></tr></table>
<br />


<div class="pcenter"><table class="chlink"><tr><td class="chlink1">Goto Chapter: </td><td><a href="chap0.html">Top</a></td><td><a href="chap1.html">1</a></td><td><a href="chap2.html">2</a></td><td><a href="chap3.html">3</a></td><td><a href="chap4.html">4</a></td><td><a href="chapBib.html">Bib</a></td><td><a href="chapInd.html">Ind</a></td></tr></table><br /></div>

</div>

<hr />
<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>