X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2Ftests%2Finversion.ma;h=4f8c4c6d42b6560bd04872e007892776bab10ab0;hb=f981a524748846acc29b76b6e616af110b4ee13d;hp=ccbc4d96b7f2e85b56ecc628f4deb8a9094b5dc0;hpb=e32693f30563379989b75b53c3be088396b732da;p=helm.git diff --git a/helm/matita/tests/inversion.ma b/helm/matita/tests/inversion.ma index ccbc4d96b..4f8c4c6d4 100644 --- a/helm/matita/tests/inversion.ma +++ b/helm/matita/tests/inversion.ma @@ -1,3 +1,20 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +set "baseuri" "cic:/matita/tests/inversion/". +include "coq.ma". + inductive nat : Set \def O : nat | S : nat \to nat. @@ -6,17 +23,41 @@ inductive le (n:nat) : nat \to Prop \def leO : le n n | leS : \forall m. le n m \to le n (S m). -alias symbol "eq" (instance 0) = "leibnitz's equality". +alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". theorem test_inversion: \forall n. le n O \to n=O. intros. + (* inversion begins *) cut O=O. (* goal 2: 0 = 0 *) goal 7. reflexivity. (* goal 1 *) - generalize Hcut. (* non attaccata. Dovrebbe dare 0=0 -> n=0 *) + generalize in match Hcut. apply (le_ind ? (\lambda x. O=x \to n=x) ? ? ? H). - intro. reflexivity. + (* first goal (left open) *) + intro. rewrite < H1. + clear Hcut. + (* second goal (closed) *) + goal 14. simplify. intros. - (* manca discriminate H3 *) -qed. \ No newline at end of file + discriminate H3. + (* inversion ends *) + 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). + (* first goal (left open) *) + intro. rewrite < H1. + (* second goal (closed) *) + goal 13. + simplify. intros. + discriminate H3. + (* inversion ends *) + reflexivity. +qed.