Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
User’s Guide
Anton Betten
April 16, 2021
Abstract
Orbiter is a computer algebra system devoted to the classification problem of com-binatorial and algebraic-geometric objects. It uses computational methods from thetheory of permutation groups to provide efficient algorithms for computing orbits. Thisguide explains how to use Orbiter through this command line interface. Programmerswho want to use the Orbiter C++ class library directly in their own programs shouldconsult the programmer’s guide.
1
Contents
1 Introduction 5
2 Installation 6
3 The Orbiter Session 7
4 Makefiles and Shell Scripts 10
5 Defining Objects 12
6 Set Builders 13
7 Input Streams 14
8 Basic Number Theory 15
9 Prime Fields 18
10 Polynomials Over Finite Fields 22
11 Extension Fields 26
12 Linear Algebra Over Finite Fields 34
13 Finite Projective Spaces 38
14 Finite Desarguesian Projective Planes 48
15 The Grassmannian 52
16 Algebraic Sets 53
17 The Klein Quadric and the Plücker Map 59
18 Orthogonal Spaces 61
19 Hermitian Varieties 66
20 Permutation Groups 68
21 Linear Groups 69
22 Subgroups 85
23 Linear Groups, Advanced Topics 91
24 Induced Actions 95
2
25 Group Theoretic Activities 104
26 Group Theoretic Activities Based on Magma 108
27 Orbit Algorithms 114
28 Poset Classification 122
29 Orbits on Subsets 126
30 Orbits on Subspaces 129
31 Creating Objects in Projective Geometries 131
32 Activities for Objects in Projective Geometries 135
33 Canonical Forms of Objects in Projective Geometries 137
34 Arcs and Caps in Projective Spaces 139
35 Cubic Curves 146
36 Cubic Surfaces: Creation 147
37 Cubic Surfaces And Quartic Curves 153
38 Cubic Surfaces: Classification 154
39 Cubic Surfaces: Isomorphism Testing and Recognition 169
40 Cubic Surfaces of Dickson Types 172
41 Cubic Surfaces: ATLAS and Tables 175
42 Number Theory 176
43 Combinatorics 178
44 Representation Theory 179
45 Cryptography 181
46 Coding Theory 187
47 Coding Theory: Hamming Codes 191
48 Coding Theory: Golay Codes 192
49 Coding Theory: CRC Codes 193
3
50 Coding Theory: Reed-Muller Codes 195
51 Coding Theory: Reed-Solomon Codes 197
52 Coding Theory: BCH Codes 201
53 Coding Theory: Bounds 203
54 Coding Theory: Classification 205
55 Diophantine Systems 208
56 Combinatorial Linear Spaces 211
57 Design Theory 213
58 Design Theory – Delandtsheer-Doyen 217
59 Tactical Decompositions 219
60 Spreads 225
61 Translation Planes 233
62 Packings 235
63 BLT-Sets 242
64 Graph Theory 250
65 Graph Theory: Classification 254
66 Graphical Output 257
67 The Povray Interface 264
68 Creating Animations 276
69 Continuous Function Plotter 277
70 Miscellaneous 281
71 Limitations 283
72 The Makefile 284
References 485
4
1 Introduction
Orbiter is a computer algebra system for the classification of combinatorial objects. Orbitercontributes to the knowledge base of combinatorial structures, and to provide useful toolsto investigate structures from various points of view, including their symmetry properties.Orbiter is optimized for efficiency in terms of memory and execution speed. Orbiter isa library of C++ classes, together with a command line driven front end. There is nographical user interface. The system offers two modes of use, programming or command lineinterface. This manual is about the command line interface. Readers who are interested inthe Orbiter C++ class library should consult the programmer’s guide. A makefile with allcommands used in this guide can be found in the examples subdirectory.
5
2 Installation
The installation of Orbiter requires the following steps:
(a) Install docker from www.docker.com, including the Linux kernel.
(b) Run docker.
(c) Open a terminal window (for instance PowerShell on Windows).
(d) Type
docker run -it --volume ${PWD}:/mnt -w /mnt monaghaa/orbiter orbiter.out
This should produce the follwing output:
sh-3.2$ docker run -it --volume $PWD:/mnt -w /mnt monaghaa/orbiter orbiter.out
Unable to find image ’monaghaa/orbiter:latest’ locally
latest: Pulling from monaghaa/orbiter
004f1eed87df: Pull complete
5d6f1e8117db: Pull complete
48c2faf66abe: Pull complete
234b70d0479d: Pull complete
6fa07a00e2f0: Pull complete
9187bd98e241: Pull complete
ae87b7ef500b: Pull complete
260a2765fa99: Pull complete
27d6fff93a58: Pull complete
7a09ec574418: Pull complete
1336494f74e1: Pull complete
Digest: sha256:889099d7e0b0a9ee168b7cb261d2da8ff64bd7d861c357e1caec59580d629ee9
Status: Downloaded newer image for monaghaa/orbiter:latest
Welcome to Orbiter! Your build number is 1239.
A user’s guide is available here:
https://www.math.colostate.edu/~betten/orbiter/users_guide.pdf
The sources are available here:
https://github.com/abetten/orbiter
An example makefile with many commands from the user’s guide is here:
https://github.com/abetten/orbiter/tree/master/examples/users_guide/makefile
SYSTEMUNIX is defined
sizeof(int)=4
sizeof(long int)=8
Orbiter session finished.
User time: 0:00
The first part is docker downloading Orbiter as a container. This can take a while, dependingon the Internet speed. The second part (Welcome to Orbiter!) is the actual Orbiter session.No specific commands were given, so Orbiter simply starts up and quits.
6
Figure 1: The Orbiter workflow
3 The Orbiter Session
The orbiter workflow is depicted in Figure 1. Commands are issued through the commandline, which invokes Orbiter sessions, which in turn perform the required computations andread and write data to files. The commands are parsed and seperated into three basic types.Commands that create objects, commands that apply to previously created objects, and allother commands. Objects are maintained in a symbol table. The command line calls toOrbiter may or may not be organized in the form of makefiles, as discussed in Section 4.
Let us take a closer look at an Orbiter session. Any orbiter session is invoked through theorbiter command orbiter.out, which is the name of the executable. Unless the executableresides in a directory contained in the search path of the shell, a path must be given. Severaloptions apply to the orbiter session. They are listed in Table 1. Once started, the Orbitersession will produce a short welcome message:
Welcome to Orbiter! Your build number is 1081.
A user’s guide is available here:
https://www.math.colostate.edu/~betten/orbiter/users_guide.pdf
The sources are available here:
https://github.com/abetten/orbiter
An example makefile with many commands from the user’s guide is here:
https://github.com/abetten/orbiter/tree/master/examples/users_guide/makefile
Orbiter session finished.
7
Command Arguments Meaning
-v v Set verbosity to v. Larger values of v leadto more text output. v = 0 gives minimaloutput.
-list_arguments Prints the command line arguments.
-seed s Seed the pseudo random number generatorwith the integer value s.
-memory_debug Turn on dynamic memory debugging.
-override_
polynomial
poly Set the override polynomial for finite fieldsto poly.
-orbiter_path p Set the orbiter path to p. This is useful incase the Orbiter session has to clone or forknew Orbiter sessions. In most cases, the or-biter path will end with a forward slash “/.”
-magma_path p Set the magma path to p. This is usefulin case the Orbiter session has to create amagma process.
-fork L M f t s Fork new Orbiter sessions in parallel. Thenew sessions will be indexed by the val-ues i that result from a loop with startvalue f and increment s bounded fromabove by t, equivalent to a C-loop of type“for (i=f; i < t; i+= s).” Every oc-curence of the string L in the argument listis replaced by the resulting value of the loopvariable i. The forked process will writeto a file whose name is described throughthe mask M. The actual file name resultsfrom using the printf command from theC-library for M with the integer value of theloop variable. All of the command line ar-guments after the fork command are passedthrough to the new Orbiter session, with allarguments L replaced by the integer valueof the loop counter. The number of Orbitersessions forked is (t− f)/s. The orbiter pathfrom -orbiter_path is used when startingthe forked sessions.
Table 1: Orbiter session commands
8
User time: 0:00
The build number is the version number of the Orbiter software, as defined by the numberof submits to the Git repository. Higher numbers mean more recent versions. After thismessage, Orbiter will start parsing the command line arguments. Once this is done, thesession will execute these commands. At the end of the session, a short message is giventhat specifies the processor time used up by the session.
9
4 Makefiles and Shell Scripts
Orbiter is a command line driven system. This means that commands are typed into aterminal, and executed as typed. The command line is entered into an application that iscalled Terminal (or SuperShell in Windows). There is no graphical user interface. Orbiter iscalled from the command line, and command options are given to instruct Orbiter what todo. By utilizing the command line, Orbiter is just one software tool like many others. It isvery easy to interface with other software packages and exchange data through files. SomeComputer Algebra Systems (CAS) force the user into their own graphical user interface. Thismay be a great way to get started quickly. However, after a while the problem of passing datain and out of the CAS becomes an issue. Collaborative work with other software packagescan be difficult in this way. It is true that many systems allow a mode by which commandscan be read from file though moving data in and out of the system remains an issue. Orbiteris designed for data being held in various files. This makes working with Orbiter easier forlarger projects.
In order to facilitate the command line workflow, Orbiter leans on a unix tool that is calledmake. Make is a program that requires a file, called makefile to give instructions. Theinstructions in the makefile define the workflow. Make and makefiles are common unix tools,and they are often used to administer the installation of software from source code. Here,we utilize makefiles for the purposes of running a computer algebra system. Let us thereforedescribe make and makefiles. We note that shell scripts is another way that can be used.We will not discuss shell scripts here.
Makefiles were originally developed to describe dependencies of files, mostly in the context ofsoftware development. A makefile is a text file that can be used to hold certain commands andassociate them to shortcuts. A makefile can also be used to set up rules about dependenciesof files. Commands are executed to create certain files, and these commands may depend onother files that should be created using yet othr commands. Makefiles are used to describethe dependencies and the required commands. The program make uses a makefile to performthe required tasks. The tasks are given shortcut names which make it convenient to executecommands on the command line. For instance, suppose we have a orbiter command withsome options, say
orbiter.out -v 3 -define F -finite_field -q 16 -end \
-with F -do -finite_field_activity -cheat_sheet_GF -end
This command is used to create a report (“cheat sheet”) of the finite field F16, using thepredefined polynomial that is chosen by Orbiter. The purpose of this command is to producea file called
GF_16.tex
which can then be processed through latex to give the report. Observe that the command isquite long, and stretches over two lines. The backslash at the end of the line indicates thatthe command continues across the line break. This way, using backslahes at the end of theline, commands of arbitrary length can be given. Using make, we can assign a shortcut tothis command. For instance, we can have a makefile like this:
10
F_16:
orbiter.out -v 3 -define F -finite_field -q 16 -end \
-with F -do -finite_field_activity -cheat_sheet_GF -end
With this file present, we can run the orbiter command to produce the report of F16 usingthe short command
make F_16
typed into the terminal window (for instance SuperShell for Windows users). The programmake will look and find the makefile, and in it look and find the label F_16. It will thenexecute the command
orbiter.out -v 3 -define F -finite_field -q 16 -end \
-with F -do -finite_field_activity -cheat_sheet_GF -end
which produces the file GF_16.tex containing the desired report. We see that this saves usa lot of typing. If we wanted to do some other Orbiter command, we could edit the makefileand add another target and another Orbiter command. This way, makefiles help us keepkeep a good record of our activities, because all our commands are recorded in the makefile.
A makefile with all of the commands discussed in this user’s guide is distributed with Orbiter.The file is reproduced in Section 72.
11
Command Description
-finite_field A finite field Fq. See Sections 9 and 11.-projective_space A projective space of dimension n over
a finite field F . See Section 13.
-orthogonal_space A non-degenerate orthogonal space.See Section 18.
-linear_group A linear group. See Section 21.
-formula A formula. See Section 52.
-collection A collection of objects.
-combinatorial_object A combinatorial object. See Section 31.
-graph A graph. See Section 64.
-spread_table A table of spreads. See Section 62.
-packing_with_symmetry_assumption A generator for packings with assumedsymmetry. See Section 62.
-packing_choose_fixed_points A selection of fixed orbits for pack-ings with assumed symmetry. See Sec-tion 62.
-packing_long_orbits A search for long orbits for packingswith assumed symmetry. See Sec-tion 62.
-graph_classification An object which allows classifyinggraphs and tournaments. See Sec-tion 65.
Table 2: Objects that can be defined using a define command
5 Defining Objects
Orbiter offers objects for mathematical data types like groups, graphs, geometries and manyother things. A typical Orbiter session will first create a number of objects and then performsome activities on them. The objects are maintained in the symbol table. Do create objects,the
-define label keyword further specifications
command can be used. The keyword can be any of the commands in Table 2. Further typesof objects can be defined through activities. To select an object for an activity, the
-with label -do activity description
command sequence is used. Here, label is the name under which the object will be registeredin the symbol table.
12
Command Arguments Description
-loop i0 i1 s Creates the set S = {i0 +ks | i0 +ks <i1, k = 0, 1, . . .}.
-index_set S Initialize the set S from a sequence ofgiven numbers.
-affine_function a b Creates the set {ax+ b | x ∈ S}. Here,a, b ∈ Z.
-clone_with_
affine_function
a b Creates the set {ax + b | x ∈ S} ∪ S.Here, a, b ∈ Z.
-set_builder .. -end descr Recursively creates a set.
Table 3: Set Builder Commands
6 Set Builders
It is possible to create sets of integers using the -set_builder .. -end command, see Table 3.Let us look at some examples:
-set_builder -loop 0 64 1 -end
creates the set {0, 1, . . . , 63}.-set_builder -index_set "2,3,5,7,11,13" -end
creates the set {2, 3, 5, 7, 11, 13}.-set_builder -loop 0 32 1 -affine_function 2 1 -end
creates the set {1, 3, 5, . . . , 63}.-set_builder -loop 0 16 1 -affine_function 4 2 \
-clone_with_affine_function 4 3 -end
creates the set
{2, 3, 6, 7, 18, 19, 22, 23, 10, 11, 14, 15, 26, 27, 30, 31, 34, 35, 38, 39, 42, 43, 46, 47,50, 51, 54, 55, 58, 59, 62, 63.}
-set_builder -loop 0 16 1 -affine_function 1 16 \
-clone_with_affine_function 1 48 -end
creates the set
{16, 18, 24, 26, 48, 50, 56, 58, 17, 19, 25, 27, 49, 51, 57, 59, 20, 22, 28, 30, 52, 54,60, 62, 21, 23, 29, 31, 53, 55, 61, 63}.
13
Modifier Args Meaning
-set_of_points S A set S of points.
-set_of_lines S A set S of lines.
-file_of_points fname Read a set of points from the given file.
-file_of_lines fname Read a set of lines from the given file.
-file_of_packings_
through_spread_table
fnamefname2
Read a set of packings from the filefname. The packings are coded assets of spreads refering to the table ofspreads stored in fname2.
-file_of_point_set fname A file containing a set of points.
-file_of_designs fname v b ks
A file containing designs. v is the num-ber of points, b is the number of blocks,k is the block size and s is the size ofthe classes in the block-partition.
Table 4: Orbiter commands to define an input stream of objects
7 Input Streams
An input stream is a collection of objects defined in files or on the command line that willbe processed one-by-one. Table 4 list the commands to define input streams. For a list ofcommands to define input streams, see Table 4. Input streams will be used in Sections 32and 33.
14
Command Arguments Description
-power_mod a n p Computes an mod p.
-primitive_ root p Computes a primitive root modulo p.
-discrete_log b a p Computes n such that an ≡ b mod p.-extended_gcd a b Computes integers g, u, and v such that
g = gcd(a, b) = ua+ vb.
-square_root_mod a p Computes a square root of a modulo p,i.e. an integer b such that b2 ≡ a modp.
-square_root a Computes b√ac of an integer a.
-inverse_mod a p Computes the modular inverse of amodulo p, i.e. an integer b with ab ≡ 1mod p.
-draw_mod_n descr Draws the integers modulo n on a cir-cle.
Table 5: Basic Number Theory Commands
8 Basic Number Theory
Orbiter provides functions for computing with the ring of integers and integer factor rings.Computations with large intergers are supported through a long integer data type whichallows unrestricted precision. Table 5 shows Orbiter commands for basic number theory,including integer factor rings and the euclidean algorithm. For instance, the command
orbiter.out -v 5 -primitive_root 915839
computes a primitive root modulo 915839 using a randomized algorithm. The answer in thiscase is 43085. The command
orbiter.out -v 5 -power_mod 43085 49842 915839
computes4308549842 mod 915839
which is 487320. Conversely, the discrete log of 487320 with respect to the base 43085 modulo915839 can be computed using the command
orbiter.out -v 5 -discrete_log 487320 43085 915839
The answer to this command is 49842. This command is a brute force search, and can bequite expensive. The command
orbiter.out -v 5 -inverse_mod 1865025205 2147483647
15
computes the inverse of 1865025205 modulo 2147483647 which is 579785381. A different wayof computing the inverse is using the 1-trick. To this end, the gcd can be used:
orbiter.out -v 5 -extended_gcd 1865025205 2147483647
This command produces the output
1 = −503526232 ∗ 2147483647 + 579785381 ∗ 1865025205
which is the gcd written as a lattice combination of the input arguments. The inverse of1865025205 mod 2147483647 is the coefficient in front of the 1865025205. In order to computethe modular power
ae mod n,
the -power_mod command can be used. For instance,
orbiter.out -v 5 -power_mod 16807 1073741823 2147483647
computes 16807 raised to the power 1073741823 modulo 2147483647, which is 2147483646.In order to compute the modular square root, i.e. to solve for x in
x2 ≡ a mod p
the -square_root_mod command can be used. For instance,
orbiter.out -v 2 -square_root_mod 33 41
finds that the square root of 33 mod 41 is 19, i.e.
192 ≡ 33 mod 41.
This command applies the algorithm of Tonelli and Shanks (cf. [15]).
The command
orbiter.out -v 2 -draw_options -end \
-draw_mod_n -n 13 -file mod_13 -power_cycle 2 -end
computes the powers of 2 mod 13 and connects consecutive powers along the circle modulo13. By changing the value of the base, the diagrams in Figure 2 are created. The cases b = 2and b = 6 are special. In those cases, the sequence of powers ob b mod 13 loops back untoitself after visiting all non-zero elements modulo 13. This is because 2 and 6 are primitiveelements modulo 13. Because −1 is a square modulo 13, the power cycles of b and of −b havethe same length, so −2 = 11 and −6 = 5 are primitive elements also. In total, there are4 primitive elements modulo 13. This agrees with ϕ(12) = 4, where ϕ(k) is Euler’s totientfunction, which counts the number of generators in the cyclic group of order k. However, thisreasoning relies on the fact that 13 is prime, which implies that the group of prime residuesmodulo 13 is cyclic.
The command
orbiter.out -v 2 -draw_options -scale 0.8 -embedded -end \
-draw_mod_n -n 127 -file mod_127 -power_cycle 3 -end
creates the drawing shown in Figure 3.
16
01
2
3
4
567
8
9
10
11
12
b = 2
01
2
3
4
567
8
9
10
11
12
b = 3
01
2
3
4
567
8
9
10
11
12
b = 4
01
2
3
4
567
8
9
10
11
12
b = 5
01
2
3
4
567
8
9
10
11
12
b = 6
Figure 2: Cycle of powers of b modulo 13
Figure 3: Cycle of powers of 3 modulo 127
17
9 Prime Fields
Let Fq denote the finite field with q elements. Up to isomorphism, there is only one field oforder q. Finite fields of prime order can be created as integer factor ring.
Important comment: Orbiter implements finite fields using tables for additionand multiplication. This imposes a limitation on the size of the field that can becreated.
See Section 71 for a list of limitations of Orbiter.
If p is a prime number, the integer factor ring Z/I(p) is a finite field. Here,
I(p) = pZ = {pk | k ∈ Z} = {0, ±k, ±2k, ±3k, . . .}
is the ideal of all integer multiples of p. The elements of Fp are the residue classes of theideal given by the integer multiples of p. Each residue class has the form
{a+ kp | k ∈ Z}.
Standard representatives of the equivalence classes can be chosen as the smallest non-negativemember in each class. This means that the standard representatives are the integers from0 to p− 1. This canonical representative is the remainder after division by p. Two integersbelong to the same residue class if they have the same remainder after division by p. Forinstance, 11 and 46 are in the same residue class modulo 5 because both have a remainderof 1 after division by five. It is convenient to identify the residue classes mod p with theintegers from 0 to p − 1. In Orbiter, this convention is used automatically. The additiontable and the multiplication table can be used to add and multiply in Fp. For instance, inFigure 4 the addition and multiplication tables of F7 are shown, both numerically and usingcolors. The natural ordering of the integers in the interval [0, 6] is used. Different integersare represented by different colors. It is customary to restrict the multiplication table to thenon-zero elements of the field.
A finite field Fq can be created using the
-finite_field
command. Table 6 lists Orbiter commands for creating a finite field that can come after-finite_field. For instance,
-finite_field -q 3 -end
creates the finite field F3. It is possible to create a symbolic variable for a finite field. Forinstance, the command
-define F -finite_field -q 3 -end -end
18
Figure 4: Addition and multiplication tables of F7
Command Arguments Description
-q q Specify the order of the field. Here, q =pk for some prime p and some positiveinteger k.
-override_
polynomial
n Specify the polynomial used to createthe finite field. The polynomial is givenas integer, using the base p representa-tion. See Section 11.
Table 6: Options for Creating Finite Fields
19
Command Arguments Description
-cheat_sheet_GF Produce a cheat sheet in latex whichshows information about the field, in-cluding addition and multiplication ta-bles.
Table 7: Finite Field Activities
creates a symbolic variable F = F3.
Table 7 lists basic Orbiter activities for finite fields. More activities will follow in Section 11.Orbiter can create cheat sheets for finite fields. These are latex files which contain a reportabout properties of the field. For instance, the following Orbiter command creates a cheatsheet for F7. It also creates the tables for addition and multiplication and writes them ascsv-file.
orbiter.out -v 3 -define F -finite_field -q 7 -end -end \
-with F -do -finite_field_activity -cheat_sheet_GF -end
Here is the information about F7 from the cheat sheet. The element α is a primitive element.
Zi = logα(1 + αi)
i γi −γi γ−1i logα(γi) αi Zi0 0 = 0 0 DNE DNE 1 2
1 1 = 1 6 1 0 3 4
2 2 = α2 5 4 2 2 1
3 3 = α 4 5 1 6 DNE
4 4 = α4 3 2 4 4 5
5 5 = α5 2 3 5 5 3
6 6 = α3 1 6 3 1 2
+ 0 1 2 3 4 5 6
0 0 1 2 3 4 5 6
1 1 2 3 4 5 6 0
2 2 3 4 5 6 0 1
3 3 4 5 6 0 1 2
4 4 5 6 0 1 2 3
5 5 6 0 1 2 3 4
6 6 0 1 2 3 4 5
20
Figure 5: Addition and multiplication table of F7 using a primitive element
· 1 2 3 4 5 61 1 2 3 4 5 6
2 2 4 6 1 3 5
3 3 6 2 5 1 4
4 4 1 5 2 6 3
5 5 3 1 6 4 2
6 6 5 4 3 2 1
30 ≡ 131 ≡ 332 ≡ 233 ≡ 6
34 ≡ 435 ≡ 536 ≡ 1
There is a second way of labeling the elements which is sometimes used. When the non-zeroelements are arranged according to powers of a primitive element, the cyclic structure of themultiplicative group becomes apparent. If α is a primitive element, we arrange the elementsof Fp as
0, 1, α, α2, . . . , αq−2.
The cheat sheet contains this list of field elements at the very end. In Figure 5, the additionand multiplication tables of F7 are shown with respect to the cyclic ordering of elements as
0, 30, 31, 32, . . . , 36 = 0, 1, 3, 2, 6, 4, 5, 1.
In the second ordering, the addition table of the prime field no longer exhibits cyclic struc-ture.
21
10 Polynomials Over Finite Fields
For p prime, the finite field Fp of order p can be constructed as factorring of the integersmoulo p. In this section, we will consider polynomials over Fp. The ring of polynomials inone variable with coefficients in Fp is denoted as Fp[X].
The-finite_field_activity ... -end
command sequence can be used to start a command requiring a finite field. The -q q optioncan be used to specify the order of the finite field. The -override_polynomial a optioncan be used to specify the polynomial m(X) as integer a in the bease p representation.This option can be ommitted, in which case Orbiter will use a precomputed and built-inpolynomial. Table 8 lists Orbiter activities for polynomials over finite fields. For instance,the command
orbiter.out -v 2 -define F -finite_field -q 2 -end -end \
-with F -do -finite_field_activity -polynomial_division \
"1,0,0,0,0,0,0,0,0,0,1" "1,0,1,1" -end
computes the polynomial long division of A(X) by B(X) over F2 where
A(X) = X10 + 1, B(X) = X3 +X2 + 1.
The result is Q(X) and R(X) with
A(X) = Q(X) ·B(X) +R(X)
withQ(X) = X7 +X6 +X5 +X3 + 1, R(X) = X2.
Note that the coefficient lists in the arguments are in the reverse order of how we print thepolynomials.
The command -extended_gcd_for_polynomials takes two polynomials A(X) and B(X)and computes polynomials U(X) and V (X) and G(X) such that G(X) is the greatest com-mon divisor of A(X) and B(X) and
G(X) = U(X) · A(X) + V (X) ·B(X).
For instance,
orbiter.out -v 2 -define F -finite_field -q 2 -end -end \
-with F -do -finite_field_activity -extended_gcd_for_polynomials \
"1,0,0,0,0,0,0,0,0,0,1" "1,0,1,1" -end
computes
U(X) = X + 1, V (X) = X8 +X5 +X4 +X3 +X, G(X) = 1.
The Berlekamp matrix can be used to test if a polynomial is irreducible over a given finitefield. The polynomial is irreducible if and only if the rank of the Berlekamp matrix is d− 1,where d is the degree of the polynomial. For instance, the command
22
Command Arguments Description
-polynomial_
division
A(X) B(X) Polynomial division of A(X) by B(X)over Fq. A(X) and B(X) are given ascoefficient list, starting from the lowestcoefficient.
-extended_gcd_
for_polynomials
A(X) B(X) Extended gcd for polynomials A(X)and B(X) over Fq. A(X) and B(X) aregiven as coefficient list, starting fromthe lowest coefficient.
-polynomial_
mult_mod
A(X) B(X)M(X)
Multiply the polynomials A(X) andB(X) modulo M(X) in Fq[X].
-Berlekamp_matrix A(X) Computes the rank of the Berlekampmatrix associated to the polynomialA(X) over Fq. The polynomial A(X)is irreducible over Fq if the Berlekampmatrix has rank d − 1 where d is thedegree of A(X). The Berlekamp matrixis F − I where F is the Frobenius ma-trix and I is the identity matrix. TheFrobenius matrix is the matrix of theFrobenius endomorphism with repsectto the standard basis of the polynomialring: 1, X,X2, . . . , Xd−1.
-polynomial_
find_roots
A(X) Find the roots of A(X) over Fq.
-make_table_of_
irreducible_
polynomials
d Produces a list of all irreducible poly-nomials of degree d over Fq.
-find_CRC_
polynomials
t n k Computes all CRC polynomials of de-gree k over Fq who detect all error pat-terns of Hamming weight t or less inmessages of length n. See Section 49.
Table 8: Finite Field Activities Related to Polynomials
23
orbiter.out -v 2 -define F -finite_field -q 2 -end -end \
-with F -do -finite_field_activity -Berlekamp_matrix "1,1,0,1" -end
computes the Berlekamp matrix associated with the polynomial X3 + X + 1 over F2. Thematrix is 0 0 00 1 1
0 1 0
.Since the matrix has rank 2, the polynomial is irreducible.
Orbiter can compute irreducible polynomials. For a given degree over a given field Fq Wedistinguish two tasks: The first task is finding one irreducible polynomial of the given degreeand with the given field of coefficients. The second task is finding all irreducible polynomialsgiven that one has already been found.
For instance, the command
orbiter.out -v 3 -search_for_primitive_polynomial_in_range 2 2 2 10 | grep //
searches for primitive polynomials over F2 of degree 2 to 10. The output of the program islengthy. For this reason, the unix commnd grep is used to filter for lines containing thegiven pattern “//”. This yields the list
"7", // X^{2} + X + 1
"13", // X^{3} + X^{2} + 1
"25", // X^{4} + X^{3} + 1
"37", // X^{5} + X^{2} + 1
"97", // X^{6} + X^{5} + 1
"193", // X^{7} + X^{6} + 1
"285", // X^{8} + X^{4} + X^{3} + X^{2} + 1
"529", // X^{9} + X^{4} + 1
"1033", // X^{10} + X^{3} + 1
Primitive polynomials over the base field Fs are converted into integers, using the base-srepresentation of integers. For instance, the polynomial X2 +X + 1 is read as binary string111, which in turn translates to the integer 7 (we use s = 2).
Regarding the problem of creating all irreducible polynomials, we can use the followingcommand:
orbiter.out -v 6 -define F -finite_field -q 4 -end -end \
-with F -do -finite_field_activity \
-make_table_of_irreducible_polynomials 3 -end
It produces a table of all irreducible polynomials of degree 3 over F4. The outputis:
24
The 20 irreducible polynomials of degree 3 over F_4 are:
3 2 1 1
1 3 0 1
3 1 2 1
3 2 3 1
2 2 3 1
2 2 2 1
1 2 0 1
1 0 1 1
3 3 3 1
2 3 2 1
3 1 1 1
3 3 2 1
1 0 3 1
3 0 0 1
2 1 1 1
2 0 0 1
2 1 3 1
1 1 0 1
2 3 1 1
1 0 2 1
Let us check this list a little bit. The command
orbiter.out -v 2 -define F -finite_field -q 4 -end -end \
-with F -do -finite_field_activity -Berlekamp_matrix "1,3,0,1" -end
shows that the Berlekamp matrix has rank 2, so 1 + 3X + X3 (read over F4) is irreducible.Indeed, the coefficient vector 1, 3, 0, 1 is the second entry in the list. However,
orbiter.out -v 2 -define F -finite_field -q 4 -end -end \
-with F -do -finite_field_activity -Berlekamp_matrix "1,3,1,1" -end
has a Berlekamp matrix of rank one, so 1+3X+X2 +X3 is reducible. Indeed, the coefficientvector 1, 3, 1, 1 does not appear in the list.
25
11 Extension Fields
Let F be a field. An extension field of F is any field E which contains F. Because E is avector space over F , the dimension of E/F is wel-defined. It may be finite or infinite. Anexample of a field extension is a field of the form E = F (α), where α is any element overF. Here, F (α) is the smallest field which contains F and α. If γ ∈ E satisfies a polynomialequation with coefficients in F, then γ is called algebraic over F . The minimum polynomialof an element γ in E over F is the monic, lowest degree polynomial in F [X] which has γas a root. A field extension E/F is algebraic if every element in E is algebraic over F . Inparticular, F (α) is algebraic over F if α is. The degree of E/F equals the degree of theminimum polynomial of α over F .
In this section, we will consider algebraic extension of finite fields. If F = Fq is a field oforder q, then any algebraic extension E of F has order qe where e is the degree of E over F .If E = F (α) is algebraic, the degree of E over F is the degree of the minimum polynomialof E over F . If F = Fq and E = F (α) is algebraic of degree e, then |F | = qe. Every finitefield E is of this form, where F = Fp and p is the characteristic of E.
Any such E can be constructed as a polynomial factorring of the ring Fp[X]. For a polynomialm(X) we consider the ideal
I(m) = m(X)Fp[X] = {m(X)k(X) | k(X) ∈ Fp[X]}
of all polynomial multiples of m(X). Under the assumption that m(X) has degree e > 1 andis irreducible, the residue class ring
Fp[X]/I(m)
is a field with q = pe elements. Each residue class has a canonical representative. Thecanonical representative is the unique element in the residue class which has degree less thane and leading coefficient one. By means of identification, we can take these polynomials tobe the set of standard representatives of the residue classes. So, for instance, for q = 4 = 22,we can pick the irreducible polynmial m(X) = X2 +X + 1 over F2 and have four standardrepresentatives modulo I(m), namely
0,
1,
X,
X + 1.
Together, these make up a complete set of representatives of the residue classes modulo I(m),and hence can be identified with the elements of F4:
F4 = {0, 1, X, X + 1}.
26
Figure 6: Addition and multiplication tables of F4
The addition of polynomials is as in F2[X], so
0 1 X X + 1
0 0 1 X X + 1
1 1 0 X + 1 X
X X X + 1 0 1
X + 1 X + 1 X 1 0
To compute the multiplication table for the field F4. We can use polynomial arithmeticmodulo m(X) : It is clear how multiplication by 0 or 1 works, so we need to focus on thepolynomials X and X + 1:
X · X = X2 ≡ X + 1 mod X2 +X + 1,X · (X + 1) = X2 +X ≡ 1 mod X2 +X + 1,(X + 1) · X = X2 +X ≡ 1 mod X2 +X + 1,(X + 1) · (X + 1) = X2 + 1 ≡ X mod X2 +X + 1,
so the multiplication table of F4 turns out to be
0 1 X X + 1
0 0 0 0 0
1 0 1 X X + 1
X 0 X X + 1 1
X + 1 0 X + 1 1 X
Figure 6 shows a graphical representation of the addition and multiplication tables of F4using colors to represent the different elements: White is zero, black is one, red is X andgreen is X + 1. In the multiplication table, the row and column associated with the zeroelements are removed.
Table 9 lists Orbiter activities for finite fields. This extends Table 7 in Section 11.
27
Command Arguments Description
-trace Computes the partitioning of the fieldelements according to the value of theirabsolute trace.
-norm Computes the partitioning of the fieldelements according to the value of theirabsolute norm.
-normal_basis d Computes a normal basis for Fqd .
Table 9: More Finite Field Activities
The isomorphism type of the resulting field only depends on the order q of the field, and noton the choice of the polynomial. However, for practical computations, the choice of the poly-nomial matters. For instance, results can only be shared between different computer algebrasystems if the same polynomials are used. Orbiter has a large collection of polynomials builtin. Besides these, a polynomial can be specified. The polynomials that Orbiter offers are infact primitive, which means that the root α is a primitive element for the field Fq. This justmeans that it is a generator of the multiplicative group. So, any non-zero element in Fq is asuitable power of α.
If Fq is an extension of the prime field Fp, we use a different labeling. This time, we exploitthe fact that Fq is a vector space over Fp. Let α be a root of the irreducible polynomialm(X) ∈ Fp[X] used to create the field. Suppose that q = pe, i.e., the degree of m(X) ise. An Fp-basis for the vector space Fq over Fp is given by the powers αi, for 0 ≤ i < e.Therefore, any element γ of Fq has a unique expression of the form
γ =e−1∑h=0
aiαi, 0 ≤ ai < p for all i.
The associated integer rank of γ is obtained by replacing α by p in this expression andevaluating the expression over the integers. So, the rank of γ is
e−1∑h=0
aipi.
As γ ranges over all field element in Fq, the rank values take on every value in the interval[0, q−1]. The ordering of elements of Fq according to these ranks is called the lexicographicalordering. The numerical rank of zero is 0 and the numerical rank of one is 1. The numericalrank of α, the primitive element, is p. The numerical ranks of the elements of the primesubfield are exactly the elements of [0, p− 1].
The primitive polynomials used by Orbiter to create small finite fields are listed in Table 10.The relation is given using the Greek letter that is used in orbiter cheat sheets for thatparticular field.
28
q Polynomial Numerical Relation
4 X2 +X + 1 7 ω2 = ω + 1
8 X3 +X2 + 1 13 γ3 = γ2 + 1
9 X2 +X + 2 14
16 X4 +X3 + 1 25 δ4 = δ3 + 1
25 X2 +X + 2 22
27 X3 + 2X + 1 34
32 X5 +X2 + 1 37 η5 = η2 + 1
49 X2 +X + 3 59
64 X6 +X5 + 1 97
81 X4 +X3 + 2 110
121 X2 + 4X + 2 167
125 X3 +X2 +X + 2 86
128 X7 +X6 + 1 193 ζ7 = ζ6 + 1
169 X2 +X + 2 184
243 X5 + 2X + 1 250
256 X8 +X4 +X3 +X2 + 1 285
289 X2 +X + 3 309
343 X3 + 3X + 2 366
361 X2 +X + 2 382
512 X9 +X4 + 1 529
529 X2 + 2X + 5 580
625 X4 +X3 +X + 2 326
729 X6 +X5 + 2 974
841 X2 + 5X + 2 988
961 X2 + 2X + 3 1026
1024 X10 +X3 + 1 1033
Table 10: Orbiter primitive polynomials for fields Fq with q ≤ 1024
29
Table 11: The field F16
Let us look at a few examples. The command
orbiter.out -define F -finite_field -q 4 -end -end \
-with F -do -finite_field_activity -cheat_sheet_GF -end
creates a report for the field F4. The command
orbiter.out -define F -finite_field -q 16 -end -end \
-with F -do -finite_field_activity -cheat_sheet_GF -end
creates a cheat sheet for F16. This command produces Table 11.
Unlike other computer algebra systems (GAP [20] and Magma [12]), Orbiter does not useConway polynomials. Instead, it provides the option to override the polynomial used tocreate the finite field. For subfield relationships, the cheat sheet will indicate the irreduciblepolynomials of all subfields for a given field. For instance, Table 12 shows the subfields ofF64 generated by the polynomial X6 +X5 + 1 whose numerical rank is 97.
The lexicographic ordering has an interesting side-effect for the tabled of extension fields.The lexicographic ordering starts with the elements of the prime field. For this reason, thetables of the prime subfield can be seen in the upper left corner in the table of the extensionfield. For instance, for F9 we see the tables for F3 in the upper left corners, as illustrated in
30
Subfield Polynomial Numerical rank
F4 X2 +X + 1 7F8 X3 +X + 1 11
Table 12: The subfields of F64
Figure 7: Addition and multiplication table of F3 and F9 using the lexicographic ordering ofelements
31
Figure 8: Addition and multiplication table of F9 using the cyclic ordering of elements
Figure 7. Recall that we do not draw the row and column associated with the zero elementin the multiplication tables.
Orbiter uses primitive polynomials for creating extension fields. Because of this, the elementα is always primitive. Since the numerical rank of α is p, this means that the rank p alwaysrepresents a primitive element in an extension field. For the addition and multiplicationtables of F9 arranged with respect to powers of a primitive element, see Figure 8.
A normal basis for a field extension Fqd over Fq is a basis of Fqd as vector space over Fqwhich consists of one cycle of the Frobenius automorphism of Fqd over Fq. For instance, thecommand
orbiter.out -v 2 -define F -finite_field -q 2 -end -end \
-with F -do -finite_field_activity -normal_basis 3 -end
computes a normal basis of F8 over F2. Using the polynomial X3 +X2 + 1, the normal basisin terms of the standard polynomial basis 1, X,X2, . . . is given by the columns of the matrix 1 0 01 1 0
1 0 1
.Reading the columns as cofficient vectors with respect to the standard basis, the normalbasis is
b1 = 1 +X +X2, b2 = X, b3 = X
2.
32
Let us apply the Frobenius mapping Φ to the elements of the normal bases:
bΦ1 = (1 +X +X2)2 = 1 +X2 +X4 = 1 +X2 +X3 +X = 1 +X +X2 +X2 + 1 = X = b2,
bΦ2 = X2 = b3,
bΦ3 = X4 = X3 +X = X2 +X + 1 = b1.
Thus,b1 7→ b2 7→ b3 7→ b1
under Φ, as required.
33
Command Arguments Description
-RREF m n L Compute the RREF of them×nmatrixL over Fq
-nullspace m n L Compute a basis for the right nullspaceof the m× n matrix L
-normalize_from_
the_right
Normalizes the result of -RREF ornullspace from the right
-normalize_from_
the_left
Normalizes the result of -RREF ornullspace from the left
-eigenstuff d M Computes the eigenvalues and eigen-vectors of the given d × d matrix Mover Fq
-eigenstuff
_from_file
d fname Computes the eigenvalues and eigen-vectors of the d× d matrix M over Fq.The matrix M is read from a csv file.
-all_rational
_normal_forms
d Produces a report of all rational normalforms of endomorphisms of Fdq
Table 13: Finite Field Activities for Linear Algebra
12 Linear Algebra Over Finite Fields
In Table 13, some finite field activities regarding linear algebra are shown. For instance, thecommand
orbiter.out -v 2 -define F -finite_field -q 2 -end -end \
-with F -do -finite_field_activity \
-RREF 2 5 "1,1,1,1,0,1,1,0,0,1" -normalize_from_the_right \
-end
computes the RREF form of the matrix[1 1 1 1 0
1 1 0 0 1
]over F2. The output is the matrix
[1 1 0 0 1
0 0 1 1 1
].
The command
34
orbiter.out -v 2 -define F2 -finite_field -q 2 -end -end \
-with F2 -do -finite_field_activity \
-nullspace 2 5 "1,1,1,1,0,1,1,0,0,1" \
-normalize_from_the_right \
-end
computes the nullspace of the same matrix. The output is the matrix
1 0 0 1 10 1 0 1 10 0 1 1 0
.
Orbiter can compute eigenvalues and eigenvectors of matrices over finite fields. For instance,the command
orbiter.out -v 6 -finite_field_activity -q 5 \
-eigenstuff 4 "0,1,0,2,0,1,2,1,4,2,3,1,2,0,4,3" \
-end
computes all eigenvectors and eigenvalues of the matrix0 1 0 2
0 1 2 1
4 2 3 1
2 0 4 3
over F5.
Orbiter can produce a list of all conjugacy classes of endomorphisms of Fdq by means of theirrational normal forms. For instance
orbiter.out -v 6 -finite_field_activity -q 2 \
-all_rational_normal_forms 3 -end
produces a list of all 6 conjugacy classes of GL(3, 2). The report includes the order of the cen-tralizer and the order of the conjugacy class. The order of the centralizer is computed usingKung’s formula [32]. This command relies on the Orbiter catalogue of irreducible polynomi-als. For an introduction to the rational normal form of endomorphisms, see [38].
35
Conjugacy Classes of GL(3, 2)
The number of conjugacy classes of GL(3, 2) is 6: 0 0 11 0 10 1 0
, 0 0 11 0 0
0 1 1
, 0 1 01 1 0
0 0 1
, 1 0 01 1 0
0 1 1
, 1 0 01 1 0
0 0 1
, 1 0 00 1 0
0 0 1
Class 0 / 6
3, 1, 0 0 0 11 0 10 1 0
centralizer order 7class size 24Class 1 / 62, 1, 0 0 0 11 0 0
0 1 1
centralizer order 7class size 24Class 2 / 60, 1, 0; 1, 1, 0 0 1 01 1 0
0 0 1
centralizer order 3class size 56Class 3 / 6
36
0, 3, 0 1 0 01 1 00 1 1
centralizer order 4class size 42Class 4 / 60, 3, 1 1 0 01 1 0
0 0 1
centralizer order 8class size 21Class 5 / 60, 3, 2 1 0 00 1 0
0 0 1
centralizer order 168class size 1
37
Command Arguments Description
-cheat_sheet_PG n Produce a cheat sheet for PG(n, q)
-decomposition_
by_element
e D fname Let s be the group element repre-sented by S. A report about the ac-tion of si is produced and written tothe file fname. This option requires-cheat_sheet_PG.
-transversal L1 L2
-intersection_
of_two_lines
L1 L2 Computes the intersection of two lines.
-move_two_lines_
in_hyperplane_
stabilizer
M1 M2 N1 N2 Computes a projectivity of PG(3, q)fixing the hyperplan v(X3) moving linemi to ni for i = 1, 2. It assumes thatboth m1,m2 and n1, n2 are skew. Thelines mi and ni are given through Or-biter line numbers.
-move_two_lines_
in_hyperplane_
stabilizer_text
M1 M2 N1 N2 Like -move_two_lines_in_hyperplane_stabilizer, butnow each line is given by a 2 × 4generator matrix for the subspace.
-study_surface i
-inverse_isomor
phism_klein_quadric
L36
-rank_point_in_PG n L Computes the orbiter point rank of thevector L in PG(n, q).
Table 14: Finite Field Activities
13 Finite Projective Spaces
The orbiter commands related to finite projective spaces are grouped into three classes: finitefield activities, projective space activities and otherwise. In Table 14, some commands re-garding projective spaces over finite fields are shown. In Tables 15-16, the Orbiter commandsassociated with a projective space over a finite field are shown.Table 17 lists Orbiter commands related to projective geometries which are not tied to afinite field activity.
Finite field activities rely on a finite field object. The finite field object must be createdfirst. The finite field activity can be invoked for the finite field object. Likewise, a projectivespace activity relies on a projective space object, which must be created first.
The permutation representation of various groups acting on projective spave is based on setof points in the projective geometry PG(n, q). The purpose of this enumerator is to establish
38
Command Arguments Description
-canonical_ form_PG Descr Computes the canonical form and theautomorphism group of objects inPG(n, q). See Table 39 for details.
-table_of_
cubic_surfaces_
compute_properties
fname q0 col-offset
See Section 40.
-cubic_surface_
properties_analyze
fname q0 See Section 40.
-canonical_form_
of_code
label m n matrix Compute the automorphism group ofa linear code. See Section 46. UsesNauty.
-map label parameters evaluate a formula using the given pa-rameters
-analyze_
del_Pezzo_surface
label parameters
-cheat_sheet_for_
decomposition_by_
element_PG
power elt fname
-define_surface label descr To create a cubic surface and add it tothe symbol table under the given label.See Section 36.
-classify_surfaces_
with_double_sixes
label control Classify cubic surfaces using the doublesix approach. See Section 38.
-classify_surfaces_
through_arcs_
and_two_lines
See Section 38.
-test_nb_Eckardt_
points
nbE See Section 38.
-classify_surfaces_
through_arcs_
and_trihedral_pairs
See Section 38.
-create_surface description Create a cubic surface
-sweep fname
-sweep_4 fname descrip-tion
-six_arcs
-filter_by_nb_
Eckardt_points
nbE
Table 15: Projective Space Activities (Part 1)
39
Command Arguments Description
-surface_quartic
-surface_clebsch
-surface_codes
-trihedra1_control
-trihedra2_control
-control_six_arcs
-make_gilbert_
varshamov_code
n d See Section 53.
-spread_classify k control See Section 60.
-classify_
semifields
control
-cheat_sheet Produce a cheat sheet for PG(n, q)
Table 16: Projective Space Activities (Part 2)
a bijection between the set of points and the integers on the interval [0, θn(q)− 1], where
θn(q) =qn+1 − 1q − 1
.
In order to facilitate the bijection, Orbiter enumerates representative vectors for the one-dimensional subspaces. The conditions on the vectors are summarized below:
1. The vector is not the zero vector.
2. The rightmost nonzero entry in the vector is one. If it is not, we nomalize the vectorso that the rightmost nonzero vector is indeed one. This operation does not changethe projective point which is associated with the vector.
The second condition ensures that we list each projective point exactly once. We require twofunctions, Rank and Unrank. The function Rank takes a vector x ∈ Fnq , not zero, andmaps it to the element in ZN representing the projective point P(x). A frame in PG(n, q)is a set of n + 2 points, no n + 1 in a hyperplane. We assume that the coordinates of avector are indexed by the elements of Zn. Also, we let ei be the i-th unit vector. A framefor PG(n, q) is
e0, . . . , en−1, e0 + · · ·+ en−1.
This is the standard frame. We start the labeling of points with the standard frame. Afterthese n + 2 points, we list the remaining points in lexicographic ordering (utilizing right-normalized representative). Thus, for PG(2, 2) the ordering is
(1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 1), (1, 1, 0), (1, 0, 1), (0, 1, 1).
40
Modifier Args Meaning
-classify_cubic_curves q Classifies cubic curves in PG(2, q). Re-quires -control_arcs. See Section 35.
-control_arcs description Poset classification control for arcs usedduring the classification of cubic curves.See Table 32.
-create_points_
on_quartic
� Creates a table of points on a specificquartic curve. Consecutive points areno more than � apart.
-create_points_
on_parabola
� a b c Creates a table of points on theparabola y = ax2 + bx + c. Consecu-tive points are no more than � apart.
-smooth_curve � N b tmintmax func-tion
Creates at least N points on a continu-ous curve given by “function”. Consec-utive points are no more than � apart.The function must be in terms of a pa-rameter t. The values of t are takenfrom the interval [tmin, tmax].
-create_spread description Creates a spread according to the de-scription. See Section 60.
-make_table_of_
surfaces
Produces a latex table summarizing thesurfaces in the Orbiter catalogue.
Table 17: Orbiter commands related to projective geometries
41
a = Rank(x) x = Unrank(a)
0 (1, 0, 0)
1 (0, 1, 0)
2 (0, 0, 1)
3 (1, 1, 1)
4 (1, 1, 0)
5 (1, 0, 1)
6 (0, 1, 1)
Table 18: Representatives of the points of PG(2, 2)
Let us describe the two functions rank and unrank to perform the actual mappings betweenPG(n, q) and ZN , where N = θn(q). For this, assume that ranking and unranking functionshave already been defined for the elements of the finite field Fq. Thus, we assume that forx ∈ Fq, Rank(Fq, x) is a number b in Zq. Also, for b ∈ Zq, we assume that Unrank(Fq, b)is the corresponding x ∈ Fq. So, we assume that Rank and Unrank are mutually inversefunctions. Consider the group PGL(3, 2) acting on PG(2, 2), for instance. The points of
Algorithm 1 Rank
1: procedure Rank(vector : x, field : Fq, int : n)2: assert x is a nonzero vector in Fnq .3: if x = ei then4: return i5: if x = one then6: return n7: i← max{j ∈ Zn | xj 6= 0}8: x← 1
xix
9: a := 010: for j = i− 1, . . . , 1, 0 do11: a← a+Rank(Fq, xj)12: if j > 0 then13: a← a · q14: if i = n− 1 and a ≥
∑i−1j=0 q
j then15: a← a− 116: a← a+ n− i+
∑i−1j=0 q
j
17: return a
PG(2, 2) are listed in 18.
For instance, the command
orbiter.out \
-draw_options -end \
42
Algorithm 2 Unrank
1: procedure Unrank(int : a, field : Fq, int : n)2: assert a ∈ ZN where N = θn−1(q).3: if a < n then4: return ea5: a← a− n6: if a = 0 then7: return one8: a← a− 19: x← 0
10: for i = 1, . . . , n− 1 do11: if a ≥
∑i−1j=1 q
j then
12: a← a−∑i−1
j=1 qj
13: else14: xi ← 115: break16: for k = i+ 1, . . . , n− 1 do17: xk ← 018: a← a+ 119: if i = n− 1 and a ≥
∑i−1j=0 q
j then20: a← a+ 121: j ← 022: while a > 0 do23: r ← a mod q24: xj ← Unrank(Fq, r)25: j ← j + 126: a← (a− r)/q27: for h = j, . . . , i− 1 do28: xh ← 029: return x
43
-define F -finite_field -q 2 -end \
-define P -projective_space 3 F \
-with P -do -projective_space_activity -cheat_sheet -end
creates a report of the projective geometry PG(3, 2). The report includes a list of the enu-merated objects:
The projective space PG(3, 2)
q = 2p = 2e = 1n = 3Number of points = 15Number of lines = 35Number of lines on a point = 7Number of points on a line = 3
The points of PG(3, 2)
PG(3, 2) has 15 points:
P0 = (1, 0, 0, 0)P1 = (0, 1, 0, 0)P2 = (0, 0, 1, 0)P3 = (0, 0, 0, 1)
P4 = (1, 1, 1, 1)P5 = (1, 1, 0, 0)P6 = (1, 0, 1, 0)P7 = (0, 1, 1, 0)
P8 = (1, 1, 1, 0)P9 = (1, 0, 0, 1)P10 = (0, 1, 0, 1)P11 = (1, 1, 0, 1)
P12 = (0, 0, 1, 1)P13 = (1, 0, 1, 1)P14 = (0, 1, 1, 1)
Normalized from the left:
P0 = (1, 0, 0, 0)P1 = (0, 1, 0, 0)P2 = (0, 0, 1, 0)P3 = (0, 0, 0, 1)
P4 = (1, 1, 1, 1)P5 = (1, 1, 0, 0)P6 = (1, 0, 1, 0)P7 = (0, 1, 1, 0)
P8 = (1, 1, 1, 0)P9 = (1, 0, 0, 1)P10 = (0, 1, 0, 1)P11 = (1, 1, 0, 1)
P12 = (0, 0, 1, 1)P13 = (1, 0, 1, 1)P14 = (0, 1, 1, 1)
The lines of PG(3, 2)
PG(3, 2) has 35 1-subspaces:
L0 =
[1000
0100
]= Pl(1, 0, 0, 0, 0, 0)
44
L1 =
[1000
0110
]= Pl(1, 0, 1, 0, 0, 0)
L2 =
[1000
0101
]= Pl(1, 0, 0, 0, 1, 0)
L3 =
[1000
0111
]= Pl(1, 0, 1, 0, 1, 0)
L4 =
[1000
0010
]= Pl(0, 0, 1, 0, 0, 0)
L5 =
[1000
0011
]= Pl(0, 0, 1, 0, 1, 0)
...
L34 =
[0010
0001
]= Pl(0, 1, 0, 0, 0, 0)
Lines sorted by Pluecker coordinates
0 = Pl(1, 0, 0, 0, 0, 0) = L0 =
[1000
0100
]
1 = Pl(0, 1, 0, 0, 0, 0) = L34 =
[0010
0001
]
2 = Pl(0, 0, 1, 0, 0, 0) = L4 =
[1000
0010
]
3 = Pl(0, 0, 0, 1, 0, 0) = L30 =
[0100
0001
]
4 = Pl(0, 0, 0, 0, 1, 0) = L6 =
[1000
0001
]
5 = Pl(0, 0, 0, 0, 0, 1) = L28 =
[0100
0010
]...
34 = Pl(0, 1, 1, 1, 1, 1) = L26 =
[1101
0011
]PG(3, 2) has the following low weight Pluecker lines:
L0 =
[1000
0100
]= Pl(1, 0, 0, 0, 0, 0)
L4 =
[1000
0010
]= Pl(0, 0, 1, 0, 0, 0)
45
L6 =
[1000
0001
]= Pl(0, 0, 0, 0, 1, 0)
L28 =
[0100
0010
]= Pl(0, 0, 0, 0, 0, 1)
L30 =
[0100
0001
]= Pl(0, 0, 0, 1, 0, 0)
L34 =
[0010
0001
]= Pl(0, 1, 0, 0, 0, 0)
The planes of PG(3, 2)
PG(3, 2) has 15 2-subspaces:
L0 =
100001000010
L1 =
100001000011
...
L14 =
010000100001
The polynomial rings associated with PG(3, 2)
h monomial vector
0 X0 (1, 0, 0, 0)
1 X1 (0, 1, 0, 0)
2 X2 (0, 0, 1, 0)
3 X3 (0, 0, 0, 1)
Suppose we are looking for a projectivity of PG(3, 16) fixing the plane v(X3) pointwise andmapping a pair of skew lines not in that plane to another pair of skew lines not in that plane.For instance, we want to map
M1 =
[1 0 0 0
0 0 0 1
]7→ N1 =
[1 0 0 0
0 0 0 1
]
46
M2 =
[1 1 0 δ
0 0 1 0
]7→ N2 =
[0 1 0 1
0 0 1 0
]The command
orbiter.out -v 5 -define F -finite_field -q 16 -end -end \
-with F -do -finite_field_activity \
-move_two_lines_in_hyperplane_stabilizer_text \
"1,0,0,0, 0,0,0,1" "1,1,0,2, 0,0,1,0" \
"1,0,0,0, 0,0,0,1" "0,1,0,1, 0,0,1,0" \
-end
computes a projectivity which does so:
1 0 0 0
0 1 0 0
0 0 1 0
δ14 0 0 δ14
Here, δ is the primitive element in the built-in field F16, satisfying δ4 = δ3 + 1.
47
Figure 9: The plane PG(2, 4)
14 Finite Desarguesian Projective Planes
The projective spaces PG(2, q) deserve special attention. They form a special case of a moregeneral structure called projective planes. The PG(2, q) are distinguished in the class ofprojective planes by the fact that the theorem of Desargues always holds. They are calledthe desarguesian projective planes. For other projective planes, see Section 61.
The points in the dearguesian projective plane PG(2, q) have the coordinates P (x, y, z), withx, y, z ∈ Fq. We can distingish one line, for instance z = 0, and call it the line at infinity.The points not on that line form an affine plane AG(2, q).
Orbiter cheat sheets of projective geometries provide extra information for projective planes.The command
PG_2_4:
$(ORBITER_PATH)/orbiter.out \
-draw_options -radius 200 -end \
-define F -finite_field -q 4 -end \
-with F -do -finite_field_activity -cheat_sheet_PG 2 -end
pdflatex PG_2_4.tex
open PG_2_4.pdf
creates a cheat sheet for PG(2, 4). It contains a drawing of the plane as shown in Figure 9.The affine plane is shown in the usual cartesian decomposition, while the line at infinity iswrapped around the top right corner. The points are listed next, then the canonical Baersubgeometry PG(2, 2), and then the points again, but with left-normalized vectors. Finally,the lines are shown.
48
PG(2, 4) has 21 points:
P0 = (1, 0, 0) = (1, 0, 0)P1 = (0, 1, 0) = (0, 1, 0)P2 = (0, 0, 1) = (0, 0, 1)P3 = (1, 1, 1) = (1, 1, 1)P4 = (1, 1, 0) = (1, 1, 0)P5 = (2, 1, 0) = (α, 1, 0)P6 = (3, 1, 0) = (α
2, 1, 0)P7 = (1, 0, 1) = (1, 0, 1)P8 = (2, 0, 1) = (α, 0, 1)P9 = (3, 0, 1) = (α
2, 0, 1)P10 = (0, 1, 1) = (0, 1, 1)
P11 = (2, 1, 1) = (α, 1, 1)P12 = (3, 1, 1) = (α
2, 1, 1)P13 = (0, 2, 1) = (0, α, 1)P14 = (1, 2, 1) = (1, α, 1)P15 = (2, 2, 1) = (α, α, 1)P16 = (3, 2, 1) = (α
2, α, 1)P17 = (0, 3, 1) = (0, α
2, 1)P18 = (1, 3, 1) = (1, α
2, 1)P19 = (2, 3, 1) = (α, α
2, 1)P20 = (3, 3, 1) = (α
2, α2, 1)
Baer subgeometry:
P0 = (1, 0, 0)P1 = (0, 1, 0)
P2 = (0, 0, 1)P3 = (1, 1, 1)
P4 = (1, 1, 0)P7 = (1, 0, 1)
P10 = (0, 1, 1)
There are 7 elements in the Baer subgeometry.Normalized from the left:
P0 = (1, 0, 0)P1 = (0, 1, 0)P2 = (0, 0, 1)P3 = (1, 1, 1)P4 = (1, 1, 0)P5 = (1, 3, 0)
P6 = (1, 2, 0)P7 = (1, 0, 1)P8 = (1, 0, 3)P9 = (1, 0, 2)P10 = (0, 1, 1)P11 = (1, 3, 3)
P12 = (1, 2, 2)P13 = (0, 1, 3)P14 = (1, 2, 1)P15 = (1, 1, 3)P16 = (1, 3, 2)P17 = (0, 1, 2)
P18 = (1, 3, 1)P19 = (1, 2, 3)P20 = (1, 1, 2)
The Lines of PG(2, 4). PG(2, 4) has 21 1-subspaces:
49
L0 =
[100
010
]
L1 =
[100
011
]
L2 =
[100
012
]
L3 =
[100
013
]
L4 =
[100
001
]
L5 =
[101
010
]
L6 =
[101
011
]
L7 =
[101
012
]
L8 =
[101
013
]
L9 =
[110
001
]
L10 =
[102
010
]
L11 =
[102
011
]
L12 =
[102
012
]
L13 =
[102
013
]
L14 =
[120
001
]
L15 =
[103
010
]
L16 =
[103
011
]
L17 =
[103
012
]
L18 =
[103
013
]
L19 =
[130
001
]
L20 =
[010
001
]
The command
PG_2_16:
$(ORBITER_PATH)/orbiter.out \
-draw_options -xin 20000 -yin 20000 \
-radius 200 -line_width 0.3 -nodes_empty -end \
-define F -finite_field -q 16 -end \
-with F -do -finite_field_activity -cheat_sheet_PG 2 -end
pdflatex PG_2_16.tex
open PG_2_16.pdf
produces the drawing of PG(2, 16) shown in Figure 10. The -nodes_empty command is usedto suppress the drawing of the nodes. The -xin 20000 and -yin 20000 options double theinput coordinate system (recall from Table 65 that the default values are 10000), which hasthe effect that the text appears smaller relative to the grid.
50
Figure 10: The plane PG(2, 16)
51
15 The Grassmannian
Let V be a finite dimensional vector space and let Grk(V ) be the Grassmannian of k-dimensional subspaces of V. If dim(V ) = n, the notation Grn,k is used for Grk(V ). If V = Fnq ,the notation Grn,k,q is used for Grk(V ). The order of the set Grn,k,q can be computed as
[nk
]q
=k−1∏i=0
qn−i − 1qk−i − 1
,
using the q-binomial coefficient.
Orbiter has an enumerator for the Grassmannian. The purpose of this enumerator is toestablish a bijection between the Grassmannian and the integers in the interval [0, N − 1],where N =
[nk
]q. In order to do so, Orbiter picks a basis for each subspace. By writing the
elements of the basis in the rows of a matrix, a k × n matrix is obtained. In order to makethe matrix unique, we assume it to be in RREF. In coding theory, such a matrix is called agenerator matrix.
The Orbiter cheat sheets for PG(n, q) (see Section 13) contain lists of all Grassmannians,provided they are not too big. It is also possible to create cheat sheets specifically for oneGrassmannian. For instance, the command
GR_3_2_2:
$(ORBITER_PATH)/orbiter.out -define F -finite_field -q 2 -end \
-with F -do -finite_field_activity -cheat_sheet_Gr 3 2 -end
pdflatex Gr_3_2_2.tex
open Gr_3_2_2.pdf
produces a list of 2-dimensional subspaces of F32, i.e. the lines of PG(2, 2) :
L0 =
[100
010
]
L1 =
[100
011
]
L2 =
[100
001
]L3 =
[101
010
]
L4 =
[101
011
]
L5 =
[110
001
]L6 =
[010
001
]
52
16 Algebraic Sets
A set of points V in PG(n, q) is algebraic if there is a set of homogeneous polynomialsp1, . . . , pr whose roots over Fq are the given set. In this case, we write V = v(p1, . . . , pr).The set V is often called the variety of p1, . . . , pr.
Conversely, given a set of points V in PG(n, q), the ideal I(V ) is the set of homogeneouspolynomials in Fq[X0, . . . , Xn] which vanish on all of V. This set is an ideal in the polynomialring. In fact, it is a pricipal ideal, meaning that it is generated by one element only. Orbiterhas ways to compute the variety of a polynomial ideal and to compute a generator for theideal of a set.
Interestingly, in PG(n, q), every set is algebraic of degree at most (n + 1)(q − 1) [21]. Theassociated polynomial is unique and known as the algebraic normal form of the set.
In order to work with algebraic sets, polynomial rings are required. Orbiter offers homo-geneous polynomials in any (finite) number of variables. There are two orderings of themonomials which can be chosen. The partition ordering (use option -monomial_type_PART)is grouping terms according to the partition that results from the degrees of the variablesfirst, and then uses the lexicographic ordering as a tie breaker. The lexicographic ordering(use option -monomial_type_LEX) orders the monomials lexicographically. Table 19 showsthe monomials in the partition ordering for degrees 2, 3 and 4 in a plane. Suppose we are in-terested in F11 rational points of the elliptic curve y2 = x3+x+3. We write x3+3−y2+x = 0.Homogenizing yields X3 + 3Z3− Y 2Z +XZ = 0. Using X0, X1, X2 instead of X, Y, Z yields
X30 + 3X32 + 10X
21X2 +X0X
22 = 0.
Using the indexing of monomials from Table 19, we record the following pairs (a, i) where ais the coefficient and i is the index of the monomial
(1, 0), (3, 2), (10, 6), (1, 7).
This is concatenated to the sequence 1, 0, 3, 2, 10, 6, 1, 7. The Orbiter command
EC_11.txt:
$(ORBITER_PATH)/orbiter.out -v 2 -define EC \
-combinatorial_object -q 11 -n 2 \
-projective_variety "EC_11" 3 "1,0,3,2,10,6,1,7" \
-monomial_type_PART
-end \
-with EC -do -combinatorial_object_activity -save \
-end
creates the algebraic set associated to the cubic curve y2 = x3 + x+ 3 in PG(2, 11). It turnsout that there are exactly 18 points over F11 (cf. Figure 11). Suppose we want to create theHirschfeld surface over F4 with equation
X20X3 +X21X2 +X1X
22 +X0X
23 = 0.
53
h mon vector
0 X0 (1, 0, 0)
1 X1 (0, 1, 0)
2 X2 (0, 0, 1)
h mon vector
0 X20 (2, 0, 0)
1 X21 (0, 2, 0)
2 X22 (0, 0, 2)
3 X0X1 (1, 1, 0)
4 X0X2 (1, 0, 1)
5 X1X2 (0, 1, 1)
h mon vector
0 X30 (3, 0, 0)
1 X31 (0, 3, 0)
2 X32 (0, 0, 3)
3 X20X1 (2, 1, 0)
4 X20X2 (2, 0, 1)
5 X0X21 (1, 2, 0)
6 X21X2 (0, 2, 1)
7 X0X22 (1, 0, 2)
8 X1X22 (0, 1, 2)
9 X0X1X2 (1, 1, 1)
h mon vector
0 X40 (4, 0, 0)
1 X41 (0, 4, 0)
2 X42 (0, 0, 4)
3 X30X1 (3, 1, 0)
4 X30X2 (3, 0, 1)
5 X0X31 (1, 3, 0)
6 X31X2 (0, 3, 1)
7 X0X32 (1, 0, 3)
8 X1X32 (0, 1, 3)
9 X20X21 (2, 2, 0)
10 X20X22 (2, 0, 2)
11 X21X22 (0, 2, 2)
12 X20X1X2 (2, 1, 1)
13 X0X21X2 (1, 2, 1)
14 X0X1X22 (1, 1, 2)
Table 19: The partition ordering of monomials of degree 1, 2, 3 and 4 in a plane
Figure 11: Elliptic curve y2 ≡ x3 + x+ 3 mod 11
54
h mon vector
0 X0 (1, 0, 0, 0)
1 X1 (0, 1, 0, 0)
2 X2 (0, 0, 1, 0)
3 X3 (0, 0, 0, 1)
h mon vector
0 X20 (2, 0, 0, 0)
1 X21 (0, 2, 0, 0)
2 X22 (0, 0, 2, 0)
3 X23 (0, 0, 0, 2)
4 X0X1 (1, 1, 0, 0)
5 X0X2 (1, 0, 1, 0)
6 X0X3 (1, 0, 0, 1)
7 X1X2 (0, 1, 1, 0)
8 X1X3 (0, 1, 0, 1)
9 X2X3 (0, 0, 1, 1)
h mon vector
0 X30 (3, 0, 0, 0)
1 X31 (0, 3, 0, 0)
2 X32 (0, 0, 3, 0)
3 X33 (0, 0, 0, 3)
4 X20X1 (2, 1, 0, 0)
5 X20X2 (2, 0, 1, 0)
6 X20X3 (2, 0, 0, 1)
7 X0X21 (1, 2, 0, 0)
8 X21X2 (0, 2, 1, 0)
9 X21X3 (0, 2, 0, 1)
10 X0X22 (1, 0, 2, 0)
11 X1X22 (0, 1, 2, 0)
12 X22X3 (0, 0, 2, 1)
13 X0X23 (1, 0, 0, 2)
14 X1X23 (0, 1, 0, 2)
15 X2X23 (0, 0, 1, 2)
16 X0X1X2 (1, 1, 1, 0)
17 X0X1X3 (1, 1, 0, 1)
18 X0X2X3 (1, 0, 1, 1)
19 X1X2X3 (0, 1, 1, 1)
Table 20: The Orbiter ordering of monomials of degree 1, 2 and 3 in PG(3, q)
55
Table 20 shows the Orbiter monomial orderings for degrees 2 and 3 in PG(3, q). Based onthe partition ordering, the monomials appearing in the equation
X20X3 +X21X2 +X1X
22 +X0X
23 = 0
have rank 6, 8, 11 and 13. The coefficients are all one. Orbiter needs the equation in alist of pairs, the first number representing the finite field element, and the second numberspecifying the monomial rank in the chosen ordering. So, for this example, the sequence is1, 6, 1, 8, 1, 11, 1, 13. The following command can be used to create the variety:
Hirschfeld_surface_q4.txt:
$(ORBITER_PATH)/orbiter.out -v 2 -define Hirschfeld_surface_q4 \
-combinatorial_object -n 3 -q 4 \
-projective_variety "Hirschfeld_surface_q4" 3 "1,6,1,8,1,11,1,13" \
-monomial_type_PART \
-end \
-with Hirschfeld_surface_q4 -do -combinatorial_object_activity -save \
-end
A file called Hirschfeld_surface_q4.txt is created. The file contains the Orbiter ranks ofthe 45 points on the surface.
Suppose we want to create the Endrass octic surface over a finite field. The real equation is
64(−w2 + x2)(−w2 + y2)((x+ y)2 − 2w2)((x− y)2 − 2w2)−(−4(1 +
√2)(x2 + y2)2 + (8(2 +
√2)z2 + 2(2 + 7
√2)w2)(x2 + y2)
−16z4 + 8(1− 2√
2)z2w2 − (1 + 12√
2)w4)2 = 0.
Some precomputations in Maple and Orbiter are necessary to obtain the coefficient list ofthis surface over a finite field. After all, there are 165 degree 8 monomials in 4 variables.The command sequence
octic_prepare:
$(ORBITER_PATH)/orbiter.out -v 4 -diophant -label octic_monomials \
-coefficient_matrix 1 4 "1,1,1,1" -RHS "8,8,1" \
-x_min_global 0 -x_max_global 8
$(ORBITER_PATH)/orbiter.out -v 3 -diophant_activity \
-input_file octic_monomials.diophant -solve_mckay
sort -r octic_monomials.sol >octic_monomials_sorted.txt
can be used to create a file octic_monomials_sorted.txt which lists the monomials in thelexicographical ordering. These commands will be explained in Section 55. After reducingmodulo a prime p, the equation can be considered with Orbiter. This means we consider theequation in Fp. The only requirement is that 2 is a square in the field Fp. For instance, overF7 we have
√2 = 3 because 32 = 9 ≡ 2 mod 7, and the equation turns out to be
6X80 + 4X60X
21 + 2X
60X
22 + 5X
60X
23 + 6X
40X
41 + 6X
40X
21X
22 +X
40X
21X
23 + 3X
40X
42
+X40X22X
23 + 3X
40X
43 + 4X
20X
61 + 6X
20X
41X
22 +X
20X
41X
23 + 6X
20X
21X
42 + 2X
20X
21X
22X
23
+6X20X21X
43 + 3X
20X
62 + 2X
20X
42X
23 + 6X
20X
63 + 6X
81 + 2X
61X
22 + 5X
61X
23 + 3X
41X
42
+X41X22X
23 + 3X
41X
43 + 3X
21X
62 + 2X
21X
42X
23 + 6X
21X
63 + 3X
82 = 0
56
The following command
Endrass_F7.txt:
$(ORBITER_PATH)/orbiter.out -v 2 -define Endrass_F7 \
-combinatorial_object -n 3 -q 7 \
-projective_variety "Endrass_F7" 8 \
-long_string \
"6,0,4,4,2,7,5,9,6,20,6,23,1,25,3,30,1,32,3,34,4,56,6,59,1," \
"61,6,66,2,68,6,70,3,77,2,79,6,83,6,120,2,123,5,125,3,130," \
"1,132,3,134,3,141,2,143,6,147,3,156" \
-end_string \
-monomial_type_LEX \
-end \
-with Endrass_F7 -do \
-combinatorial_object_activity -save \
-end
shows that the surface has 33 points over F7. It is also possible to create the intersection ofZariski open sets. For instance, the command
frame_complement.txt:
$(ORBITER_PATH)/orbiter.out -v 2 -define Frame_complement \
-combinatorial_object -q 11 -n 2 \
-intersection_of_zariski_open_sets "frame_complement" 1 4 \
"1,0" "1,1" "1,2" "1,0,1,1,1,2" -monomial_type_PART \
-end \
-with Frame_complement -do -combinatorial_object_activity -save \
-end
creates the points off the fundamental quadrangle
X0 = 0, X1 = 0, X2 = 0, X0 +X1 +X2 = 0
in PG(2, 11).
It is possible to define algebraic varieties directly from an algebraic equation. Here is anexample. We define two delPezzo surfaces over the field F13. The Orbiter command producesreports for both surfaces. Notice how we use managed variables x, y, z. This is so that Orbitercan detect whether the equation is homogeneous in the managed variables.
del_Pezzo_F13ab_report:
$(ORBITER_PATH)/orbiter.out -v 3 \
-define F -finite_field -q 13 -end \
-define P -projective_space 3 F \
-define f3 -formula "del_Pezzo_F13a" "del\_Pezzo\_F13a" "x,y,z" \
"x*x*x*x+y*y*y*y+z*z*z*z+8*x*x*y*y+8*x*x*z*z+8*y*y*z*z" \
-define f4 -formula "del_Pezzo_F13b" "del\_Pezzo\_F13b" "x,y,z" \
57
"x*x*x*x+y*y*y*y+z*z*z*z-x*x*y*y" \
-define del_Pezzo13 -collection "f3,f4" \
-with P -do \
-projective_space_activity \
-analyze_del_Pezzo_surface del_Pezzo13 "" \
-end
pdflatex del_Pezzo_F13a_report.tex
pdflatex del_Pezzo_F13b_report.tex
open del_Pezzo_F13a_report.pdf
open del_Pezzo_F13b_report.pdf
58
17 The Klein Quadric and the Plücker Map
The Grassmannian is an algebrac variety. This means it can be described as the commonzero-locus of a set of polynomials with rational coefficients. Amongst all Grassmannians,Gr4,2(V ) stands out. This variety Gr4,2(V ) is described by one single equation, which hap-pens to be quadratic. The variety is known as the Klein quadric (cf. [46]).
Orbiter cheat sheets for Grassmannians as discussed in Section 15 behave slightly differentlyfor the Klein quadric in that they will include information regarding this additional structure.For instance, the command
GR_4_2_2:
$(ORBITER_PATH)/orbiter.out -define F -finite_field -q 2 -end \
-with F -do -finite_field_activity -cheat_sheet_Gr 4 2 -end
pdflatex Gr_4_2_2.tex
open Gr_4_2_2.pdf
creates the elements of Gr4,2,2 and lists them together with their Plücker coordinates. Thefollowing output is shortened:
There are 35 lines:
L0 =
[1000
0100
]= Pl(1, 0, 0, 0, 0, 0)
L1 =
[1000
0110
]= Pl(1, 0, 1, 0, 0, 0)
L2 =
[1000
0101
]= Pl(1, 0, 0, 0, 1, 0)
...
L34 =
[0010
0001
]= Pl(0, 1, 0, 0, 0, 0)
The Plücker coordinates satisfy
p12p34 − p13p24 + p14p23 = 0
and hence belong to the quadric Q+(5, q). This quadric is also known as the Klein quadric.Orthogonal spaces and quadrics will be discussed in Section 18. Orbiter has a labeling ofpoints of quadrics that can be used to enumerate the points of Q+(5, q). Using the inversePlücker map, this gives a second way to label the lines of PG(3, q). In the example of PG(3, 2)this yields the following list (output shortened):
59
0 = Pl(1, 0, 0, 0, 0, 0) = L0 =
[1000
0100
]
1 = Pl(0, 1, 0, 0, 0, 0) = L34 =
[0010
0001
] 2 = Pl(0, 0, 1, 0, 0, 0) = L4 =[
1000
0010
]...
34 = Pl(0, 1, 1, 1, 1, 1) = L26 =
[1101
0011
]
60
Type Quadratic Form # Points
Q+(n, q)
Hyperbolic (n is odd)
n−12−1∑
i=0
X2iX2i+1(q(n+1)/2 − 1)(q(n−1)/2 + 1)
q − 1
Q−(n, q)
Elliptic (n is odd)p(Xn−1, Xn) +
n−12−1∑
i=0
X2iX2i+1(q(n+1)/2 + 1)(q(n−1)/2 − 1)
q − 1
Q(n, q)
Parabolic (n is even)X2n +
n2−1∑i=0
X2iX2i+1qn − 1q − 1
Table 21: Nondegenerate Quadrics in PG(n, q) and the canonical form adopted in Orbiter
18 Orthogonal Spaces
Orbiter can create and work with orthogonal spaces and their groups. An orthogonal spaceis created by a quadratic form. We assume that the form is nondegenerate. There are threetypes of nondegenerate quadratic forms in PG(n, q). Two when n is odd (hyperbolic andelliptic) and one if n is even (parabolic). Basic information about these quadrics and theirrepresentative quadratic forms in Orbiter is given in Table 21. Here, p(X, Y ) = c1X
2 +c2XY + c3Y
2 ∈ Fq[X, Y ] is irreducible over Fq. To create an orthogonal space, the
-orthogonal_space � d q -end
command can be used. Here, d = n+ 1, q is the order of the finite field, and
� =
1 hyperbolic type Q+(d− 1, q), d even0 elliptic type Q(d− 1, q), d odd−1 hyperbolic type Q−(d− 1, q), d even
In order to create an object of type orthogonal space, the -orthogonal_space commandis used inside a -definition .. -end command sequence. In Table 22, Orbiter commandoptions for creating orthogonal spaces are shown. By default, the orthogonal space is createdtogether with the orthogonal group PΓO(n+1, q). When q is prime, the group PGO(n+1, q)is created instead (the groups are isomorphic in this case, and PGO(n + 1, q) is a bit moreefficient). For large orthogonal spaces, creating the group is expensive in terms of time andmemory. The a command -without_group can be used to prevent the group from beingcreated. For instance
-define O -orthogonal_space 1 6 2 -end
creates an object O of type Q+(5, 2). In Table 23, Orbiter activities for orthogonal spacesare shown. The command
61
Modifier Arguments Meaning
-label_txt L Set the ascii-label of the space. The label isused for things like file names etc. A defaultlabel will be used if this option is not given.
-label_tex L Set the tex-label of the space. The label isused within latex reports. A default labelwill be used if this option is not given.
-without_group Do not create the orthogonal group.
Table 22: Command options to create an orthogonal space
Modifier Arguments Meaning
-cheat_sheet_
orthogonal
Create a latex report of the orthogonal space.If the group has been created, the report willcontain information about the group also.
-unrank_line_
through_two_points
p1 p2 Determine the rank of the line through p1and p2.
-perp L Determine the common perp of a set ofpoints. The point ranks are given in the listL.
-create_BLT_set descr Creates a BLT-set of Q(4, q). See Section 63.
Table 23: Activities releated to orthogonal spaces
62
Op_6_2:
$(ORBITER_PATH)/orbiter.out -v 2 \
-draw_options -end \
-define F -finite_field -q 2 -end \
-define O -orthogonal_space 1 6 F -without_group -end \
-with O -do -orthogonal_space_activity -cheat_sheet_orthogonal -end
pdflatex O_1_6_2_report.tex
open O_1_6_2_report.pdf
produces a cheat sheet for the quadric Q+(5, 2). This is the Klein quadric from Section 17.Orbiter produces the following output. At the top is the tactical decomposition of theincidence matrix between points and lines. After that, the points and lines are listed (outputshortened):
→ 9 36 18 18 6 9 96 3 6 0 0 0 0 0
9 0 4 4 0 0 1 0
9 0 4 0 4 0 0 1
9 1 0 2 2 2 1 1
1 0 0 0 0 0 9 0
1 0 0 0 0 0 0 9
↓ 9 36 18 18 6 9 96 2 1 0 0 0 0 0
9 0 1 2 0 0 1 0
9 0 1 0 2 0 0 1
9 1 0 1 1 3 1 1
1 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1
The number of points is 35points:P0 = (1, 0, 0, 0, 0, 0)P1 = (0, 1, 0, 0, 0, 0)P2 = (0, 0, 1, 0, 0, 0)P3 = (1, 0, 1, 0, 0, 0)P4 = (0, 1, 1, 0, 0, 0)P5 = (0, 0, 0, 1, 0, 0)P6 = (1, 0, 0, 1, 0, 0)P7 = (0, 1, 0, 1, 0, 0)P8 = (1, 1, 1, 1, 0, 0)P9 = (0, 0, 0, 0, 1, 0)
63
P10 = (1, 0, 0, 0, 1, 0)P11 = (0, 1, 0, 0, 1, 0)P12 = (0, 0, 1, 0, 1, 0)P13 = (1, 0, 1, 0, 1, 0)P14 = (0, 1, 1, 0, 1, 0)P15 = (0, 0, 0, 1, 1, 0)P16 = (1, 0, 0, 1, 1, 0)P17 = (0, 1, 0, 1, 1, 0)P18 = (1, 1, 1, 1, 1, 0)P19 = (0, 0, 0, 0, 0, 1)P20 = (1, 0, 0, 0, 0, 1)P21 = (0, 1, 0, 0, 0, 1)P22 = (0, 0, 1, 0, 0, 1)P23 = (1, 0, 1, 0, 0, 1)P24 = (0, 1, 1, 0, 0, 1)P25 = (0, 0, 0, 1, 0, 1)P26 = (1, 0, 0, 1, 0, 1)P27 = (0, 1, 0, 1, 0, 1)P28 = (1, 1, 1, 1, 0, 1)P29 = (1, 1, 0, 0, 1, 1)P30 = (1, 1, 1, 0, 1, 1)P31 = (1, 1, 0, 1, 1, 1)P32 = (0, 0, 1, 1, 1, 1)P33 = (1, 0, 1, 1, 1, 1)P34 = (0, 1, 1, 1, 1, 1)The number of lines is 105
L0 =
[1 0 0 0 0 0 0
0 0 1 1 1 1 0
]{P0, P32, P33}
L1 =
[0 1 0 0 0 0 0
0 0 1 1 1 1 0
]{P1, P32, P34}
L104 =
[1 1 1 1 0 0 0
0 0 0 0 1 0 0
]{P8, P9, P18}
Orbiter has enumerators for points and lines. For spaces that are small enough, the cheatsheet lists points and lines in the Orbiter ordering. The command
Op_6_64_line_rank:
$(ORBITER_PATH)/orbiter.out -v 2 \
-define F -finite_field -q 64 -end \
-define O -orthogonal_space 1 6 F -without_group -end \
-with O -do -orthogonal_space_activity \
-unrank_line_through_two_points 15447347 15225451 \
-end
64
computes the Orbiter rank of the line through the points with rank 15447347 and 15225451,respectively. The rank of the line is 16767254. Note that all of these ranks are ranks in theorthogonal geometry. They are not ranks in the projective geometry or in the grassmannianof lines.
To study BLT-sets in Q(4, q), see Section 63.
65
19 Hermitian Varieties
Orbiter has enumerators for points of the hermitian variety H(k,Q). Here, Q is a square,and so q =
√Q is an integer. The equation of the variety is
k∑i=0
Xq+1i = 0.
The command
H_2_4:
$(ORBITER_PATH)/orbiter.out -define F -finite_field -q 4 -end \
-with F -do -finite_field_activity -cheat_sheet_hermitian 2 -end
pdflatex H_2_4.tex
open H_2_4.pdf
produces a cheat sheet for the variety H(2, 4):
The Hermitian variety H(2, 4) contains 9 points:
P0 = (1, 1, 0) = 4P1 = (2, 1, 0) = 5P2 = (3, 1, 0) = 6P3 = (1, 0, 1) = 7P4 = (2, 0, 1) = 8
P5 = (3, 0, 1) = 9P6 = (0, 1, 1) = 10P7 = (0, 2, 1) = 13P8 = (0, 3, 1) = 17
All points: ( 4, 5, 6, 7, 8, 9, 10, 13, 17 )
The command
H_3_4:
$(ORBITER_PATH)/orbiter.out -define F -finite_field -q 4 -end \
-with F -do -finite_field_activity -cheat_sheet_hermitian 3 -end
pdflatex H_3_4.tex
open H_3_4.pdf
produces a cheat sheet for the variety H(3, 4).
66
The Hermitian variety H(3, 4) contains 45 points:
P0 = (1, 1, 0, 0) = 5P1 = (2, 1, 0, 0) = 6P2 = (3, 1, 0, 0) = 7P3 = (1, 0, 1, 0) = 8P4 = (2, 0, 1, 0) = 9P5 = (3, 0, 1, 0) = 10P6 = (0, 1, 1, 0) = 11P7 = (0, 2, 1, 0) = 15P8 = (0, 3, 1, 0) = 19P9 = (1, 0, 0, 1) = 23P10 = (2, 0, 0, 1) = 24P11 = (3, 0, 0, 1) = 25P12 = (0, 1, 0, 1) = 26P13 = (0, 2, 0, 1) = 30P14 = (0, 3, 0, 1) = 34P15 = (1, 1, 1, 1) = 4P16 = (2, 1, 1, 1) = 43P17 = (3, 1, 1, 1) = 44P18 = (1, 2, 1, 1) = 46P19 = (2, 2, 1, 1) = 47P20 = (3, 2, 1, 1) = 48P21 = (1, 3, 1, 1) = 50P22 = (2, 3, 1, 1) = 51
P23 = (3, 3, 1, 1) = 52P24 = (0, 0, 1, 1) = 38P25 = (1, 1, 2, 1) = 58P26 = (2, 1, 2, 1) = 59P27 = (3, 1, 2, 1) = 60P28 = (1, 2, 2, 1) = 62P29 = (2, 2, 2, 1) = 63P30 = (3, 2, 2, 1) = 64P31 = (1, 3, 2, 1) = 66P32 = (2, 3, 2, 1) = 67P33 = (3, 3, 2, 1) = 68P34 = (0, 0, 2, 1) = 53P35 = (1, 1, 3, 1) = 74P36 = (2, 1, 3, 1) = 75P37 = (3, 1, 3, 1) = 76P38 = (1, 2, 3, 1) = 78P39 = (2, 2, 3, 1) = 79P40 = (3, 2, 3, 1) = 80P41 = (1, 3, 3, 1) = 82P42 = (2, 3, 3, 1) = 83P43 = (3, 3, 3, 1) = 84P44 = (0, 0, 3, 1) = 69
All points: ( 5, 6, 7, 8, 9, 10, 11, 15, 19, 23, 24, 25, 26, 30, 34, 4, 43, 44, 46, 47, 48,50, 51, 52, 38, 58, 59, 60, 62, 63, 64, 66, 67, 68, 53, 74, 75, 76, 78, 79, 80, 82, 83,84, 69 )
Coincidentally, this Hermitian variety is the Hirschfeld cubic surface over F4.
67
20 Permutation Groups
Orbiter provides many kinds of permutation groups. A permutation group is a group with afixed action on a set, called the permutation domain. One group can have many actions. Agiven action can induce a new action on some combinatorial, geometrical or algebraic struc-ture. These induced actions create new permutation groups, homomorphic to the originalone.
Permutation domains are often large, so special methods are used to avoid listing all elementsexplicitly. Instead, the method of ranking and unranking is used to establish a fixed bijectionbetween the permutation domain and an integer interval. Specifically, if P is a permutationdomain of size N = |P |, we establish a bijection between P and the integer interval [0, N−1].Whenever we need to compute the image of an element i ∈ [0, N−1] under a group element g,we first unrank the element in the permutation domain associated with i in the permutationdomain. We then apply g to obtain the image, which in turn is converted back into an integerj ∈ [0, N − 1]. We can say that i maps to j under g. The process of converting integers toelements of the permutation domain and vice-versa is called unranking and ranking. We haveseen ranking and unranking for projective points in Section 13 In Section 21, we will discussmatrix groups over finite fields. The enumerator for projective points from Section 13 is usedto realize the permutation domain implicitly. This enumerator uses the bijection betweenfield elements of Fq and the integers in the interval [0, q − 1] that we discussed in Sections 9and 11. For an affine group, a different enumerator is used to describe a different permutationdomain. This enumerator is based on the base-q representation of integers, which associatesa vector over Fq of length n with an integer between 0 and qn.
A permutation group is represented using a base and stabilizer chain (cf. [27, 51]). Stronggenerating sets are used to generate the groups. For the projective linear groups, the standardframe can be used as base. Orbiter uses this base and the associated strong generating setdescribed in [9].
Group elements can be specified using the coded form. This is a vector of integers whichdescribes a group element. For instance, for an element of a linear group, the coding consistsof the entries of associated matrix (for projective matrx groups, the coding is not uniqueas scalar multiples of the matrix describe the same group element). For semilinear matrixgroups, an extra integer is used to describe the associated field automorp