kernel-Nat.lcm_div
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {m n k : ℕ}, k ∣ m → k ∣ n → (m / k).lcm (n / k) = m.lcm n / k
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- lcm_div 2>/dev/null | grep -Ec '^Nat\.lcm_div[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.lcm_div` through the trusted `Kernel::add_declaration` gate (declared in the new `nat_prelude/lcm_gcd_lemmas.rs`'s `declare_lcm_div`). Route: induction on the divisor `k`. At `k = 0`, `div _ 0 = 0` (this kernel's totality convention) collapses every term on both sides to `0`. At `k = succ k'`, write `m = k*m1`, `n = k*n1` (`dvd_elim` on the two hypotheses) and let `q := (lcm m n)/k`; the same mutual-divisibility technique `lcm_assoc` uses shows `lcm m1 n1 = q` via two small local cancellation helpers (`scale_dvd`/`dvd_cancel_left_of_pos`), then `div_eq_of_mul_eq` rewrites the conclusion in terms of `div m k`/`div n k`. `nat_theorem_inventory`'s rendered type for `Nat.lcm_div` is `((x0 : AxNat) -> ((x1 : AxNat) -> ((x2 : AxNat) -> ((x3 : AxNat.dvd x2 x0) -> ((x4 : AxNat.dvd x2 x1) -> Eq.{1} AxNat (AxNat.lcm (AxNat.div x0 x2) (AxNat.div x1 x2)) (AxNat.div (AxNat.lcm x0 x1) x2))))))`, matching this fact's `formal.statement` verbatim (`x0`/`x1`/`x2` are the universally quantified variables in order). `nat_theorem_inventory` exits non-zero for a name that does not exist, and the `grep -c` count (tested `-ge 1`, not piped into `grep -q`) requires the admitted declaration to actually be printed.