Principal declarations
theorem AC0.Gate.bounded_witness
Module Circuit
(lean/phase3/Circuit.lean, lines 499–538) · file SHA-256 af97cc0eec7d8464… Axioms reported by the fresh build: propext, Quot.sound
BOUNDED WITNESS LEMMA. If the gate fires on z, there is a list T of at most
b ≤ W distinct input positions, all with true literal and positive coefficient,
whose coefficients sum to at least b; T is an initial segment of the active
literals (T = active literals below a cut c').
Statement as elaborated and printed by Lean 4.26.0
∀ (g : NimAudit.AC0.Gate) (z : ℕ → Bool),
g.eval z = true →
∃ c' ≤ g.fanin,
(g.active z c').length ≤ g.thr ∧
(∀ j ∈ g.active z c', g.lit z j = true ∧ 1 ≤ g.coeff j ∧ j < c') ∧
g.thr ≤ NimAudit.AC0.nsum g.fanin fun j => if j ∈ g.active z c' then g.coeff j else 0
Exact source text, lines 499–538
499/-- BOUNDED WITNESS LEMMA. If the gate fires on z, there is a list T of at most500 b ≤ W distinct input positions, all with true literal and positive coefficient,501 whose coefficients sum to at least b; T is an initial segment of the active502 literals (T = active literals below a cut c'). -/503theorem bounded_witness (g : Gate) (z : Nat → Bool) (h : g.eval z = true) :504 ∃ c' ≤ g.fanin,505 (g.active z c').length ≤ g.thr ∧506 (∀ j ∈ g.active z c', g.lit z j = true ∧ 1 ≤ g.coeff j ∧ j < c') ∧507 g.thr ≤ nsum g.fanin (fun j => if j ∈ g.active z c' then g.coeff j else 0) := by508 unfold eval wsum at h509 have h' : g.thr ≤ g.psum z g.fanin := of_decide_eq_true h510 obtain ⟨c', hc', h1, h2⟩ := exists_cut g z g.fanin h'511 refine ⟨c', hc', ?_, ?_, ?_⟩512 · -- length bound513 cases c' with514 | zero => simp [active]515 | succ c =>516 have hlt := h2 c (by omega)517 have hlen := active_length_le g z c518 have hstep : (g.active z (c + 1)).length ≤ (g.active z c).length + 1 := by519 unfold active520 rw [List.range_succ, List.filter_append, List.length_append]521 have : (List.filter (fun j => g.lit z j && decide (1 ≤ g.coeff j)) [c]).length ≤ 1 := by522 simp only [List.filter_cons, List.filter_nil]; split <;> simp523 omega524 omega525 · intro j hj526 unfold active at hj527 simp only [List.mem_filter, List.mem_range, Bool.and_eq_true, decide_eq_true_eq] at hj528 exact ⟨hj.2.1, hj.2.2, hj.1⟩529 · have e : nsum g.fanin (fun j => if j ∈ g.active z c' then g.coeff j else 0) =530 nsum g.fanin (fun j => if j < c' then g.coeff j * (if g.lit z j then 1 else 0) else 0) := by531 apply nsum_congr532 intro j _533 unfold active534 simp only [List.mem_filter, List.mem_range, Bool.and_eq_true, decide_eq_true_eq]535 by_cases hjc : j < c' <;> by_cases hl : g.lit z j = true <;>536 by_cases ha : 1 ≤ g.coeff j <;> simp [hjc, hl, ha] <;> omega537 rw [e, nsum_cut _ hc']538 exact h1
Project declarations in the statement: AC0.Gate, AC0.Gate.active, AC0.Gate.coeff, AC0.Gate.eval, AC0.Gate.fanin, AC0.Gate.lit, AC0.Gate.thr, AC0.nsum
Project declarations used by the proof or definition body
AC0.Gate, AC0.Gate.active, AC0.Gate.active_length_le, AC0.Gate.coeff, AC0.Gate.eval, AC0.Gate.exists_cut, AC0.Gate.fanin, AC0.Gate.lit, AC0.Gate.psum, AC0.Gate.thr, AC0.nsum, AC0.nsum_congr, AC0.nsum_cut
theorem AC0.gate_ac0
Module Circuit
(lean/phase3/Circuit.lean, lines 735–739) · file SHA-256 af97cc0eec7d8464… Axioms reported by the fresh build: propext, Classical.choice, Quot.sound
ONE-GATE LEMMA (paper Lemma unit-ac0): exact, depth ≤ 3, size ≤ 1 + (m+1)^W (2W+1).
Statement as elaborated and printed by Lean 4.26.0
∀ {W : ℕ} (g : NimAudit.AC0.Gate),
g.thr ≤ W →
(∀ (z : ℕ → Bool), NimAudit.AC0.Circ.eval z (NimAudit.AC0.dnf W g) = g.eval z) ∧
(NimAudit.AC0.dnf W g).depth ≤ 3 ∧
(NimAudit.AC0.dnf W g).size ≤ 1 + (g.fanin + 1) ^ W * (2 * W + 1) ∧
(NimAudit.AC0.dnf W g).maxInput ≤ g.fanin
Exact source text, lines 735–739
735/-- ONE-GATE LEMMA (paper Lemma unit-ac0): exact, depth ≤ 3, size ≤ 1 + (m+1)^W (2W+1). -/736theorem gate_ac0 {W : Nat} (g : Gate) (hW : g.thr ≤ W) :737 (∀ z, eval z (dnf W g) = g.eval z) ∧ depth (dnf W g) ≤ 3 ∧738 size (dnf W g) ≤ 1 + (g.fanin + 1) ^ W * (2 * W + 1) ∧ maxInput (dnf W g) ≤ g.fanin :=739 ⟨eval_dnf g hW, depth_dnf W g, size_dnf W g, maxInput_dnf W g⟩
Project declarations in the statement: AC0.Circ.depth, AC0.Circ.eval, AC0.Circ.maxInput, AC0.Circ.size, AC0.Gate, AC0.Gate.eval, AC0.Gate.fanin, AC0.Gate.thr, AC0.dnf
Project declarations used by the proof or definition body
AC0.Circ.depth, AC0.Circ.eval, AC0.Circ.maxInput, AC0.Circ.size, AC0.Gate, AC0.Gate.eval, AC0.Gate.fanin, AC0.Gate.thr, AC0.depth_dnf, AC0.dnf, AC0.eval_dnf, AC0.maxInput_dnf, AC0.size_dnf
Definitions these statements use
inductive AC0.Gate
Module Circuit
(lean/phase3/Circuit.lean, lines 326–331) · file SHA-256 af97cc0eec7d8464…
A literal-threshold gate after clearing denominators: coefficients a_j,
negation bits eta_j, threshold b. Its fan-in is `coeffs.length`.
Statement as elaborated and printed by Lean 4.26.0
Type
Exact source text, lines 326–331
326/-- A literal-threshold gate after clearing denominators: coefficients a_j,327 negation bits eta_j, threshold b. Its fan-in is `coeffs.length`. -/328structure Gate where329 coeffs : List Nat330 negs : List Bool331 thr : Nat
Project declarations in the statement: none
Project declarations used by the proof or definition body
none
def AC0.Gate.active
Module Circuit
(lean/phase3/Circuit.lean, lines 473–475) · file SHA-256 af97cc0eec7d8464…
The active (true, positive-coefficient) literals among the first c inputs.
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Gate → (ℕ → Bool) → ℕ → List ℕ
Exact source text, lines 473–475
473/-- The active (true, positive-coefficient) literals among the first c inputs. -/474def active (g : Gate) (z : Nat → Bool) (c : Nat) : List Nat :=475 (List.range c).filter (fun j => g.lit z j && decide (1 ≤ g.coeff j))
Project declarations in the statement: AC0.Gate
Project declarations used by the proof or definition body
AC0.Gate, AC0.Gate.coeff, AC0.Gate.lit
def AC0.Gate.coeff
Module Circuit
(lean/phase3/Circuit.lean, lines 336–336) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Gate → ℕ → ℕ
Exact source text, lines 336–336
336def coeff (g : Gate) (j : Nat) : Nat := g.coeffs.getD j 0
Project declarations in the statement: AC0.Gate
Project declarations used by the proof or definition body
AC0.Gate, AC0.Gate.coeffs
def AC0.Gate.eval
Module Circuit
(lean/phase3/Circuit.lean, lines 345–346) · file SHA-256 af97cc0eec7d8464…
The gate fires iff b ≤ Σ_j a_j [z_j XOR eta_j].
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Gate → (ℕ → Bool) → Bool
Exact source text, lines 345–346
345/-- The gate fires iff b ≤ Σ_j a_j [z_j XOR eta_j]. -/346def eval (g : Gate) (z : Nat → Bool) : Bool := decide (g.thr ≤ g.wsum z)
Project declarations in the statement: AC0.Gate
Project declarations used by the proof or definition body
AC0.Gate, AC0.Gate.thr, AC0.Gate.wsum
def AC0.Gate.fanin
Module Circuit
(lean/phase3/Circuit.lean, lines 335–335) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Gate → ℕ
Exact source text, lines 335–335
335def fanin (g : Gate) : Nat := g.coeffs.length
Project declarations in the statement: AC0.Gate
Project declarations used by the proof or definition body
AC0.Gate, AC0.Gate.coeffs
def AC0.Gate.lit
Module Circuit
(lean/phase3/Circuit.lean, lines 337–337) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Gate → (ℕ → Bool) → ℕ → Bool
Exact source text, lines 337–337
337def lit (g : Gate) (z : Nat → Bool) (j : Nat) : Bool := xor (z j) (g.negs.getD j false)
Project declarations in the statement: AC0.Gate
Project declarations used by the proof or definition body
AC0.Gate, AC0.Gate.negs
def AC0.Gate.thr
Module Circuit
(lean/phase3/Circuit.lean, lines 331–331) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Gate → ℕ
Exact source text, lines 331–331
331 thr : Nat
Project declarations in the statement: AC0.Gate
Project declarations used by the proof or definition body
AC0.Gate
def AC0.nsum
Module Circuit
(lean/phase3/Circuit.lean, lines 409–409) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
ℕ → (ℕ → ℕ) → ℕ
Exact source text, lines 409–409
409def nsum (c : Nat) (f : Nat → Nat) : Nat := ((List.range c).map f).sum
Project declarations in the statement: none
Project declarations used by the proof or definition body
none
def AC0.Circ.depth
Module Circuit
(lean/phase3/Circuit.lean, lines 61–66) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Circ → ℕ
Exact source text, lines 61–66
61def depth : Circ → Nat62 | input _ => 063 | const _ => 064 | not c => depth c + 165 | and cs => listMax (cs.attach.map (fun ⟨c, _⟩ => depth c)) + 166 | or cs => listMax (cs.attach.map (fun ⟨c, _⟩ => depth c)) + 1
Project declarations in the statement: AC0.Circ
Project declarations used by the proof or definition body
AC0.Circ, AC0.Circ.and, AC0.Circ.casesOn, AC0.Circ.const, AC0.Circ.input, AC0.Circ.listMax, AC0.Circ.not, AC0.Circ.or, AC0.Circ.rec, AC0.Circ.rec_1
def AC0.Circ.eval
Module Circuit
(lean/phase3/Circuit.lean, lines 44–49) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
(ℕ → Bool) → NimAudit.AC0.Circ → Bool
Exact source text, lines 44–49
44def eval (x : Nat → Bool) : Circ → Bool45 | input i => x i46 | const b => b47 | not c => !(eval x c)48 | and cs => cs.attach.all (fun ⟨c, _⟩ => eval x c)49 | or cs => cs.attach.any (fun ⟨c, _⟩ => eval x c)
Project declarations in the statement: AC0.Circ
Project declarations used by the proof or definition body
AC0.Circ, AC0.Circ.and, AC0.Circ.casesOn, AC0.Circ.const, AC0.Circ.input, AC0.Circ.not, AC0.Circ.or, AC0.Circ.rec, AC0.Circ.rec_1
def AC0.Circ.maxInput
Module Circuit
(lean/phase3/Circuit.lean, lines 68–74) · file SHA-256 af97cc0eec7d8464…
One more than the largest input index used (0 if none).
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Circ → ℕ
Exact source text, lines 68–74
68/-- One more than the largest input index used (0 if none). -/69def maxInput : Circ → Nat70 | input i => i + 171 | const _ => 072 | not c => maxInput c73 | and cs => listMax (cs.attach.map (fun ⟨c, _⟩ => maxInput c))74 | or cs => listMax (cs.attach.map (fun ⟨c, _⟩ => maxInput c))
Project declarations in the statement: AC0.Circ
Project declarations used by the proof or definition body
AC0.Circ, AC0.Circ.and, AC0.Circ.casesOn, AC0.Circ.const, AC0.Circ.input, AC0.Circ.listMax, AC0.Circ.not, AC0.Circ.or, AC0.Circ.rec, AC0.Circ.rec_1
def AC0.Circ.size
Module Circuit
(lean/phase3/Circuit.lean, lines 51–56) · file SHA-256 af97cc0eec7d8464…
Statement as elaborated and printed by Lean 4.26.0
NimAudit.AC0.Circ → ℕ
Exact source text, lines 51–56
51def size : Circ → Nat52 | input _ => 153 | const _ => 154 | not c => size c + 155 | and cs => (cs.attach.map (fun ⟨c, _⟩ => size c)).sum + 156 | or cs => (cs.attach.map (fun ⟨c, _⟩ => size c)).sum + 1
Project declarations in the statement: AC0.Circ
Project declarations used by the proof or definition body
AC0.Circ, AC0.Circ.and, AC0.Circ.casesOn, AC0.Circ.const, AC0.Circ.input, AC0.Circ.not, AC0.Circ.or, AC0.Circ.rec, AC0.Circ.rec_1
def AC0.dnf
Module Circuit
(lean/phase3/Circuit.lean, lines 560–562) · file SHA-256 af97cc0eec7d8464…
DNF: OR over padded tuples t ∈ {0..m}^W with selSum ≥ b of termC t.
Statement as elaborated and printed by Lean 4.26.0
ℕ → NimAudit.AC0.Gate → NimAudit.AC0.Circ
Exact source text, lines 560–562
560/-- DNF: OR over padded tuples t ∈ {0..m}^W with selSum ≥ b of termC t. -/561def dnf (W : Nat) (g : Gate) : Circ :=562 or (((boards (g.fanin + 1) W).filter (fun t => decide (g.thr ≤ selSum g t))).map (termC g))
Project declarations in the statement: AC0.Circ, AC0.Gate
Project declarations used by the proof or definition body
AC0.Circ, AC0.Circ.or, AC0.Gate, AC0.Gate.fanin, AC0.Gate.thr, AC0.selSum, AC0.termC, Prob.boards
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).