X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2Flibrary%2Fnat%2Fnat.ma;h=a75032d7123b7018f40af65285712d5c3c4da9c1;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=100a101f95e1fa27797ea2e92e1be7eb456a578b;hpb=633474751ddf1074947ff0d324fb1aca2293eff8;p=helm.git diff --git a/helm/matita/library/nat/nat.ma b/helm/matita/library/nat/nat.ma index 100a101f9..a75032d71 100644 --- a/helm/matita/library/nat/nat.ma +++ b/helm/matita/library/nat/nat.ma @@ -14,8 +14,6 @@ set "baseuri" "cic:/matita/nat/nat". -include "logic/equality.ma". -include "logic/connectives.ma". include "higher_order_defs/functions.ma". inductive nat : Set \def @@ -28,14 +26,14 @@ definition pred: nat \to nat \def | (S p) \Rightarrow p ]. theorem pred_Sn : \forall n:nat.n=(pred (S n)). -intros; reflexivity. +intros. reflexivity. qed. theorem injective_S : injective nat nat S. -simplify. +unfold injective. intros. rewrite > pred_Sn. -rewrite > pred_Sn y. +rewrite > (pred_Sn y). apply eq_f. assumption. qed. @@ -43,8 +41,8 @@ theorem inj_S : \forall n,m:nat.(S n)=(S m) \to n=m \def injective_S. theorem not_eq_S : \forall n,m:nat. -Not (n=m) \to Not (S n = S m). -intros. simplify. intros. +\lnot n=m \to S n \neq S m. +intros. unfold Not. intros. apply H. apply injective_S. assumption. qed. @@ -54,14 +52,14 @@ definition not_zero : nat \to Prop \def [ O \Rightarrow False | (S p) \Rightarrow True ]. -theorem not_eq_O_S : \forall n:nat. Not (O=S n). -intros. simplify. intros. +theorem not_eq_O_S : \forall n:nat. O \neq S n. +intros. unfold Not. intros. cut (not_zero O). exact Hcut. rewrite > H.exact I. qed. -theorem not_eq_n_Sn : \forall n:nat. Not (n=S n). +theorem not_eq_n_Sn : \forall n:nat. n \neq S n. intros.elim n. apply not_eq_O_S. apply not_eq_S.assumption. @@ -73,6 +71,14 @@ P O \to (\forall m:nat. P (S m)) \to P n. intros.elim n.assumption.apply H1. qed. +theorem nat_case1: +\forall n:nat.\forall P:nat \to Prop. +(n=O \to P O) \to (\forall m:nat. (n=(S m) \to P (S m))) \to P n. +intros 2.elim n. +apply H.reflexivity. +apply H2.reflexivity. +qed. + theorem nat_elim2 : \forall R:nat \to nat \to Prop. (\forall n:nat. R O n) \to @@ -80,7 +86,21 @@ theorem nat_elim2 : (\forall n,m:nat. R n m \to R (S n) (S m)) \to \forall n,m:nat. R n m. intros 5.elim n. apply H. -apply nat_case m.apply H1. +apply (nat_case m).apply H1. intros.apply H2. apply H3. qed. +theorem decidable_eq_nat : \forall n,m:nat.decidable (n=m). +intros.unfold decidable. +apply (nat_elim2 (\lambda n,m.(Or (n=m) ((n=m) \to False)))). +intro.elim n1. +left.reflexivity. +right.apply not_eq_O_S. +intro.right.intro. +apply (not_eq_O_S n1). +apply sym_eq.assumption. +intros.elim H. +left.apply eq_f. assumption. +right.intro.apply H1.apply inj_S.assumption. +qed. +