]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/ground/arith/nat_lt_minus.ma
update in ground
[helm.git] / matita / matita / contribs / lambdadelta / ground / arith / nat_lt_minus.ma
index d7654a0bb43294fcfc57c6a4605e3b46959243e9..61ab9b5444977d6033948a3b92e490898cb730fa 100644 (file)
@@ -12,6 +12,7 @@
 (*                                                                        *)
 (**************************************************************************)
 
+include "ground/generated/pull_2.ma".
 include "ground/arith/nat_le_minus.ma".
 include "ground/arith/nat_lt_pred.ma".
 
@@ -20,21 +21,29 @@ include "ground/arith/nat_lt_pred.ma".
 (* Constructions with nminus ************************************************)
 
 (*** monotonic_lt_minus_l *)
-lemma nlt_minus_sn_bi (o) (m) (n): o ≤ m → m < n → m - o < n - o.
+lemma nlt_minus_bi_dx (o) (m) (n): o ≤ m → m < n → m - o < n - o.
 #o #m #n #Hom #Hmn
-lapply (nle_minus_sn_bi … o Hmn) -Hmn
+lapply (nle_minus_bi_dx … o Hmn) -Hmn
 <(nminus_succ_sn … Hom) //
 qed.
 
 (*** monotonic_lt_minus_r *)
-lemma nlt_minus_dx_bi (o) (m) (n):
+lemma nlt_minus_bi_sn (o) (m) (n):
       m < o -> m < n → o-n < o-m.
 #o #m #n #Ho #H
-lapply (nle_minus_dx_bi … o H) -H #H
-@(le_nlt_trans … H) -n
+lapply (nle_minus_bi_sn … o H) -H #H
+@(nle_nlt_trans … H) -n
 @nlt_i >(nminus_succ_sn … Ho) //
 qed.
 
+(* Inversions with nminus ***************************************************)
+
+lemma nlt_inv_minus_bi_dx (o) (m) (n):
+      m - o < n - o → m < n.
+#o @(nat_ind_succ … o) -o
+/3 width=1 by nlt_inv_pred_bi/
+qed-.
+
 (* Destructions with nminus *************************************************)
 
 (*** minus_pred_pred *)
@@ -48,8 +57,26 @@ qed-.
 lemma nlt_des_minus_dx (o) (m) (n): m < n - o → o < n.
 #o @(nat_ind_succ … o) -o
 [ #m #n <nminus_zero_dx
-  /2 width=3 by le_nlt_trans/
+  /2 width=3 by nle_nlt_trans/
 | #o #IH #m #n <nminus_succ_dx_pred_sn #H
   /3 width=2 by nlt_inv_pred_dx/
 ]
 qed-.
+
+(* Advanced eliminators for nle with nlt and nminus *************************)
+
+(*** nat_elim_le_sn *)
+lemma nle_ind_sn (Q:relation …):
+      (∀m1,m2. (∀m. m < m2-m1 → Q (m2-m) m2) → m1 ≤ m2 → Q m1 m2) →
+      ∀n1,n2. n1 ≤ n2 → Q n1 n2.
+#Q #IH #n1 #n2 #Hn
+>(nminus_minus_dx_refl_sn … Hn) -Hn
+lapply (nle_minus_sn_refl_sn n2 n1)
+let d ≝ (n2-n1)
+@(nat_ind_lt … d) -d -n1 #d
+@pull_2 #Hd
+>(nminus_minus_dx_refl_sn … Hd) in ⊢ (%→?); -Hd
+let n1 ≝ (n2-d) #IHd
+@IH -IH [| // ] #m #Hn
+/4 width=3 by nlt_des_le, nlt_nle_trans/
+qed-.