(* Specifications: *)
Lemma mult_lemma1 : forall (n m:nat),(n <> O)->(m <> 0)->(n <= n*m).
Lemma mult_lemma2 : forall (n m:nat),(n*m = O)->(n=O)\/(m=O).
Lemma mult_lemma3 : forall (n m:nat),(n <> O)->(m > 1)->(n < n*m).
Lemma mult_lemma4 : forall (n m:nat),n=n*m -> n=O \/ m=1.
Lemma mult_lemma5 : forall (n m:nat),((n * m) =1)->(n=1)/\(m=1).
Lemma plus_minus_lemma1 : forall (y x:nat),(x+y-y=x).
Lemma mult_minus_lemma1 : forall (a n:nat),a*n-n = (a-1)*n.
Lemma mult_lemma6 : forall (a b n:nat),(n <> O)->(n*a=n*b)->(a=b).
Lemma mult_lemma7 : forall (x y z t:nat),x*y*(z*t)=z*(x*y*t).
Lemma minus_lemma1 : forall (a b:nat),(S a-S b)<S a.
Lemma minus_lemma2 : forall (n m:nat),(n<=m)->(n-m=O).
Lemma mult_minus_lemma2 : forall (x y z:nat),(x*(y-z))=(x*y-x*z).
Lemma plus_minus_lemma2 : forall (x y z:nat),(y<=x)->(x-y+z)=(x+z-y).
Lemma minus_minus_lemma1 : forall (x y z:nat),(z<=y)->(x-(y-z))=(x+z-y).
Lemma minus_minus_lemma2 : forall (x y z:nat),(x-y-z)=(x-(y+z)).
Lemma minus_lt_lemma1 : forall (b a:nat),(a<b)->(0<b-a).
Lemma divides_le : forall (a b:nat),(a<>O)->(divides a b)->(b<=a).
Theorem euclide : forall (a b:nat),(b<>O)->{q:nat & { r:nat | (a=b*q+r) /\ (r < b)}}.
Lemma sqrt_prime_irrat_aux : forall (p k a b:nat),(is_prime p)->(rel_prime p k)->(rel_prime a b)->(p*k*(square b) <> (square a)).
Theorem sqrt_prime_irrat : forall (p k a b:nat),(is_prime p)->(rel_prime p k)->(b<>O)->(p*k*(square b) <> (square a)).