kernel-Nat.mod_mul_left_mod
- Kind
- kernel-term
- Status
- checked
Supports: ∀ (a b c : ℕ), a % (b * c) % c = a % c
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- mod_mul_left_mod 2>/dev/null | grep -Ec '^Nat\.mod_mul_left_mod[[:space:]]')" -ge 1 Evidence notes
Declared in `nat_prelude/mod_mul_lemmas.rs`'s `declare_mod_mul_family`. Case-splits `c` (outer `cases_zero_succ`): at `c=0` both sides collapse to `a` via `mul_zero`/`mod_zero` congruence; at `c=succ cpred`, case-splits `b`: at `b=0` both sides collapse to `a%c` via `zero_mul`/`mod_zero`; at `b=succ bpred` (both positive), the general local helper `mod_of_dvd_mod` answers `a%(dvsr*mult)%dvsr = a%dvsr` for any multiple `dvsr*mult` of the divisor `dvsr` -- decompose `a` at `e:=b*c` to get `a=e*qe+re`, decompose the remainder `re` at `c` to get `re=c*qd+rd`, substitute to get a second valid `divMod c a _ rd` decomposition, and `div_mod_unique` against the canonical one forces `rd = a%c`; `rd` is literally `mod (mod a e) c` by construction, which is the goal (`e := b*c`, bridged to `c*b` via `mul_comm` since `mod_of_dvd_mod`'s hypothesis wants `e = dvsr*mult`). `nat_theorem_inventory`'s rendered type matches this fact's `formal.statement` verbatim (`x0`=a, `x1`=b, `x2`=c).