]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/matita/library/nat/orders.ma
*** empty log message ***
[helm.git] / helm / matita / library / nat / orders.ma
index 122aebcfa41c21cdb537cbf71a18c848c989835b..796567fa59ae31483de19312a03f49520b73e96c 100644 (file)
@@ -14,7 +14,7 @@
 
 set "baseuri" "cic:/matita/nat/orders".
 
-include "nat/plus.ma".
+include "nat/nat.ma".
 include "higher_order_defs/ordering.ma".
 
 (* definitions *)
@@ -24,12 +24,19 @@ inductive le (n:nat) : nat \to Prop \def
 
 (*CSC: the URI must disappear: there is a bug now *)
 interpretation "natural 'less or equal to'" 'leq x y = (cic:/matita/nat/orders/le.ind#xpointer(1/1) x y).
+(*CSC: the URI must disappear: there is a bug now *)
+interpretation "natural 'neither less nor equal to'" 'nleq x y =
+  (cic:/matita/logic/connectives/Not.con
+    (cic:/matita/nat/orders/le.ind#xpointer(1/1) x y)).
 
 definition lt: nat \to nat \to Prop \def
 \lambda n,m:nat.(S n) \leq m.
 
 (*CSC: the URI must disappear: there is a bug now *)
 interpretation "natural 'less than'" 'lt x y = (cic:/matita/nat/orders/lt.con x y).
+(*CSC: the URI must disappear: there is a bug now *)
+interpretation "natural 'not less than'" 'nless x y =
+  (cic:/matita/logic/connectives/Not.con (cic:/matita/nat/orders/lt.con x y)).
 
 definition ge: nat \to nat \to Prop \def
 \lambda n,m:nat.m \leq n.
@@ -42,6 +49,9 @@ definition gt: nat \to nat \to Prop \def
 
 (*CSC: the URI must disappear: there is a bug now *)
 interpretation "natural 'greater than'" 'gt x y = (cic:/matita/nat/orders/gt.con x y).
+(*CSC: the URI must disappear: there is a bug now *)
+interpretation "natural 'not greater than'" 'ngtr x y =
+  (cic:/matita/logic/connectives/Not.con (cic:/matita/nat/orders/gt.con x y)).
 
 theorem transitive_le : transitive nat le.
 simplify.intros.elim H1.
@@ -94,11 +104,11 @@ intros.elim H.exact I.exact I.
 qed.
 
 (* not le *)
-theorem not_le_Sn_O: \forall n:nat. \lnot (S n \leq O).
+theorem not_le_Sn_O: \forall n:nat. S n \nleq O.
 intros.simplify.intros.apply leS_to_not_zero ? ? H.
 qed.
 
-theorem not_le_Sn_n: \forall n:nat. \lnot (S n \leq n).
+theorem not_le_Sn_n: \forall n:nat. S n \nleq n.
 intros.elim n.apply not_le_Sn_O.simplify.intros.cut S n1 \leq n1.
 apply H.assumption.
 apply le_S_S_to_le.assumption.
@@ -113,7 +123,7 @@ left.simplify.apply le_S_S.assumption.
 qed.
 
 (* not eq *)
-theorem lt_to_not_eq : \forall n,m:nat. n<m \to \lnot (n=m).
+theorem lt_to_not_eq : \forall n,m:nat. n<m \to n \neq m.
 simplify.intros.cut (le (S n) m) \to False.
 apply Hcut.assumption.rewrite < H1.
 apply not_le_Sn_n.
@@ -131,16 +141,16 @@ simplify.intros.
 apply le_S_S_to_le.assumption.
 qed.
 
-theorem not_le_to_lt: \forall n,m:nat. \lnot (n \leq m) \to m<n.
+theorem not_le_to_lt: \forall n,m:nat. n \nleq m \to m<n.
 intros 2.
-apply nat_elim2 (\lambda n,m.\lnot (n \leq m) \to m<n).
+apply nat_elim2 (\lambda n,m.n \nleq m \to m<n).
 intros.apply absurd (O \leq n1).apply le_O_n.assumption.
 simplify.intros.apply le_S_S.apply le_O_n.
 simplify.intros.apply le_S_S.apply H.intros.apply H1.apply le_S_S.
 assumption.
 qed.
 
-theorem lt_to_not_le: \forall n,m:nat. n<m \to \lnot (m \leq n).
+theorem lt_to_not_le: \forall n,m:nat. n<m \to m \nleq n.
 simplify.intros 3.elim H.
 apply not_le_Sn_n n H1.
 apply H2.apply lt_to_le. apply H3.
@@ -163,8 +173,8 @@ qed.
 theorem le_n_O_to_eq : \forall n:nat. n \leq O \to O=n.
 intro.elim n.reflexivity.
 apply False_ind.
-(* non si applica not_le_Sn_O *)
-apply  (not_le_Sn_O ? H1).
+apply not_le_Sn_O.
+goal 17. apply H1.
 qed.
 
 theorem le_n_O_elim: \forall n:nat.n \leq O \to \forall P: nat \to Prop.
@@ -248,3 +258,55 @@ apply lt_S_to_le.assumption.
 apply lt_to_le_to_lt p q (S n1) H3 H2.
 qed.
 
+(* some properties of functions *)
+
+definition increasing \def \lambda f:nat \to nat. 
+\forall n:nat. f n < f (S n).
+
+theorem increasing_to_monotonic: \forall f:nat \to nat.
+increasing f \to monotonic nat lt f.
+simplify.intros.elim H1.apply H.
+apply trans_le ? (f n1).
+assumption.apply trans_le ? (S (f n1)).
+apply le_n_Sn.
+apply H.
+qed.
+
+theorem le_n_fn: \forall f:nat \to nat. (increasing f) 
+\to \forall n:nat. n \le (f n).
+intros.elim n.
+apply le_O_n.
+apply trans_le ? (S (f n1)).
+apply le_S_S.apply H1.
+simplify in H. apply H.
+qed.
+
+theorem increasing_to_le: \forall f:nat \to nat. (increasing f) 
+\to \forall m:nat. \exists i. m \le (f i).
+intros.elim m.
+apply ex_intro ? ? O.apply le_O_n.
+elim H1.
+apply ex_intro ? ? (S a).
+apply trans_le ? (S (f a)).
+apply le_S_S.assumption.
+simplify in H.
+apply H.
+qed.
+
+theorem increasing_to_le2: \forall f:nat \to nat. (increasing f) 
+\to \forall m:nat. (f O) \le m \to 
+\exists i. (f i) \le m \land m <(f (S i)).
+intros.elim H1.
+apply ex_intro ? ? O.
+split.apply le_n.apply H.
+elim H3.elim H4.
+cut (S n1) < (f (S a)) \lor (S n1) = (f (S a)).
+elim Hcut.
+apply ex_intro ? ? a.
+split.apply le_S. assumption.assumption.
+apply ex_intro ? ? (S a).
+split.rewrite < H7.apply le_n.
+rewrite > H7.
+apply H.
+apply le_to_or_lt_eq.apply H6.
+qed.