kernel-Nat.coprime_dvd_mul_left
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {m n k : ℕ}, k.Coprime m → (k ∣ m * n ↔ k ∣ n)
test "$(cargo run -q --release -p axeyum-lean-kernel --example nat_theorem_inventory -- coprime_dvd_mul_left 2>/dev/null | grep -Ec '^Nat\.coprime_dvd_mul_left[[:space:]]')" -ge 1 Evidence notes
`Nat.coprime_dvd_mul_left` (nat_prelude/draw11_mirrors.rs, `declare_coprime_dvd_mul_left`, lane draw11-theorems-b) is a fresh construction: the forward (`mp`) direction is `Nat.gauss_lemma` verbatim (`gcd x y = 1 -> dvd x (mul y z) -> dvd x z`, this fact's exact hypothesis order once `Coprime` is unfolded to `gcd = 1`); the reverse (`mpr`) direction builds `n ∣ (m*n)` from `Nat.dvd_mul` (`a ∣ a*q`) transported across `Nat.mul_comm`, then 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 x1) (AxNat.succ AxNat.zero)) -> Iff (AxNat.dvd x0 (AxNat.mul x1 x2)) (AxNat.dvd x0 x2)))))` -- reading `x0=k, x1=m, x2=n`, this is `gcd k m = 1 -> (dvd k (mul m n) <-> dvd k n)`, matching `formal.statement` (`k.Coprime m -> (k ∣ m*n ↔ k ∣ n)`) 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. Two discriminating unit tests in `nat_prelude_tests.rs` (`coprime_dvd_mul_left_states_and_proves_the_iff_at_a_concrete_point`) apply the theorem to a real coprime witness (`gcd 5 2 = 1` by `rfl`) at `(k,m,n)=(5,2,3)` and infer the resulting `Iff` proof term, not merely the arrow's shape.