kernel-Nat.dvd_gcd_mul_gcd_iff_dvd_mul
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {k n m : ℕ}, k ∣ k.gcd n * k.gcd m ↔ k ∣ n * m
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- dvd_gcd_mul_gcd_iff_dvd_mul 2>/dev/null | grep -Ec '^Nat\.dvd_gcd_mul_gcd_iff_dvd_mul[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.dvd_gcd_mul_gcd_iff_dvd_mul` through the trusted `Kernel::add_declaration` gate. New proof, lane gcd-mul-right, in `nat_prelude/gcd_mul_right_mirrors.rs`, wired in via `declare_gcd_mul_right_mirrors` (declared AFTER `dvd_mul_gcd_iff_dvd_mul`, which it depends on). Route: the general shape `dvd_gcd_scaled_iff` applied at (a,b,c):=(k,n,gcd(k,m)) gives `Iff (dvd k (gcd(k,n)*gcd(k,m))) (dvd k (n*gcd(k,m)))`; the right-hand side IS `dvd_mul_gcd_iff_dvd_mul`'s left-hand side, so one `iff_trans` against that already-proved fact (applied at k,n,m) lands on `dvd k (n*m)`. `nat_theorem_inventory`'s rendered type is `(x0:AxNat)->(x1:AxNat)->(x2:AxNat)->Iff (dvd x0 (mul (gcd x0 x1) (gcd x0 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: exit 1, `0 theorems` on stdout, so `test -ge 1` fails). Verified no substring overlap against the sibling facts `Nat.dvd_gcd_mul_iff_dvd_mul`/`Nat.dvd_mul_gcd_iff_dvd_mul`: the anchored pattern matched exactly its own row (count 1) in a combined inventory of all three.