rat-clear-below-row-swap-off-1
- Kind
- kernel-term
- Status
- checked
Supports: A checked, axiom-free theorem in all four rational preludes, population pinned at four. The regex is anchored on the COMPOSITE left-hand side `Rat.clearBelow (Rat.rowSwap x1 x2 x0) x1 x3 x4 x5 x6`: the swap is inside the sweep, in that order, and the right-hand side is the ORIGINAL matrix `x0 x5 x6` and not the swapped one -- which is the weaker statement `Rat.clearBelow_off` already gives and would make this fact redundant.
out=$(target/release/examples/kernel_declaration_projection 2>&1) && test "$(printf "%s\n" "$out" | grep -cE '^[a-z]+[[:space:]]+theorem[[:space:]]+Rat\.clearBelow_rowSwap_off[[:space:]]+0[[:space:]].*Eq\.\{1\} Rat \(Rat\.clearBelow \(Rat\.rowSwap x1 x2 x0\) x1 x3 x4 x5 x6\) \(x0 x5 x6\)\)\)\)\)\)\)\)\)\)$')" = 4 Evidence notes
Run 2026-09-02: four rows, mutation-checked by `scripts/new-fact.py`. The registered evaluation test is in `rat_prelude/echelon_invariant_tests.rs`: at `[[1,2],[0,3],[2,4]]` with `pr = 1`, `piv = 2`, `pc = 0`, `rows = 3` the step leaves row 0 at `[1,2]` while row 1 becomes the old row 2 and row 2's column-0 entry is cleared to 0 -- so the step is shown NOT to be the identity, which is what would make the theorem true for the wrong reason. The theorem is then applied at those same concrete arguments with both order hypotheses discharged by `Nat.le_of_ble_eq_true` at `Eq.refl`.