Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
ccee857
feat(Combinatorics/SimpleGraph): group actions on simple graphs
RaggedR May 18, 2026
a2a5505
chore: add Action.lean to Mathlib.lean
RaggedR May 18, 2026
bca5030
feat(Combinatorics/SimpleGraph): coset graphs (Sabidussi construction)
RaggedR May 18, 2026
908c301
feat(Combinatorics/SimpleGraph): Sabidussi representation theorem
RaggedR May 18, 2026
f3269af
feat(Combinatorics/SimpleGraph): Lorimer's theorem and quotient graphs
RaggedR May 18, 2026
b4614a0
fix: drop unused GraphAction from connectionSet, add omit annotations
RaggedR May 18, 2026
1510488
doc: add docstring to sabidussiSymmetricGraph
RaggedR May 18, 2026
fe4e11e
feat(Combinatorics): cellular surfaces, CSS codes, and k = 2g
RaggedR May 21, 2026
925e6dd
feat(Archive): surface instances for CSS codes (genus 1, 2, 3, 505)
RaggedR May 21, 2026
ec7edeb
Add Sabidussi descriptions and Heawood bridge theorem
RaggedR May 21, 2026
34ebc19
Add Zhou graph (F182A): Sab(PSL(2,13), S₃), imprimitive
RaggedR May 21, 2026
4fed421
chore: add nextPerm docstring, fix lint warnings
RaggedR May 21, 2026
0158217
doc: add visualization links for Klein quartic and Zhou graph
RaggedR May 21, 2026
9df764f
doc: add visualization links for Bolza and Heawood surfaces
RaggedR May 21, 2026
6daab3f
doc: update Zhou graph links — zhou3-F182A + new zhou6-91v quotient
RaggedR May 21, 2026
a47d36b
Add Zhou Z₂ quotient: Sab(PSL(2,13), D₁₂) on 91 vertices
RaggedR May 21, 2026
1dec2e2
Rewrite Zhou with consistent edge data + named Zhou-6 quotient graph
RaggedR May 21, 2026
4d88e44
doc: rename Zhou → Zhou-3, re-add visualization links
RaggedR May 21, 2026
ca1d25b
style: fix linter errors in Archive surface files
RaggedR May 21, 2026
f093609
fix: Mathlib.lean ordering + longFile option for ClayworthSurface
RaggedR May 21, 2026
977e10a
feat(Archive): Klein quartic graph is a Sabidussi coset graph
RaggedR May 22, 2026
35c6191
feat(Archive): Zhou-3 and Zhou-6 Sabidussi isos + quotient proof
RaggedR May 22, 2026
9d08610
doc: clarify Sabidussi theorem applies to arc-transitive graphs
RaggedR May 22, 2026
281e258
feat(Archive): Bolza surface bridge to Möbius-Kantor voltage graph
RaggedR May 22, 2026
0227757
fix: add module declaration to SabidussiWitness.lean
RaggedR May 22, 2026
945902e
feat(Archive): Clayworth graph Sabidussi iso via G₂(2) generators
RaggedR May 22, 2026
ef6c090
style: suppress longLine linter for ClayworthSabidussi data arrays
RaggedR May 22, 2026
20d3687
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] May 22, 2026
482447f
fix: add maxRecDepth/maxHeartbeats for ClayworthSabidussi
RaggedR May 22, 2026
0e8c7e3
fix(Archive): CI fixes — Klein docstring, Clayworth heartbeats, Klein…
RaggedR May 22, 2026
7bbc77d
perf: O(n) adjacency proofs for ClayworthSabidussi (1300x speedup)
RaggedR May 22, 2026
a781943
refactor(Archive): Clayworth surface via triangle group Δ(2,3,12)
RaggedR May 22, 2026
dc1a5d0
chore(Archive): move ClayworthSabidussi to the Meinhold PR
RaggedR May 22, 2026
c57c0b4
feat(Archive): Langer and Zhou-6 primitivity, no cubic cover of Langer
RaggedR May 22, 2026
4492104
feat(Archive): dual graph regularity statements for all four surfaces
RaggedR May 22, 2026
2f1a20c
chore: remove Zhou, Langer, PrimitiveGraphs from surface-instances
RaggedR May 22, 2026
6926646
Merge upstream/master into feat/surface-instances
RaggedR Jun 5, 2026
5562da9
Merge remote-tracking branch 'upstream/master' into feat/surface-inst…
RaggedR Jul 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Archive.lean
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import Archive.Arithcc
import Archive.BolzaSurface
import Archive.ClayworthSurface
import Archive.Examples.Eisenstein
import Archive.Examples.IfNormalization.Result
import Archive.Examples.IfNormalization.Statement
Expand All @@ -7,6 +9,7 @@ import Archive.Examples.Kuratowski
import Archive.Examples.MersennePrimes
import Archive.Examples.PropEncodable
import Archive.Hairer
import Archive.HeawoodSurface
import Archive.Imo.Imo1959Q1
import Archive.Imo.Imo1959Q2
import Archive.Imo.Imo1960Q1
Expand Down Expand Up @@ -61,13 +64,16 @@ import Archive.Imo.Imo2024Q3
import Archive.Imo.Imo2024Q5
import Archive.Imo.Imo2024Q6
import Archive.Imo.Imo2025Q3
import Archive.KleinSurface
import Archive.Kuratowski
import Archive.MinimalSheffer
import Archive.MiuLanguage.Basic
import Archive.MiuLanguage.DecisionNec
import Archive.MiuLanguage.DecisionSuf
import Archive.OxfordInvariants.Summer2021.Week3P1
import Archive.Sensitivity
import Archive.TriangleGroupSurface
import Archive.VoltageGraphs
import Archive.Wiedijk100Theorems.AbelRuffini
import Archive.Wiedijk100Theorems.AreaOfACircle
import Archive.Wiedijk100Theorems.AscendingDescendingSequences
Expand Down
96 changes: 96 additions & 0 deletions Archive/BolzaSurface.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/-
Copyright (c) 2026 Robin Langer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robin Langer
-/
import Mathlib.Combinatorics.CellularSurface
import Archive.VoltageGraphs

/-!
# The Bolza Surface: Möbius-Kantor Graph (F016A) on Genus 2

The Möbius-Kantor graph (Foster census F016A) = generalized Petersen graph
GP(8,3). It is a cubic arc-transitive graph on 16 vertices.

* **Sabidussi**: Sab(GL(2,3), C₃), |GL(2,3)| = 48
* **Voltage graph**: `voltageGraphK2 8 0 1 3` on K₂ with Z₈
* **Tiling**: {8,3} — 6 octagonal faces on the Bolza surface (genus 2)
* **CSS code**: [[24, 4, ≥ 6]]
* [Visualization](https://raw.githubusercontent.com/RaggedR/symmetric-graphs/main/lean/named_graphs/mobius-kantor-F016A.jpg)

All axioms verified by the Lean kernel (`decide`). No sorry.
-/

open CellularSurface

/-- The Möbius-Kantor graph GP(8,3) embedded on the Bolza surface (genus 2).
16 vertices, 24 edges, 6 octagonal faces. -/
def bolzaSurface : CellularSurface where
nV := 16
nE := 24
nF := 6
-- Edges 0–7: outer ring, 8–15: inner star, 16–23: spokes
edge_src := ![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7]
edge_tgt := ![1, 2, 3, 4, 5, 6, 7, 0, 11, 12, 13, 14, 15, 8, 9, 10, 8, 9, 10, 11, 12, 13, 14, 15]
edge_ne := by decide
face_len := fun _ => 8
face_len_pos := fun _ => by norm_num
face_edge := ![
![0, 17, 9, 20, 4, 21, 13, 16], -- 0→1→9→12→4→5→13→8→0
![7, 6, 5, 4, 3, 2, 1, 0], -- 0→7→6→5→4→3→2→1→0 (outer ring reversed)
![16, 8, 19, 3, 20, 12, 23, 7], -- 0→8→11→3→4→12→15→7→0
![1, 18, 10, 21, 5, 22, 14, 17], -- 1→2→10→13→5→6→14→9→1
![2, 19, 11, 22, 6, 23, 15, 18], -- 2→3→11→14→6→7→15→10→2
![13, 10, 15, 12, 9, 14, 11, 8] -- inner star reversed
]
face_dir := ![
![true, true, true, false, true, true, true, false],
![false, false, false, false, false, false, false, false],
![true, true, false, true, true, true, false, true],
![true, true, true, false, true, true, true, false],
![true, true, true, false, true, true, true, false],
![false, false, false, false, false, false, false, false]
]
face_inj := by decide
face_closed := by decide

/-- The Bolza surface satisfies ∂² = 0. -/
theorem bolza_d1_mul_d2_eq_zero : bolzaSurface.d1 * bolzaSurface.d2 = 0 :=
bolzaSurface.d1_mul_d2_eq_zero

/-- Euler characteristic confirms genus 2. -/
theorem bolza_euler : (16 : ℤ) - 24 + 6 = 2 - 2 * 2 := by norm_num

/-! ### Bridge to voltage graph description

The Bolza surface 1-skeleton is the Möbius-Kantor graph, which also has a
voltage graph description: `voltageGraphK2 8 0 1 3` (see `VoltageGraphs.lean`).
We prove these define the same graph via a GAP-computed bijection. -/

private def bolzaBijData : Array (Fin 2 × ZMod 8) := #[
(0,0),(1,1),(0,1),(1,4),(0,4),(1,5),(0,5),(1,0),
(1,3),(0,6),(1,2),(0,3),(1,7),(0,2),(1,6),(0,7)]
private theorem bolzaBijData_size : bolzaBijData.size = 16 := by native_decide

/-- The bijection `Fin 16 → Fin 2 × ZMod 8` making the Bolza surface graph
isomorphic to the Möbius-Kantor voltage graph. -/
def bolzaBij (v : Fin 16) : Fin 2 × ZMod 8 :=
bolzaBijData[v.val]'(by have := bolzaBijData_size; omega)

/-- **Bridge theorem**: the Bolza `CellularSurface` graph equals the
Möbius-Kantor voltage graph under `bolzaBij`. -/
theorem bolza_surface_eq_voltage :
∀ u v : Fin 16,
(∃ e : Fin 24,
(bolzaSurface.edge_src e = u ∧ bolzaSurface.edge_tgt e = v) ∨
(bolzaSurface.edge_src e = v ∧ bolzaSurface.edge_tgt e = u)) ↔
mobiusKantorVoltage.Adj (bolzaBij u) (bolzaBij v) := by
native_decide

/-! ### Dual graph: 6 octagonal faces, degree 8 -/

/-- The dual of the Bolza surface is 8-regular. -/
theorem bolzaSurface_dual_regular :
∀ v : Fin 6,
(Finset.univ.filter fun w => bolzaSurface.toDualSimpleGraph.Adj v w).card = 8 := by
sorry
331 changes: 331 additions & 0 deletions Archive/ClayworthSurface.lean

Large diffs are not rendered by default.

102 changes: 102 additions & 0 deletions Archive/HeawoodSurface.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/-
Copyright (c) 2026 Robin Langer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robin Langer
-/
import Mathlib.Combinatorics.CellularSurface
import Archive.VoltageGraphs

/-!
# The Heawood Graph (F014A): A Concrete CellularSurface

The Heawood graph (Foster census F014A) is the Levi graph (incidence graph) of
the Fano plane PG(2,2). It is a cubic arc-transitive graph on 14 vertices.

* **Sabidussi**: Sab(G₄₂, C₃) where G₄₂ = Z₇ ⋊ Z₆ (order 42)
* **Tiling**: {6,3} — 7 hexagonal faces on the torus (genus 1)
* **CSS code**: [[21, 2, ≥ 3]]
* [Visualization](https://raw.githubusercontent.com/RaggedR/symmetric-graphs/main/lean/named_graphs/heawood-F014A.jpg)

Vertices 0–6 are the 7 points of the Fano plane.
Vertices 7–13 are the 7 lines.
Edge i connects a point to the line containing it.

All axioms verified by the Lean kernel (`decide`). No sorry.
-/

set_option linter.style.nativeDecide false

open CellularSurface

/-- The Heawood graph embedded on a torus, as a CellularSurface.
14 vertices (Fano points + lines), 21 edges, 7 hexagonal faces. -/
def heawoodSurface : CellularSurface where
nV := 14
nE := 21
nF := 7
edge_src := ![0, 1, 3, 1, 2, 4, 2, 3, 5, 3, 4, 6, 0, 4, 5, 1, 5, 6, 0, 2, 6]
edge_tgt := ![7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13]
edge_ne := by decide
face_len := fun _ => 6
face_len_pos := fun _ => by norm_num
face_edge := ![
![0, 2, 7, 6, 19, 18], -- Face 0: 0→7→3→9→2→13→0
![12, 14, 16, 15, 1, 0], -- Face 1: 0→11→5→12→1→7→0
![18, 20, 11, 10, 13, 12], -- Face 2: 0→13→6→10→4→11→0
![3, 5, 10, 9, 2, 1], -- Face 3: 1→8→4→10→3→7→1
![15, 17, 20, 19, 4, 3], -- Face 4: 1→12→6→13→2→8→1
![6, 8, 14, 13, 5, 4], -- Face 5: 2→9→5→11→4→8→2
![9, 11, 17, 16, 8, 7] -- Face 6: 3→10→6→12→5→9→3
]
face_dir := ![
![true, false, true, false, true, false],
![true, false, true, false, true, false],
![true, false, true, false, true, false],
![true, false, true, false, true, false],
![true, false, true, false, true, false],
![true, false, true, false, true, false],
![true, false, true, false, true, false]
]
face_inj := by decide
face_closed := by decide

/-- The Heawood surface satisfies ∂² = 0. -/
theorem heawood_d1_mul_d2_eq_zero : heawoodSurface.d1 * heawoodSurface.d2 = 0 :=
heawoodSurface.d1_mul_d2_eq_zero

/-- Each column of d1 sums to zero (each edge has 2 endpoints). -/
example : ∀ e, ∑ v, heawoodSurface.d1 v e = 0 := heawoodSurface.d1_col_sum_eq_zero

/-- The Heawood code: Euler characteristic confirms genus 1, so k = 2. -/
theorem heawood_euler : (14 : ℤ) - 21 + 7 = 2 - 2 * 1 := by norm_num

/-! ### Bridge to voltage graph description

The Heawood graph has two descriptions:
1. **Combinatorial** (above): a `CellularSurface` with explicit edge_src/edge_tgt
2. **Algebraic** (`VoltageGraphs.lean`): `voltageGraphK2 7 0 4 6`, a voltage graph on K₂

We prove these define the same graph via the bijection v ↦ (v/7, v mod 7),
mapping Fano points 0–6 to fibre 0 and Fano lines 7–13 to fibre 1. -/

/-- The bijection Fin 14 → Fin 2 × ZMod 7 mapping vertex v to (v/7, v mod 7). -/
def heawoodBij (v : Fin 14) : Fin 2 × ZMod 7 :=
(⟨v.val / 7, by omega⟩, (v.val : ZMod 7))

/-- **Bridge theorem**: the Heawood `CellularSurface` graph equals the Heawood
voltage graph under the bijection v ↦ (v/7, v mod 7). -/
theorem heawood_surface_eq_voltage :
∀ u v : Fin 14,
(∃ e : Fin 21,
(heawoodSurface.edge_src e = u ∧ heawoodSurface.edge_tgt e = v) ∨
(heawoodSurface.edge_src e = v ∧ heawoodSurface.edge_tgt e = u)) ↔
heawoodVoltage.Adj (heawoodBij u) (heawoodBij v) := by
native_decide

/-! ### Dual graph: 7 hexagonal faces, degree 6 -/

/-- The dual of the Heawood surface is 6-regular. -/
theorem heawoodSurface_dual_regular :
∀ v : Fin 7,
(Finset.univ.filter fun w => heawoodSurface.toDualSimpleGraph.Adj v w).card = 6 := by
sorry
Loading
Loading