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

612139 views
1
% This file was created automatically from iso.msk.
2
% DO NOT EDIT!
3
\Chapter{Block Designs and Projective Planes}
4
5
This section contains functions to help studying projective planes.
6
There is also a function converting relative difference sets to block
7
designs. Those desings can be studied with the \package{DESIGN} \cite{DESIGN}
8
package by L. Soicher.
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
\>ProjectivePlane( <blocks> ) O
16
17
Given a list of lists <blocks> which represents the blocks of a
18
projective plane, a block design is generated. If the <blocks> is not
19
a set of sets of the integers `[1..v]' for some $v$, the points are
20
sorted and enumerated and the blocks are changed accordingly.
21
But the original names are known to the returned BlockDesign.
22
23
The block design generated this way will contain two extra entries,
24
<jblock> and <isProjectivePlane>. The matrix <.jblock> contains the
25
number of the block containing the points $i$ and $j$ at the $(i,j)$th
26
position. And <isProjectivePlane> will be `true'.
27
If <blocks> do not form the lines of a projective plane, an error is
28
issued.
29
30
31
\>PointJoiningLinesProjectivePlane( <plane> ) O
32
33
Returns a matrix which has as $ij$th entry the point wich is contained
34
in the blocks with numbers $i$ and $j$. This matrix is also stored in
35
<plane>. Some operations are faster if <plane> contains this matrix.
36
If <plane> is not a projective plane, an error is issued.
37
38
39
40
\beginexample
41
gap> b:=[ [ 1, 3 ], [ 1, 6 ], [ 2, 4 ], [ 2, 7 ],
42
> [ 3, 5 ], [ 4, 6 ], [ 5, 7 ] ];;
43
gap> plane:=ProjectivePlane(b);
44
rec( isBlockDesign := true, v := 7,
45
blocks := [ [ 1, 3 ], [ 1, 6 ], [ 2, 4 ], [ 2, 7 ],
46
[ 3, 5 ], [ 4, 6 ], [ 5, 7 ] ],
47
jblock := [ [ 0, 0, 1, 0, 0, 2, 0 ], [ 0, 0, 0, 3, 0, 0, 4 ],
48
[ 1, 0, 0, 0, 5, 0, 0 ], [ 0, 3, 0, 0, 0, 6, 0 ],
49
[ 0, 0, 5, 0, 0, 0, 7 ], [ 2, 0, 0, 6, 0, 0, 0 ],
50
[ 0, 4, 0, 0, 7, 0, 0 ] ],
51
isProjectivePlane := true )
52
gap> PointJoiningLinesProjectivePlane(plane);
53
[ [ 0, 1, 0, 0, 3, 0, 0 ], [ 1, 0, 0, 0, 0, 6, 0 ], [ 0, 0, 0, 2, 0, 4, 0 ],
54
[ 0, 0, 2, 0, 0, 0, 7 ], [ 3, 0, 0, 0, 0, 0, 5 ], [ 0, 6, 4, 0, 0, 0, 0 ],
55
[ 0, 0, 0, 7, 5, 0, 0 ] ]
56
gap> RecNames(plane);
57
[ "isBlockDesign", "v", "blocks", "jblock", "isProjectivePlane", "jpoint" ]
58
\endexample
59
60
\>DevelopmentOfRDS( <diffset>, <Gdata> ) O
61
62
This calculates the development of a (partial relative) difference set
63
<diffset> in the group given by <Gdata>.
64
That is, the associated block design.
65
66
<diffset> can be given as a list of group
67
elements or a list of integers (positions in the set of group elements).
68
<Gdata> can either be the record returned by
69
"PermutationRepForDiffsetCalculations" or a group or a set of group elements.
70
71
In either case, the returned object is a `BlockDesign' in the sense of
72
L. Soichers DESIGN package.
73
74
75
76
\beginexample
77
gap> G:=CyclicGroup(21);; Gdata:=PermutationRepForDiffsetCalculations(G);;
78
gap> AllDiffsets([2],[1..21],4,[],Gdata,1);
79
[ [ 2, 5, 16, 17 ], [ 2, 6, 10, 18 ] ]
80
gap> d1:=DevelopmentOfRDS(Set(G){[2,5,16,17]},Set(G));
81
rec( isBlockDesign := true, v := 21,
82
blocks := [ [ 1, 2, 5, 16, 17 ], [ 1, 3, 14, 15, 21 ], [ 1, 4, 8, 10, 13 ],
83
[ 1, 6, 7, 9, 20 ], [ 1, 11, 12, 18, 19 ], [ 2, 3, 9, 10, 12 ],
84
[ 2, 4, 7, 15, 19 ], [ 2, 6, 8, 11, 21 ], [ 2, 13, 14, 18, 20 ],
85
[ 3, 4, 6, 17, 18 ], [ 3, 5, 8, 19, 20 ], [ 3, 7, 11, 13, 16 ],
86
[ 4, 5, 9, 11, 14 ], [ 4, 12, 16, 20, 21 ], [ 5, 6, 12, 13, 15 ],
87
[ 5, 7, 10, 18, 21 ], [ 6, 10, 14, 16, 19 ], [ 7, 8, 12, 14, 17 ],
88
[ 8, 9, 15, 16, 18 ], [ 9, 13, 17, 19, 21 ], [ 10, 11, 15, 17, 20 ] ],
89
autSubgroup := <permutation group with 21 generators>,
90
pointNames := [ <identity> of ..., f1, f2, f1^2, f1*f2, f2^2, f1^2*f2,
91
f1*f2^2, f2^3, f1^2*f2^2, f1*f2^3, f2^4, f1^2*f2^3, f1*f2^4, f2^5,
92
f1^2*f2^4, f1*f2^5, f2^6, f1^2*f2^5, f1*f2^6, f1^2*f2^6 ],
93
blockSizes := [ 5 ], blockNumbers := [ 21 ], isSimple := true,
94
isBinary := true )
95
gap> d2:=DevelopmentOfRDS([2,5,16,17],Gdata);;
96
gap> d1=d2
97
true
98
gap> d1=DevelopmentOfRDS(Set(G){[2,5,16,17]},G);
99
true
100
gap> d1=DevelopmentOfRDS([2,5,16,17],G);
101
true
102
\endexample
103
104
Note that equality for block designs means equality of records. So
105
`DevelopmentOfRDS' generates exactly the same record in each of the
106
above examples. The output is in fact independent of the chosen data type of the input (as long as it is valid). In particular, the design always knows its `pointNames'.
107
108
\>ProjectiveClosureOfPointSet( <points>[, <maxsize>], <plane> ) O
109
110
Let <plane> be a projective plane. Let <points> be a set of non-collinear
111
points (integers) of this plane. Then
112
`ProjectiveClosureOfPointSet' returns a record with the entries <.closure>
113
and <.embedding>.
114
115
Here <.closure> is the projective closure of <points> (the smallest
116
projectively closed subset of <plane> containing the points <points>).
117
It is not checked, whether this is a projective plane. As the BlockDesign
118
<.closure> has points `[1..w]' and <plane> has poins `[1..v]' with
119
$w\leq v$, we need an embedding of <.closure> into <plane>. This embedding
120
is the permutation <.embedding>. It is a permutation on `[1..v]' which
121
takes the points of <.closure> to a set of points in <plane> containing
122
<points> and preserving incidence. Note that nothing is known about the
123
behaviour of <.embedding> on any point outside `[1..w]' and
124
`[1..w]^<.embedding>'.
125
126
If $<maxsize>$ is given and $<maxsize> \neq 0$, calculations are stopped
127
if the closure is known to
128
have at least <maxsize> points and the plane <plane> is returned as
129
<.closure> with the trivial permutation as embedding.
130
131
132
133
134
Let's find a Baer subplane in the desarguesian plane of order $4$:
135
\beginexample
136
gap> G:=CyclicGroup(21);; Gdata:=PermutationRepForDiffsetCalculations(G);;
137
gap> AllDiffsets([2],[1..21],4,[],Gdata,1);
138
[ [ 2, 5, 16, 17 ], [ 2, 6, 10, 18 ] ]
139
gap> plane:=DevelopmentOfRDS([2,5,16,17],Gdata);;
140
gap> ProjectiveClosureOfPointSet([1,3,4],plane);
141
rec( closure := rec( isBlockDesign := true, v := 3,
142
blocks := [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ] ]
143
pointNames := [ <identity> of ..., f2, f1^2 ]),
144
embedding := (2,3,4) )
145
gap> IsProjectivePlane(last.closure);
146
false
147
gap> baer:=ProjectiveClosureOfPointSet([1,3,4,5],plane);;
148
gap> baer.closure.blocks;
149
[ [ 1, 2, 6 ], [ 1, 3, 5 ], [ 1, 4, 7 ], [ 2, 3, 7 ],
150
[ 2, 4, 5 ], [ 3, 4, 6 ], [ 5, 6, 7 ] ]
151
gap> IsProjectivePlane(baer.closure);
152
true
153
gap> Set(baer.closure.blocks,b->OnSets(b,baer.embedding));
154
[ [ 1, 3, 14 ], [ 1, 4, 8 ], [ 1, 5, 17 ], [ 3, 4, 17 ],
155
[ 3, 5, 8 ], [ 4, 5, 14 ], [ 8, 14, 17 ] ]
156
\endexample
157
158
%%%%%%%%%%%%%%%%%%%%
159
\Section{Isomorphisms and Collineations}
160
161
Isomorphisms of projective planes are mappings which take points to
162
points and blocks to blocks and respect incidence. A *collineation* of
163
a projective plane $P$ is an isomorphism from $P$ to $P$.
164
165
As projective planes are assumed to live on the integers, isomorphisms
166
of projective planes are represented by permutations. To test if a
167
permutation on points is actually an isomorphism of projective planes,
168
the following methods can be used.
169
170
\>IsIsomorphismOfProjectivePlanes( <perm>, <plane1>, <plane2> ) O
171
172
Let <plane1>, <plane2> be two projective planes.
173
`IsIsomorphismOfProjectivePlanes' test if the permutation
174
<perm> on points defines an isomorphism of the projective planes
175
<plane1> and <plane2>.
176
177
178
\>IsCollineationOfProjectivePlane( <perm>, <plane> ) O
179
180
Let <plane> be a projective plane and <perm> a permutation
181
on the points of this plane. `IsCollineationOfProjectivePlane(<perm>,<plane>)' returns
182
`true', if <perm> induces a collineation of <plane>.
183
184
This is just another form to call `IsIsomorphismOfProjectivePlanes(<perm>,<plane>,<plane>)'
185
186
187
\>IsomorphismProjPlanesByGenerators( <gens1>, <plane1>, <gens2>, <plane2> ) O
188
\>IsomorphismProjPlanesByGeneratorsNC( <gens1>, <plane1>, <gens2>, <plane2> ) O
189
190
Let <gens1> be a list of points generating the projective plane
191
<plane1> and <gens2> a list of generating points for <plane2>. Then a
192
permutation is returned representing a mapping from the points of <plane1>
193
to those of <plane2> and taking the list <gens1> to the list <gens2>.
194
If there is no such mapping which defines an isomorphism of projective
195
planes, `fail' is returned.
196
197
`IsomorphismProjPlanesByGeneratorsNC' does *not* check whether <gens1>
198
and <gens2> really generate the planes <plane1> and <plane2>.
199
200
201
202
Look at the above example again:
203
\beginexample
204
gap> P:=ProjectivePlane( [ [ 1, 2, 6 ], [ 1, 3, 5 ], [ 1, 4, 7 ],
205
> [ 2, 3, 7 ], [ 2, 4, 5 ], [ 3, 4, 6 ], [ 5, 6, 7 ] ]);;
206
gap> pi:=IsomorphismProjPlanesByGenerators([1,2,3,4],P,[2,4,6,7],P);
207
(1,2,4,7,3,6,5)
208
gap> IsIsomorphismOfProjectivePlanes(pi,P,P);
209
true
210
gap> IsCollineationOfProjectivePlane(pi,P);
211
true
212
gap> IsomorphismProjPlanesByGenerators([1,2,3,4],P,[1,2,3,5],P);
213
fail
214
gap> ProjectiveClosureOfPointSet([1,2,3,5],P).closure.v;
215
4
216
\endexample
217
218
219
%%%%%%%%%%%%%%%%%%%%%%%%%%%
220
\Section{Central Collineations}
221
222
Let $\phi$ be a collineation of a projective plane which fixes one
223
point block-wise (the so-called *centre*) and one block point-wise
224
(the so-called *axis*). If the centre is contained in the axis, $\phi$
225
is called *elation*. Otherwise, $\phi$ is called *homology*. The group
226
of elations with given axis is called *translation group* of the plane
227
(relative to the chosen axis). A projective plane with transitive
228
translation group is called *translation plane*. Here transitivity is
229
on the points outside the axis.
230
231
\>ElationByPair( <centre>, <axis>, <pair>, <plane> ) O
232
233
Let <centre> be a point and <axis> a block of a projective plane
234
<plane> .
235
<pair> must be a pair of points outside <axis> and lie on a block
236
containing <center>. Then there is a unique collineation fixing <axis>
237
pointwise and <centre> blockwise (an elation) and taking <point[1]>
238
to <point[2]>.
239
240
If one of the conditions is not met, an error is issued.
241
This method is faster, if <plane.jpoint> is known (see
242
"RDS:PointJoiningLinesProjectivePlane")
243
244
245
\>AllElationsCentAx( <centre>, <axis>, <plane>[, "generators"] ) O
246
247
Let <centre> be a point and <axis> a block of the projective plane
248
<plane>.
249
`AllElationsCentAx' returns the group of all elations with centre
250
<centre> and axis <axis> as a group of permutations on the points of
251
<plane>.
252
253
If ``generators'' is set, only a list of generators of the translation
254
group is returned.
255
This method is faster, if <plane.jpoint> is known (see
256
"RDS:PointJoiningLinesProjectivePlane")
257
258
259
\>AllElationsAx( <axis>, <plane>[, "generators"] ) O
260
261
Let <axis> be a block of a projective plane <plane>.
262
`AllElationsAx' returns the group of all elations with axis
263
<axis>.
264
265
If ``generators'' is set, only a set of generators for the group of elations
266
is returned.
267
This method is faster, if <plane.jpoint> is known (see
268
"RDS:PointJoiningLinesProjectivePlane")
269
270
271
\beginexample
272
gap> P:=ProjectivePlane( [ [ 1, 2, 6 ], [ 1, 3, 5 ], [ 1, 4, 7 ],
273
> [ 2, 3, 7 ], [ 2, 4, 5 ], [ 3, 4, 6 ], [ 5, 6, 7 ] ]);;
274
gap> pi:=ElationByPair(1,[1,2,6],[3,5],P);
275
(3,5)(4,7)
276
gap> AllElationsCentAx(1,[1,2,6],P);
277
Group([ (3,5)(4,7) ])
278
gap> AllElationsAx([1,2,6],P);
279
Group([ (3,5)(4,7), (3,7)(4,5) ])
280
gap> AllElationsAx([1,2,6],P);
281
Group([ (3,5)(4,7), (3,7)(4,5) ])
282
gap> Size(last);
283
4
284
\endexample
285
286
\>IsTranslationPlane( [<infline>, ]<plane> ) O
287
288
Returns `true' if the plane <plane> has a block $b$ such that the
289
group of elations with axis $b$ is transitive outside $b$.
290
291
If <infline> is given, only the group of elations with axis
292
<infline> is considered.
293
This is faster than
294
calculating the full translation group if the projective plane <plane>
295
is not a translation plane. If <plane> is a translation plane, the full
296
translation group is calculated.
297
298
This method is faster, if <plane.jpoint> is known (see
299
"RDS:PointJoiningLinesProjectivePlane")
300
301
302
303
\beginexample
304
gap> AllElationsAx(P.blocks[1],P);
305
Group([ (3,5)(4,7), (3,7)(4,5) ])
306
gap> Size(last);
307
4
308
gap> IsTranslationPlane(P);
309
true
310
\endexample
311
312
\>HomologyByPair( <centre>, <axis>, <pair>, <plane> ) O
313
314
`HomologyByPair' returns the homology defined by the pair
315
<pair> fixing <centre> blockwise and <axis> pointwise.
316
The returned permutation fixes <axis> pointwise and <centre> linewise and
317
takes <pair[1]> to <pair[2]>.
318
319
320
\>GroupOfHomologies( <centre>, <axis>, <plane> ) O
321
322
returns the group of homologies with centre <centre> and axis
323
<axis> of the plane <plane>.
324
325
326
\beginexample
327
gap> HomologyByPair(3,[1,2,6],[4,5],P);
328
Error, The centre must be fixed blockwise called from
329
# ...
330
gap> GroupOfHomologies(3,[1,2,6],P);
331
Group(())
332
\endexample
333
334
%%%%%%%%%%%%%%%%%%%%
335
\Section{Collineations on Baer Subplanes}
336
337
Let $P$ be a projective plane of order $n^2$. A subplane $B$ of order
338
$n$ of $P$ is called *Baer subplane*. Baer suplanes are exactly the
339
maximal subplanes of $P$.
340
341
\>InducedCollineation( <baerplane>, <baercoll>, <point>, <image>, <planedata>, <embedding> ) O
342
343
If a projective plane contains a Baer subplane, collineations of the
344
subplane may be lifted to the full plane. If such an extension to the
345
full plane exists, it is uniquely determined by the image of one point
346
outside the Baer plane.
347
348
Here <baercoll> is a collineation (a permutation of the points)
349
of the projective plane <baerplane>.
350
The permutation <embedding> is a permutation on the points of the full pane
351
which converts the enumeration of <baerplane> to that of the full plane.
352
This means that the image of the points of <baerplane> under <embedding>
353
is a subset of the points of <plane>. Namely the one representing the Baer
354
plane in the enumeration used for the whole plane.
355
<point> and <image> are points outside the Baer plane.
356
357
The data for <baerplane> and <embedding> can be calculated using
358
"ProjectiveClosureOfPointSet".
359
360
`InducedCollineation' returns a collineation of the full plane (as a
361
permutation on the points of <plane>) which takes <point> to <image> and
362
acts on the Baer plane as <baercoll> does. If no such collineation
363
exists, `fail' is returned.
364
365
This method needs <plane.jpoint>. If it is unknown, it is calculated (see
366
"RDS:PointJoiningLinesProjectivePlane")
367
368
369
370
Let's go back to an earlier example and find a planar collineation:
371
\beginexample
372
gap> G:=CyclicGroup(21);; Gdata:=PermutationRepForDiffsetCalculations(G);;
373
gap> AllDiffsets([2],[1..21],4,[],Gdata,1);
374
[ [ 2, 5, 16, 17 ], [ 2, 6, 10, 18 ] ]
375
gap> plane:=DevelopmentOfRDS([2,5,16,17],Gdata);;
376
gap> baer:=ProjectiveClosureOfPointSet([1,3,4,5],plane);;
377
gap> pi:=InducedCollineation(baer.closure,(),21,15,plane,baer.embedding);
378
(2,16)(6,18)(7,12)(9,11)(10,13)(15,21)(19,20)
379
gap> 21^pi;
380
15
381
gap> ForAll(OnSets([1..7],baer.embedding),i->i^pi=i);
382
true
383
\endexample
384
385
%%%%%%%%%%%%%%%%%%%%
386
\Section{Invariants for Projective Planes}
387
388
The functions `NrFanoPlanesAtPoints', `PRank@RDS', `FingerprintAntiFlag'
389
and `FingerprintProjPlane' calculate invariants for finite projective
390
planes. For more details see \cite{RoederDiss} and
391
\cite{MoorhouseGraphs}. The values of some of these invariants are
392
available from the homepages of \cite{Moorhouse} and \cite{Royle} for
393
many planes.
394
395
\>NrFanoPlanesAtPoints( <points>, <plane> ) O
396
397
For a projective plane <plane>, `NrFanoPlanesAtPoints(<points>,<plane>)'
398
calculates the so-called Fano invariant. That is, for each point
399
in <points>, the number of subplanes of order 2 (so-called Fano planes)
400
containing this point is calculated.
401
The method returns a list of pairs of the form $[<point>,<number>]$
402
where <number> is the number of Fano sub-planes in <point>.
403
404
This method is faster, if <plane.jpoint> is known (see
405
"RDS:PointJoiningLinesProjectivePlane"). Indeed, if <plane.jpoint> is
406
not known, this method is very slow.
407
408
409
\beginexample
410
gap> G:=CyclicGroup(4^2+5);
411
<pc group of size 21 with 2 generators>
412
gap> diffset:=OneDiffset(G);
413
[ f1, f1*f2, f1^2*f2^4, f1*f2^5 ]
414
gap> P:=DevelopmentOfRDS(diffset,G);;
415
gap> NrFanoPlanesAtPoints([3],P);
416
[ [ 3, 240 ] ]
417
\endexample
418
\>IncidenceMatrix( <plane> ) O
419
420
returns a matrix <I>, where the columns are numbered by the blocks and
421
the rows are numbered by points. And <I[i][j]=1> if and only if
422
<points[i]> is incident (contained in) <blocks[j]> (an 0 else).
423
424
425
\>PRank( <plane>, <p> ) O
426
427
Let $I$ be the incidence matrix of the projective plane <plane> and <p> a
428
prime power.
429
The rank of $I.I^t$ as a matrix over
430
$GF(p)$ is called <p>-rank of the projective plane. Here $I^t$ denotes
431
the transposed matrix. Note that this is a method within the RDS workspace,
432
so it has to be called as PRank@RDS
433
434
435
\beginexample
436
gap> G:=CyclicGroup(2^2+3);
437
<pc group of size 7 with 1 generators>
438
gap> P:=DevelopmentOfRDS(OneDiffset(G),G);;
439
gap> IncidenceMatrix(P);
440
[ [ 1, 1, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 1, 1, 0, 0 ], [ 0, 1, 0, 1, 0, 1, 0 ],
441
[ 1, 0, 0, 0, 0, 1, 1 ], [ 0, 0, 1, 1, 0, 0, 1 ], [ 0, 0, 1, 0, 1, 1, 0 ],
442
[ 0, 1, 0, 0, 1, 0, 1 ] ]
443
gap> PRank@RDS(P,3);
444
6
445
gap> PRank@RDS(P,2);
446
4
447
\endexample
448
\>FingerprintProjPlane( <plane> ) O
449
450
For each anti-flag $(p,l)$ of a projective plane <plane> of order $n$,
451
define an arbitrary but fixed enumeration of the lines through $p$ and
452
the points on $l$. Say $l_1,\dots,l_{n+1}$ and $p_1,\dots,p_{n+1}$
453
The incidence relation defines a canonical bijection between the $l_i$ and
454
the $p_i$ and hence a permutation on the indices $1,\dots,n+1$.
455
Let $\sigma_{(p,l)}$ be this permutation.
456
457
Denote the points and lines of the plane by $q_1,\dots q_{n^2+n+1}$
458
and $e_1,\dots,e_{n^2+n+1}$.
459
Define the sign matrix as $A_{ij}=sgn(\sigma_{(q_i,e_j)})$ if $(q_i,e_j)$
460
is an anti-flag and $=0$ if it is a flag.
461
Then the fingerprint is defnied as the multiset of the entries of $|AA^t|$.
462
463
464
\>FingerprintAntiFlag( <point>, <linenr>, <plane> ) O
465
466
Let $m_1,\dots,m_{n+1}$ be the lines containing <point> and
467
$E_1,\dots,E_{n+1}$ the points on the line given by <linenr> such that
468
$E_i$ is incident with $m_i$. Now label the points of $m_i$ as
469
$<point>=P_{i,1},\dots,P_{i,n+1}=E_i$ and the lines of $E_i$ as
470
$<line>=l_1,\dots,l_{i,n+1}=m_i$.
471
For $i\not = j$, each $P_{j,k}$ lies on exactly one line
472
$l_{i,k\sigma_{i,j}}$ containing $E_i$ for some permutation $\sigma_{i,j}$
473
474
Define a matrix $A$, where $A_{i,j}$ is the sign of $\sigma_{i,j}$ if
475
$i\neq j$ and $A_{i,i}=0$ for all $i$.
476
The partial fingerprint is the multiset of entries of $|AA^t|$ where $A^t$
477
denotes the transposed matrix of $A$.
478
479
480
481
Look at the above example again:
482
\beginexample
483
gap> NrFanoPlanesAtPoints([1,2,3],plane);
484
[ [ 1, 240 ], [ 2, 240 ], [ 3, 240 ] ]
485
gap> Set(NrFanoPlanesAtPoints([1..plane.v],plane),i->i[2])=[240];
486
true
487
gap> PRank@RDS(plane,2);
488
10
489
gap> PRank@RDS(plane,3);
490
21
491
gap> PRank@RDS(plane,5);
492
20
493
gap> FingerprintProjPlane(plane);
494
[ [ 12, 420 ], [ 16, 21 ] ]
495
gap> FingerprintAntiFlag(1,6,plane);
496
[ [ 3, 20 ], [ 4, 5 ] ]
497
\endexample
498
499
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
500
%%
501
%E
502
%%
503
504
505