rat-add-neg-div-mul-cancel-1
- Kind
- kernel-term
- Status
- checked
Supports: The theorem is checked and axiom-free in all FOUR preludes that build the rationals, and the checker requires exactly four rows. The regex pins the whole left-hand side `Rat.add x0 (Rat.mul (Rat.neg (Rat.div x0 x1)) x1)`, which is the part most easily got wrong: the multiplier is on the LEFT of the product because that is the shape `Rat.clearBelowAux` produces, and a version stated with `Rat.mul x1 (Rat.neg …)` -- the shape `Rat.mul_neg` hands you -- would be true but would not apply where it is needed, and would not match.
out=$(target/release/examples/kernel_declaration_projection 2>&1) && test "$(printf "%s\n" "$out" | grep -cE '^[a-z]+[[:space:]]+theorem[[:space:]]+Rat\.add_neg_div_mul_cancel[[:space:]]+0[[:space:]].*-> Eq\.\{1\} Rat \(Rat\.add x0 \(Rat\.mul \(Rat\.neg \(Rat\.div x0 x1\)\) x1\)\) Rat\.zero\)\)\)$')" = 4 Evidence notes
Run 2026-09-02: exactly four rows match, mutation-checked by `scripts/new-fact.py`. The hypothesis is shown load-bearing by REDUCTION rather than by assertion in `the_arithmetic_core_computes_and_its_hypothesis_is_load_bearing` (`rat_prelude/clear_below_tests.rs`): the expression reduces to 0 at (a,b) = (3,2) and to 3 at (3,0).