kernel-Nat.mod_mul_left_div_self
- Kind
- kernel-term
- Status
- checked
Supports: ∀ (m n k : ℕ), m % (k * n) / n = m / n % k
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- mod_mul_left_div_self 2>/dev/null | grep -Ec '^Nat\.mod_mul_left_div_self[[:space:]]')" -ge 1 Evidence notes
Declared in `nat_prelude/mod_mul_lemmas.rs`'s `declare_mod_mul_family`. Case-splits `n` (outer `cases_zero_succ`): at `n=0` both sides collapse to `zero` via `mul_zero`/`mod_zero`/`div_zero`/`zero_mod` congruence (needs no positivity at all); at `n=succ npred`, case-splits `k`: at `k=0` both sides collapse to `div m n` via `zero_mul`/`mod_zero`; at `k=succ kpred` (both positive), the local helper `mod_mul_div_self` answers `div (mod m e) n = mod (div m n) k` for `e = mul n k` (bridged from this fact's `k*n` via `mul_comm`) -- chains `mod_mul`'s identity (`F:ml430-nat-mod-mul-beaccbad`) to rewrite `m%(n*k)` as `m%n + n*(m/n%k)`, then `add_mul_div_left` to divide by `n`, landing on `(m%n)/n + (m/n%k)`; the local helper `div_of_lt` (manufacture a second trivial `divMod` and compare via `div_mod_unique`) collapses `(m%n)/n` to `0` via `mod_lt`, and `zero_add` finishes. `nat_theorem_inventory`'s rendered type matches this fact's `formal.statement` verbatim (`x0`=m, `x1`=n, `x2`=k).