Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

612116 views
1
% This file was created automatically from iso.msk.
2
% DO NOT EDIT!
3
\Chapter{Determining the Isomorphism Class of Projective Planes}
4
5
The methods in this chapter do not deal with relative difference
6
sets. Instead, they help studying projective planes. So if you have a
7
relative difference set, you must first generate the projective plane
8
it defines (if it does).
9
10
Projective planes are always assumed to consist of positive integers
11
(as points) and sets of integers (as blocks). The incidence relation
12
is assumed to be the element relation. The blocks of a projective
13
plane must be *sets*.
14
15
The following methods generate a record characterising the projective
16
plane. As most of the functions in this chapter need this data, the
17
record returned by `ElationPrecalc' or `ElationPrecalcSmall' is the
18
recommended representation of projective planes.
19
20
\>ElationPrecalc( <blocks> ) F
21
\>ElationPrecalcSmall( <blocks> ) F
22
23
Given the blocks <blocks> of a projective plane,
24
`ElationPrecalc( <blocks> )' returns a record conatining
25
\beginlist
26
\item{.points} the points of the projective plane (immutable)
27
\item{.blocks} the blocks as passed to the function (immutable)
28
\item{.jpoint} a matrix with $ij$-th entry the point meeting the
29
$i$-th and the $j$-th block.
30
\item{.jblock} a matrix with $ij$-th entry the position of the block
31
connecting the point $i$ to the point $j$ in <blocks>.
32
\endlist
33
34
`ElationPrecalcSmall( <blocks> )' returns a record which
35
does only contain <.points>, <.blocks> and <.jblock>. Hence the name.
36
37
38
39
In the following sections, some of the functions have two versions.
40
The versions which have a `Small' appended to it's name do not depend
41
on the data generated by `ElationPrecalc', but rather on the data
42
structure provided by `ElationPrecalcSmall'. The `Small' versions are
43
generally much slower than the other ones.
44
45
\>DualPlane( <blocks> ) O
46
47
For a projective plane given by <blocks>, `DualPlane( <blocks> )' returns
48
a record containing a set of blocks defining the dual plane and a List
49
<image> containing the same blocks such that <image[p]> is the image of the
50
point <p> under duality.
51
It is not tested, if the design defined by <blocks> is actually
52
a projective plane.
53
54
55
56
\>ProjectiveClosureOfPointSet( <points>, <maxsize>, <data> ) O
57
58
Let $P$ be a projective plane given by the record <data> as returned by
59
`ElationPrecalcSmall'. Let <points> be a set of points (integers). Then
60
`ProjectiveClosureOfPointSet' returns the projective colsure of <points>
61
in $P$ (the smallest subplane of $P$ containing the points <points>).
62
The closure is returned as a list of points.
63
If $<maxsize>\neq 0$, calculations are stopped if the closure is known to
64
have at least <maxsize> points and <data.points> is returned.
65
Observe that this is a ``small'' function, in the sense that it does not
66
need the data from `ElationPrecalc' but merely the data generated by
67
`ElationPrecalcSmall'.
68
69
70
71
%%%%%%%%%%%%%%%%%%%%
72
\Section{Isomorphisms and Collineations}
73
74
Isomorphisms of projective planes are mappings which take points to
75
points and blocks to blocks and respect incidence. A *collineation* of
76
a projective plane $P$ is a collineation from $P$ to $P$ (an
77
automorphism).
78
79
As projective planes are assumed to live on the integers, isomorphisms
80
of projective planes are represented by permutations. To test if a
81
permutation on points is actually an isomorphism of projective planes,
82
the following methods can be used.
83
84
\>IsIsomorphismOfProjectivePlanes( <perm>, <blocks1>, <blocks2> ) O
85
86
Let <blocks1>, <blocks2> be two sets of blocks of projective planes
87
on the same points.
88
`IsIsomorphismOfProjectivePlanes( <perm>,<blocks1>,<blocks2> )' test if the permutation
89
<perm> on points defines an isomorphism of the projective planes defined
90
by <blocks1> and <blocks2>.
91
92
93
\>IsCollineationOfProjectivePlane( <perm>, <blocks> ) O
94
\>IsCollineationOfProjectivePlane( <perm>, <data> ) O
95
96
Let <blocks> be the blocks of a projective plane and <perm> a permutation
97
on the points of this plane. `IsCollineationOfProjectivePlane(<perm>,<blocks>)' returns
98
`true', if <perm> induces a collineation of the projective plane.
99
100
If <data> as returned by `ElationPrecalc' is given instead of <blocks>,
101
the calculation should be faster.
102
103
104
\>IsomorphismProjPlanesByGenerators( <gens1>, <data1>, <gens2>, <data2> ) O
105
\>IsomorphismProjPlanesByGeneratorsNC( <gens1>, <data1>, <gens2>, <data2> ) O
106
107
Let <gens1> be a list of points generating the projective plane defined
108
by <data1> and <gens2> a list of generating points for <data2>. Then a
109
permutation is returned representing a mapping from the <data1.points>
110
to <data2.points> and mapping the list <gens1> to the list <gens2>.
111
If there is no such mapping which defines an isomorphism of projective
112
planes, `fail' is returned.
113
Note that this is a ``small'' function, in the sense that <data1> and
114
<data2> are as returned by `ElationPrecalcSmall' rather than by
115
`ElationPrecalc'.
116
117
`IsomorphismProjPlanesByGeneratorsNC' does *not* checked whether <gens1>
118
and <gens2> really generate the planes given by <data1> and <data2>.
119
120
121
122
\begintt
123
# Assume that <blocks> contains a list of lines of a projective plane
124
# of order 16
125
gap> data:=ElationPrecalc(blocks);;
126
gap> Size(ProjectiveClosureOfPointSet([1,2,3,5],16,data));
127
4
128
gap> Size(ProjectiveClosureOfPointSet([1,2,60,268],16,data));time;
129
273
130
0
131
gap> Size(ProjectiveClosureOfPointSet([1,2,60,268],0,data));time;
132
273
133
184
134
gap> IsomorphismProjPlanesByGenerators([1,2,3,5],data,[1,2,60,268],data);
135
fail
136
gap> IsomorphismProjPlanesByGenerators([1,2,60,268],data,[1,2,60,268],data);
137
()
138
gap> IsomorphismProjPlanesByGenerators([1,2,60,268],data,[1,3,146,268],data);
139
(2,3)(5,10)(6,12)(7,9)(8,11)(13,16)(17,249)(18,251)(19,250)( [...] )
140
gap> Order(last);
141
2
142
\endtt
143
144
145
%%%%%%%%%%%%%%%%%%%%%%%%%%%
146
\Section{Central Collineations}
147
148
Let $\phi$ be a collineation of a projective plane which fixes one
149
point block-wise (the so-called *centre*) and one block point-wise
150
(the so-called *axis*). If the centre is contained in the axis, $\phi$
151
is called *elation*. Otherwise, $\phi$ is called *homology*. The group
152
of elations with given axis is called *translation group* of the plane
153
(relative to the chosen axis). A projective plane with transitive
154
translation group is called *translation plane*. Here transitivity is
155
on the points outside the axis.
156
157
\>ElationsByPairs( <centre>, <axis>, <pairs>, <data> ) O
158
\>ElationsByPairs( <centre>, <axis>, <pairs>, <blocks> ) O
159
\>ElationsByPairsSmall( <centre>, <axis>, <pairs>, <data> ) O
160
161
Let <centre> be a point and <axis> a block of a projective plane defined
162
by <blocks> (or by <data> as returned by `ElationPrecalc').
163
The list <pairs> must contain pairs of points outside <axis>.
164
`ElationsByPairs' returns a collineation fixing <axis> pointwise and
165
<centre> blockwise (an elation) such that for each pair <p> of <pairs>
166
<p[1]> is mapped on <p[2]>. If no such elation exists, `fail' is returned.
167
168
`ElationsByPairsSmall' uses <data> as returned by `ElationPrecalcSmall'
169
170
171
\>AllElationsCentAx( <centre>, <axis>, <data>[, "generators"] ) O
172
\>AllElationsCentAx( <centre>, <axis>, <blocks>[, "generators"] ) O
173
\>AllElationsCentAxSmall( <centre>, <axis>, <data>[, "generators"] ) O
174
175
Let <centre> be a point and <axis> a block of a projective plane defined
176
by <blocks> (or by <data> as returned by `ElationPrecalc').
177
`AllElationsCentAx' returns a list of all non-trivial elations with centre
178
<centre> and axis <axis>.
179
If ``generators'' is set, a list of generators of the translation
180
group is returned.
181
182
183
\>AllElationsAx( <axis>, <data>[, "generators"] ) O
184
\>AllElationsAx( <axis>, <blocks> ) O
185
\>AllElationsAxSmall( <axis>, <data>[, "generators"] ) O
186
187
Let <axis> be a block of a projective plane defined
188
by <blocks> (or by <data> as returned by `ElationPrecalc').
189
`AllElationsAx' returns a list of all non-trivial elations with axis
190
<axis>.
191
192
\>IsTranslationPlane( <infline>, <planedata> ) O
193
\>IsTranslationPlaneSmall( <infline>, <planedata> ) O
194
195
If the group of elations with axis <infline> is (sharply) transitive on
196
the affine points (the points outside <infline>), `IsTranslationPlane'
197
returns `true', otherwise it returns `false'. This is faster than
198
calculating the full translation group if the projective plane is not a
199
translation plane.
200
201
202
\>HomologyByPairSmall( <centre>, <axis>, <pair>, <data> ) O
203
204
`HomologyByPairSmall' returns the homology defined by the pair
205
<pair> fixing <centre> blockwise and <axis> pointwise.
206
The returned permutation fixes <axis> pointwise and <centre> linewise and
207
takes <pair[1]> to <pair[2]>.
208
209
210
\>GroupOfHomologiesSmall( <centre>, <axis>, <data> ) O
211
212
returns the group of homologies with centre <centre> and axis
213
<axis>.
214
215
216
217
%%%%%%%%%%%%%%%%%%%%
218
\Section{Collineations on Baer Subplanes}
219
220
Let $P$ be a projective plane of order $n^2$. A subplane $B$ of order
221
$n$ of $P$ is called *Baer subplane*. Baer suplanes are exactly the
222
maximal subplanes of $P$.
223
224
\>InducedCollineation( <baerdata>, <baercoll>, <point>, <image>, <planedata>, <liftingperm> ) O
225
226
If a projective plane contains a Baer subplane, collineations of the
227
subplane may be lifted to the full plane. Here <baercoll> is a collineation
228
of the subplane given by <baerdata> (as returned by `ElationPrecalc'.
229
Be careful, as the enumeration for the subplane is not the same as for the
230
whole plane). <liftingperm> is a permutation on the points of the full pane
231
which converts the enumeration of the subplane to that of the full plane.
232
This means that the image of <baerdata.points> under <liftingperm> is a
233
subset of <planedata.points>. Namely the one representing the Baer plane
234
in the enumeration used for the whole plane.
235
<point> and <image> are points outside the Baer plane.
236
237
`InducedCollineation' returns a collineation of the full plane (as a
238
permutation on <planedata.points>) which takes <point> to <image> and acts
239
on the Baer plane as <baercoll> does.
240
241
Just to make this clear again, <baerdata> has points $[1,\dots,n^2+n+1]$
242
and <planedata> has points $[1,\dots,n^4+n^2+1]$. <baercoll> lives on
243
<baerdata.points> (and hence on $n^2+n+1$ points) and <point> and <image>
244
live on <planedata.points>. Anything can happen if you mix something up
245
here.
246
247
248
%%%%%%%%%%%%%%%%%%%%
249
\Section{Invariants for Projective Planes}
250
251
The functions `NrFanoPlanesAtPoints', `pRank', `FingerprintAntiFlag'
252
and `FingerprintProjPlane' calculate invariants for finite projective
253
planes. For more details see \cite{RoederDiss} and
254
\cite{MoorhouseGraphs}. The values of some of these invariants are
255
available from the homepages of \cite{Moorhouse} and \cite{Royle} for
256
many planes.
257
258
\>NrFanoPlanesAtPoints( <points>, <data> ) O
259
260
For a projective plane defined by the blocks <data> as returned
261
by `ElationPrecalc', `NrFanoPlanesAtPoints(<points>,<data>)'
262
calculates the so-called Fano invariant. That is, for each point
263
in <points>, the number of subplanes of order 2 (so-called Fano planes)
264
containing this point is calculated.
265
The method returns a list of pairs of the form $[<point>,<number>]$
266
where <number> is the number of Fano sub-planes in <point>.
267
268
\>NrFanoPlanesAtPointsSmall( <pointlist>, <data> ) O
269
270
271
Uses <data> as returned by `ElationPrecalcSmall'. Only use this, if you
272
want to do a quick experiment in a plane of *small* order and don't like
273
to generate a new set of data with `ElationPrecalc'. The difference
274
between `NrFanoPlanesAtPoints' and `NrFanoPlanesAtPointsSmall' is that
275
the ``small'' version does some operations for lists (like `Intersection')
276
whereas the ``large'' version does only read matrix entries. This makes
277
quite a difference as for a plane of order $n$, there are
278
${n+1 \choose 3}{n\choose 2}n$ quadrangles to be tested per point.
279
280
281
\>IncidenceMatrix( <points>, <blocks> ) O
282
\>IncidenceMatrix( <data> ) O
283
284
returns a matrix <I>, where the columns are numbered by the blocks and
285
the rows are numbered by points. And <I[i][j]=1> if and only if
286
<points[i]> is incident (contained in) <blocks[j]>.
287
288
289
\>pRank( <blocklist>, <p> ) O
290
\>pRank( <data>, <p> ) O
291
292
Let <I> be the incidence matrix of the projective plane given by the list
293
of blocks <blocklist> or the record <data> as returned by
294
`ElationPrecalc'. The rank of $I.I^t$ as a matrix over
295
$GF(p)$ is called <p>-rank of the projective plane. Here $I^t$ denotes
296
the transposed matrix.
297
298
As `pRank' calls `IncidenceMatrix', the list <blocklist> has to be a list
299
of lists of integers.
300
301
302
\>FingerprintProjPlane( <blocks> ) O
303
\>FingerprintProjPlane( <data> ) O
304
305
For each anti-flag $(p,l)$ of a projective plane of order $n$,
306
define an arbitrary but fixed enumeration of the lines through $p$ and
307
the points on $l$. Say $l_1,\dots,l_{n+1}$ and $p_1,\dots,p_{n+1}$
308
The incidence relation defines a canonical bijection between the $l_i$ and
309
the $p_i$ and hence a permutation on the indices $1,\dots,n+1$.
310
Let $\sigma_{(p,l)}$ be this permutation.
311
312
Denote the points and lines of the plane by $q_1,\dots q_{n^2+n+1}$
313
and $e_1,\dots,e_{n^2+n+1}$.
314
Define the sign matrix as $A_{ij}=sgn(\sigma_{(q_i,e_j)})$ if $(q_i,e_j)$
315
is an anti-flag and $=0$ if it is a flag.
316
Then the fingerprint is defnied as the multiset of the entries of $|AA^t|$.
317
Here <data> is a record as returned by `ElationPrecalcSmall'.
318
319
320
\>FingerprintAntiFlag( <point>, <linenr>, <data> ) O
321
322
Let $m_1,\dots,m_{n+1}$ be the lines containing <point> and
323
$E_1,\dots,E_{n+1}$ the points on the line given by <linenr> such that
324
$E_i$ is incident with $m_i$. Now label the points of $m_i$ as
325
$<point>=P_{i,1},\dots,P_{i,n+1}=E_i$ and the lines of $E_i$ as
326
$<line>=l_1,\dots,l_{i,n+1}=m_i$.
327
For $i\not = j$, each $P_{j,k}$ lies on exactly one line
328
$l_{i,k\sigma_{i,j}}$ containing $E_i$ for some permutation $\sigma_{i,j}$
329
330
Define a matrix $A$, where $A_{i,j}$ is the sign of $\sigma_{i,j}$ if
331
$i\neq j$ and $A_{i,i}=0$ for all $i$.
332
The partial fingerprint is the multiset of entries of $|AA^t|$ where $A^t$
333
denotes the transposed matrix of $A$.
334
335
this is a ``small'' function.
336
337
338
339
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
340
%%
341
%E
342
%%
343
344
345