Last week I was at the 8th Slovenian Conference on Graph Theory.  This was the latest in what is commonly known as the ‘Bled conference’ but this year was in Kranjska Gora. This meant that the conference excursion was to Lake Bled. It was a very enjoyable conference with lots of interesting talks and it was good to catch up with lots of people. I was one of the plenary speakers and my talk was entitled ‘Bounding the number of automorphisms of a graph’. This surveyed the recent work on the Weiss conjecture and its generalisation the PSV conjecture. It also discussed my recent work with Luke Morgan on the PSV conjecture for semiprimitive groups with a nilpotent regular normal subgroup.  More details can be found on my slides.

# Automorphisms of a 76 million vertex graph

I’ve been meaning to write a post about practical graph automorphism finding for a while, and the last few days experience has finally prompted me to do so now.

The problem of finding the automorphism group of a graph — by this, I mean using software to actually determine the group as a permutation group — is pretty fundamental to a whole range of construction and counting problems. It is obviously very closely related to the graph isomorphism problem, which is to determine whether two graphs are isomorphic. This problem, known as GI, is a problem whose complexity is well known to be unknown (if you see what I mean!). Graph isomorphism is in NP, but it is not known to be either NP-complete or in P, so is a prime candidate for the problem of intermediate complexity that would show that P $\not=$ NP. Finding the automorphism group of a graph is at least as hard as graph isomorphism, because you could use an automorphism-finder to resolve whether G and H are isomorphic by computing the automorphism group of the disjoint union of G and H, and seeing whether any automorphisms swapped the components.

In practice, graph automorphism finding is relatively easy and the automorphism group can be calculated for large graphs, indeed enormous graphs! For more than three decades, the “go-to” software for finding automorphisms of graphs has been Brendan McKay’s program “nauty” which has been used by hundreds, even thousands, of researchers at various points. My thesis, nearly 30 years ago, used one of the early versions of nauty. There are other programs available of course, some of which outperform nauty on particular families of graphs, but none of which match the combination that nauty offers in terms of availability, long-term development and maintenance and overall performance.

Around 25 years ago, I noticed that certain graphs were proving particularly difficult for nauty to process, namely the bipartite point-line incidence graphs of non-desarguesian projective planes. At the time I was working with projective planes of order 9, which have 91 points and 91 lines, and so these were only 182 vertex graphs. I can’t remember the exact numbers, but it took about 0.5 seconds cpu time to process PG(2,9), about 10 seconds to process the Hall plane of order 9 and about 200 hours to find the automorphism group of the Hughes plane of order 9. Of course Brendan immediately put some effort into finding new invariants and other tweaks to make computing the automorphism groups of these projective planes graphs tractable, but they are still much more difficult than most graphs of the same size. (Other geometric graphs such as the incidence graphs of GQs are difficult, but not that difficult.)

A few years ago, Brendan and I were at a meeting in Bristol when we were approached by one of the other delegates who was keen to show us his results on computing automorphism groups of projective planes. He had devised a method of computing the search tree using a hybrid mixture of breadth-first and depth-first search — essentially a single run to the maximum depth of the tree yields an automorphism that can then later be effectively used to prune entire branches of the tree at a very early stage. The results were nothing short of spectacular, with huge projective planes now yielding in seconds rather than days. The researcher in question is called Adolfo Piperno, his technique is called Traces and Adolfo and Brendan have combined forces to refine both techniques and implement them robustly, with the final result being the imaginatively-named “nauty/Traces” package.

So how good is this in practice? For what size of graph can you realistically hope to determine the automorphism group? Pretty big is the answer to that question — in the last few days I’ve managed to use nauty/Traces to determine the automorphism group of a graph with just over 76 million vertices! This graph is a 10-regular graph obtained by taking a primitive representation of the group PSp(6,3) of degree 76422528, which has a non-self paired orbital of valency 5, which thus determines a digraph of out-valency 5. Dropping the directions on the arcs gives us a graph of valency 10. For various reasons, we wanted to know whether the full automorphism group of this graph is just the original PSp(6,3) or bigger.

Of course, it is impossible to store a 76 million x 76 million adjacency matrix, even if it is bit-packed, but fortunately Brendan has recently (in the last few years) added the ability to work with adjacency lists, thus basically using space proportional to the number of edges, rather than the square of the number of vertices. Just forming the file that defined the graph was a tedious process because GAP and Magma can’t do anything fast in groups of this degree, and there are many things that they simply cannot do at all (e.g. find the order of the group!). So I had to “hand-roll” lots of little bits of code that did basic things but in roundabout ways that didn’t use up too much memory and didn’t trigger anything that would never finish.

Once I had the file, the rest was simple. I actually just used the program dreadnaut which is a command-line user interface for nauty/Traces. The input file looked like this:

n=76422528
$=1 g 20385294, 22694895, 50999204, 58103886, 74686745 ; 14658604, 27594574, 45288953, 46264591, 69387673 ; (76422525 lines omitted) 3976598, 18300815, 27911643, 64737249, 74506343 . x  The first two lines set the number of vertices, then the base of the numbering (my vertices are numbered 1 to 76422528, rather than 0 to 76422527). The “g” puts it into graph-input mode, and the next 76422528 lines are the neighbours of each vertex — they are only specified in one direction but unless specified otherwise, nauty/Traces will automatically treat the graph as undirected. Finally, the “x” tells the program to compute the automorphism group. This whole file — of size 3.6Gb — is then piped into the dreadnaut program with suitable flags to tell it to use Traces and the sparse representation. A little while later, after lots of output of the four permutations, I get the result 1 orbit; grpsize=9170703360; 4 gens; 9 nodes (6 peak);maxlev=2 cpu time = 1550.93 seconds  Unfortunately it wasn’t the result I wanted, because the group of the graph has doubled in size from the guaranteed PSp(6,3) and I was really hoping for this not to happen, because it would have yielded a primitive half-arc transitive graph of the lowest possible valency, whose existence is currently unresolved. However, I am still hugely impressed that it is possible to find the automorphism group of a 76 million vertex non-trivial graph – in fact I’d really have to say that it’s spectacular! By way of contrast, consider the NP-complete problem of finding the chromatic number of a graph. This problem is theoretically difficult, but it also seems to be practically difficult – already at 100-200 vertices, there are graphs whose chromatic number I simply cannot determine. Written with StackEdit. Who needs a standing desk, after the publishers learn you teach Calculus to 1st-years! Dad, what does that sign mean? This is what my 9-year old daughter asked when she saw these signs adorning a wall on campus when walking to her music class on Saturday. Without waiting for an answer from me, she immediately gave her opinion: It doesn’t make any sense – and it’s not even proper English! She’s right of course – what on earth does it mean? Pursue the impossible? Pursue impossible dreams? And why are the campus walls decorated with this ungrammatical imperative? And what are we meant to do if we acquiesce – start attempting to square the circle or find a 5-chromatic planar graph? In mathematics at least, pursuing the impossible is not such a great idea. Then I remembered seeing some people installing various objects in different places about campus last week. At the time I had assumed that this was the output of an art project, but now I went for a closer look. The first thing I saw was a collection of parallel metal plates on the lawn with a sign saying “Take Photo Here”. So I did, and when I took the photo from the recommended place, the plates lined up and I got a picture of John Winthrop Hackett, who was UWA’s inaugural chancellor. Because my first view of the structure (sculpture?) was at almost the same angle as the “correct” viewing angle, there wasn’t all that much difference between the views. The next one was more interesting though – again a set of parallel plates, and obviously a person, but who? Even poking my camera through the hole in the “take photo here” spot, I couldn’t line it up perfectly, but managed to get a recognisable face. The photo is of Barry Marshall, UWA’s one and only Nobel Laureate (shared prize with Robin Warren) and he really does have one of the great stories of scientific persistence triumphing against the odds. While working as a young internist, he noticed high concentrations of the bacterium Helicobacter Pylori in many of the biopsies he performed on tissue from people with stomach ulcers and other stomach problems, and he developed the theory that stomach ulcers might actually be caused by the bacterium. At that time, stomach ulcers were universally regarded as arising from excessive stomach acid caused by stress and diet. The medical establishment greeted his theory with ignorance, indifference or condemnation. After all, who would pay any attention to this maverick whose nonsensical theories about bacteria living in the stomach causing ulcers were obviously so wildly misguided that they should be summarily rejected. One of the important and most dramatic steps that he took to prove that he was right after all was to create a Helicobacter Pylori broth, and drink it himself, while documenting the survival of the bacteria in the stomach (deemed impossible) and the almost immediate onset of a number of stomach complaints. The ultimate consequence of his persistence, indeed intransigence, is that stomach ulcers have been transformed from a painful, often-chronic condition making life miserable for tens of millions of people to an easily-treatable condition just requiring a short course of antibiotics. Occasionally I see a car driving round Nedlands with the vanity plates H PYLORI on it. By now, it’s dawning on me that this is not some final year project in Visual Arts, but is actually the unveiling of the University’s new branding – yes, our new “slogan” or “motto” or whatever you call it is actually “Pursue Impossible”. I didn’t attend the meeting at which this branding was unveiled and explained, so I had to fill in the gaps myself. The installations are all about how by looking at things in just the right way, the impossible becomes possible. To my mind, the sentiment is fine, but not immediately apparent from “Pursue Impossible”. Also some of the installations don’t seem to really be conveying the right idea. In this one, the word POSSIBLE on our staff club wall becomes IMPOSSIBLE if you manoeuvre the letters IM (sitting on a plinth some distance away) into place. So by looking at it in the recommended way, the possible becomes impossible! Hurray! So what do we all think of our new motto? Everyone that I’ve spoken to has reacted with either disbelief, bewilderment or derision, but I’m not sure which is winning at the moment. I don’t know if anybody (other than the marketing firm that pocketed the cash) likes it, but if they do, they haven’t told me. Our previous but now-outdated motto was “Achieve International Excellence” which is pretty clunky but at least the intent is clear. Even earlier we had a much more succinct motto with which surely no-one can disagree – “Seek Wisdom” – and to which I think we should return, if we really think a motto is important. But actually, what is the point of a university motto/tagline at all? Do students choose universities based on the motto? Is the motto intended to convey to the public some deeply held core value? If so, should it really be chosen by some marketing consultant? It seems endemic though, because almost everywhere has a motto – for example, both of my daughters’ schools have mottos, one of them is Semper Altius and the other Savoir C’est Pouvoir. (Obviously, a motto in another language automatically has more gravitas than one in English.) The good news though is that we’re not the worst – when I went to UNSW a few years ago, I was surprised to be continually urged to Never Stand Still, which is their motto. To me, it always brings to mind the image of someone standing giving a lecture while hopping frantically from foot to foot, as though desperate for a pee. I do have to feel a bit sorry for the VC though. Shortly after unveiling the “Pursue Impossible” brand, he was forced by UWA staff and students to reluctantly return$4m (to the government) that had been given to UWA to set up a think-tank analysing problems in the developing world and making recommendations on which development projects give the best bang for the buck. The catch was that the proposed centre was to be associated with Bjorn Lomborg, a Danish political scientist who performs “Freakonomics” style analysis of environmental and developmental issues, often  with counter-intuitive and/or controversial results.

But UWA staff spoke loud and clear – they absolutely do not want to be associated in any way with this maverick whose nonsensical theories are obviously so wildly misguided that they should be summarily rejected.

Aha, at last I’ve got it – the motto that we should have if they were subject to truth-in-advertising rules.

UWA – you just can’t make this stuff up!

Some research projects give you more than others in terms of reward and enjoyment. I’ve been very lucky to have been part of an enthusiastic team in Stephen Glasby, Luke Morgan, and Alice Niemeyer on a problem concerning automorphisms of p-groups; but more of that in a later post. In our investigations, we needed to know some basic data on polynomial representations of the general linear group $GL(d,p)$. Consider the natural action of $GL(d,p)$ on the tensor power $T^n V$ where $V$ is the vector space $\mathbb{F}_p^d$. It is a well-known result of Schur (and I won’t elaborate on it here) that if $p>n$, then we can parameterise the irreducible $GL(d,p)$-modules by the partitions of $n$. (Well actually, the characteristic 0 analogue is due to Schur, but it was folklore for a long time until a paper of Benson and Doty). For example, let us take the tensor square ($n=2$). If $p$ is odd, then it is a classical fact that $T^2 V$ breaks up into two smaller $GL(d,p)$-modules, namely

$T^2 V \cong S^2 V \oplus A^2 V$

where $S^2 V$ is the symmetric square of $V$ and $A^2 V$ is the alternating square of $V$. The partitions here are the trivial partitions of the number 2. The partition $(1,1)$ corresponds to $A^2V$ and the partition $(2,0)$ corresponds to $S^2 V$.

We are interested in something slightly more difficult. We actually want to know the irreducible constituents of the free Lie algebra $L(V)$ generated by $V$. The connection between the two settings is cute. Define a bracket operation on the tensor algebra $T(V)$ by $[u,v] = u\otimes v-v\otimes u$. Then we obtain a graded Lie algebra $L(V)=\bigoplus_{n=1}^\infty L_n$ where each $L_n$ is just $L(V)\cap T^n(V)$. Each $L_n$ then breaks up into irreducibles indexed by partitions of $n$, except we don’t know the multiplicities of each submodule. Write $V^\lambda$ for the $GL(V)$-module corresponding to a partition $\lambda$ of $n$. Note that the multiplicities here could be 0, that is, the $V^\lambda$  may not even appear. So think of the partitions now as being a superset of parameterising objects. For $n=2$, it is well known that $L_2(V)\cong A^2V$, that is, the symmetric square vanishes (just think of what the Lie bracket does here!).

Well I came across a beautiful result of Kraśkiewicz and Weyman that yields the answer. Consider standard tableaux of type $\lambda$. As an example, consider the partition $(2,2,1,1)$ of the number 6. Then there are 9 possible standard tableaux:

A descent is an entry $i$ of a standard tableaux such that $i+1$ appears in a row lower than it. So for example, 2, 4, and 5 are descents of the first tableau above. The major index of a standard tableaux is the sum of its descents. So for our nine tableaux we have major indices 11, 10, 9, 13, 9, 8, 12, 7, 11 accordingly. Then the magic number for the multiplicity of a $V^\lambda$ is the number of standard tableaux of type $\lambda$ that have major index congruent to 1 modulo $n$. In our example, there are two such young tableaux, the 4th and 8th one. So $V^\lambda$ has multiplicity 2.

Congratulations are due to Michael who is currently in a purple patch riding a wave of recognition and achievement over the last two or three weeks. (I had look up why it’s called a purple patch and not a green patch or a chartreuse patch etc.)

First, we heard that his latest ARC Discovery Grant application (along with Li and Gabriel) has been successful for a project involving symmetries of directed graphs, about which much less is known than for undirected graphs.

Secondly, he won a UWA Research Award in the “mid-career” category – these are internal awards across the whole university designed to recognise excellence in research; Gabriel also won the same award, but in the “early-career” category.

Then to top things off, we heard yesterday that his promotion to “something” was granted. Unfortunately it is not entirely clear what “something” should be. UWA used to use the British system of “lecturer/senior lecturer/associate professor/professor”, with only a handful of people in latter category. In other words, “Professor” is quite prestigious and only a few people will reach that level.

Then a few years ago, we decided to change to the US system of “assistant professor / associate professor / professor”. I’m not entirely sure why this change was made, but I think that it was partially to allow UWA to attract strong American academics (looking for jobs due to the hiring freeze in the US during the GFC) for whom dropping down to an “associate professor” would be seen as a backward step, and generally to align ourselves more with the US nomenclature than with the UK.

But then the local medical research funding body, the NHMRC, said that anyone who called themselves a professor would be evaluated as though they were an old-style prestigious professor, suddenly making some perfectly good research records look relatively mediocre.

So the edict has come down to, well, we don’t actually know what we’re meant to do. New jobs are to be advertised under the old titles, but holders of old jobs who chose to go to the new titles can continue to use the new titles or revert to the old titles depending on their preference or the day of the week or something. At least, I think I’ve got that right.

Anyway, there’s one thing that is clear. Congratulations to Michael on his promotion to Level D, his ARC Discovery Grant and his UWA Research Award. And to Gabriel for the latter two.

I’m in Singapore at the moment, spending the weekend watching my 11-year old daughter Amy in a gymnastics competition and the weekdays visiting Dave Roberson (currently at NUS) and Fengming Dong (currently at NTU).

Meeting up with Dave and thinking once again about the annoyingly resistant conjecture that the core of a cubelike graph is cubelike, reminded me of another “cubelike” question that is still unresolved.

First some terminology: a cubelike graph is a Cayley graph for the elementary abelian 2-group $Z_2^n$; the term “cubelike” arises for two reasons:

1. The $n$-dimensional cube is cubelike
2. If you talk, or write, anything about these graphs, you rapidly need something snappier for the phrase “a Cayley graph for an elementary abelian 2-group”

It has been known for decades that a cubelike graph cannot have chromatic number 3, and this was proved in a beautifully elegant fashion by Payan. A very ambitious conjecture that all cubelike graphs have chromatic number equal to a power of 2 can be disproved by exhibiting a cubelike graph on 16 vertices with chromatic number 7, and cubelike graphs on 64 vertices with chromatic number 6.

I simply cannot find any cubelike graph with chromatic number 5, and according to Brouwer’s website, this is unknown. Chris Godsil and I thought about this a few years ago, and someone said they had heard someone tell someone else that they had heard that perhaps some Russians had found such a graph on 128 vertices.

So, what’s the problem? Why not just construct all 128-vertex cubelike graphs and check their chromatic number?

The trouble with this is that the number of cubelike graphs grows very rapidly. There are only 1372 such graphs on 32 vertices, and we can find all the chromatic numbers. This jumps to 475499108 on 64 vertices (actually a handful less, this overcounts the number by about 10, due to some “accidental” isomorphisms), and although I don’t know the exact chromatic number of all of these, I can rule out enough of them as potential 5-chromatic graphs to complete the search.

But on 128 vertices, we have 1038397981840994509577948 graphs to work through (that’s just about $10^{30}$ and so unless we stumble on one somehow (perhaps someone knows who “the Russians” are) or make some theoretical advance, this problem is likely to remain unresolved for the time being.

In a colleague’s research grant proposal, under a heading about resources and equipment, he wrote something along the lines of:

All a mathematician needs is some paper, some pens, good access to online journals, and most importantly, a quiet place to work.

Of course, we also rely on good coffee, a buzzing environment of enthusiastic colleagues, natural light, and administrative support.

For other disciplines, lab equipment and technicians are extremely important, and not having the best equipment would severely cripple an experimental chemist, for example. So if you needed to find a way to stifle the progress of a group of mathematicians, what changes to their work environment would you make?

• You could take their blackboards/whiteboards away, but they might be just as happy with their endless supply of foolscap paper.
• You could take their paper away. This is difficult to do, as paper is easy to buy and very cheap. Mathematicians would bring their own paper, or just write on their desks and other flat surfaces.
• You could take their pens away. Again, pens are cheap and easy to buy, so it would be difficult to outlaw pens in the workplace. And anyway, where would you draw the line? Pencils, chalk, and crayons would have to be outlawed too.

Perhaps the best way is to create tension within the group, and somehow put in place a situation where the ambient noise in the workplace was disruptive and unpredictable. For those who wear headphones, they would need to be distracted by visible movement in their periphery. How can this be done effectively? Even more insidiously, we could create an environment that would increase the rate of infection due to colds, influenza, or other airborne viruses. Have you tried to solve a difficult mathematics problem whilst your head is congested and your joints feel like jelly?

So I leave the question to you: how can you create a work environment that not even a resource-minimalist mathematician can bear? To summarise:

1. it needs to organically create tension between colleagues,
2. it needs to be cost efficient,
3. it needs to be noisy,
4. it needs to have visual distractions,
5. it needs to foster airborne viruses.

I can only think of one solution to this problem. What is your solution?

Most LaTeX-ers know about Tikz, which allows the user to create images in LaTeX without having to embed images created from an external program. The main advantages are that

1. The ambient LaTeX fonts are used in the image, so labels and such conform to the ambient style of the document.
2. The size of the .tex file is kept small, since it is only text you are creating.
3. It yields a picture that is smooth and that looks good upon zooming in (i.e., the resolution of the picture is good).
4. It is functional code so that you can automate the drawing of many pictures by giving commands such as “draw a line between these two points”.

The main disadvantage, is that there is a steep learning curve. The best way to learn is through examples, and even though I’m still a hack, my tikz code has improved via my copying segments of other people’s code. For geometry, there isn’t much out there, so I thought that I would dump some images here. Below are some Tikz pictures of configurations in finite geometry that I’ve collected and think should be available for everyone else to use. A big thanks to Stephen Glasby who went to a lot of trouble to make the two generalised hexagons of order 2. If you have suggestions on how I can simplify my code, please let me know.

### Desargues’ configuration, two ways

\begin{tikzpicture}
\tikzstyle{point1}=[ball color=cyan, circle, draw=black, inner sep=0.1cm]
\tikzstyle{point2}=[ball color=green, circle, draw=black, inner sep=0.1cm]
\tikzstyle{point3}=[ball color=red, circle, draw=black, inner sep=0.1cm]
\node (v1) at (0,8) [ball color=blue, circle, draw=black, inner sep=0.1cm] {};
\node (v2) at (0,6) [point1] {};
\node (v3) at (2,5.5) [point1] {};
\node (v4) at (1.5,4) [point1] {};
\node (v5) at (0,0) [point2] {};
\node (v6) at (2.75*2,8-2.75*2.5) [point2] {};
\node (v7) at (1.5*1.5,8-1.5*4) [point2] {};
\draw (v1) -- (v2) -- (v5);
\draw (v1) -- (v3) -- (v6);
\draw (v1) -- (v4) -- (v7);
\draw (v2) -- (v3) -- (v4) -- (v2);
\draw (v5) -- (v6) -- (v7) -- (v5);
\node (v8) at (intersection of v2--v3 and v5--v6) [point3] {};
\node (v9) at (intersection of v2--v4 and v5--v7) [point3] {};
\node (v10) at (intersection of v3--v4 and v6--v7) [point3] {};
\draw (v3) -- (v8) -- (v6);
\draw (v4) -- (v9) -- (v7);
\draw (v4) -- (v10) -- (v7);
\draw (v8) -- (v9) -- (v10);
\end{tikzpicture}


… and the second one:

\begin{tikzpicture}
\tikzstyle{point} = [ball color=black, circle,  draw=black, inner sep=0.1cm]
\foreach\x in {0, 72, 144, 216, 288}{
\begin{scope}[rotate=\x]
\coordinate (o1) at (-0.588, -0.809);
\coordinate (o2) at (0.588, -0.809);
\coordinate (c1) at (-1.1, 4.6);
\coordinate (c2) at (1.1, 4.6);
\coordinate (o3) at (0, 3.236);
\draw[color=black] (o3) -- (3.236*-0.588, 3.236*-0.809);
\draw[color=blue] (o1) ..  controls (c1) and (c2) ..  (o2);
\end{scope}
}
\foreach\x in {0, 72, 144, 216, 288}{
\begin{scope}[rotate=\x]
\coordinate (o2) at (0.588, -0.809);
\coordinate (o3) at (0, 3.236);
\fill[point] (o2) circle (2pt);
\fill[point] (o3) circle (2pt);
\end{scope}
}
\end{tikzpicture}


### The generalised quadrangle of order 2

I think Gordon gave me the original tikz code for this and then I tweaked it.

\begin{tikzpicture}
\tikzstyle{point}=[ball color=magenta, circle, draw=black, inner sep=0.1cm]
\foreach \x in {18,90,...,306}{
\node [point] (t\x) at (\x:2.65){};
}
\foreach \x in {54,126,...,342}{
\draw [color=blue, double=green](\x:1cm) circle (1.17557cm);
}
\fill [white] (0,0) circle (1cm);
\foreach \x in {54,126,...,342}{
\node[point] (i\x) at (\x:1cm) {};
\node[point] (o\x) at (\x:2.17557cm) {};
}

\draw [color=blue,double=green] (t90)--(o126)--(t162)--(o198)--(t234)--(o270)--(t306)--(o342)--(t18)--(o54)--(t90);
\draw (t90)--(i270)--(o270);
\draw (t162)--(i342)--(o342);
\draw (t234)--(i54)--(o54);
\draw (t306)--(i126)--(o126);
\draw (t18)--(i198)--(o198);
\end{tikzpicture}


### The two generalised hexagons of order 2

These pictures were originally drawn by Schroth in his 1999 paper, and then appeared in Burkard Polster’s book “A geometrical picture book”.

\begin{tikzpicture}
\foreach\n in {0, 1,..., 6}{
\begin{scope}[rotate=\n*51.4286]
\coordinate (a0) at (10,0);
\coordinate (b0) at (7,0);
\coordinate (c0) at (1.45,0);
\coordinate (d0) at (4.878,-0.4878);
\coordinate (e0) at (2.1729,0.37976);
\coordinate (f0) at (1.45,0.612);
\coordinate (g0) at (2.78,-0.585);
\coordinate (h0) at (4.074,0.7846);
\coordinate (i0) at (6.0976,2.9268);
\foreach\k in {1, 2,..., 6}{
\foreach\p in {a,b,c,d,e,f,g,h,i}{
\coordinate (\p\k) at ($(0,0)!1! \k*51.4286:(\p0)$);
}
}
\draw[thick,blue] (a0)--(b0)--(c0);
\draw[thick,blue] (d0)--(e0)--(f0);
\draw[thick,black] (g0)--(h0)--(i0);
\draw[thick,black] (a0)--(g1)--(a3);
\draw[thick,green] (i0)--(d1)--(i2);
\draw[thick,black] (c0)--(g3)--(d3);
\draw[thick,color=purple] (b0) .. controls (5.7,-1.8) and (4.6,-2.2)
.. (h6) .. controls (1.5,-3.2) and (-1,-2.4) .. (e4);
\draw[thick,black] (b0)--(h0)--(e2);
\draw[thick,purple] (f6)--(c0)--(f0);
\foreach\k in {1, 2,..., 6}{
\foreach\p in {a,b,c,d,e,f,g,h,i}{
}
}
\end{scope}
}
\end{tikzpicture}


\begin{tikzpicture}
\foreach\n in {0, 1,..., 6}{
\begin{scope}[rotate=\n*51.4286]
\coordinate (a0) at (85,0);
\coordinate (b0) at (55,0);
\coordinate (c0) at (12.5,0);
\coordinate (d0) at (8.5,1.3);
\coordinate (e0) at (16.2,9);
\coordinate (f0) at (30,14.3);
\coordinate (g0) at (26.6,17.0);
\coordinate (h0) at (26.3,22.4);
\coordinate (i0) at (29.5,28);
\foreach\k in {1, 2,..., 6}{
\foreach\p in {a,b,c,d,e,f,g,h,i}{
\coordinate (\p\k) at ($(0,0)!1! \k*51.4286:(\p0)$);
}
}
\draw[thick,black] (a0)--(e1)--(a3);
\draw[thick,green] (b0)--(h0)--(b2);
\draw[thick,purple] (f0)--(g0)--(f1);
\draw[thick,blue] (h0)--(i0)--(a1);
\draw[thick,purple] (h6)--(c0)--(d0);
\draw[thick,purple] (f0)--(e0)--(i3);
\draw[thick,black] (b0)--(i6)--(g6);
\draw[thick,color=blue] (g0) .. controls (27,2) and (17,-5)
.. (d6) .. controls (-7,-5) and (-5,-5) .. (c3);
\draw[thick,color=blue] (c0) .. controls (16,3) and (17,5)
.. (e0) .. controls (15,13) and (8,15) .. (d1);
\foreach\k in {1, 2,..., 6}{
\foreach\p in {a,b,c,d,e,f,g,h,i}{
}
}
\end{scope}
}
\end{tikzpicture}


The first is the Split Cayley hexagon as it is usually given, whilst the second is its dual.

### The projective plane of order 2

\begin{tikzpicture}
\tikzstyle{point}=[ball color=cyan, circle, draw=black, inner sep=0.1cm]
\node (v7) at (0,0) [point] {};
\draw (0,0) circle (1cm);
\node (v1) at (90:2cm) [point] {};
\node (v2) at (210:2cm) [point] {};
\node (v4) at (330:2cm) [point] {};
\node (v3) at (150:1cm) [point] {};
\node (v6) at (270:1cm) [point] {};
\node (v5) at (30:1cm) [point] {};
\draw (v1) -- (v3) -- (v2);
\draw (v2) -- (v6) -- (v4);
\draw (v4) -- (v5) -- (v1);
\draw (v3) -- (v7) -- (v4);
\draw (v5) -- (v7) -- (v2);
\draw (v6) -- (v7) -- (v1);
\end{tikzpicture}