A graph yields a partial linear space of triangles
ProvedConway99.conway_99_triangle_system_of_srgEvery graph is the collinearity graph of a partial linear space.
Let be a strongly regular graph with parameters on a finite vertex set . Since , every edge of lies in exactly one triangle, so the triangles of behave like the lines of an incidence geometry. This statement asserts that the family of triangles of (three-element vertex sets that are pairwise adjacent) has the four defining properties of the line-system form of Conway's 99-graph problem:
- every line has exactly three points, for ;
- two distinct lines meet in at most one point, ;
- every point lies on exactly seven lines;
- any two distinct points lying on no common line satisfy
Property (2) is the uniqueness of the triangle on an edge, which is . Property (3) is the local structure at a vertex: the neighbourhood of carries a perfect matching, since each of the neighbours of is adjacent to exactly one other neighbour of ; counting the incidences between neighbours of and triangles through gives , so . Property (4) is together with the observation that two distinct points are collinear if and only if they are adjacent.
Together with the converse implication, this makes the line-system statement an equivalent form of Conway's 99-graph problem: it is the form in which the problem is usually attacked computationally, and the direction proved here is the one needed to derive consequences from a hypothetical graph.
Formalization note. The vertex type is an arbitrary finite type with decidable equality; the parameters enter only through the degree , and .
import Mathlib.Combinatorics.SimpleGraph.StronglyRegular open Finset SimpleGraph
namespace Conway99
theorem conway_99_triangle_system_of_srg {V : Type} [Fintype V] [DecidableEq V]
(g : SimpleGraph V) [DecidableRel g.Adj] (h : g.IsSRGWith 99 14 1 2) :
∃ L : Finset (Finset V),
(∀ l ∈ L, l.card = 3) ∧
(∀ l₁ ∈ L, ∀ l₂ ∈ L, l₁ ≠ l₂ → (l₁ ∩ l₂).card ≤ 1) ∧
(∀ x : V, (L.filter fun l => x ∈ l).card = 7) ∧
(∀ x y : V, x ≠ y → (∀ l ∈ L, ¬(x ∈ l ∧ y ∈ l)) →
(univ.filter fun z : V => z ≠ x ∧ z ≠ y ∧
(∃ l ∈ L, x ∈ l ∧ z ∈ l) ∧ (∃ l ∈ L, y ∈ l ∧ z ∈ l)).card = 2) := by sorry
end Conway99