Identifier
F:rat-rank-nullity-rows-of-pivot-section
Proof route
kernel-lean
External status
unknown
Axiom footprint
Empty

Recorded description

For every matrix M : Nat -> Nat -> Rat and all dimensions rows, cols, IF the section hypothesis holds for the row-echelon form of M, THEN Nat.add (Rat.rank M rows cols) (Rat.nullity M rows cols) = cols -- rank-nullity in the ROW form, where rank counts the independent ROWS of the echelon form rather than its pivot columns. The SECTION HYPOTHESIS is: for every row r below rows whose leading index in E := Rat.rowEchelon M rows cols is below cols (that is, Rat.nonzeroRowB E cols r = true), Rat.pivotRowOfCol E rows cols (Rat.pivotColOfRow E cols r) = r -- in words, the FIRST row whose leading index equals row r's leading index is r itself. It is the weakest form of ADR-1554 obligation 4 (rowEchelon_isEchelon) that the bridge consumes: it says nothing about zero rows sitting last, only that no earlier nonzero row shares a nonzero row's leading index. ADR-1558 landed rank-nullity in the COLUMN form (rankCols + nullity = cols, one application of Nat.countRange_compl, using no property of Rat.rowEchelon whatever) and said the obligation was relocated, entirely, into one bridge. This is the receipt for that claim: the row form is the column form with rankCols rewritten to rank across Rat.rank_eq_rankCols_of_pivotSection, and nothing else.

Formal statement
theorem Rat.rank_nullity_rows_of_pivotSection : ((x0 : ((x0 : AxNat) -> ((x1 : AxNat) -> Rat))) -> ((x1 : AxNat) -> ((x2 : AxNat) -> ((x3 : <the section hypothesis, as in Rat.rank_eq_rankCols_of_pivotSection>) -> Eq.{1} AxNat (AxNat.add (Rat.rank x0 x1 x2) (Rat.nullity x0 x1 x2)) x2))))

Dependencies

The graph shows direct ledger edges. Follow a node to open its artifact page.

Direct dependencies appear to the left. The current fact is in the center. Facts that depend directly on it appear to the right. The row rank and the column ran Rank-nullity over the rationals Current fact Rank-nullity over the rationals
2 direct dependencies 1 direct dependents

Evidence

rat-rank-nullity-rows-of-pivot-section-1

Kind
kernel-term
Status
checked

Supports: `Rat.rank_nullity_rows_of_pivotSection` is a checked `Declaration::Theorem` with an EMPTY axiom footprint in all four preludes, and the pattern pins the summands: `AxNat.add (Rat.rank x0 x1 x2) (Rat.nullity x0 x1 x2)` equal to `x2`, anchored to end of line. `Rat.rank_nullity` -- the column form, which was already proved and is UNCONDITIONAL -- adds `Rat.rankCols` instead and does not match, so this checker cannot be satisfied by the pre-existing theorem under a new name.

Checker command
out=$(target/release/examples/kernel_declaration_projection 2>&1) && test "$(printf "%s\n" "$out" | grep -cE '^(rat|creal|complex|cpoint)[[:space:]]+theorem[[:space:]]+Rat\.rank_nullity_rows_of_pivotSection[[:space:]]+0[[:space:]].*-> Eq\.\{1\} AxNat \(AxNat\.add \(Rat\.rank x0 x1 x2\) \(Rat\.nullity x0 x1 x2\)\) x2\)\)\)\)$')" = 4
Evidence notes

Run 2026-09-02: the pattern matches the real output at exactly the required count. `scripts/new-fact.py` verified it FAILS on mutated output (digits perturbed, true -> false, 0 -> 1) before this file was written, so a pattern anchored on the surrounding prose rather than on the finding would have been rejected there.

Provenance

{
  "date": "2026-09-02",
  "established_by": "axeyum-lean-kernel build_rat_prelude (crates/axeyum-lean-kernel/src/rat_prelude/rank_bridge.rs)",
  "source": "docs/research/09-decisions/adr-1562-the-bridge-orientation-is-the-finding-and-obligation-4-collapses-to-one-section-equation.md"
}