The skew quadratic form over a field of characteristic — TARGET 21 (filler)

Seal

Rung rung-1 · Status sealed · #print axioms verbatim 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 · pin pin_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:

  1. — associativity of the vector–matrix–vector product (dotProduct_mulVec).
  2. — because and (mulVec_transpose, neg_mulVec).
  3. Combining 1 and 2 with neg_dotProduct: .
  4. 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.