].
theorem eq_gen_S_O: \forall x. (S x = O) \to \forall P:Prop. P.
-intros. apply False_ind. cut (is_S O). auto new. elim H. exact I.
+intros. apply False_ind. cut (is_S O). elim Hcut. rewrite < H. apply I.
qed.
theorem eq_gen_S_O_cc: (\forall P:Prop. P) \to \forall x. (S x = O).
theorem le_gen_S_x_aux: \forall m,x,y. (le y x) \to (y = S m) \to
(\exists n. x = (S n) \land (le m n)).
-intros 4. elim H.
+intros 4. elim H; clear H x y.
apply eq_gen_S_O. exact m. elim H1. auto paramodulation.
-cut (n = m). elim Hcut. apply ex_intro. exact n1. auto new.auto paramodulation.
+clear H2. cut (n = m).
+elim Hcut. apply ex_intro. exact n1. split; auto.
+apply eq_gen_S_S. auto.
qed.
theorem le_gen_S_x: \forall m,x. (le (S m) x) \to
(* the following test used to show the following bug: the left
parameter A in the type of t was not unified with the left
parameter A in the type of the constructor of the record *)
-record t A : Type := { f : t A }.
+record t (A:Type) : Type := { f : t A }.