Definition is_gcd p q r := r div p /\ r div q /\ forall k, k div p -> k div q -> k div r.Definition is_lcm p q r := p div r /\ q div r /\ forall k, p div k -> q div k -> r div k.Fact is_gcd_sym p q r : is_gcd p q r -> is_gcd q p r.Fact is_gcd_0l p : is_gcd 0 p p.Fact is_gcd_0r p : is_gcd p 0 p.Fact is_gcd_1l p : is_gcd 1 p 1.Fact is_gcd_1r p : is_gcd p 1 1.Fact is_gcd_modulus p q k r : p div k -> k <= q -> is_gcd p q r -> is_gcd p (q-k) r.Fact is_gcd_minus p q r : p <= q -> is_gcd p q r -> is_gcd p (q-p) r.Fact is_gcd_moduplus p q k r : p div k -> is_gcd p q r -> is_gcd p (q+k) r.Fact is_gcd_plus p q r : is_gcd p q r -> is_gcd p (q+p) r.Fact is_gcd_mult p q r n : is_gcd p (n*p+q) r <-> is_gcd p q r.Fact is_gcd_div p q : p div q -> is_gcd p q p.Fact is_gcd_refl p : is_gcd p p p.Fact is_gcd_fun p q r1 r2 : is_gcd p q r1 -> is_gcd p q r2 -> r1 = r2.Fact is_lcm_0l p : is_lcm 0 p 0.Fact is_lcm_0r p : is_lcm p 0 0.Fact is_lcm_sym p q r : is_lcm p q r -> is_lcm q p r.Fact is_lcm_fun p q r1 r2 : is_lcm p q r1 -> is_lcm p q r2 -> r1 = r2.

(* Specifications: *)
Lemma bezout_nc p q : is_gcd p q 1 -> exists a b, a*p+b*q = 1+p*q.
Lemma bezout_sc p q a b m : a*p+b*q = 1 + m -> p div m \/ q div m -> is_gcd p q 1.