kernel-Nat.dvd_mul_split
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {k m n : ℕ}, k ∣ m * n ↔ ∃ k₁ k₂, k₁ ∣ m ∧ k₂ ∣ n ∧ k₁ * k₂ = k
test "$(cargo run -q --release -p axeyum-lean-kernel --example nat_theorem_inventory -- dvd_mul_split 2>/dev/null | /usr/bin/grep -cE '^Nat\.dvd_mul_split[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.dvd_mul_split` through the trusted `Kernel::add_declaration` gate, which re-checks the proof term against the stated type. New proof, lane dvd-mul-split: `nat_prelude/dvd_mul_split.rs`, wired in via one `declare_dvd_mul_split` call after `declare_gcd_mul_right_mirrors`/`declare_dvd_add_iff_left`. NOT named `Nat.dvd_mul`: that kernel name is already taken by the unrelated trivial lemma `∀ a q, dvd a (a*q)` (`nat_prelude.rs`'s pre-existing `dvd_mul` field) -- declaring under Mathlib's literal name would hit `DeclarationExists`. Route: forward direction sets k1 := gcd(k,m), k2 := k/gcd(k,m) via `gcd_dvd_left`/`gcd_dvd_right`/`dvd_gcd`/`Nat.gcd_mul_right` (the distributive law landed by lane gcd-mul-right the same day) plus a positive-factor cancellation (`one_le_of_dvd_pos`, `mul_left_cancel_of_pos`); the k=0 case is handled by a DIRECT case split on `m=0 ∨ n=0` (`mul_eq_zero`), not by the general gcd formula, which does not reproduce a valid witness pair there (`gcd(0,m)=m`, `0/m=0`, forcing `k2=0` and needing `0∣n`, false in general). Reverse direction is uniform four-factor regrouping, no case split. `nat_theorem_inventory`'s rendered type is `(x0:AxNat)->(x1:AxNat)->(x2:AxNat)->Iff (dvd x0 (mul x1 x2)) (Exists x3, Exists x4, And (dvd x3 x1) (And (dvd x4 x2) (Eq (mul x3 x4) x0)))`, matching this fact's `formal.statement` exactly (x0/x1/x2/x3/x4 = k/m/n/k1/k2). `nat_theorem_inventory` exits non-zero for a name that does not exist (verified: `dvd_mul_split_bogus_xyz` -> exit 1, `0 theorems` printed, `error: no Nat theorem matches ... -- an absent theorem is a failed check, not an empty report`), and the anchored `grep -cE` (tested `-ge 1`, not piped through `grep -q`) requires the exact name followed by whitespace.