kernel-Nat.dvd_gcd_mul_iff_dvd_mul
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {k n m : ℕ}, k ∣ k.gcd n * m ↔ k ∣ n * m
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- dvd_gcd_mul_iff_dvd_mul 2>/dev/null | grep -Ec '^Nat\.dvd_gcd_mul_iff_dvd_mul[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.dvd_gcd_mul_iff_dvd_mul` through the trusted `Kernel::add_declaration` gate, which re-checks the proof term against the stated type. New proof, lane gcd-mul-right, in `nat_prelude/gcd_mul_right_mirrors.rs`, wired in via `declare_gcd_mul_right_mirrors`. Route: `gcd_mul_right(k,n,m) : gcd(k*m,n*m) = gcd(k,n)*m`, reversed and lifted to an `Iff` on `dvd k _`; `dvd_gcd_iff(k,k*m,n*m)` unpacks `dvd k (gcd(k*m,n*m))` into `(dvd k (k*m)) AND (dvd k (n*m))`; `dvd k (k*m)` always holds (`dvd_mul(k,m)`), so that conjunct drops, leaving `dvd k (gcd(k,n)*m) <-> dvd k (n*m)`. `nat_theorem_inventory`'s rendered type is `(x0:AxNat)->(x1:AxNat)->(x2:AxNat)->Iff (dvd x0 (mul (gcd x0 x1) x2)) (dvd x0 (mul x1 x2))`, matching this fact's `formal.statement` exactly. `nat_theorem_inventory` exits non-zero for a name that does not exist (measured: `error: no Nat theorem matches "dvd_gcd_mul_iff_dvd_mul_bogus" -- an absent theorem is a failed check, not an empty report`, exit 1, `0 theorems` on stdout so the piped `grep -Ec` count is 0 and `test -ge 1` fails). Verified no substring overlap against the sibling facts `Nat.dvd_mul_gcd_iff_dvd_mul`/`Nat.dvd_gcd_mul_gcd_iff_dvd_mul`: the anchored pattern matched exactly its own row (count 1) in a combined inventory of all three.