Principal declarations
theorem Rollout.run_length
Module NimRollout
(lean/NimRollout.lean, lines 88–94) · file SHA-256 1a99428d71573d31… Axioms reported by the fresh build: propext, Quot.sound
EXECUTION COUNT: every complete run of `pi_j`, under any tie-breaking rule,
has exactly `sum_h (h / 2^j + h % 2^j)` moves.
Statement as elaborated and printed by Lean 4.26.0
∀ {j : ℕ} {p : List ℕ} {n : ℕ}, NimAudit.Rollout.Run j p n → n = NimAudit.rolloutCount j p
Exact source text, lines 88–94
88/-- EXECUTION COUNT: every complete run of `pi_j`, under any tie-breaking rule,89 has exactly `sum_h (h / 2^j + h % 2^j)` moves. -/90theorem run_length {j : Nat} {p : List Nat} {n : Nat} (hr : Run j p n) :91 n = rolloutCount j p := by92 induction hr with93 | done p hz => exact (rolloutCount_zero hz).symm94 | step p q n hm _ ih => rw [ih, policyMove_count hm]
Project declarations in the statement: Rollout.Run, rolloutCount
Project declarations used by the proof or definition body
Rollout.PolicyMove, Rollout.Run, Rollout.Run.rec, Rollout.policyMove_count, Rollout.rolloutCount_zero, rolloutCount
theorem Rollout.run_parity
Module NimRollout
(lean/NimRollout.lean, lines 96–102) · file SHA-256 1a99428d71573d31… Axioms reported by the fresh build: propext, Quot.sound
PARITY OF EXECUTION: the number of moves of any complete run of `pi_j` has
low bit equal to the channel value of the nim-sum
(bit 0 for j = 0; bit j XOR bit 0 for j ≥ 1).
Statement as elaborated and printed by Lean 4.26.0
∀ {j : ℕ} {p : List ℕ} {n : ℕ},
NimAudit.Rollout.Run j p n → n.testBit 0 = NimAudit.channel j (NimAudit.nimSum p)
Exact source text, lines 96–102
96/-- PARITY OF EXECUTION: the number of moves of any complete run of `pi_j` has97 low bit equal to the channel value of the nim-sum98 (bit 0 for j = 0; bit j XOR bit 0 for j ≥ 1). -/99theorem run_parity {j : Nat} {p : List Nat} {n : Nat} (hr : Run j p n) :100 n.testBit 0 = channel j (nimSum p) := by101 rw [run_length hr]102 exact rollout_count_channel j p
Project declarations in the statement: Rollout.Run, channel, nimSum
Project declarations used by the proof or definition body
Rollout.Run, Rollout.run_length, channel, nimSum, rolloutCount, rollout_count_channel
Definitions these statements use
inductive Rollout.Run
Module NimRollout
(lean/NimRollout.lean, lines 34–38) · file SHA-256 1a99428d71573d31…
`Run j p n`: following `pi_j` from board `p` reaches the all-zero board after
exactly `n` policy moves.
Statement as elaborated and printed by Lean 4.26.0
ℕ → List ℕ → ℕ → Prop
Exact source text, lines 34–38
34/-- `Run j p n`: following `pi_j` from board `p` reaches the all-zero board after35 exactly `n` policy moves. -/36inductive Run (j : Nat) : List Nat → Nat → Prop37 | done (p : List Nat) : (∀ x ∈ p, x = 0) → Run j p 038 | step (p q : List Nat) (n : Nat) : PolicyMove j p q → Run j q n → Run j p (n + 1)
Project declarations in the statement: none
Project declarations used by the proof or definition body
Rollout.PolicyMove
def Rollout.PolicyMove
Module NimRollout
(lean/NimRollout.lean, lines 28–32) · file SHA-256 1a99428d71573d31…
One legal move of the structured policy `pi_j` (tie-breaking unspecified).
Statement as elaborated and printed by Lean 4.26.0
ℕ → List ℕ → List ℕ → Prop
Exact source text, lines 28–32
28/-- One legal move of the structured policy `pi_j` (tie-breaking unspecified). -/29def PolicyMove (j : Nat) (p q : List Nat) : Prop :=30 (∃ pre x post, p = pre ++ x :: post ∧ 2 ^ j ≤ x ∧ q = pre ++ (x - 2 ^ j) :: post) ∨31 ((∀ x ∈ p, x < 2 ^ j) ∧32 ∃ pre x post, p = pre ++ x :: post ∧ 0 < x ∧ q = pre ++ (x - 1) :: post)
Project declarations in the statement: none
Project declarations used by the proof or definition body
none
def rolloutCount
Module NimCore
(lean/NimCore.lean, lines 82–82) · file SHA-256 b07db6c505210d5a…
Statement as elaborated and printed by Lean 4.26.0
ℕ → List ℕ → ℕ
Exact source text, lines 82–82
82def rolloutCount (j : Nat) (rows : List Nat) : Nat := (rows.map (heapCount j)).sum
Project declarations in the statement: none
Project declarations used by the proof or definition body
heapCount
def channel
Module NimCore
(lean/NimCore.lean, lines 77–78) · file SHA-256 b07db6c505210d5a…
Statement as elaborated and printed by Lean 4.26.0
ℕ → ℕ → Bool
Exact source text, lines 77–78
77def channel (j sigma : Nat) : Bool :=78 if j = 0 then sigma.testBit 0 else xor (sigma.testBit j) (sigma.testBit 0)
Project declarations in the statement: none
Project declarations used by the proof or definition body
none
def nimSum
Module NimCore
(lean/NimCore.lean, lines 7–9) · file SHA-256 b07db6c505210d5a…
Statement as elaborated and printed by Lean 4.26.0
List ℕ → ℕ
Exact source text, lines 7–9
7def nimSum : List Nat → Nat8 | [] => 09 | h :: t => h ^^^ nimSum t
Project declarations in the statement: none
Project declarations used by the proof or definition body
none
Full modules
Build evidence: fresh isolated rebuild of all 38 bundled modules with Lean (version 4.26.0, started 2026-10-10T15:21:56Z, finished 2026-10-10T15:27:00Z: 38/38 modules compiled, 1588 axiom reports, no errors. See Build for the commands and the independent audit of 2026-10-10 (dated evidence).