kernel-Nat.coprime_dvd_mul_right
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {m n k : ℕ}, k.Coprime n → (k ∣ m * n ↔ k ∣ m)
test "$(cargo run -q --release -p axeyum-lean-kernel --example nat_theorem_inventory -- coprime_dvd_mul_right 2>/dev/null | grep -Ec '^Nat\.coprime_dvd_mul_right[[:space:]]')" -ge 1 Evidence notes
`Nat.coprime_dvd_mul_right` (nat_prelude/draw11_mirrors.rs, `declare_coprime_dvd_mul_right`, lane draw11-theorems-b) is a fresh construction, the mirror image of `Nat.coprime_dvd_mul_left`: the forward (`mp`) direction transports the hypothesis `dvd k (mul m n)` across `Nat.mul_comm` to `dvd k (mul n m)` and closes with `Nat.gauss_lemma`; the reverse (`mpr`) direction builds `m ∣ (m*n)` directly from `Nat.dvd_mul` and closes with `Nat.dvd_trans`. `nat_theorem_inventory`'s rendered type is `((x0 : AxNat) -> ((x1 : AxNat) -> ((x2 : AxNat) -> ((x3 : Eq.{1} AxNat (AxNat.gcd x0 x2) (AxNat.succ AxNat.zero)) -> Iff (AxNat.dvd x0 (AxNat.mul x1 x2)) (AxNat.dvd x0 x1)))))` -- reading `x0=k, x1=m, x2=n`, this is `gcd k n = 1 -> (dvd k (mul m n) <-> dvd k m)`, matching `formal.statement` (`k.Coprime n -> (k ∣ m*n ↔ k ∣ m)`) verbatim. `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. A discriminating unit test in `nat_prelude_tests.rs` (`coprime_dvd_mul_right_states_and_proves_the_iff_at_a_concrete_point`) applies the theorem to a real coprime witness (`gcd 5 2 = 1` by `rfl`) at `(k,m,n)=(5,3,2)` and infers the resulting `Iff` proof term.