Candidate-side Arf / Gauss-sum: de-axiomatization of candidate_base_zeroCount #
This file targets the axiom Q2Presentation.Quadratic.candidate_base_zeroCount
(Quadratic/GaussSign.lean, l.418), the Lean rendering of manuscript prop:candidatezero:
a nonsingular quadratic form over F₂ in dimension d has 2^{d-1} + (-1)^{Arf} 2^{d/2-1}
zeros, with the sign determined by the Arf invariant of the form.
STATUS (post-fix). The inconsistency diagnosed in this file has been corrected in
Quadratic/GaussSign.lean: the two count axioms are now the consistent existential form∃ ram, # = baseZeroCount ram d(theramrecovered as the form-tiedgaussType), so the project no longer derivesFalse. This file is retained as the diagnosis/record; the single now-staleFalsederivation (project_axiom_yields_false) is neutralized below.
Outcome: the verbatim free-ram axiom statement was FALSE (now fixed) #
The axiom is
(qA : QuadF2 V) (hns : qA.Nonsingular) (ram : Bool) :
(numZeros qA : ℤ) = baseZeroCount ram (Module.finrank (ZMod 2) V)
Its bug: ram : Bool is a free argument, decoupled from qA. The manuscript's sign is
(-1)^{Arf(Q)}, where the ramification flag is a property of the form (unramified ⟹ Arf=1 ⟹
minus type; ramified ⟹ Arf=0 ⟹ plus type). As written, the axiom asserts that the single
integer numZeros qA equals baseZeroCount ram d for both ram = true and ram = false,
forcing baseZeroCount true d = baseZeroCount false d — contradicting baseZeroCount_ne (proven
in the same file). So no theorem candidate_base_zeroCount_proven with the verbatim statement
can exist: it would prove False.
This file establishes that rigorously, axiom-clean:
hyp— the hyperbolic planeq(a,b)=abon(ZMod 2)², a genuinely nonsingularQuadF2(hyp_nonsingular), with concrete zero countnumZeros hyp = 3(numZeros_hyp);hyp_count_eq_plus/hyp_count_ne_minus— its true count is the plus type (3), not the minus type (1): the bug made concrete;candidate_base_zeroCount_unsound— the verbatim statement (atV = (ZMod 2)²) impliesFalse(closure⊆ {propext, Classical.choice, Quot.sound}: the statement is outright refutable, not merely unprovable);project_axiom_yields_false(NEUTRALIZED below — the bug is fixed) — this once derivedFalsefrom the actual project axiom (the freeraminstantiated at both values). With the corrected∃ ram, …axiom it no longer typechecks;project_axiom_no_longer_yields_falserecords the now-sound existential in its place.
The honest replacement #
hyp_correct_existential records the correct shape (∃ ram, numZeros = baseZeroCount ram d,
ram tied to the form) for the witness. The GENERAL corrected theorem — that this ∃ holds for
every nonsingular QuadF2 — is the Dickson zero-count via the Arf invariant + Witt/Wall
decomposition over F₂. mathlib has neither Arf nor the quadratic-form zero count, so the
general statement must be built from scratch; it is out of scope for a verbatim de-axiomatization
(which is impossible regardless). GaussSign.lean has now been fixed to constrain ram to
the form — the existential candidate_base_zeroCount/q2_local_base_zeroCount plus the
form-tied gaussType — so the downstream candidate_gauss_eq_local_gauss is now sound and the
project is consistent again.
Carrier of the explicit witness: the hyperbolic plane (ZMod 2)².
Equations
Instances For
The hyperbolic quadratic form q(a,b) = a*b on (ZMod 2)². A genuinely nonsingular
QuadF2 (its polar form is the standard symplectic form).
Equations
- One or more equations did not get rendered due to their size.
Instances For
The witness form is nonsingular.
The witness's genuine zero count is the PLUS type (ram = true): # = 2^{d-1} + 2^{d/2-1} = 3, matching prop:candidatezero for this (hyperbolic ⇒ Arf = 0 ⇒ plus) form.
...and it does NOT equal the MINUS type (ram = false): 3 ≠ 1. So no single number
can satisfy the axiom for both ramification flags.
The exact statement of candidate_base_zeroCount is FALSE.
The axiom (GaussSign.lean l.418) takes the ramification flag ram : Bool as a free
argument decoupled from the form qA, asserting # qA⁻¹(0) = baseZeroCount ram d for
every ram. But numZeros qA is a single integer while baseZeroCount false d ≠ baseZeroCount true d (baseZeroCount_ne, same file). Instantiating at the genuinely
nonsingular hyperbolic form hyp on (ZMod 2)² forces baseZeroCount false 2 = baseZeroCount true 2, i.e. 1 = 3 — a contradiction.
Hence the axiom cannot be de-axiomatized as stated: there is no candidate_base_zeroCount_proven
with the verbatim statement (it would prove False). The manuscript (prop:candidatezero,
# Q⁻¹(0) = 2^{d-1} + (-1)^{Arf(Q)} 2^{d/2-1}) ties the sign to Arf(Q); the Lean axiom's
bug is that ram is not constrained to the form's Arf invariant.
The mathematically correct statement (manuscript prop:candidatezero): the zero count
equals baseZeroCount ram d for the unique ram determined by the form's Arf invariant —
phrased here existentially (the honest replacement for the broken axiom). Proven for the
witness with ram = true. The GENERAL theorem (this ∃ holds for every nonsingular
QuadF2) is the Dickson zero-count, requiring the Arf invariant + Witt/Wall decomposition
over F₂, neither of which is in mathlib.
[HISTORICAL RECORD — two repair rounds.] Round 1: the ORIGINAL
free-ram candidate_base_zeroCount derived False by instantiating one
form at both flags (the commented derivation below). Round 2 (2026-07-08
adversarial keep audit): the ∃-form replacement was STILL refutable at
V = 0 (count 1 vs base values), so both zero-count axioms were DELETED
from GaussSign.lean; the counts are now the [Nontrivial V]-guarded
Dickson THEOREMS (DicksonCount.lean), and this witness statement is
discharged by the local computation hyp_correct_existential.
theorem project_axiom_yields_false : False :=
baseZeroCount_ne (Module.finrank (ZMod 2) W)
((candidate_base_zeroCount hyp hyp_nonsingular false).symm.trans
(candidate_base_zeroCount hyp hyp_nonsingular true))