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.UniqueGamesTheorem.Foundations.Complexity.encodeWord line 7
def encodeWord (n : Nat) : List Bool := List.replicate n true ++ [false]
definition OAI.UniqueGamesTheorem.Foundations.Complexity.encodeWords line 9
def encodeWords : List Nat → List Bool | [] => [] | n :: ns => encodeWord n ++ encodeWords ns
definition OAI.UniqueGamesTheorem.Foundations.Complexity.MachineFiniteAlphabet.FiniteAlphabet line 19
def FiniteAlphabet (M : FinTM2) : Prop := ∀ k, Finite (M.Γ k)
structure OAI.PerfectCompleteness.BinaryFormula.Literal line 25
structure Literal where name : Nat positive : Bool deriving DecidableEq
definition OAI.PerfectCompleteness.BinaryFormula.Literal.eval line 30
def Literal.eval (literal : Literal) (assignment : Nat → Bool) : Bool := if literal.positive then assignment literal.name else !(assignment literal.name)
abbreviation OAI.PerfectCompleteness.BinaryFormula.Clause line 33
abbrev Clause := Vector Literal 3
structure OAI.PerfectCompleteness.BinaryFormula.Formula line 38
structure Formula where clauses : List Clause
definition OAI.PerfectCompleteness.BinaryFormula.Formula.Satisfiable line 41
def Formula.Satisfiable (F : Formula) : Prop := ∃ assignment : Nat → Bool, ∀ clause ∈ F.clauses, clause.eval assignment = true
definition OAI.PerfectCompleteness.BinaryEncoding.bitsValue line 50
def bitsValue : List Bool → Nat | [] => 0 | b :: bits => Nat.bit b (bitsValue bits)
definition OAI.PerfectCompleteness.BinaryEncoding.parseFrame line 54
def parseFrame : List Bool → Option (List Bool × List Bool) | false :: rest => some ([], rest) | true :: b :: rest => do let (bits, trailing) ← parseFrame rest return (b :: bits, trailing) | _ => none
definition OAI.PerfectCompleteness.BinaryEncoding.parseName line 61
def parseName (input : List Bool) : Option (Nat × List Bool) := do let (digits, rest) ← parseFrame input let name := bitsValue digits if digits = name.bits then some (name, rest) else none
definition OAI.PerfectCompleteness.BinaryEncoding.parseLiteral line 66
def parseLiteral : List Bool → Option (Literal × List Bool) | sign :: input => do let (name, rest) ← parseName input return (⟨name, sign⟩, rest) | [] => none
definition OAI.PerfectCompleteness.BinaryEncoding.parseClause line 72
def parseClause (input : List Bool) : Option (Clause × List Bool) := do let (a, input) ← parseLiteral input let (b, input) ← parseLiteral input let (c, rest) ← parseLiteral input return (#v[a, b, c], rest)
definition OAI.PerfectCompleteness.BinaryEncoding.parseClauses line 78
def parseClauses : Nat → List Bool → Option (List Clause × List Bool) | 0, _ => none | _ + 1, false :: rest => some ([], rest) | fuel + 1, true :: input => do let (clause, input) ← parseClause input let (clauses, rest) ← parseClauses fuel input return (clause :: clauses, rest) | _ + 1, [] => none
definition OAI.PerfectCompleteness.BinaryEncoding.decodeFormula line 87
def decodeFormula (input : List Bool) : Option Formula := do let (clauses, rest) ← parseClauses (input.length + 1) input if rest = [] then some ⟨clauses⟩ else none
definition OAI.PerfectCompleteness.BinaryLanguage.language line 95
def language (input : List Bool) : Prop := ∃ formula, BinaryEncoding.decodeFormula input = some formula ∧ formula.Satisfiable
structure OAI.PerfectCompleteness.ProjectionTable line 102
structure ProjectionTable (q : Nat) where images : Vector (Fin q) (2 * q) exactlyTwo : ∀ b : Fin q, ((List.finRange (2 * q)).filter (fun a => decide (images[a] = b))).length = 2
structure OAI.PerfectCompleteness.Edge line 107
structure Edge (leftVertices rightVertices q : Nat) where left : Fin leftVertices right : Fin rightVertices projection : ProjectionTable q
structure OAI.PerfectCompleteness.Instance line 112
structure Instance (q : Nat) where leftVertices : Nat rightVertices : Nat edges : List (Edge leftVertices rightVertices q) nonempty : edges ≠ []
abbreviation OAI.PerfectCompleteness.Labeling line 118
abbrev Labeling {q : Nat} (G : Instance q) := (Fin G.leftVertices → Fin (2 * q)) × (Fin G.rightVertices → Fin q)
definition OAI.PerfectCompleteness.Edge.satisfied line 121
def Edge.satisfied {l r q : Nat} (e : Edge l r q) (a : Fin l → Fin (2 * q)) (b : Fin r → Fin q) : Bool := decide (e.projection.images[a e.left] = b e.right)
definition OAI.PerfectCompleteness.countSatisfied line 125
def countSatisfied {l r q : Nat} (a : Fin l → Fin (2 * q)) (b : Fin r → Fin q) : List (Edge l r q) → Nat | [] => 0 | e :: es => (if e.satisfied a b then 1 else 0) + countSatisfied a b es
definition OAI.PerfectCompleteness.Instance.maxSatisfied line 134
def maxSatisfied {q : Nat} (G : Instance q) : Nat := Finset.univ.sup (fun s : Labeling G => countSatisfied s.1 s.2 G.edges)
definition OAI.PerfectCompleteness.Instance.value line 137
noncomputable def value {q : Nat} (G : Instance q) : ℝ := (G.maxSatisfied : ℝ) / G.edges.length
5 more definitions are reached the same way; the full file lists them.