The skew quadratic form over a field of characteristic — TARGET 21 (filler)
Seal
Rung rung-1 · Status sealed ·
#print axiomsverbatim in The machine seal — fully closed, no interface hypotheses. Library-completeness lift of the L3 lemma in passivity_identity.
Links: module index · interface ledger · related passivity_identity · pinpin_skew_charp.py
Sealed theorems
dotProduct_mulVec_self_of_skew_of_charP
Over any field with , a skew-symmetric quadratic form vanishes — the exact algebraic frontier of the passivity identity.
Statement
Theorem. Let be a field with , let be a finite index set, and let be an matrix over with . Then for every .
Machine name: Leanpunov.dotProduct_mulVec_self_of_skew_of_charP in SkewCharP.lean.
What it is and why it exists
This is the characteristic- lift of the sealed L3 lemma Leanpunov.dotProduct_mulVec_self_of_skew (in Passivity.lean, stated over ). The passivity derivation’s closing note flagged it: “Lemma 1 holds over any ring; only Lemma 2 uses division by two. A char- generalization is a one-line change if ever needed — not done, because the thesis lives over .” This target does that one-line change.
It is filler. The thesis runs over , where the sealed lemma already applies, so nothing downstream in the Leanpunov cascade calls this generalization. Its value is library completeness: it records the exact algebraic frontier of the passivity identity — precisely which scalar hypothesis the skew-form-vanishing fact needs. That frontier is ” is not a zero divisor”, and for a field that is exactly .
Proof narrative
Write (in Lean, x ⬝ᵥ A *ᵥ x). The manipulation is identical to the sealed proof — it is pure transpose/bilinear algebra, valid over any commutative ring:
- — associativity of the vector–matrix–vector product (
dotProduct_mulVec). - — because and (
mulVec_transpose,neg_mulVec). - Combining 1 and 2 with
neg_dotProduct: . - Symmetry of the dot product: (
dotProduct_comm).
Substituting 4 into 3 gives the whole content in one line: , i.e. .
The only step that touches the characteristic is closing . Over the sealed proof did this with linarith (which silently divides by two). Over a general field the same fact is a named Mathlib stone:
which holds in any NonAssocRing that is Nontrivial and NoZeroDivisors, given ringChar R ≠ 2. A field supplies all three instances automatically. Applying its forward direction to yields .
Why characteristic is the right hypothesis (and is necessary)
The characteristic enters through the diagonal. Skewness forces , i.e. . Over a domain of characteristic this gives , the diagonal disappears, and pairing entry with (which cancel because ) kills the off-diagonal — so the whole form collapses.
Over characteristic the fact is false: there , so is the same condition as , the diagonal is unconstrained, and is “skew” while at . This counterexample is verified in the SymPy pin (test_char2_necessity_counterexample), confirming the Lean hypothesis is not decorative.
SymPy pin
pin_skew_charp.py in this directory. Three checks, all passing on new-pin-env:
test_char0_symbolic_skew_vanishes— a symbolic skew matrix over (char , hence ) has expand to exactly for symbolic .test_char_ne_2_finite_field_random_skew— random skew matrices over give for random .test_char2_necessity_counterexample— the diagonal counterexample above.
Mathlib stones used
Matrix.dotProduct_mulVec,Matrix.mulVec_transpose,Matrix.neg_mulVec,Matrix.neg_dotProduct,Matrix.dotProduct_comm— the transpose/bilinear algebra (all commutative-ring generic, reused verbatim from the sealed proof).Ring.eq_self_iff_eq_zero_of_char_ne_two— the single characteristic-sensitive step;Mathlib/Algebra/CharP/Basic.lean:127.
Interfaces left named
None. The theorem is fully closed — no sorry, no applier-side hypothesis beyond the mathematical content ( and ).
Cost feel
Well under an L2-scale push — a single fix-free build. The generalization is genuinely one line versus the sealed proof: swap the trailing linarith for Ring.eq_self_iff_eq_zero_of_char_ne_two, and carry the ringChar F ≠ 2 hypothesis. The only work was locating the exact stone and confirming a Field discharges its Nontrivial/NoZeroDivisors obligations, which it does.
The machine seal
SkewCharP.lean in this directory (tracked source of truth); build copy at ~/lean/leanpunov/Leanpunov/SkewCharP.lean. Verbatim #print axioms (build 2026-07-06):
info: Leanpunov/SkewCharP.lean:46:0: 'Leanpunov.dotProduct_mulVec_self_of_skew_of_charP' depends on axioms: [propext, Classical.choice, Quot.sound]No sorryAx — sealed.