488
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 the theory of permutation groups to provide efficient algorithms for computing orbits. This guide explains how to use Orbiter through this command line interface. Programmers who want to use the Orbiter C++ class library directly in their own programs should consult the programmer’s guide. 1

Orbiter User’s Guide - Colorado State Universitybetten/orbiter/users...Orbiter is a library of C++ classes, together with a command line driven front end. There is no graphical user

  • 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