(* We need the simple form of Bezout above to show this *)
Fact is_rel_prime_div p q k : is_gcd p q 1 -> p div q*k -> p div k.
Fact is_rel_prime_div_r p q k : is_gcd p q 1 -> p div k*q -> p div k.
Hint Resolve divides_1 divides_mult_compat is_gcd_refl.
Fact is_gcd_0 p q : is_gcd p q 0 -> p = 0 /\ q = 0.
Fact is_gcd_rel_prime p q g : is_gcd p q g -> exists a b, p = a*g /\ q = b*g /\ is_gcd a b 1.
Fact is_lcm_mult p q l k : is_lcm p q l -> is_lcm (k*p) (k*q) (k*l).

(* Specifications: *)
Theorem is_gcd_lcm_mult p q g l : is_gcd p q g -> is_lcm p q l -> p*q = g*l.
Theorem is_gcd_mult_lcm p q g l : g <> 0 -> is_gcd p q g -> g*l = p*q -> is_lcm p q l.
(*  if   1) p <= q 2) p = u*g 3) gcd p q = g 4) lcm p q = l then A) gcd p (q-p) = g B) lcm p (q-p) = l-u*p *)
Lemma is_lcm_minus p q g l u : p <= q -> p = u*g -> is_gcd p q g -> is_lcm p q l -> is_lcm p (q-p) (l-u*p).
(*  if   1) p <= q 2) p = u*g 3) gcd p q = g 4) lcm p q = l then A) gcd p (q-k*p) = g B) lcm p (q-p) = l-k*u*p *)
Lemma is_lcm_modulus k p q g l u : k*p <= q -> p = u*g -> is_gcd p q g -> is_lcm p q l -> is_lcm p (q-k*p) (l-k*u*p).
(*  if   1) p <= q 2) p = u*g 3) gcd p q = g 4) lcm p q = l then A) gcd p (q+p) = g B) lcm p (q+p) = l+u*p *)
Lemma is_lcm_plus p q g l u : p = u*g -> is_gcd p q g -> is_lcm p q l -> is_lcm p (q+p) (l+u*p).
Lemma is_lcm_moduplus k p q g l u : p = u*g -> is_gcd p q g -> is_lcm p q l -> is_lcm p (q+k*p) (l+k*u*p).
Section bezout_generalized.