The lines of the Lean statement that state the theorem, then the definitions in the file that it uses.
Local definitions the statement names, followed through the definitions they name in turn. The match is by name in the source text, so a name reached only through notation can be missed; the full file is below.
definition OAI.EilenbergGanea.seedWord line 12
def seedWord : Bool → List (Bool × Bool) | false => [(false, true), (false, true), (true, false), (true, false), (true, false), (true, false), (true, false)] | true => [(false, true), (false, true), (true, true), (false, false), (true, true), (false, false), (true, true), (false, false)]
definition OAI.EilenbergGanea.boundaryLength line 18
def boundaryLength (relation : Bool) : ℕ := 3 * (seedWord relation).length
abbreviation OAI.EilenbergGanea.RoseVertex line 20
abbrev RoseVertex := Option (Bool × Fin 2)
abbreviation OAI.EilenbergGanea.SeedVertex line 21
abbrev SeedVertex := RoseVertex ⊕ Bool
abbreviation OAI.EilenbergGanea.CircleEdge line 22
abbrev CircleEdge := Bool × Fin 3
abbreviation OAI.EilenbergGanea.Sector line 23
abbrev Sector := (relation : Bool) × Fin (boundaryLength relation)
abbreviation OAI.EilenbergGanea.SeedEdge line 24
abbrev SeedEdge := CircleEdge ⊕ Sector
abbreviation OAI.EilenbergGanea.SeedCell line 25
abbrev SeedCell := SeedVertex ⊕ (SeedEdge ⊕ Sector)
definition OAI.EilenbergGanea.circleStart line 27
def circleStart (edge : CircleEdge) : RoseVertex := ![none, some (edge.1, 0), some (edge.1, 1)] edge.2
definition OAI.EilenbergGanea.circleEnd line 30
def circleEnd (edge : CircleEdge) : RoseVertex := ![some (edge.1, 0), some (edge.1, 1), none] edge.2
definition OAI.EilenbergGanea.sectorLetter line 33
def sectorLetter (sector : Sector) : Bool × Bool := (seedWord sector.1).get ⟨sector.2.val / 3, by have bound := sector.2.isLt dsimp [boundaryLength] at bound omega⟩
definition OAI.EilenbergGanea.sectorCircleEdge line 39
def sectorCircleEdge (sector : Sector) : CircleEdge := ((sectorLetter sector).1, if (sectorLetter sector).2 then ⟨sector.2.val % 3, Nat.mod_lt _ (by decide)⟩ else ⟨2 - sector.2.val % 3, by omega⟩)
definition OAI.EilenbergGanea.sectorStart line 44
def sectorStart (sector : Sector) : RoseVertex := if (sectorLetter sector).2 then circleStart (sectorCircleEdge sector) else circleEnd (sectorCircleEdge sector)
definition OAI.EilenbergGanea.nextSector line 48
def nextSector (sector : Sector) : Sector := ⟨sector.1, ⟨(sector.2.val + 1) % boundaryLength sector.1, Nat.mod_lt _ (by have := sector.2.isLt; omega)⟩⟩
definition OAI.EilenbergGanea.edgeVertices line 52
def edgeVertices : SeedEdge → Finset SeedVertex | .inl edge => {.inl (circleStart edge), .inl (circleEnd edge)} | .inr sector => {.inr sector.1, .inl (sectorStart sector)}
definition OAI.EilenbergGanea.sectorEdges line 56
def sectorEdges (sector : Sector) : Finset SeedEdge := {.inl (sectorCircleEdge sector), .inr sector, .inr (nextSector sector)}
definition OAI.EilenbergGanea.sectorVertices line 59
def sectorVertices (sector : Sector) : Finset SeedVertex := (sectorEdges sector).biUnion edgeVertices
definition OAI.EilenbergGanea.properFace line 62
def properFace : SeedCell → SeedCell → Prop | .inl vertex, .inr (.inl edge) => vertex ∈ edgeVertices edge | .inl vertex, .inr (.inr sector) => vertex ∈ sectorVertices sector | .inr (.inl edge), .inr (.inr sector) => edge ∈ sectorEdges sector | _, _ => False
definition OAI.EilenbergGanea.seedGraph line 69
def seedGraph : SimpleGraph SeedCell where Adj first second := properFace first second ∨ properFace second first symm := ⟨fun _ _ adjacent => adjacent.elim Or.inr Or.inl⟩ loopless := ⟨by intro cell rcases cell with vertex | cell · simp [properFace] · rcases cell with edge | sector <;> simp [properFace]⟩
definition OAI.EilenbergGanea.artinRelations line 78
def artinRelations {Vertex : Type*} (graph : SimpleGraph Vertex) : Set (FreeGroup Vertex) := {word | ∃ first second, graph.Adj first second ∧ word = FreeGroup.of first * FreeGroup.of second * (FreeGroup.of first)⁻¹ * (FreeGroup.of second)⁻¹}
abbreviation OAI.EilenbergGanea.ArtinGroup line 83
abbrev ArtinGroup {Vertex : Type*} (graph : SimpleGraph Vertex) := PresentedGroup (artinRelations graph)
definition OAI.EilenbergGanea.height line 86
def height {Vertex : Type*} (graph : SimpleGraph Vertex) : ArtinGroup graph →* Multiplicative ℤ := PresentedGroup.toGroup (f := fun _ : Vertex => Multiplicative.ofAdd (1 : ℤ)) (by rintro word ⟨first, second, _, rfl⟩ simp)
abbreviation OAI.EilenbergGanea.SourceGroup line 92
abbrev SourceGroup := (height seedGraph).ker
definition OAI.EilenbergGanea.cohomologicalDimension line 95
def cohomologicalDimension (GroupType : Type*) [Group GroupType] : WithBot ℕ∞ := CategoryTheory.projectiveDimension (ModuleCat.of (MonoidAlgebra ℤ GroupType) (Representation.trivial ℤ GroupType ℤ).asModule)
1 more definitions are reached the same way; the full file lists them.