- cut O=O.
- (* goal 2: 0 = 0 *)
- goal 7. reflexivity.
- (* goal 1 *)
- generalize Hcut. (* non attaccata. Dovrebbe dare 0=0 -> n=0 *)
- apply (le_ind ? (\lambda x. O=x \to n=x) ? ? ? H).
- intro. reflexivity.
- simplify. intros.
- discriminate H3.
+ (* inversion begins *)
+ cut (O=O);
+ [ 2: reflexivity;
+ | generalize in match Hcut.
+ apply (le_ind ? (\lambda x. O=x \to n=x) ? ? ? H);
+ [ intro. rewrite < H1. clear Hcut.
+ | simplify. intros. discriminate H3.
+ ]
+ reflexivity.
+ ]
+qed.
+
+(* Piu' semplice e non lascia l'ipotesi inutile Hcut *)
+alias id "refl_equal" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1)".
+theorem test_inversion2: \forall n. le n O \to n=O.
+ intros.
+ (* inversion begins *)
+ generalize in match (refl_equal nat O).
+ apply (le_ind ? (\lambda x. O=x \to n=x) ? ? ? H);
+ [ intro. rewrite < H1.
+ | simplify. intros. discriminate H3.
+ ]
+ reflexivity.