GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
% This file was created automatically from iso.msk.1% DO NOT EDIT!2\Chapter{Determining the Isomorphism Class of Projective Planes}34The methods in this chapter do not deal with relative difference5sets. Instead, they help studying projective planes. So if you have a6relative difference set, you must first generate the projective plane7it defines (if it does).89Projective planes are always assumed to consist of positive integers10(as points) and sets of integers (as blocks). The incidence relation11is assumed to be the element relation. The blocks of a projective12plane must be *sets*.1314The following methods generate a record characterising the projective15plane. As most of the functions in this chapter need this data, the16record returned by `ElationPrecalc' or `ElationPrecalcSmall' is the17recommended representation of projective planes.1819\>ElationPrecalc( <blocks> ) F20\>ElationPrecalcSmall( <blocks> ) F2122Given the blocks <blocks> of a projective plane,23`ElationPrecalc( <blocks> )' returns a record conatining24\beginlist25\item{.points} the points of the projective plane (immutable)26\item{.blocks} the blocks as passed to the function (immutable)27\item{.jpoint} a matrix with $ij$-th entry the point meeting the28$i$-th and the $j$-th block.29\item{.jblock} a matrix with $ij$-th entry the position of the block30connecting the point $i$ to the point $j$ in <blocks>.31\endlist3233`ElationPrecalcSmall( <blocks> )' returns a record which34does only contain <.points>, <.blocks> and <.jblock>. Hence the name.35363738In the following sections, some of the functions have two versions.39The versions which have a `Small' appended to it's name do not depend40on the data generated by `ElationPrecalc', but rather on the data41structure provided by `ElationPrecalcSmall'. The `Small' versions are42generally much slower than the other ones.4344\>DualPlane( <blocks> ) O4546For a projective plane given by <blocks>, `DualPlane( <blocks> )' returns47a record containing a set of blocks defining the dual plane and a List48<image> containing the same blocks such that <image[p]> is the image of the49point <p> under duality.50It is not tested, if the design defined by <blocks> is actually51a projective plane.52535455\>ProjectiveClosureOfPointSet( <points>, <maxsize>, <data> ) O5657Let $P$ be a projective plane given by the record <data> as returned by58`ElationPrecalcSmall'. Let <points> be a set of points (integers). Then59`ProjectiveClosureOfPointSet' returns the projective colsure of <points>60in $P$ (the smallest subplane of $P$ containing the points <points>).61The closure is returned as a list of points.62If $<maxsize>\neq 0$, calculations are stopped if the closure is known to63have at least <maxsize> points and <data.points> is returned.64Observe that this is a ``small'' function, in the sense that it does not65need the data from `ElationPrecalc' but merely the data generated by66`ElationPrecalcSmall'.67686970%%%%%%%%%%%%%%%%%%%%71\Section{Isomorphisms and Collineations}7273Isomorphisms of projective planes are mappings which take points to74points and blocks to blocks and respect incidence. A *collineation* of75a projective plane $P$ is a collineation from $P$ to $P$ (an76automorphism).7778As projective planes are assumed to live on the integers, isomorphisms79of projective planes are represented by permutations. To test if a80permutation on points is actually an isomorphism of projective planes,81the following methods can be used.8283\>IsIsomorphismOfProjectivePlanes( <perm>, <blocks1>, <blocks2> ) O8485Let <blocks1>, <blocks2> be two sets of blocks of projective planes86on the same points.87`IsIsomorphismOfProjectivePlanes( <perm>,<blocks1>,<blocks2> )' test if the permutation88<perm> on points defines an isomorphism of the projective planes defined89by <blocks1> and <blocks2>.909192\>IsCollineationOfProjectivePlane( <perm>, <blocks> ) O93\>IsCollineationOfProjectivePlane( <perm>, <data> ) O9495Let <blocks> be the blocks of a projective plane and <perm> a permutation96on the points of this plane. `IsCollineationOfProjectivePlane(<perm>,<blocks>)' returns97`true', if <perm> induces a collineation of the projective plane.9899If <data> as returned by `ElationPrecalc' is given instead of <blocks>,100the calculation should be faster.101102103\>IsomorphismProjPlanesByGenerators( <gens1>, <data1>, <gens2>, <data2> ) O104\>IsomorphismProjPlanesByGeneratorsNC( <gens1>, <data1>, <gens2>, <data2> ) O105106Let <gens1> be a list of points generating the projective plane defined107by <data1> and <gens2> a list of generating points for <data2>. Then a108permutation is returned representing a mapping from the <data1.points>109to <data2.points> and mapping the list <gens1> to the list <gens2>.110If there is no such mapping which defines an isomorphism of projective111planes, `fail' is returned.112Note that this is a ``small'' function, in the sense that <data1> and113<data2> are as returned by `ElationPrecalcSmall' rather than by114`ElationPrecalc'.115116`IsomorphismProjPlanesByGeneratorsNC' does *not* checked whether <gens1>117and <gens2> really generate the planes given by <data1> and <data2>.118119120121\begintt122# Assume that <blocks> contains a list of lines of a projective plane123# of order 16124gap> data:=ElationPrecalc(blocks);;125gap> Size(ProjectiveClosureOfPointSet([1,2,3,5],16,data));1264127gap> Size(ProjectiveClosureOfPointSet([1,2,60,268],16,data));time;1282731290130gap> Size(ProjectiveClosureOfPointSet([1,2,60,268],0,data));time;131273132184133gap> IsomorphismProjPlanesByGenerators([1,2,3,5],data,[1,2,60,268],data);134fail135gap> IsomorphismProjPlanesByGenerators([1,2,60,268],data,[1,2,60,268],data);136()137gap> IsomorphismProjPlanesByGenerators([1,2,60,268],data,[1,3,146,268],data);138(2,3)(5,10)(6,12)(7,9)(8,11)(13,16)(17,249)(18,251)(19,250)( [...] )139gap> Order(last);1402141\endtt142143144%%%%%%%%%%%%%%%%%%%%%%%%%%%145\Section{Central Collineations}146147Let $\phi$ be a collineation of a projective plane which fixes one148point block-wise (the so-called *centre*) and one block point-wise149(the so-called *axis*). If the centre is contained in the axis, $\phi$150is called *elation*. Otherwise, $\phi$ is called *homology*. The group151of elations with given axis is called *translation group* of the plane152(relative to the chosen axis). A projective plane with transitive153translation group is called *translation plane*. Here transitivity is154on the points outside the axis.155156\>ElationsByPairs( <centre>, <axis>, <pairs>, <data> ) O157\>ElationsByPairs( <centre>, <axis>, <pairs>, <blocks> ) O158\>ElationsByPairsSmall( <centre>, <axis>, <pairs>, <data> ) O159160Let <centre> be a point and <axis> a block of a projective plane defined161by <blocks> (or by <data> as returned by `ElationPrecalc').162The list <pairs> must contain pairs of points outside <axis>.163`ElationsByPairs' returns a collineation fixing <axis> pointwise and164<centre> blockwise (an elation) such that for each pair <p> of <pairs>165<p[1]> is mapped on <p[2]>. If no such elation exists, `fail' is returned.166167`ElationsByPairsSmall' uses <data> as returned by `ElationPrecalcSmall'168169170\>AllElationsCentAx( <centre>, <axis>, <data>[, "generators"] ) O171\>AllElationsCentAx( <centre>, <axis>, <blocks>[, "generators"] ) O172\>AllElationsCentAxSmall( <centre>, <axis>, <data>[, "generators"] ) O173174Let <centre> be a point and <axis> a block of a projective plane defined175by <blocks> (or by <data> as returned by `ElationPrecalc').176`AllElationsCentAx' returns a list of all non-trivial elations with centre177<centre> and axis <axis>.178If ``generators'' is set, a list of generators of the translation179group is returned.180181182\>AllElationsAx( <axis>, <data>[, "generators"] ) O183\>AllElationsAx( <axis>, <blocks> ) O184\>AllElationsAxSmall( <axis>, <data>[, "generators"] ) O185186Let <axis> be a block of a projective plane defined187by <blocks> (or by <data> as returned by `ElationPrecalc').188`AllElationsAx' returns a list of all non-trivial elations with axis189<axis>.190191\>IsTranslationPlane( <infline>, <planedata> ) O192\>IsTranslationPlaneSmall( <infline>, <planedata> ) O193194If the group of elations with axis <infline> is (sharply) transitive on195the affine points (the points outside <infline>), `IsTranslationPlane'196returns `true', otherwise it returns `false'. This is faster than197calculating the full translation group if the projective plane is not a198translation plane.199200201\>HomologyByPairSmall( <centre>, <axis>, <pair>, <data> ) O202203`HomologyByPairSmall' returns the homology defined by the pair204<pair> fixing <centre> blockwise and <axis> pointwise.205The returned permutation fixes <axis> pointwise and <centre> linewise and206takes <pair[1]> to <pair[2]>.207208209\>GroupOfHomologiesSmall( <centre>, <axis>, <data> ) O210211returns the group of homologies with centre <centre> and axis212<axis>.213214215216%%%%%%%%%%%%%%%%%%%%217\Section{Collineations on Baer Subplanes}218219Let $P$ be a projective plane of order $n^2$. A subplane $B$ of order220$n$ of $P$ is called *Baer subplane*. Baer suplanes are exactly the221maximal subplanes of $P$.222223\>InducedCollineation( <baerdata>, <baercoll>, <point>, <image>, <planedata>, <liftingperm> ) O224225If a projective plane contains a Baer subplane, collineations of the226subplane may be lifted to the full plane. Here <baercoll> is a collineation227of the subplane given by <baerdata> (as returned by `ElationPrecalc'.228Be careful, as the enumeration for the subplane is not the same as for the229whole plane). <liftingperm> is a permutation on the points of the full pane230which converts the enumeration of the subplane to that of the full plane.231This means that the image of <baerdata.points> under <liftingperm> is a232subset of <planedata.points>. Namely the one representing the Baer plane233in the enumeration used for the whole plane.234<point> and <image> are points outside the Baer plane.235236`InducedCollineation' returns a collineation of the full plane (as a237permutation on <planedata.points>) which takes <point> to <image> and acts238on the Baer plane as <baercoll> does.239240Just to make this clear again, <baerdata> has points $[1,\dots,n^2+n+1]$241and <planedata> has points $[1,\dots,n^4+n^2+1]$. <baercoll> lives on242<baerdata.points> (and hence on $n^2+n+1$ points) and <point> and <image>243live on <planedata.points>. Anything can happen if you mix something up244here.245246247%%%%%%%%%%%%%%%%%%%%248\Section{Invariants for Projective Planes}249250The functions `NrFanoPlanesAtPoints', `pRank', `FingerprintAntiFlag'251and `FingerprintProjPlane' calculate invariants for finite projective252planes. For more details see \cite{RoederDiss} and253\cite{MoorhouseGraphs}. The values of some of these invariants are254available from the homepages of \cite{Moorhouse} and \cite{Royle} for255many planes.256257\>NrFanoPlanesAtPoints( <points>, <data> ) O258259For a projective plane defined by the blocks <data> as returned260by `ElationPrecalc', `NrFanoPlanesAtPoints(<points>,<data>)'261calculates the so-called Fano invariant. That is, for each point262in <points>, the number of subplanes of order 2 (so-called Fano planes)263containing this point is calculated.264The method returns a list of pairs of the form $[<point>,<number>]$265where <number> is the number of Fano sub-planes in <point>.266267\>NrFanoPlanesAtPointsSmall( <pointlist>, <data> ) O268269270Uses <data> as returned by `ElationPrecalcSmall'. Only use this, if you271want to do a quick experiment in a plane of *small* order and don't like272to generate a new set of data with `ElationPrecalc'. The difference273between `NrFanoPlanesAtPoints' and `NrFanoPlanesAtPointsSmall' is that274the ``small'' version does some operations for lists (like `Intersection')275whereas the ``large'' version does only read matrix entries. This makes276quite a difference as for a plane of order $n$, there are277${n+1 \choose 3}{n\choose 2}n$ quadrangles to be tested per point.278279280\>IncidenceMatrix( <points>, <blocks> ) O281\>IncidenceMatrix( <data> ) O282283returns a matrix <I>, where the columns are numbered by the blocks and284the rows are numbered by points. And <I[i][j]=1> if and only if285<points[i]> is incident (contained in) <blocks[j]>.286287288\>pRank( <blocklist>, <p> ) O289\>pRank( <data>, <p> ) O290291Let <I> be the incidence matrix of the projective plane given by the list292of blocks <blocklist> or the record <data> as returned by293`ElationPrecalc'. The rank of $I.I^t$ as a matrix over294$GF(p)$ is called <p>-rank of the projective plane. Here $I^t$ denotes295the transposed matrix.296297As `pRank' calls `IncidenceMatrix', the list <blocklist> has to be a list298of lists of integers.299300301\>FingerprintProjPlane( <blocks> ) O302\>FingerprintProjPlane( <data> ) O303304For each anti-flag $(p,l)$ of a projective plane of order $n$,305define an arbitrary but fixed enumeration of the lines through $p$ and306the points on $l$. Say $l_1,\dots,l_{n+1}$ and $p_1,\dots,p_{n+1}$307The incidence relation defines a canonical bijection between the $l_i$ and308the $p_i$ and hence a permutation on the indices $1,\dots,n+1$.309Let $\sigma_{(p,l)}$ be this permutation.310311Denote the points and lines of the plane by $q_1,\dots q_{n^2+n+1}$312and $e_1,\dots,e_{n^2+n+1}$.313Define the sign matrix as $A_{ij}=sgn(\sigma_{(q_i,e_j)})$ if $(q_i,e_j)$314is an anti-flag and $=0$ if it is a flag.315Then the fingerprint is defnied as the multiset of the entries of $|AA^t|$.316Here <data> is a record as returned by `ElationPrecalcSmall'.317318319\>FingerprintAntiFlag( <point>, <linenr>, <data> ) O320321Let $m_1,\dots,m_{n+1}$ be the lines containing <point> and322$E_1,\dots,E_{n+1}$ the points on the line given by <linenr> such that323$E_i$ is incident with $m_i$. Now label the points of $m_i$ as324$<point>=P_{i,1},\dots,P_{i,n+1}=E_i$ and the lines of $E_i$ as325$<line>=l_1,\dots,l_{i,n+1}=m_i$.326For $i\not = j$, each $P_{j,k}$ lies on exactly one line327$l_{i,k\sigma_{i,j}}$ containing $E_i$ for some permutation $\sigma_{i,j}$328329Define a matrix $A$, where $A_{i,j}$ is the sign of $\sigma_{i,j}$ if330$i\neq j$ and $A_{i,i}=0$ for all $i$.331The partial fingerprint is the multiset of entries of $|AA^t|$ where $A^t$332denotes the transposed matrix of $A$.333334this is a ``small'' function.335336337338%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%339%%340%E341%%342343344345