kernel-Int.gcd_ne_one_iff_gcd_mul_right_ne_one
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {a : ℤ} {m n : ℕ}, a.gcd (↑m * ↑n) ≠ 1 ↔ a.gcd ↑m ≠ 1 ∨ a.gcd ↑n ≠ 1
test "$(cargo run -q --release -p axeyum-lean-kernel --example int_theorem_inventory -- 'gcd_ne_one_iff_gcd_mul_right_ne_one' 2>/dev/null | /usr/bin/grep -cE '^theorem[[:space:]]+Int\.gcd_ne_one_iff_gcd_mul_right_ne_one[[:space:]]')" -ge 1 Evidence notes
Built at Nat from x := natAbs a (Int.gcd a b reduces to Nat.gcd (natAbs a) (natAbs b) by rfl, and natAbs (ofNat m * ofNat n) reduces to mul m n by rfl): the already-proved Nat.coprime_mul_iff gives Iff (Eq (gcd x (m*n)) one) (And (Eq (gcd x m) one) (Eq (gcd x n) one)). Two purely intuitionistic Not/Iff transports (no decidability: P <-> Q gives Not P <-> Not Q for free) handle everything except one classical step, isolated to exactly where it is needed -- deciding Eq Nat (gcd x m) one via Nat.beq's already-proved soundness (Nat.eq_of_beq_eq_true) and completeness (Nat.beq_eq_true_of_eq), the SAME construction int_prelude::decide builds privately to derive Int.eq_em (this file keeps its own local copy, per this crate's per-file convention), never assumed as an axiom -- to turn Not (And q1 q2) into Or (Not q1) (Not q2). int_theorem_inventory's rendered type for Int.gcd_ne_one_iff_gcd_mul_right_ne_one matches this fact's formal.statement exactly. New proof, lane int-prime-dvd (2026-09-01): crates/axeyum-lean-kernel/src/int_prelude/prime_dvd_mul_mirrors.rs. No Nat declaration was added -- only the pre-existing Nat.coprime_mul_iff, Nat.eq_of_beq_eq_true, Nat.beq_eq_true_of_eq were consumed.