rat-row-echelon-is-echelon-1
- Kind
- kernel-term
- Status
- checked
Supports: Both forms are checked, axiom-free theorems in all four rational preludes, populations pinned separately at four. The wrapper's regex is anchored on the COMPOSITE `Rat.isEchelon (Rat.rowEchelon x0 x1 x2) x1 x2` -- the predicate applied to the REDUCED matrix, at the same dimensions the reduction was given -- so a statement about the input matrix, or one that reduced at different dimensions from those it tests at, fails. The loop form's regex likewise pins `Rat.echelonAux x0 x1 x2 x3 x4 x5` inside `Rat.isEchelon … x0 x1`. Both pin the axiom-footprint column at 0, which is the headline for this family: obligation 4 closes with no assumption added.
out=$(target/release/examples/kernel_declaration_projection 2>&1) && test "$(printf "%s\n" "$out" | grep -cE '^[a-z]+[[:space:]]+theorem[[:space:]]+Rat\.echelonAux_isEchelon[[:space:]]+0[[:space:]].*Eq\.\{1\} Bool \(Rat\.isEchelon \(Rat\.echelonAux x0 x1 x2 x3 x4 x5\) x0 x1\) Bool\.true\)\)\)\)\)\)\)\)\)\)\)$')" = 4 Evidence notes
Run 2026-09-02: four rows each, mutation-checked by `scripts/new-fact.py`. The registered evaluation test in `rat_prelude/echelon_invariant_tests.rs` reduces `Rat.isEchelon` to `true` on the reduced matrix AND to `false` on the INPUT, at `[[0,1],[2,3]]` (whose first column is zero at row 0, so the pivot step must swap) and at `[[0,0,2],[0,3,4],[5,6,7]]` (whose row order is reversed). A `rowEchelon` that returned its argument, or an `isEchelon` that accepted everything, fails that pair -- which is the check that stops this fact from being vacuously true.