Identifier
F:rat-rank-le-cols-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.Le (Rat.rank M rows cols) cols. 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-1555 stated this bound as OPEN and explained why: Rat.rank is a count over [0, rows), so bounding it by cols is a claim that the echelon form has at most one pivot per column. The column-form counterpart Rat.rankCols_le_cols is free -- one Nat.countRange_le, because a count over [0, cols) cannot exceed cols whatever the predicate does -- and this is that free bound transported across the bridge. Nothing is re-proved; the asymmetry ADR-1558 recorded between the row and column forms is exactly the asymmetry the bridge removes.

Formal statement
theorem Rat.rank_le_cols_of_pivotSection : ((x0 : ((x0 : AxNat) -> ((x1 : AxNat) -> Rat))) -> ((x1 : AxNat) -> ((x2 : AxNat) -> ((x3 : <the section hypothesis, as in Rat.rank_eq_rankCols_of_pivotSection>) -> AxNat.le (Rat.rank 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 The column-form rank of a ratio Current fact The rank of a rational matrix i
2 direct dependencies 1 direct dependents

Evidence

rat-rank-le-cols-of-pivot-section-1

Kind
kernel-term
Status
checked

Supports: `Rat.rank_le_cols_of_pivotSection` is a checked `Declaration::Theorem` with an EMPTY axiom footprint in all four preludes, and the pattern pins the CONCLUSION to `AxNat.le (Rat.rank x0 x1 x2) x2` anchored to end of line. `x2` is the COLUMN binder and `x1` the row binder, so the already-free `rank <= rows` (`Rat.rank_le_rows`, bounding by `x1`) does not match this pattern -- which is the distinction the fact is about, and the one a name alone cannot make.

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_le_cols_of_pivotSection[[:space:]]+0[[:space:]].*-> AxNat\.le \(Rat\.rank 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"
}