<!-- 
projgroup.xml    FinInG package documentation
                                                                   John Bamberg
                                                                   Anton Betten
                                                                  Philippe Cara
                                                                   Jan De Beule
                                                                 Michel Lavrauw
                                                                Max Neunhoeffer

  Copyright (C) 2018,	Colorado State University
                        Sabancı Üniversitesi
						Università degli Studi di Padova
						Universiteit Gent
						University of St. Andrews
						University of Western Australia
                        Vrije Universiteit Brussel

This is the chapter of the documentation describing the projective groups.

-->

<Chapter Label="projgroup">
<Heading>Projective Groups</Heading>

A <E>collineation</E> of a projective space is a type preserving bijection of the
elements of the projective space, that preserves incidence. The Fundamental Theorem
of Projective Geometry states that every collineation of a Desarguesian projective
space of dimension at least two is induced by a semilinear map of the underlying vector space.
The group of all linear maps of a given <M>n+1</M>-dimensional
vector space over a given field &gfq; is denoted by &glnplus1q;.
This is a matrix group consisting of all non-singular square <M>n+1</M>-dimensional matrices
over &gfq;. The group of all semilinear maps
of the vector space <M>V(n+1,q)</M> is obtained as the semidirect product of
&glnplus1q; and &autgfq;, and is denoted by &gammalnplus1q;. Each semilinear map induces a collineation of &pgnq;.
The Fundamental theorem of Projective Geometry also guarantees that the converse holds. Note also
that &gammalnplus1q; does not act faithfully on the projective points,
and the kernel of its action is the group of scalar matrices, &scnplus1q;.
So the group &pgammalnplus1q; is defined as the group
<Alt Only="Text"><M>\Gamma{}L(n+1,q) / Sc(n+1,q)</M></Alt>
<Alt Only="LaTeX"><M>\Gamma{}\mathrm{L}(n+1,q) / \mathrm{Sc}(n+1,q)</M></Alt>
<Alt Only="HTML MathJax"><M>\Gamma{}\mathrm{L}(n+1,q) / \mathrm{Sc}(n+1,q)</M></Alt>
<Alt Only="HTML noMathJax">&#915;L(n+1,q)/Sc(n+1,q)</Alt>, and
the group &pglnplus1q; as
<Alt Only="Text"><M>GL(n+1,q) / Sc(n+1,q)</M></Alt>
<Alt Only="LaTeX"><M>\mathrm{GL}(n+1,q) / \mathrm{Sc}(n+1,q)</M></Alt>
<Alt Only="HTML MathJax"><M>\mathrm{GL}(n+1,q) / \mathrm{Sc}(n+1,q)</M></Alt>
<Alt Only="HTML noMathJax">GL(n+1,q)/Sc(n+1,q)</Alt>. An element of the group &pglnplus1q; is also
called a <E>projectivity</E> or <E>homography</E> of
&pgnq;, and the group &pglnplus1q; is called the <E>projectivity
group</E> or <E>homography group</E> of &pgnq;. An element of &pgammalnplus1q; is called a <E>collineation</E> of &pgnq;
and the group &pgammalnplus1q; is the <E>collineation group</E> of &pgnq;.<P/>

As usual, we also consider the special linear group &slnplus1q;, which is the subgroup of &glnplus1q;
of all matrices having determinant one. Its projective variant, i.e. &pslnplus1q; is defined as
<Alt Only="Text"><M>SL(n+1,q) / (SL(n+1,q) \cap Sc(n+1,q))</M></Alt>
<Alt Only="LaTeX"><M>\mathrm{SL}(n+1,q) / (\mathrm{SL}(n+1,q) \cap \mathrm{Sc}(n+1,q))</M></Alt>
<Alt Only="HTML MathJax"><M>\mathrm{SL}(n+1,q) / (\mathrm{SL}(n+1,q) \cap \mathrm{Sc}(n+1,q))</M></Alt>
<Alt Only="HTML noMathJax">SL(n+1,q)/(SL(n+1,q) &#8745; Sc(n+1,q))</Alt> and
is called the <E>special homography group</E> or <E>special projectivity group</E> of &pgnq;.
<P/>

Consider the projective space &pgnq;. As described in Chapter <Ref
Chap="projective_spaces"/>, a point of &pgnq; is represented by a row
vector. A <M>k</M>-dimensional subspace of &pgnq; is represented by a
generating set of <M>k+1</M> points, and as such, by a 
<Alt Not="HTML"><M>(k+1) \times (n+1)</M></Alt><Alt Only="HTML MathJax"><M>(k+1) \times (n+1)</M></Alt>
<Alt Only="HTML noMathJax">(k+1) x (n+1)</Alt>
matrix. The convention in <Package>FinInG</Package> is that a collineation <M>\phi</M>
with underlying matrix <M>A</M> and field automorphism <M>\theta</M>
maps the projective point represented by row vector <Alt Not="HTML"><M>(x_0, x_1, \ldots,
x_n)</M></Alt><Alt Only="HTML MathJax"><M>(x_0, x_1, \ldots,
x_n)</M></Alt><Alt Only="HTML noMathJax">(x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)</Alt>
to the projective point represented by row vector <Alt Not="HTML"><M>(y_0,y_1,\ldots,y_n)
= ((x_0, x_1, \ldots, x_n) A)^{\theta}</M></Alt><Alt Only="HTML MathJax"><M>(y_0,y_1,\ldots,y_n)
= ((x_0, x_1, \ldots, x_n) A)^{\theta}</M></Alt><Alt
Only="HTML noMathJax">(y&lt;sub>0&lt;/sub>,y&lt;sub>1&lt;/sub>,...,y&lt;sub>n&lt;/sub>) =
((x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)A)&lt;sup>&#952;&lt;/sup>
</Alt>. This convention determines completely the action of collineations on all elements 
of a projective space, and it follows that the product of two collineations
<Alt Not="HTML"><M>\phi_1,\phi_2</M></Alt><Alt Only="HTML MathJax"><M>\phi_1,\phi_2</M></Alt>
<Alt Only="HTML noMathJax">&#966;&lt;sub>1&lt;/sub>,&#966;&lt;sub>2&lt;/sub></Alt> with respective
underlying matrices <Alt Not="HTML"><M>A_1,A_2</M></Alt><Alt Only="HTML MathJax"><M>A_1,A_2</M></Alt>
<Alt Only="HTML noMathJax">A&lt;sub>1&lt;/sub>,A&lt;sub>2&lt;/sub></Alt> and respective underlying
field automorphisms <Alt Not="HTML"><M>\theta_1,\theta_2</M></Alt><Alt Only="HTML MathJax"><M>\theta_1,\theta_2</M></Alt>
<Alt Only="HTML noMathJax">&#952;&lt;sub>1&lt;/sub>,&#952;&lt;sub>2&lt;/sub></Alt> is the collineation with
underlying matrix <Alt Only="Text"><M>A_1 \cdot (A_2^(\theta_1^{-1}))</M></Alt><Alt Only="LaTeX"><M>A_1 \cdot A_2^{\theta_1^{-1}}</M></Alt>
<Alt Only="HTML MathJax"><M>A_1 \cdot A_2^{\theta_1^{-1}}</M></Alt><Alt
Only="HTML noMathJax">A&lt;sub>1&lt;/sub>A&lt;sub>2&lt;/sub>&lt;sup>&#952;&lt;sub>1&lt;/sub>&lt;sup>-1&lt;/sup>&lt;/sup></Alt>
and underlying field automorphism <Alt Not="HTML"><M>\theta_1 \theta_2</M></Alt><Alt Only="HTML MathJax"><M>\theta_1 \theta_2</M></Alt>
<Alt Only="HTML noMathJax">&#952;&lt;sub>1&lt;/sub>&#952;&lt;sub>2&lt;/sub></Alt>.<P/>

A <E>correlation</E> of the projective space &pgnq; is a collineation from
&pgnq; to its dual. A projectivity from &pgnq; to its dual is
sometimes called a <E>reciprocity</E>. 
The <E>standard duality</E> of the
projective space &pgnq; maps any point <M>v</M> with coordinates <Alt
Not="HTML"><M>(x_0,x_1,\ldots,x_n)</M></Alt><Alt Only="HTML MathJax"><M>(x_0,x_1,\ldots,x_n)</M></Alt><Alt
Only="HTML noMathJax">(x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)</Alt> on the hyperplane
with equation <Alt Not="HTML"><M>x_0X_0 + x_1X_1 + \cdots + x_nX_n</M></Alt>
<Alt Only="HTML MathJax"><M>x_0X_0 + x_1X_1 + \cdots + x_nX_n</M></Alt>
<Alt Only="HTML noMathJax">x&lt;sub>0&lt;/sub>X&lt;sub>0&lt;/sub> + x&lt;sub>1&lt;/sub>X&lt;sub>1&lt;/sub> + ...
x&lt;sub>n&lt;/sub>X&lt;sub>n&lt;/sub> = 0</Alt>. The
standard duality acts as an automorphism on &pgammalnplus1q; by mapping the underlying matrix of a collineation
to its inverse transpose matrix. (Recall that the frobenius automorphism and the standard duality commute.) 
The convention in <Package>FinInG</Package> is that a correlation <M>\phi</M>
with underlying matrix <M>A</M> and field automorphism <M>\theta</M> maps that projective
point represented by row vector <Alt Not="HTML"><M>(x_0, x_1, \ldots,
x_n)</M></Alt><Alt Only="HTML MathJax"><M>(x_0, x_1, \ldots, x_n)</M></Alt>
<Alt Only="HTML noMathJax">(x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)</Alt>
to the projective hyperplane represented by row vector <Alt Not="HTML"><M>(y_0,y_1,\ldots,y_n)
= ((x_0, x_1, \ldots, x_n) A)^{\theta.}</M></Alt><Alt Only="HTML MathJax"><M>(y_0,y_1,\ldots,y_n)
= ((x_0, x_1, \ldots, x_n) A)^{\theta.}</M></Alt>
<Alt Only="HTML noMathJax">(y&lt;sub>0&lt;/sub>,y&lt;sub>1&lt;/sub>,...,y&lt;sub>n&lt;/sub>) =
((x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)A)&lt;sup>&#952;&lt;/sup>.
</Alt>, i.e. <Alt Not="HTML"><M>(y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta.}</M></Alt>
<Alt Only="HTML MathJax"><M>(y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta.}</M></Alt>
<Alt Only="HTML noMathJax">(y&lt;sub>0&lt;/sub>,y&lt;sub>1&lt;/sub>,...,y&lt;sub>n&lt;/sub>) =
((x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)A)&lt;sup>&#952;&lt;/sup>
</Alt> are the dual coordinates of the hyperplane.<P/>

The product of two correlations of &pgnq; is a collineation, and the
product of a collineation and a correlation is a correlation. So the set of all
collineations and correlations of &pgnq; forms a group, called the
<E>correlation-collineation group</E> of &pgnq;.
The correlation-collineation group
of &pgnq; is isomorphic to the semidirect product of <Alt Not="HTML"><M>P \Gamma L(n+1,q)</M></Alt><Alt
Only="HTML">P&#915;L(n+1,q)</Alt> with the cyclic group of order 2 generated by the
<E>standard duality</E> of the projective space &pgnq;.
The convention determines completely 
the action of correlations and collineations on all elements 
of a projective space, and it follows that the product of two elements of the correlation-collineation group 
<Alt Not="HTML"><M>\phi_1,\phi_2</M></Alt><Alt Only="HTML MathJax"><M>\phi_1,\phi_2</M></Alt><Alt
Only="HTML noMathJax">&#966;&lt;sub>1&lt;/sub>,&#966;&lt;sub>2&lt;/sub></Alt> with respective
underlying matrices <Alt Not="HTML"><M>A_1,A_2</M></Alt><Alt Only="HTML MathJax"><M>A_1,A_2</M></Alt><Alt
Only="HTML noMathJax">A&lt;sub>1&lt;/sub>,A&lt;sub>2&lt;/sub></Alt>, respective underlying
field automorphisms <Alt Not="HTML"><M>\theta_1,\theta_2</M></Alt><Alt Only="HTML MathJax"><M>\theta_1,\theta_2</M></Alt>
<Alt Only="HTML noMathJax">&#952;&lt;sub>1&lt;/sub>,&#952;&lt;sub>2&lt;/sub></Alt>, and respective underlying
projective space isomorphisms (standard duality or identity map) <Alt Not="HTML"><M>\delta_1,\delta_2</M></Alt>
<Alt Only="HTML MathJax"><M>\delta_1,\delta_2</M></Alt><Alt Only="HTML noMathJax">&#948;&lt;sub>1&lt;/sub>,&#948;&lt;sub>2&lt;/sub></Alt>,
is the element of the correlation-collineation group with underlying matrix
<Alt Only="Text"><M>A_1 \cdot (A_2^(\theta_1^{-1}))^{\delta_1}</M></Alt>
<Alt Only="LaTeX"><M>A_1 \cdot (A_2^{\theta_1^{-1}})^{\delta_1}</M></Alt>
<Alt Only="HTML MathJax"><M>A_1 (A_2^{\theta_1^{-1}})^{\delta_1}</M></Alt>
<Alt Only="HTML noMathJax">A&lt;sub>1&lt;/sub>(A&lt;sub>2&lt;/sub>&lt;sup>&#952;&lt;sub>1&lt;/sub>&lt;sup>-1&lt;/sup>&lt;/sup>)
&lt;sup>&#948;&lt;sub>1&lt;/sub>&lt;/sup></Alt>,
underlying field automorphism <Alt Not="HTML"><M>\theta_1 \theta_2</M></Alt><Alt Only="HTML MathJax"><M>\theta_1 \theta_2</M></Alt>
<Alt Only="HTML noMathJax">&#952;&lt;sub>1&lt;/sub>&#952;&lt;sub>2&lt;/sub></Alt>, and underlying projective space automorphism
<Alt Not="HTML"><M>\delta_1 \delta_2</M></Alt><Alt Only="HTML MathJax"><M>\delta_1 \delta_2</M></Alt>
<Alt Only="HTML noMathJax">&#948;&lt;sub>1&lt;/sub>&#948;&lt;sub>2&lt;/sub>
</Alt>, where the action of <Alt Not="HTML"><M>\delta_1</M></Alt><Alt Only="HTML MathJax"><M>\delta_1</M></Alt>
<Alt Only="HTML noMathJax">&#948;&lt;sub>1&lt;/sub></Alt> on a matrix
<!--<Alt Not="HTML"><M>A_2</M></Alt><Alt Only="HTML MathJax"><M>A_2</M></Alt><Alt Only="HTML noMathJax">A&lt;sub>2&lt;/sub></Alt>-->
is defined as taking the transpose inverse if <Alt Not="HTML"><M>\delta_1</M></Alt><Alt Only="HTML MathJax"><M>\delta_1</M></Alt>
<Alt Only="HTML noMathJax">&#948;&lt;sub>1&lt;/sub></Alt> is the standard duality, and as the identity map
if <Alt Not="HTML"><M>\delta_1</M></Alt><Alt Only="HTML MathJax"><M>\delta_1</M></Alt>
<Alt Only="HTML noMathJax">&#948;&lt;sub>1&lt;/sub></Alt> is the identity.
<P/>
Action functions for collineations and correlations on the subspaces of
a projective space are described in detail in Section <Ref Sect="projgroup_actions"/>
<P/>
We mention that the commands <F>PGL</F> (and <F>ProjectiveGeneralLinearGroup</F>) 
and <F>PSL</F> (and <F>ProjectiveSpecialLinearGroup</F>) are available in GAP 
and return a (permutation) group isomorphic to the required group. Therefore we do
not provide new methods for these commands, but assume that the user will obtain these
groups as homography or special homography group of the appropriate projective space.
We will follow this philosophy for the other classical groups. The terminology <E>projective semilinear group</E>
will be used for a group generated by collineations of a projective space.


<Section>
<Heading> Projectivities, collineations and correlations of projective spaces.</Heading>
<!--As explained in the introduction, mathematically, the underlying object of a projectivity of a projective space is a nonsingular matrix. The underlying objects of a collineation of a projective space is a nonsingular matrix and a field automorphism (which might be the identity), and the underlying objects of a correlation of a projective space is a nonsingular matrix, a field automorphism, and an isomorphism between the projective space and its dual space.

These are the different type of actions on projective spaces in <Package>FinInG</Package>, and they naturally give rise to the following
representations.
<ManSection>
<Heading>Representations for group elements</Heading>
<Filt Name="IsProjGrpElRep" Type="Representation"/>
<Filt Name="IsProjGrpElWithFrobRep" Type="Representation"/>
<Filt Name="IsProjGrpElWithFrobWithPSIsomRep" Type="Representation"/>
<Description>
<C>IsProjGrpElRep</C> is the representation naturally induced by a projectivity; <C>IsProjGrpElWithFrobRep</C> is the representation naturally induced by the notion of a collineation of projective space; and <C>IsProjGrpElWithFrobWithPSIsomRep</C> is the representation naturally induced by a correlation of a projective space. This means that an object in the category <C>IsProjGrpEl</C> has as underlying object a matrix; an object in the category <C>IsProjGrpElWithFrob</C> has as underlying object a pair consisting of a matrix and a field automorphism; and <C>IsProjGrpElWithFrobWithPSIsom</C> has as underlying object a triple consisting of a matrix, a field automorphism and an isomorphism from the projective space to its dual space. Also the base field is stored as a
component in the representation.
</Description>
</ManSection>

<ManSection>
<Heading>Categories for group elements</Heading>
<Filt Name="IsProjGrpEl" Type="Category"/>
<Filt Name="IsProjGrpElWithFrob" Type="Category"/>
<Filt Name="IsProjGrpElWithFrobWithPSIsom" Type="Category"/>
<Description>
<C>IsProjGrpEl</C>, <C>IsProjGrpElWithFrob</C>, and <C>IsProjGrpElWithFrobWithPSIsom</C> are the categories 
naturally induced the notions of projectivities, collineations, and
correlations of a projective space.
This means that an object in the category <C>IsProjGrpEl</C> has as underlying object a matrix; an object in the category <C>IsProjGrpElWithFrob</C> has as underlying object a pair consisting of a matrix and a field automorphism; and <C>IsProjGrpElWithFrobWithPSIsom</C> has as underlying object a triple consisting of a matrix, a field automorphism and an isomorphism from the projective space to its dual space. Also the base field is stored as a
component in the representation.
</Description>
</ManSection>!-->

These are the different type of actions on projective spaces in <Package>FinInG</Package>, and they naturally 
give rise to the following distinct categories and representations. Note that these categories and representations 
are to be considered on a non-user level. Below we describe all user construction methods that hide nicely these
technical details.

<ManSection>
<Heading>Categories for group elements</Heading>
<Filt Name="IsProjGrpEl" Type="Category"/>
<Filt Name="IsProjGrpElWithFrob" Type="Category"/>
<Filt Name="IsProjGrpElWithFrobWithPSIsom" Type="Category"/>
<Description>
<C>IsProjGrpEl</C>, <C>IsProjGrpElWithFrob</C>, and <C>IsProjGrpElWithFrobWithPSIsom</C> are the categories 
naturally induced by the notions of projectivities, collineations, and correlations of a projective space. 
</Description>
</ManSection>

<ManSection>
<Heading>Representations for group elements</Heading>
<Filt Name="IsProjGrpElRep" Type="Representation"/>
<Filt Name="IsProjGrpElWithFrobRep" Type="Representation"/>
<Filt Name="IsProjGrpElWithFrobWithPSIsomRep" Type="Representation"/>
<Description>
<C>IsProjGrpElRep</C> is the representation naturally induced by a projectivity; <C>IsProjGrpElWithFrobRep</C> is the 
representation naturally induced by the notion of a collineation of projective space; and <C>IsProjGrpElWithFrobWithPSIsomRep</C> 
is the representation naturally induced by a correlation of a projective space. 
This means that an object in the representation <C>IsProjGrpElRep</C> has as underlying object a matrix; an object in the category 
<C>IsProjGrpElWithFrobRep</C> has as underlying object a pair consisting of a matrix and a field automorphism; and 
<C>IsProjGrpElWithFrobWithPSIsomRep</C> has as underlying object a triple consisting of a matrix, a field automorphism 
and an isomorphism from the projective space to its dual space. Also the base field is stored as a
component in the representation. 
</Description>
</ManSection>

The above mentioned categories allow us to make a distinction between projectivities, collineations and correlations apart
from their representation. However, in <Package>FinInG</Package>, a group element constructed in the categories <C>IsProjGrpElMore</C>
is always constructed in the representation <C>IsProjGrpElMoreRep</C>. Furthermore, projectivities of projective spaces (and 
also collineations of projective spaces) will by default be constructed in the category <C>IsProjGrpElWithFrobRep</C>. 
This technical choice was made by the developers to have the projectivity groups naturally embedded in the collineation groups.
Correlations of projective spaces will be constructed in the category <C>IsProjGrpElWithFrobWithPSIsom</C>. 

<!--This means that an object in the category <C>IsProjGrpEl</C> has as 
underlying object a matrix; an object in the category <C>IsProjGrpElWithFrob</C> has as underlying 
object a pair consisting of a matrix and a field automorphism; and <C>IsProjGrpElWithFrobWithPSIsom</C> 
has as underlying object a triple consisting of a matrix, a field automorphism and an isomorphism 
from the projective space to its dual space. Also the base field is stored as a
component in the representation.!-->

<ManSection>
<Heading>Projectivities</Heading>
<Filt Name="IsProjectivity" Type="Property"/>
<Description>
<C>IsProjectivity</C> is a property.
Projectivities are the elements of &pglnplus1q;. Every element belonging to <C>IsProjGrpEl</C> is by construction a projectivity. If <C>IsProjectivity</C> is applied to a an element
belonging to <C>IsProjGrpElWithFrob</C>, then it verifies whether the
underlying field automorphism is the identity.
If <C>IsProjectivity</C> is applied to a an element
belonging to <C>IsProjGrpElWithFrobWithPSIsom</C>, 
then it verifies whether the
underlying field automorphism is the identity, and whether the projective
space isomorphism is the identity.
This operation provides a user-friendly method to distinguish the projectivities from the projective strictly
semilinear maps, and the correlations of a projective space.
<Example>
<#Include SYSTEM "../examples/include/projgroups_isprojectivity.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Heading>Collineations of projective spaces</Heading>
<Filt Name="IsCollineation" Type="Property"/>
<Description>
<C>IsCollineation</C> is property. All elements of &pgammalnplus1q; are collineations, and therefore all
elements belonging to <C>IsProjGrpElWithFrob</C> are collineations.
But also a projectivity is a collineation, as well as an element belonging
to <C>IsProjGrpElWithFrobWithPSIsom</C> with projective space isomorphism equal to the identity, is a collineation.
<Example>
<#Include SYSTEM "../examples/include/projgroups_iscollineation.include"> 
</Example>
</Description>
</ManSection>


<ManSection>
<Heading>Projective strictly semilinear maps</Heading>
<Filt Name="IsStrictlySemilinear" Type="Property"/>
<Description>
<C>IsStrictlySemilinear</C> is a property that checks whether a given
collineation has a nontrivial underlying field automorphisms,
i.e. whether the element belongs to &pgammalnplus1q;, but not to &pglnplus1q;.

If <C>IsStrictlySemilinear</C> is applied to a an element
belonging to <C>IsProjGrpElWithFrobWithPSIsom</C>, 
then it verifies whether the
underlying field automorphism is different from the identity, 
and whether the projective
space isomorphism equals the identity.


This operation provides a user-friendly method to distinguish the projective strictly
semilinear maps from projectivities inside the category of collineations of a projective space.
<Example>
<#Include SYSTEM "../examples/include/projgroups_isstrictlysemilinear.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Heading>Correlations and collineations</Heading>
<Filt Name="IsProjGrpElWithFrobWithPSIsom" Type="Category"/>
<Filt Name="IsCorrelationCollineation" Type="Category"/>
<Filt Name="IsCorrelation" Type="Property"/>
<Description>
The underlying objects of a correlation-collineation in <Package>FinInG</Package>
are a nonsingular matrix, a field automorphism and a projective space isomorphism.
<C>IsProjGrpElWithFrobWithPSIsom</C> is the category of these objects.
If the projective space isomorphism is not the identity, then the element
is a correlation, and <C>IsCorrelation</C> will return true.
<C>IsCorrelationCollineation</C> is a synonym of <C>IsProjGrpElWithFrobWithPSIsom</C>.
<Example>
<#Include SYSTEM "../examples/include/projgroups_iscorrelation.include"> 
</Example>
</Description>
</ManSection>
</Section>


<Section>
<Heading>Construction of projectivities, collineations and correlations.</Heading>

In <Package>FinInG</Package>, projectivities and collineations are both constructed
in the category <C>IsProjGrpElWithFrob</C>; correlations are constructed in the
category <C>IsProjGrpElWithFrobWithPSIsom</C>.

<ManSection>
<Oper Name="Projectivity" Arg="mat, f"/>
<Oper Name="Projectivity" Arg="pg, mat"/>
<Returns>a projectivity of a projective space</Returns>
<Description>The argument <A>mat</A> must be a nonsingular matrix over the finite field
<A>f</A>. In the second variant, the size of the nonsingular matrix <A>mat</A>
must be one more than the dimension of the projective space <A>pg</A>.
This creates an element of a projectivity group. But the returned object
belongs to <C>IsProjGrpElWithFrob</C>!
<Example>
<#Include SYSTEM "../examples/include/projgroups_projectivity.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="CollineationOfProjectiveSpace" Arg="mat, frob, f"/>
<Oper Name="CollineationOfProjectiveSpace" Arg="mat, f"/>
<Oper Name="CollineationOfProjectiveSpace" Arg="mat, frob, f"/>
<Oper Name="CollineationOfProjectiveSpace" Arg="mat, f"/>
<Oper Name="CollineationOfProjectiveSpace" Arg="pg,mat"/>
<Oper Name="CollineationOfProjectiveSpace" Arg="pg,mat,frob"/>
<Oper Name="Collineation" Arg="pg,mat"/>
<Oper Name="Collineation" Arg="pg,mat,frob"/>
<Description>
<A>mat</A> is a nonsingular matrix, <A>frob</A> is a field automorphism, <A>f</A>
is a field, and <A>pg</A> is a projective space. This function
(and its shorter version) returns the collineation with matrix
<A>mat</A> and automorphism <A>frob</A> of the field <A>f</A>. 
If <A>frob</A> is not specified 
then the companion automorphism of the resulting group element will be 
the identity map. The returned object belongs to the category
<C>IsProjGrpElWithFrob</C>. When the argument <A>frob</A> is given,
it is checked whether the source of <A>frob</A> equals <A>f</A>. When the
arguments <A>pg</A> and <A>mat</A> are used, then it is checked that these
two arguments are compatible.
<Example>
<#Include SYSTEM "../examples/include/projgroups_collineation.include"> 
</Example>
</Description>
</ManSection>


<ManSection>
<Oper Name="ProjectiveSemilinearMap" Arg="mat, frob, f"/>
<Returns>a projectivity of a projective space</Returns>
<Description>
<A>mat</A> is a nonsingular matrix, <A>frob</A> is a field automorphism, and <A>f</A>
is a field. This function returns the collineation with matrix
<A>mat</A> and automorphism <A>frob</A>. 
The returned object belongs to the category
<C>IsProjGrpElWithFrob</C>. When the argument <A>frob</A> is given,
it is checked whether the source of <A>frob</A> equals <A>f</A>.
</Description>
</ManSection>

<ManSection>
<Oper Name="IdentityMappingOfElementsOfProjectiveSpace" Arg="ps"/>
<Description>
This operation returns the identity mapping on the collection of subspaces of a projective space <A>ps</A>.
</Description>
</ManSection>

<ManSection>
<Oper Name="StandardDualityOfProjectiveSpace" Arg="ps"/>
<Description>
This operation returns the standard duality of the projective space <A>ps</A>
<Example>
<#Include SYSTEM "../examples/include/projgroups_stduality.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="CorrelationOfProjectiveSpace" Arg="mat, f"/>
<Oper Name="CorrelationOfProjectiveSpace" Arg="mat, frob, f"/>
<Oper Name="CorrelationOfProjectiveSpace" Arg="mat, f, delta"/>
<Oper Name="CorrelationOfProjectiveSpace" Arg="mat, frob, f, delta"/>
<Oper Name="CorrelationOfProjectiveSpace" Arg="pg,mat,frob,delta"/>
<Oper Name="Correlation" Arg="pg,mat,frob,delta"/>
<Description>
<A>mat</A> is a nonsingular matrix, <A>frob</A> is a field automorphism, <A>f</A>
is a field, and <A>delta</A> is the standard duality of the projective space
&pgnq;. This function returns the correlation with matrix
<A>mat</A>, automorphism <A>frob</A>, and standard duality <A>delta</A>. If
<A>frob</A> is not specified then the companion automorphism of the resulting group element will be 
the identity map. If the user specifies <A>delta</A>, then it must be the
standard duality of a projective space, created using
<Ref Oper="StandardDualityOfProjectiveSpace"/>, or the identity mapping on the collection of subspaces of a projective space, created using <Ref Oper="IdentityMappingOfElementsOfProjectiveSpace"/>. If not specified, then the companion
vector space isomorphism is the identity mapping.  The returned object belongs to
the category <C>IsProjGrpElWithFrobWithPSIsom</C>
<Example>
<#Include SYSTEM "../examples/include/projgroups_correlation.include"> 
</Example>
</Description>
</ManSection>
</Section>

<Section>
<Heading>Basic operations for projectivities, collineations and correlations of
projective spaces</Heading> 

<ManSection>
<Oper Name="Representative" Arg="g"/>
<Description>
<A>g</A> is a projectivity, collineation or correlation of a projective space.
This function returns the representative components that determine <A>g</A>, i.e. a matrix, 
a matrix and a field automorphism, and a matrix, a field automorphism, and a vector space isomorphism, 
respectively.
<Example>
<#Include SYSTEM "../examples/include/projgroups_representative.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="MatrixOfCollineation" Arg="g"/>
<Description>
<A>g</A> is a collineation (including a projectivity) of a projective space.
This function returns the matrix that was used to construct <A>g</A>.
<Example>
<#Include SYSTEM "../examples/include/projgroups_underlyingmatrix.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="MatrixOfCorrelation" Arg="g"/>
<Description>
<A>g</A> is a correlation of a projective space.
This function returns the matrix that was used to construct <A>g</A>.
<Example>
<#Include SYSTEM "../examples/include/projgroups_underlyingmatrix2.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="BaseField" Arg="g"/>
<Returns>a field</Returns>
<Description>
<A>g</A> is a projectivity, collineation or correlation of a projective space.
This function returns the base field that was used to construct <A>g</A>.
<Example>
<#Include SYSTEM "../examples/include/projgroups_basefield.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="FieldAutomorphism" Arg="g"/>
<Description>
<A>g</A> is a collineation of a projective space or a correlation of a
projective space. This function returns the companion field automorphism
which defines <A>g</A>. Note that in the following example,
you may want to execute it several times to see the
different possible results generated by the random choice
of projective semilinear map here.
<Example>
<#Include SYSTEM "../examples/include/projgroups_fieldautomorphism.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="ProjectiveSpaceIsomorphism" Arg="g"/>
<Description>
<A>g</A> is a correlation of a projective space. This function returns the
companion isomorphism of the projective space which defines <A>g</A>. 
<Example>
<#Include SYSTEM "../examples/include/projgroups_psisomorphism.include"> 
</Example>
</Description>
</ManSection>


<ManSection>
<Oper Name="Order" Arg="g"/>
<Description>
<A>g</A> is a projectivity, collineation or correlation of a projective space.
This function returns the order of <A>g</A>.
<Example>
<#Include SYSTEM "../examples/include/projgroups_order.include"> 
</Example>
</Description>
</ManSection>


</Section>

<Section>
<Heading>The groups &pgammalinline;, &pglinline;, and &pslinline; in <Package>FinInG</Package>
</Heading>

As mentioned before the commands <F>PGL</F> (and <F>ProjectiveGeneralLinearGroup</F>) 
and <F>PSL</F> (and <F>ProjectiveSpecialLinearGroup</F>) are already available in GAP 
and return a (permutation) group isomorphic to the required group.

In <Package>FinInG</Package>, different categories are created for these groups.

<ManSection>
<Oper Name="ProjectivityGroup" Arg="geom"/>
<Oper Name="HomographyGroup" Arg="geom"/>
<Returns>the group of projectivities of geom</Returns>
<Description>
Let <A>geom</A> be the projective space &pgnq; This operation (and its synonym) returns the
group of projectivities &pglnplus1q; of the projective space &pgnq;. Note that although a projectivity is a collineation with the identity as associated field isomorphism, this group belongs to the category <C>IsProjectiveGroupWithFrob</C>, and its elements belong to <C>IsProjGrpElWithFrob</C>.
<Example>
<#Include SYSTEM "../examples/include/projgroups_projectivitygroup.include"> 
</Example>
</Description>
</ManSection>


<ManSection>
<Oper Name="CollineationGroup" Arg="geom"/>
<Returns>the group of collineations of geom</Returns>
<Description>
Let <A>geom</A> be the projective space &pgnq;.
This operation returns the group of collineations &pgammalnplus1q; of the projective space &pgnq;. If
&gfq; has no non-trivial field automorphisms, i.e. when <M>q</M> is prime,
the group &pglnplus1q; is the full collineation group and will be returned.
<Example>
<#Include SYSTEM "../examples/include/projgroups_collineationgroup.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="SpecialProjectivityGroup" Arg="geom"/>
<Oper Name="SpecialHomographyGroup" Arg="geom"/>
<Returns>the group of special projectivities of geom</Returns>
<Description>
Let <A>geom</A> be the projective space &pgnq; This operation (and its synonym) returns the
group of special projectivities &pslnplus1q; of the projective space &pgnq;.
<Example>
<#Include SYSTEM "../examples/include/projgroups_specialprojectivitygroup.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Filt Name="IsProjectivityGroup" Type="Property"/>
<Description>
<C>IsProjectivityGroup</C> is a property, which subgroups of
a the <C>CollineationGroup</C> or a <C>CorrelationCollineationGroup</C> of
a projective space might have. It checks whether the generators are projectivities. Of course <C>ProjectivityGroup</C> has
this property.
</Description>
</ManSection>

<ManSection>
<Filt Name="IsCollineationGroup" Type="Property"/>
<Description>
<C>IsCollineationGroup</C> is a property, which subgroups of
a the <C>CorrelationCollineationGroup</C> of a projective space might have.
It checks whether the generators are collineations. Of course <C>ProjectivityGroup</C> and <C>CollineationGroup</C> have
this property.
</Description>
</ManSection>

<ManSection>
<Oper Name="CorrelationCollineationGroup" Arg="geom"/>
<Returns>the group of correlations and collineations of geom</Returns>
<Description>
Let <A>geom</A> be the projective space &pgnq;.
This operation returns the correlations and collineations of &pgnq;.
<Example>
<#Include SYSTEM "../examples/include/projgroups_correlationcollineationgroup.include">
</Example>
</Description>
</ManSection>


</Section>

<Section>
<Heading>Basic operations for projective groups</Heading>

<ManSection>
<Oper Name="BaseField" Arg="g"/>
<Returns>a field</Returns>
<Description><A>g</A> must be a projective group. This function finds
the base field of the vector space on which the group acts.
</Description>
</ManSection>

<ManSection>
<Attr Name="Dimension" Arg="g"/>
<Returns>a number</Returns>
<Description><A>g</A> must be a projective group. This function finds
the dimension of the vector space on which the group acts.
</Description>
</ManSection>
</Section>


<Section>
<Heading>Natural embedding of a collineation group in a correlation/collineation group</Heading>
In <Package>FinInG</Package> a collineation group is not constructed as a subgroup of a correlation group.
However, collineations can be multiplied with correlations (if they both belong mathematically to the same 
correlation group.

<Example>
<#Include SYSTEM "../examples/include/projgroups_mult.include"> 
</Example>

<ManSection>
<Func Name="Embedding" Arg="coll, corr"/>
<Description>
Let <A>coll</A> be a the full collineation group of a projective space, and <A>corr</A> its full correlation
group. <Package>FinInG</Package> provides a method for this operation <F>Embedding</F>, returning the natural embedding
from <A>coll</A> into <A>corr</A>. Remark that only an embedding of a collineation group into a correlation group with exactly the
same underlying projective space is possible.
<Example>
<#Include SYSTEM "../examples/include/projgroups_embedding.include"> 
</Example>
</Description>
</ManSection>

</Section>
<Section>
<Heading>Basic action of projective group elements</Heading>
<ManSection>
<Oper Name="\^" Arg="x,g"/>
<Returns>a subspace of a projective space</Returns>
<Description>
This is an operation which returns the image of <A>x</A>, a subspace of a
projective space, under <A>g</A>, an element of the projective group, the
collineation group, or the correlation group.
</Description>
</ManSection>
</Section>

<Section Label="projgroup_actions">
<Heading>Projective group actions</Heading>
In this section we give more detailed about the actions
that are used in <Package>FinInG</Package> for projective groups.
Consider the projective space &pgnq;. As described in Chapter <Ref
Chap="projective_spaces"/>, a point of &pgnq; is represented by a row
vector and a <M>k</M>-dimensional subspace of &pgnq; is represented by a
<M>(k+1) \times (n+1)</M> matrix.<P/>
Consider a point <M>p</M> with row vector <Alt Not="HTML"><M>(x_0, x_1, \ldots,
x_n)</M></Alt><Alt Only="HTML MathJax"><M>(x_0, x_1, \ldots, x_n)</M></Alt><Alt
Only="HTML noMathJax">(x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)</Alt>,
and a collineation or correlation <M>\phi</M> with underlying matrix <M>A</M> and
field automorphism <M>\theta</M>. Define the row
vector <Alt Not="HTML"><M>(y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta}</M></Alt>
<Alt Only="HTML MathJax"><M>(y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta}</M></Alt>
<Alt Only="HTML noMathJax">(y&lt;sub>0&lt;/sub>,y&lt;sub>1&lt;/sub>,...,y&lt;sub>n&lt;/sub>) =
((x&lt;sub>0&lt;/sub>,x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>)A)&lt;sup>&#952;&lt;/sup>
</Alt>. When <M>\phi</M> is a collineation, <Alt Not="HTML"><M>p^{\phi}</M></Alt>
<Alt Only="HTML MathJax"><M>p^{\phi}</M></Alt><Alt Only="HTML noMathJax">p&lt;sup>&#966;&lt;/sup></Alt>
is the point with underlying row vector <Alt Not="HTML"><M>(y_0,y_1,\ldots,y_n)</M></Alt>
<Alt Only="HTML MathJax"><M>(y_0,y_1,\ldots,y_n)</M></Alt>
<Alt Only="HTML noMathJax">(y&lt;sub>0&lt;/sub>,y&lt;sub>1&lt;/sub>,...,y&lt;sub>n&lt;/sub>)</Alt>.
When <M>\phi</M> is a correlation, <Alt Not="HTML"><M>p^\phi</M></Alt><Alt Only="HTML MathJax"><M>p^\phi</M></Alt>
<Alt Only="HTML noMathJax">p&lt;sup>&#966;&lt;/sup></Alt> is a hyperplane of &pgnq; with equation
<Alt Not="HTML"><M>y_0X_0 + y_1X_1 + \ldots + y_nX_n</M></Alt><Alt Only="HTML MathJax"><M>y_0X_0 + y_1X_1 + \ldots + y_nX_n</M></Alt>
<Alt Only="HTML noMathJax">y&lt;sub>0&lt;/sub>X&lt;sub>0&lt;/sub> + y&lt;sub>1&lt;/sub>X&lt;sub>1&lt;/sub> + ...
y&lt;sub>n&lt;/sub>X&lt;sub>n&lt;/sub> = 0</Alt>. The action of collineations or
correlations on points determines the action on subspaces of arbitrary
dimension completely.

<ManSection Label="proj:onprojsubspaces">
<Func Name="OnProjSubspaces" Arg="subspace, el"/>
<Returns>a subspace of a projective space</Returns>
<Description>
This is a global function that returns the action of an element <A>el</A> of the collineation group on a subspace <A>subspace</A> of a projective space.
<Par/><B>IMPORTANT:</B> This function should only be used for objects <A>el</A> in the category <C>IsProjGrpElWithFrob</C>!
This is because this function does not check whether <A>el</A> is a correlation or a collineation. So when <A>el</A> is a object in the category <C>IsProjGrpElWithFrobWithPSIsom</C>, and <A>el</A> is a correlation (i.e. the associated PSIsom is NOT the identity) then this action will not give the image of the <A>subspace</A> under the correlation <A>el</A>. For the action of an object <A>el</A> in the category <C>IsProjGrpElWithFrobWithPSIsom</C>, the action <Ref Func="OnProjSubspacesExtended"/> should be used. 
<Example>
<#Include SYSTEM "../examples/include/projgroups_onprojsubspaces.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Func Name="ActionOnAllProjPoints" Arg="g"/>
<Description>
<A>g</A> must be a projective group. This function returns the action
homomorphism of <A>g</A> acting on its projective points. This function
is used by NiceMonomorphism when the number of points is small enough
for the action to be easy to calculate.
</Description>
</ManSection>

<ManSection Label="proj:onprojsubspacesextended">
<Func Name="OnProjSubspacesExtended" Arg="subspace, el"/>
<Returns>a subspace of a projective space</Returns>
<Description>
This should be used for the action of elements in the category <C>IsProjGrpElWithFrobWithPSIsom</C> where
<A>subspace</A> is a subspace of a projective or polar space and <A>el</A> is
an element of the correlation group of the ambient geometry of <A>subspace</A>.
This function returns the image of <A>subspace</A> under <A>el</A>, which is a
subspace of the same dimension as <A>subspace</A> if <A>el</A> is a collineation and an element of codimension equal to the dimension of <A>subspace</A> if <A>el</A> is a correlation.
<Example>
<#Include SYSTEM "../examples/include/projgroups_onprojsubspacesextended.include"> 
</Example>
</Description>
</ManSection>

</Section>

<Section>
<Heading>Special subgroups of the projectivity group</Heading>
A <E>transvection</E> of the vector space <M>V=V(n+1,F)</M> is a linear map
<M>\tau</M> from <M>V</M> to itself with matrix <M>M</M> such that the rank
of <M>M-I</M> equals 1 (where <M>I</M> denotes the <M>(n+1) \times (n+1)</M> identity
matrix), and <Alt Not="HTML"><M>(M-I)^2=0</M></Alt><Alt Only="HTML MathJax"><M>(M-I)^2=0</M></Alt>
<Alt Only="HTML noMathJax">(M-I)&lt;sup>2&lt;/sup>=0</Alt>. Different equivalent definitions
are found in the literature, here we followed <Cite Key="Cameron2"/>. Note that
what follows is true for arbitrary fields <M>F</M>, but we will restrict to
finite fields. Choosing a basis <Alt Not="HTML"><M>e_1,\ldots,e_n,e_{n+1}</M></Alt>
<Alt Only="HTML MathJax"><M>e_1,\ldots,e_n,e_{n+1}</M></Alt>
<Alt Only="HTML noMathJax">e&lt;sub>1&lt;/sub>,...,e&lt;sub>n&lt;/sub>,e&lt;sub>n+1&lt;/sub></Alt>
such that <Alt Not="HTML"><M>e_1,\ldots,e_{n}</M></Alt><Alt Only="HTML MathJax"><M>e_1,\ldots,e_{n}</M></Alt>
<Alt Only="HTML noMathJax">e&lt;sub>1&lt;/sub>,...,e&lt;sub>n&lt;/sub></Alt> generates
the kernel of <M>M-I</M>, it follows that <M>M</M> equals
<Alt Only="HTML MathJax"><Display>\left( \begin{array}{ccccc}
    1 &amp; 0 &amp; \ldots &amp; 0 &amp; 0 \\
    0 &amp; 1 &amp; \ldots &amp; 0 &amp; 0 \\
    \vdots &amp; \vdots &amp; \ddots &amp; \vdots &amp; \vdots \\
    0 &amp; 0 &amp; \ldots &amp; 1 &amp; 0 \\
    x_1 &amp; x_2 &amp; \ldots &amp; x_{n-1} &amp; 1 \\
    \end{array} \right).</Display></Alt>
<!--<Alt Only="Text"><M>1  0  \ldots  0  0 </M><P/> <!-- I would like to have one newline here, which seems impossible-->
<!--    <M>0  1  \ldots  0  0</M>
    <M>\vdots  \vdots  \ddots  \vdots  \vdots</M>
    <M>0  0  \ldots  1  0</M>
    <M>x_1  x_2  \ldots  x_{n-1}  1</M></Alt>-->
<Alt Only="LaTeX"><Display>\left( \begin{array}{ccccc}
1 &amp; 0 &amp; \ldots &amp; 0 &amp; 0 \\ 
0 &amp; 1 &amp; \ldots &amp; 0 &amp; 0 \\ 
\vdots &amp; \vdots &amp; \ddots &amp; \vdots &amp; \vdots \\
0 &amp; 0 &amp; \ldots &amp; 1 &amp; 0 \\ 
x_1 &amp; x_2 &amp; \ldots &amp; x_{n-1} &amp; 1 \\ 
\end{array} \right).</Display>
</Alt>
<Alt Only="HTML noMathJax">
&lt;table style="color:#000">&lt;tr>
&lt;td>&lt;table border=0 cellpadding=0 cellspacing=0px style="border-left:1px solid #000; border-right:1px solid #000; color:#000">&lt;tr>
&lt;td style ="border-top:1px solid #000; border-bottom:1px solid #000;">&nbsp;&lt;/td>&lt;td>&lt;table border=0 cellpadding=0 cellspacing=0 style="color:#000;">
&lt;tr>
&lt;td align="center" valign="center" width=30>1&lt;/td>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;td align="center" valign="center" width=30>...&lt;/td>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;td align="center" valign="center" width=30>1&lt;/td>
&lt;td align="center" valign="center" width=30>...&lt;/td>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="center" valign="center" width=30>:&lt;/td>
&lt;td align="center" valign="center" width=30>:&lt;/td>
&lt;td align="center" valign="center" width=30>&lt;sup>&lt;big>&#183;&lt;/big>&lt;/sup>&#183;&lt;sub>&lt;big>&#183;&lt;/big>&lt;/sub>&lt;/td>
&lt;td align="center" valign="center" width=30>:&lt;/td>
&lt;td align="center" valign="center" width=30>:&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;td align="center" valign="center" width=30>...&lt;/td>
&lt;td align="center" valign="center" width=30>1&lt;/td>
&lt;td align="center" valign="center" width=30>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="center" valign="center" width=30>x&lt;sub>1&lt;/sub>&lt;/td>
&lt;td align="center" valign="center" width=30>x&lt;sub>2&lt;/sub>&lt;/td>
&lt;td align="center" valign="center" width=30>...&lt;/td>
&lt;td align="center" valign="center" width=30>x&lt;sub>n&lt;/sub>&lt;/td>
&lt;td align="center" valign="center" width=30>1&lt;/td>
&lt;/tr>
&lt;/table>&lt;/td>&lt;td style ="border-top:1px solid #000; border-bottom:1px solid #000;">&nbsp;&lt;/td>&lt;/tr>&lt;/table>&lt;/td>
&lt;/tr>&lt;/table>
</Alt>
<Alt Only="Text"><Display>matrix display not possible in text mode.</Display></Alt>
<!--The vector hyperplanes that are fixed by <Alt Only="HTML">&#964;</Alt><Alt Not="HTML"><M>\tau</M></Alt> are the 
hyperplanes containing the vector <Alt Only="HTML">v=(x&lt;sub>1&lt;/sub>,...,x&lt;sub>n&lt;/sub>,0)</Alt>
<Alt Not="HTML"><M>v=(x_1,\ldots,x_n,0)</M></Alt>, a vector contained in 
<Alt Only="HTML">Ker(&#964;)</Alt><Alt Not="HTML"><M>Ker(\tau)</M></Alt>.
It is easily seen now that the group of transvections that fix 
all vectors of a given vector hyperplane, form an abelian group, of order <Alt Only="HTML">q&lt;sup>2&lt;/sup></Alt>
<Alt Not="HTML"><M>q^n</M></Alt> for <M>F=GF(q)</M>, and that each transvection has order <M>p</M>, the characteristic of <M>GF(q)</M>.
Choosing <Alt Only="HTML">v=e&lt;sub>1&lt;/sub></Alt><Alt Not="HTML"><M>v=e_1</M></Alt> implies 
<Alt Only="HTML">x&lt;sub>2&lt;/sub>=...=x&lt;sub>n&lt;/sub>=0</Alt>
<Alt Not="HTML"><M>x_2=\ldots=x_n=0)</M></Alt> and <Alt Only="HTML">x&lt;sub>1&lt;/sub>=1</Alt>
<Alt Not="HTML"><M>x_1=1</M></Alt>. 
-->
It is also a well known fact that all transvections generate the group &slnplus1q;.

A transvection gives rise to a projectivity of &pgnq;, we call such an element an <E>elation</E>,
and it is a projectivity <M>\phi</M> fixing a hyperplane <M>H</M> pointwise,
and such that there exists exactly one point <Alt Not="HTML"><M>p \in H</M></Alt>
<Alt Only="HTML MathJax"><M>p \in H</M></Alt><Alt Only="HTML noMathJax">p &#8712; H</Alt> such
that all hyperplanes through <M>p</M> are stabilized. The hyperplane <M>H</M> is called the <E>axis</E> of 
<M>\phi</M>, and the point <M>p</M> is called the <E>centre</E> of
<M>\phi</M>. As a transvection is an element of &slnplus1q;, an elation is an element of &pslnplus1q;.
An elation is completely determined by its axis and the image of one point (not contained
in the axis). The group of elations with a given axis and centre, is isomorphic with
the additive group of &gfq;. Finally, the group
of all elations with a given axis <M>H</M>, acts regularly on the points of
<Alt Only="Text"><M>PG(n,q) \setminus H</M></Alt><Alt Only="LaTeX"><M>\mathrm{PG}(n,q) \setminus H</M></Alt>
<Alt Only="HTML MathJax"><M>\mathrm{PG}(n,q) \setminus H</M></Alt>
<Alt Only="HTML noMathJax">PG(n,q) &#92; H</Alt>, and is isomorphic with the additive
group of the vector space <M>V(n+1,q)</M>.

<ManSection>
<Oper Name="ElationOfProjectiveSpace" Arg="sub,point1,point2"/>
<Returns>the unique elation with axis <A>sub</A> mapping <A>point1</A> on <A>point2</A></Returns>
<Description>
It is checked whether the two points do not belong to <A>sub</A>. If <A>point1</A> equals <A>point2</A>, the
identity mapping is returned.
<Example>
<#Include SYSTEM "../examples/include/projgroups_elation1.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="ProjectiveElationGroup" Arg="axis,centre"/>
<Oper Name="ProjectiveElationGroup" Arg="axis"/>
<Returns>A group of elations</Returns>
<Description>
The first version returns the group of elations with with given axis <A>axis</A> and centre <A>centre</A>. 
It is checked whether <A>centre</A> belongs to <A>axis</A>. The second version returns the group of elations 
with given axis <A>axis</A>. 
<Example>
<#Include SYSTEM "../examples/include/projgroups_elation2.include"> 
</Example>
</Description>
</ManSection>

A <E>homology</E> of the projective space &pgnq; is a collineation fixing a hyperplane <M>H</M> pointwise
and fixing one more point <Alt Only="HTML">p &#8713; H</Alt><Alt Not="HTML"><M>p \not \in H</M></Alt>. It is easily seen
that after a suitable choice of a basis for the space, the matrix of a homology is a diagonal matrix with all its diagonal entries
except one equal to 1. We call the hyperplane the <E>axis</E> and the point the <E>centre</E> of the homology. Homologies with a 
common axis and centre are a group isomorphic to the multiplicative group of the field &gfq;.

<ManSection>
<Oper Name="HomologyOfProjectiveSpace" Arg="sub,centre,point1,point2"/>
<Returns>the unique homology with axis <A>sub</A> and centre <A>centre</A> that maps <A>point1</A> on <A>point2</A></Returns>
<Description>
It is checked whether the three points do not belong to <A>sub</A> and whether they are collinear. If <A>point1</A> equals <A>point2</A>, the
identity mapping is returned.
<Example>
<#Include SYSTEM "../examples/include/projgroups_homology1.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="ProjectiveHomologyGroup" Arg="axis,centre"/>
<Returns>the group of homologies with with given axis <A>axis</A> and centre <A>centre</A>.</Returns>
<Description>
It is checked whether <A>centre</A> does not belong to <A>axis</A>. 
<Example>
<#Include SYSTEM "../examples/include/projgroups_homology2.include"> 
</Example>
</Description>
</ManSection>
</Section>


<Section Label="nice_mono">
<Heading>Nice Monomorphisms</Heading>
A <E>nice monomorphism</E> of a group <M>G</M> is roughly just a permutation representation of 
<M>G</M> on a suitable action domain. An easy example is the permutation action of the full collineation 
group of a projective space on its points. <Package>FinInG</Package> provides (automatic) functionality to
compute nice monomorphisms. Typically, for a geometry <M>S</M> with <M>G</M> a (subgroup of the) collineation
group of <M>S</M>, a nice monomorphism for <M>G</M> is a homomorphism from <M>G</M> to the permutation action
of <M>S</M> on a collection of elements of <M>S</M>. Thus, to obtain such a homomorphism, one has to enumerate 
the collection of elements. As nice monomorphisms for projective semilinear groups are often computed as a
byproduct of some operations, suddenly, these operations get time consuming (when executed for the first time).
In general, it is decided automatically whether a nice monomorphism is computed or not. A typical example is the following.

<Example>
<#Include SYSTEM "../examples/include/projgroups_random.include">
</Example>

<ManSection>
<Oper Name="NiceMonomorphism" Arg="g"/>
<Returns>an action, i.e. a group homomorphism</Returns>
<Description>
<A>g</A> is a projective semilinear group. If <A>g</A> was constructed as a group stabilizing a geometry, 
the action of <A>g</A> on the points of the geometry is returned. 
<Example>
<#Include SYSTEM "../examples/include/projgroups_nicem.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="NiceObject" Arg="g"/>
<Returns>a permutation group</Returns>
<Description>
<A>g</A> is a projective semilinear group. If <A>g</A> was constructed as a group stabilizing a geometry, 
the permutation representation of <A>g</A> acting on the points of the geometry is returned. This is actually
equivalent with <F>Image(NiceMonomorphism(g))</F>.
<Example>
<#Include SYSTEM "../examples/include/projgroups_niceo.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Var Name="FINING"/>
<Description>
The global variable <C>FINING</C> stores a record with two components, <C>FINING.Fast</C> and <C>FINING.LimitForCanComputeActionOnPoints</C>
By default, <C>FINING.Fast</C> is set to <K>true</K>. Setting <C>FINING.Fast</C> to <K>false</K> causes the use of the generic
<Package>GAP</Package> function <F>ActionHomomorphism</F> instead of the functions <F>NiceMonomorphismByDomain</F> and <F>NiceMonomorphismByOrbit</F>, which
both rely on the packages <Package>GenSS</Package> and <Package>Orb</Package>.
</Description>
</ManSection>

<ManSection>
<Oper Name="CanComputeActionOnPoints" Arg="g"/>
<Returns>true or false</Returns>
<Description><A>g</A> must be a projective group. This function returns
true if GAP can feasibly compute the action of <A>g</A> on the
points of the projective space on which it acts. This function can be used
(and is, by other parts of FinInG) to determine whether it is worth
trying to compute the action.

This function actually checks if the number of points of the corresponding
projective space is less than the constant
<C>FINING.LimitForCanComputeActionOnPoints</C>, which is by default set to <M>1000000</M>.
The next example requires about 500M of memory.
<Example>
<#Include SYSTEM "../examples/include/projgroups_cancompute.include"> 
</Example>
</Description>
</ManSection>

<ManSection>
<Oper Name="NiceMonomorphismByDomain" Arg="g, dom, op "/>
<Returns>an action, i.e. a group homomorphism</Returns>
<Description>
This operation is not intended for the user. It relies on <Package>GenSS</Package> and
<Package>Orb</Package>. The argument <A>g</A> is a projective group (in the category <C>IsProjectiveGroupWithFrob</C>)
with a set <C>Size</C> attribute, <A>dom</A> is an orbit of <A>g</A>, and <A>op</A> an operation suitable for <A>x</A> and
<A>g</A>.
</Description>
</ManSection>


<ManSection>
    <Oper Name="NiceMonomorphismByOrbit" Arg="g, dom, op, orblen"/>
    <Returns>an action, i.e. a group homomorphism</Returns>
    <Description>
        This operation is not intended for the user. It relies on <Package>GenSS</Package> and
        <Package>Orb</Package>. The argument <A>g</A> is a projective group (in the category <C>IsProjectiveGroupWithFrob</C>)
        with a set <C>Size</C> attribute, <A>dom</A> is an orbit of <A>g</A>, <A>op</A> an operation suitable for <A>x</A> and
        <A>g</A>, and <A>orblen</A> is the length of the final orbit.
    </Description>
</ManSection>

</Section>


</Chapter>
