Austin Ulrigg
← Writing
Expository · October 2026

Haar Graphs

Keine Sorge, meine deutschen Leser, hier geht es nicht um Haare oder das Hairy-Ball-Theorem.

Seven graph theorists want to meet for coffee. They agree to meet three at a time and, naturally, require every pair to meet exactly once. The task that remains is deciding who should attend which meetings in order to achieve this.

Each meeting uses three of the (72)=21\binom{7}{2}=21 pairs, so there must be seven meetings. Each person has six others to meet, two at a time, so everyone must attend three meetings.

One way to ensure that everyone attends three meetings is to number the people 0,1,…,60,1,\ldots,6 around a circle, choose a triple, and move all three choices one place clockwise for each of the next six meetings. In other words, add 11 to each number modulo 77. We only need to find a triple whose cyclic shifts never repeat a pair.

Our first guess might be {0,1,2}\{0,1,2\}. Adding 11 gives {1,2,3}\{1,2,3\}, so people 11 and 22 already meet twice.

Any two names are one, two, or three steps apart around the circle, counting in whichever direction is shorter. The seven cyclic shifts of a pair give all seven pairs at that distance. So, if the three pairs in our triple have different distances, no pair will repeat. The triple {0,1,3}\{0,1,3\} does this. The names 00 and 11 are one step apart, 11 and 33 are two, and 00 and 33 are three.

Mohar, Erdős, Steinerberger, Ringel, Youngs, Pisanski, and Euler are numbered 0 through 6 around a circle. The first meeting selects 0, 1, and 3. Moving all three choices one place clockwise selects 1, 2, and 4.
Figure 1. The first meeting and its first cyclic shift.

The seven meetings are then

{0,1,3},{1,2,4},{2,3,5},{3,4,6},{4,5,0},{5,6,1},{6,0,2}.\begin{gathered} \{0,1,3\},\quad\{1,2,4\},\quad\{2,3,5\},\quad\{3,4,6\},\\ \{4,5,0\},\quad\{5,6,1\},\quad\{6,0,2\}. \end{gathered}

Because they are graph theorists, they want to record attendance in a graph. Thus, we make a vertex AiA_i for meeting {i,i+1,i+3}\{i,i+1,i+3\} and a vertex BjB_j for person jj. Join them when person jj attends meeting ii, taking subscripts modulo 77. The resulting graph is called the Heawood graph.

The Heawood graph. Solid vertices represent meetings and hollow vertices represent people, with the seven graph theorists names beside their B labels. A_i is joined to B_i, B_(i+1), and B_(i+3), modulo 7.
001133
Figure 2. The graph of our seven meetings.

Each meeting has three people and each person attends three meetings, so every vertex has degree three. The graph is bipartite, with meetings in one class and people in the other. In terms of the coffee problem, if there were a four-cycle then this would mean two people attended the same two meetings.

We have been adding modulo 77, so our labels belong to the cyclic group Z7\mathbb Z_7. The edges of the graph are determined entirely from the set S={0,1,3}S=\{0,1,3\}, using the rule

Ai∼Bj⟺j−i∈S.A_i\sim B_j\quad\Longleftrightarrow\quad j-i\in S.

We chose SS to solve the coffee problem. But if we are just interested in the graph,1 could we do this for any subset SS? And could we replace Z7\mathbb Z_7 by a different group? As you might've guessed since you are reading this post, it turns out this construction works for any finite group.

For a finite group Γ\Gamma and a subset S⊆ΓS\subseteq\Gamma, make two disjoint sets of vertices

{Ag∣g∈Γ} ∪ {Bg∣g∈Γ},\{A_g\mid g\in\Gamma\}\ \cup\ \{B_g\mid g\in\Gamma\},

and join AgA_g to BgsB_{gs} for each s∈Ss\in S. This is the Haar graph H(Γ,S)H(\Gamma,S), and SS is its connection set. Equivalently, Ag∼Bg′A_g\sim B_{g'} exactly when g−1g′∈Sg^{-1}g'\in S. In an additive group, this becomes g′−g∈Sg'-g\in S, so our example is H(Z7,{0,1,3})H(\mathbb Z_7,\{0,1,3\}). When Γ\Gamma is cyclic, these are called cyclic Haar graphs.

Each label ss gives one edge at every vertex, connecting AgA_g to BgsB_{gs} and BgB_g to Ags−1A_{gs^{-1}}. Thus, the graph is simple, bipartite, and ∣S∣|S|-regular, with 2∣Γ∣2|\Gamma| vertices and ∣Γ∣∣S∣|\Gamma||S| edges. The edges of any one label correspond to a perfect matching, as the colors in Figure 2 show.

Hladnik, Marušič, and Pisanski studied these graphs for abelian groups in Cyclic Haar graphs (2002). Estélyi and Pisanski later considered arbitrary finite groups in Which Haar graphs are Cayley graphs? (2016).

Adding 11 modulo 77 to every subscript takes an edge such as A0B3A_0B_3 to A1B4A_1B_4. Any such map preserves vertex adjacency, giving an automorphism. We can do the same thing in any Haar graph. Left multiplication by h∈Γh\in\Gamma sends

AgBgs⟼AhgBhgs=AhgB(hg)s.A_gB_{gs}\longmapsto A_{hg}B_{hgs}=A_{hg}B_{(hg)s}.

Exactly one left multiplication takes AgA_g to a given Ag′A_{g'}, namely multiplication by g′g−1g'g^{-1}. The same holds in the BB-class. We say that Γ\Gamma acts simply transitively, or regularly, on each class.

We can also use this observation in reverse. Suppose a bipartite graph has a group Γ\Gamma acting by automorphisms, simply transitively on each class. Choose a vertex AA in one class and BB in the other. Every vertex then has a unique label Ag=gAA_g=gA or Bg=gBB_g=gB. Take SS to consist of the elements ss for which A∼sBA\sim sB. Applying g−1g^{-1} shows that gA∼g′BgA\sim g'B exactly when g−1g′∈Sg^{-1}g'\in S. Thus, the graph is H(Γ,S)H(\Gamma,S).

The choice of SS also affects whether the graph is connected. To reach another AA-vertex, we first follow an edge labeled ss to the BB-class, then return along one labeled tt, giving

Ag⟶Bgs⟶Agst−1.A_g\longrightarrow B_{gs}\longrightarrow A_{gst^{-1}}.

Repeating these pairs of steps from A1ΓA_{1_\Gamma} reaches exactly the AA-vertices indexed by the subgroup generated by SS−1={st−1∣s,t∈S}SS^{-1}=\{st^{-1}\mid s,t\in S\}. Thus, for nonempty SS, the graph is connected exactly when SS−1SS^{-1} generates Γ\Gamma. If 1Γ∈S1_\Gamma\in S, this is equivalent to SS generating Γ\Gamma. The Heawood graph is connected because SS contains 00 and the generator 11.

The edge labels are also useful when building a rotation system. Choose a cyclic order α\alpha on SS and order the edges at every AA-vertex by their labels. Each label occurs on exactly one incident edge, so this gives a local rotation. Do the same at the BB-vertices with another order β\beta, and we have a rotation system. Left multiplication preserves each edge label, taking AgBgsA_gB_{gs} to AhgB(hg)sA_{hg}B_{(hg)s}, so it also preserves these orders.

Our graph has fourteen vertices, each with two possible cyclic orders. That gives 2142^{14} rotation systems if we choose the orders separately. But if we use α\alpha at every AA-vertex and β\beta at every BB-vertex, there are just two choices for each, giving four rotation systems to try.

We can keep track of these orders on a much smaller graph, with one vertex AA, one vertex BB, and one edge for each s∈Ss\in S. This graph of parallel edges is a dipole, with the orders α\alpha and β\beta at its two vertices.

A dipole with vertices A and B and three parallel edges directed from A to B, labeled 0, 1, and 3 in Z7.
Figure 3. The dipole for S={0,1,3}S=\{0,1,3\}.

Figure 3 is an example of a voltage graph. The smaller graph is called the base graph. Choose a direction for each of its edges and label it with an element of a group Γ\Gamma. This label is the voltage. Reading an edge in the opposite direction replaces its label by its inverse. In an additive group, it changes the sign.

To build the derived graph, make a copy ugu_g of each base vertex uu for every g∈Γg\in\Gamma. An arrow u→vu\to v with voltage ss gives an edge ugvgsu_gv_{gs} for each gg. Thus, the label tells us which copy of vv to join to a given copy of uu. For our dipole, the labels 00, 11, and 33 give the three colored matchings in Figure 2. A Haar graph is exactly the derived graph of a dipole with one voltage for each element of SS.

A base edge from A to B with voltage 1 in Z7 gives seven derived edges from A_i to B_(i+1). The B vertices carry the seven graph theorists names beside their numbers.
Figure 4. One voltage gives a perfect matching.

We can also choose rotations at the base vertices. Each copy then gets the same cyclic order of the corresponding edge ends. For our dipole, these are the two orders α\alpha and β\beta.

A walk in the base graph determines a walk in the derived graph once we choose a copy of its starting vertex. This is called a lift. For example, take edge 00 forward and edge 11 backward in the dipole. The backward step contributes −1-1. The base walk returns to AA, but its lift from A0A_0 ends at A6A_6.

A closed base walk takes edge 0 from A to B and edge 1 backward from B to A. Its signed voltages are 0 and minus 1. The lifted walk goes from A0 to B0, named Mohar, and ends at A6 rather than A0.
Figure 5. A closed base walk whose lift does not close.

Each pair of steps subtracts 11 modulo 77, so seven repetitions give a fourteen-cycle. More generally, multiply the voltages along a walk in the order they are encountered, using inverses when traveling backward. This product is its net voltage. A closed base walk lifts to a closed walk exactly when its net voltage is the identity. For additive groups, we add the labels instead.

A current graph starts with an embedded graph whose directed edges have group labels, called currents. Reversing an edge inverts its current. For example, take the dipole below, with currents 11, 22, and 44 in Z7\mathbb Z_7, all directed from uu to vv. The cyclic order (1 2 4)(1\ 2\ 4) at both vertices specifies an orientable cellular embedding.

A current graph with currents 1, 2, and 4 directed from u to v in Z7. Both vertices have cyclic order 1, 2, 4. Tracing its single face reads 1, minus 2, 4, minus 1, 2, minus 4.
Figure 6. The rotations specify a single face.

We can trace a face by starting with edge 11 from uu to vv. The rotation at vv tells us to take edge 22 next, which brings us back to uu. At uu, edge 44 comes next, so we follow it to vv. Continuing in this way, we read 1,−2,4,−1,2,−41,-2,4,-1,2,-4 before returning to the dart we started with. Since we have used every edge in both directions, the embedding has only one face.

Figure 7(a) shows this face cut open into a hexagon. Put a new vertex ff inside it and join ff to the middle of each side. There are six sides in the picture because each of the three original edges appears twice along the boundary. In particular, the sides marked 11 and −1-1 both come from edge 11. Gluing them back together joins the two segments into a single edge from ff to itself, crossing edge 11. Each of the other two pairs gives a loop in the same way, leaving one vertex and three loops. This gives the dual of the original embedding.

The current graph's single face is cut open into a hexagon with successive labels 1, minus 2, 4, minus 1, 2, minus 4. Six colored segments connect a new vertex f to the sides. Joining each pair of sides with opposite labels connects its two segments into one loop at f. The three resulting loops appear on the right.
Figure 7. From the current graph to its dual.

Now give these loops voltages 11, 22, and 44, with the directions shown in Figure 7(b). For the green loop, leaving ff along the upper segment follows the arrows and gives voltage 11. Leaving along the lower segment goes around the same loop backward and gives voltage −1-1. Reading the signed labels clockwise around ff gives 1,−2,4,−1,2,−41,-2,4,-1,2,-4, in the same order as around the original face.

The voltage construction replaces ff by seven vertices f0,…,f6f_0,\ldots,f_6, which we'll just call 0,…,60,\ldots,6. The loop with voltage 11 gives an edge from ii to i+1i+1 for every ii, modulo 77. For i=0i=0 this joins 00 to 11, and for i=6i=6 it joins 66 to 00. Thus 00 has neighbors 11 and 66 from this loop. The loop with voltage 22 gives it neighbors 22 and 55, and the loop with voltage 44 gives it neighbors 44 and 33. In the cyclic order from Figure 7(b), these neighbors occur as (1 5 4 6 2 3)(1\ 5\ 4\ 6\ 2\ 3). At vertex ii, we add ii to each entry, giving

(i+1, i+5, i+4, i+6, i+2, i+3).(i+1,\ i+5,\ i+4,\ i+6,\ i+2,\ i+3).
Two local rotations of the derived K7, centered at the numbers 0 and 1. Names appear beside the neighboring vertices. At 0 the clockwise neighbors are 1, 5, 4, 6, 2, 3. At 1 they are 2, 6, 5, 0, 3, 4. Adding 1 to every label gives the second rotation.
Figure 8. Adding 11 to every label gives the next rotation.

Each vertex is adjacent to all six others, so the derived graph is K7K_7. We can trace one of its faces directly. Start with 0→10\to1. In the rotation at 11, the neighbor after 00 is 33, so next we take 1→31\to3. At 33, the neighbor after 11 is 00, and at 00, the neighbor after 33 is 11. We have returned to the starting dart after tracing the triangle 0,1,3,00,1,3,0.

The changes in vertex label along this triangle are 1,2,41,2,4, the currents leaving uu in their cyclic order. In the dual embedding, there is a face containing uu. Its boundary crosses the three original edges at uu, traversing the loops with voltages 1,2,41,2,4. Since we copied the dual rotations, following this boundary in the derived graph gives the same increments. Their sum is 00 modulo 77, so three steps return us to our starting vertex. At vv, the outgoing currents are −1,−2,−4-1,-2,-4, which also sum to 00 and give the triangle 0,6,4,00,6,4,0. The condition that the outgoing currents sum to 00 at each vertex is called Kirchhoff's current law.

Two triangular faces in the derived K7. The first goes from 0 to 1 to 3 and back to 0, using increments 1, 2, 4. The second goes from 0 to 6 to 4 and back to 0, using increments minus 1, minus 2, minus 4.
Figure 9. Kirchhoff's law closes both triangles modulo 77.

Adding each element of Z7\mathbb Z_7 to the vertex labels gives seven triangles of each kind. These are the fourteen faces. So this two-vertex current graph has given us a triangular embedding of K7K_7.

William Sharp Gustin, an American mathematician, developed the current-graph method in 1963, and it became central to Ringel and Youngs's 1968 solution of the orientable Heawood map-coloring problem. Gross (1974) introduced voltage graphs as a dual approach.

Going back to our Haar graph, let's try the same cyclic order on S={0,1,3}S=\{0,1,3\} at both types of vertex,

α=β=(0 1 3).\alpha=\beta=(0\ 1\ 3).
At A_i the clockwise edge labels 0, 1, 3 lead to B_i, B_(i+1), B_(i+3). At B_i the same clockwise labels lead to A_i, A_(i-1), A_(i-3).
Figure 10. The same label order at both types of vertex.

Starting with A0→B0A_0\to B_0, label 11 comes next at B0B_0, so we go to A−1=A6A_{-1}=A_6. Label 33 comes next at A6A_6, taking us to B2B_2. Following the two rotations gives the face in Figure 11.

The facial walk A0 to B0 to A6 to B2 to A2 to B3 and back to A0, with edge labels 0, 1, 3, 0, 1, and 3.
Figure 11. A facial walk of length six.

To do the same calculation for any Haar graph, write (g,s)A(g,s)_A for Ag→BgsA_g\to B_{gs} and (g,s)B(g,s)_B for Bg→Ags−1B_g\to A_{gs^{-1}}. Let τ\tau reverse a dart and RR take the next dart in the local rotation. The face permutation is F=RτF=R\tau, with composition read from right to left. It crosses the edge to BgsB_{gs} and takes the next label in the BB-rotation, giving

F(g,s)A=(gs,β(s))B.F(g,s)_A=(gs,\beta(s))_B.

As in our connectivity calculation, two steps bring us back to the AA-class. Crossing back multiplies the subscript by β(s)−1\beta(s)^{-1}, and α\alpha gives the next label, so

F2(g,s)A=(gsβ(s)−1,αβ(s))A.F^2(g,s)_A=\bigl(gs\beta(s)^{-1},\alpha\beta(s)\bigr)_A.

Here, the first coordinate is the vertex subscript and the second is the label of the edge we are about to take. Returning to our starting dart means returning to the same vertex with the same edge label. Since each application of F2F^2 moves two steps along the face, a face has length four if two applications return us to the starting pair and one application does not. For every face to have length four, this must hold for every AA-dart. We can check this using the formula above for any choice of α\alpha and β\beta.

In our example, the edge label follows 0→3→1→00\to3\to1\to0 under αβ\alpha\beta. It returns for the first time after three applications of F2F^2, and the total change to the vertex subscript is

(0−1)+(3−0)+(1−3)=0(mod7).(0-1)+(3-0)+(1-3)=0\pmod 7.

The same calculation works starting at label 11 or 33, so every face has length six. Adding each element of Z7\mathbb Z_7 to all the vertex subscripts in Figure 11 gives the seven faces shown below.

The Heawood graph drawn as a hexagonal tiling inside a parallelogram. Identify opposite sides in the marked directions to form a torus. The seven faces are labeled f0 through f6, and their colors continue across the identified sides.
Figure 12. The resulting embedding, with opposite sides identified.
  1. Because this was never really about coffee. ↩
← Back to Writing