Finite  Planes

Demonstration Notebook

Vedran Krcadinac ( krcko@student.math.hr )
Department of Mathematics, University of Zagreb

Initialization

Before evaluating anything in this notebook, you should copy the packages FiniteFieldsV2.m, Quasifields.m, FinitePlanes.m and HughesPlanes.m to your working directory and initialize the notebook. This will create a few finite fields and quasifields and save them to the disk. It will probably take a while (about 10 minutes on a HP 9000/800).
  The next time you are using the notebook initialization won't be necessary, unless you delete these files.

<<Quasifields.m

SaveFF[{2,1},"GF2"]
SaveFF[{3,1},"GF3"]
SaveFF[{2,2},"GF4"]
SaveFF[{5,1},"GF5"]
SaveFF[{7,1},"GF7"]
SaveFF[{2,3},"GF8"]
SaveFF[{3,2},"GF9"]
SaveFF[{5,2},"GF25"]

quad = AllIrreducibleQuadratics[{3,1}];
IrreducibleQuadratic[{3,1}] = quad[[1]];
SaveHall[{3,1},"hall9.1"]
IrreducibleQuadratic[{3,1}] = quad[[2]];
SaveHall[{3,1},"hall9.2"]
IrreducibleQuadratic[{3,1}] = quad[[3]];
SaveHall[{3,1},"hall9.3"]

Phi[{3,2,1}] = AllPhis[{3,1,2}] [[2]];
SaveAndre[{3,1,2},"andre9"]
phis = AllPhis[{5,1,2}];
Do[Phi[{5,1,2}] = phis[[i+1]]; 
   SaveAndre[{5,1,2},StringJoin["andre25.",ToString[i]]],
   {i,1,7}
  ]
  
SaveHughes[{3,1},"hughes9"]
SaveHughes[{5,1},"hughes25"]

Quit

The packages FiniteFieldsV2.m and Quasifields.m don't have documentation strings, but they contain many comments.

FinitePlanes.m

The package FinitePlanes.m contains functions to construct and visualise finite projective and affine planes. First you have to load a finite field or quasifield.

<<FinitePlanes.m

LoadFF["GF4"]

The main functions are ProjectivePlane and AffinePlane.

?ProjectivePlane

ProjectivePlane

Points are the integers 1,2,...,21 and lines are sets of points collected in the list above.

?AffinePlane

AffinePlane

In this case  points are "ordered pairs" of integers. By applying the rule Normalize you can convert them to integers.

AffinePlane /. Normalize

Mutually paralell lines are grouped together. The well known process of adding  / deleting a "line at infinity" converts an affine to a projective plane, and vice versa.

?AffineToProjective

AffineToProjective[AffinePlane]

?ProjectiveToAffine

ProjectiveToAffine[ProjectivePlane,1]

You can also get the incidence matrix of a plane. It will be much bigger than the original plane,  so let's make the smallest one possible.

LoadFF["GF2"]
IncidenceMatrix[ProjectivePlane] // MatrixForm

Visualisation

You can draw pictures of affine planes.

LoadFF["GF5"]
Paint[AffinePlane]

The big squares above represent classes of paralell lines. The little squares are points. The ones colored with the same color belong to the same line.
  Closely related to affine and projective planes are sets of mutually orthogonal latin squares (MOLS). You can get a complete set by typing LatinSquares, and make a picture by applying Paint.

LatinSquares // MatrixForm

Paint[LatinSquares]

You can  make Levi graphs of planes, e.g. the projective plane of order two.

LoadFF["GF2"]
Levi[ProjectivePlane]

To display the graph we will have to load Combinatorica, and therefore Quit to remove the definitions made in FinitePlanes.m

WriteGraph[Levi[ProjectivePlane],"levi2"]

Quit

<<DiscreteMath`Combinatorica`
ShowGraph[
RankedEmbedding[ReadGraph["levi2"],{1,2,3,4,5,6,7}]]

Non-desarguesian planes

Planes constructed from finite fields are called Desarguesian. By applying the functions to quasifields we get non-desarguesian planes.

Quit

<<FinitePlanes.m
LoadFF["andre9"]

ProjectivePlane

DualProjectivePlane

You have to be careful with the functions ProjectivePlane and DualProjectivePlane,  because they work only on  nearfields, i.e. associative quasifields. If we load a non-associative quasifield we don't get a projective plane, as shown by the following test.

LoadFF["hall9.2"]
A = IncidenceMatrix[ProjectivePlane];
A . Transpose[A] == TestMatrix

But the functions AffinePlane and DualAffinePlane will work on any quasifield, and we can easily convert the result to a projective plane.

A = IncidenceMatrix[AffineToProjective[AffinePlane]];
A . Transpose[A] == TestMatrix

Hughes Planes

Planes constructed from quasifields are translation planes. A class of non-desarguesian, non-translation planes are the Hughes planes. We need the package HughesPlanes.m.

Quit

<<HughesPlanes.m
LoadFF["hughes9"]

HughesPlane

This time points are ordered triplets, but we can convert them to integers as easily as before.

HughesPlane /. Normalize

Functions in this package unfortunatelly don't have documentation strings, but they are very simmilar to the ones in FinitePlanes.m, and the source contains comments.