]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma
- more results on relocation
[helm.git] / matita / matita / contribs / lambdadelta / ground_2 / relocation / rtmap_sor.ma
index 839426b9acb8ede8d994f16e6a6dff43338631d6..10f1b0b0a4d41e2df0bea18fd2ae505cef8f300e 100644 (file)
@@ -310,6 +310,18 @@ qed.
 lemma sor_isid: âˆ€f1,f2,f. đˆâŠƒf1⩄ â†’ đˆâŠƒf2⩄ â†’ đˆâŠƒf⩄ â†’ f1 â‹“ f2 â‰Ą f.
 /4 width=3 by sor_eq_repl_back2, sor_eq_repl_back1, isid_inv_eq_repl/ qed.
 
+(* Inversion lemmas with tail ***********************************************)
+
+lemma sor_inv_tl_sn: âˆ€f1,f2,f. â«±f1 â‹“ f2 â‰Ą f â†’ f1 â‹“ â«Żf2 â‰Ą â«Żf.
+#f1 #f2 #f elim (pn_split f1) *
+#g1 #H destruct /2 width=7 by sor_pn, sor_nn/
+qed-.
+
+lemma sor_inv_tl_dx: âˆ€f1,f2,f. f1 â‹“ â«±f2 â‰Ą f â†’ â«Żf1 â‹“ f2 â‰Ą â«Żf.
+#f1 #f2 #f elim (pn_split f2) *
+#g2 #H destruct /2 width=7 by sor_np, sor_nn/
+qed-.
+
 (* Inversion lemmas with test for identity **********************************)
 
 lemma sor_isid_inv_sn: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ đˆâŠƒf1⩄ â†’ f2 â‰— f.
@@ -419,10 +431,63 @@ corec lemma sor_inv_sle_dx: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ f2 âŠ† f.
 /3 width=5 by sle_push, sle_next, sle_weak/
 qed-.
 
+lemma sor_inv_sle_sn_trans: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ âˆ€g. g âŠ† f1 â†’ g âŠ† f.
+/3 width=4 by sor_inv_sle_sn, sle_trans/ qed-.
+
+lemma sor_inv_sle_dx_trans: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ âˆ€g. g âŠ† f2 â†’ g âŠ† f.
+/3 width=4 by sor_inv_sle_dx, sle_trans/ qed-.
+
+axiom sor_inv_sle: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ âˆ€g. f1 âŠ† g â†’ f2 âŠ† g â†’ f âŠ† g.
+
 (* Properties with inclusion ************************************************)
 
-lemma sor_sle_sn: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ âˆ€g. g âŠ† f1 â†’ g âŠ† f.
-/3 width=4 by sor_inv_sle_sn, sle_trans/ qed.
+corec lemma sor_sle_dx: âˆ€f1,f2. f1 âŠ† f2 â†’ f1 â‹“ f2 â‰Ą f2.
+#f1 #f2 * -f1 -f2 /3 width=7 by sor_pp, sor_nn, sor_pn/
+qed.
+
+corec lemma sor_sle_sn: âˆ€f1,f2. f1 âŠ† f2 â†’ f2 â‹“ f1 â‰Ą f2.
+#f1 #f2 * -f1 -f2 /3 width=7 by sor_pp, sor_nn, sor_np/
+qed.
 
-lemma sor_sle_dx: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ âˆ€g. g âŠ† f2 â†’ g âŠ† f.
-/3 width=4 by sor_inv_sle_dx, sle_trans/ qed.
+(* Main properties **********************************************************)
+
+axiom monotonic_sle_sor: âˆ€f1,g1. f1 âŠ† g1 â†’ âˆ€f2,g2. f2 âŠ† g2 â†’
+                         âˆ€f. f1 â‹“ f2 â‰Ą f â†’ âˆ€g. g1 â‹“ g2 â‰Ą g â†’ f âŠ† g.
+
+axiom sor_trans1: âˆ€f0,f3,f4. f0 â‹“ f3 â‰Ą f4 â†’
+                  âˆ€f1,f2. f1 â‹“ f2 â‰Ą f0 â†’
+                  âˆ€f. f2 â‹“ f3 â‰Ą f â†’ f1 â‹“ f â‰Ą f4.
+
+axiom sor_trans2: âˆ€f1,f0,f4. f1 â‹“ f0 â‰Ą f4 â†’
+                  âˆ€f2, f3. f2 â‹“ f3 â‰Ą f0 â†’
+                  âˆ€f. f1 â‹“ f2 â‰Ą f â†’ f â‹“ f3 â‰Ą f4.
+
+corec theorem sor_distr_dx: âˆ€f1,f2,f. f1 â‹“ f2 â‰Ą f â†’ âˆ€g1,g2,g. g1 â‹“ g2 â‰Ą g â†’
+                            âˆ€g0. g1 â‹“ g0 â‰Ą f1 â†’ g2 â‹“ g0 â‰Ą f2 â†’ g â‹“ g0 â‰Ą f.
+#f1 #f2 #f cases (pn_split f) * #x #Hx #Hf #g1 #g2 #g #Hg #g0 #Hf1 #Hf2
+[ cases (sor_inv_xxp â€Š Hf â€Š Hx) -Hf #x1 #x2 #Hf #Hx1 #Hx2
+  cases (sor_inv_xxp â€Š Hf1 â€Š Hx1) -f1 #y1 #y0 #Hf1 #Hy1 #Hy0
+  cases (sor_inv_xpp â€Š Hf2 â€Š Hy0 â€Š Hx2) -f2 #y2 #Hf2 #Hy2
+  cases (sor_inv_ppx â€Š Hg â€Š Hy1 Hy2) -g1 -g2 #y #Hg #Hy
+  @(sor_pp â€Š Hy Hy0 Hx) -g -g0 -f /2 width=8 by/
+| cases (pn_split g) * #y #Hy
+  [ cases (sor_inv_xxp â€Š Hg â€Š Hy) -Hg #y1 #y2 #Hg #Hy1 #Hy2
+    cases (sor_xxn_tl â€Š Hf â€Š Hx) * #x1 #x2 #_ #Hx1 #Hx2
+    [ cases (sor_inv_pxn â€Š Hf1 â€Š Hy1 Hx1) -g1 #y0 #Hf1 #Hy0
+      cases (sor_inv_pnx â€Š Hf2 â€Š Hy2 Hy0) -g2 -x2 #x2 #Hf2 #Hx2
+    | cases (sor_inv_pxn â€Š Hf2 â€Š Hy2 Hx2) -g2 #y0 #Hf2 #Hy0
+      cases (sor_inv_pnx â€Š Hf1 â€Š Hy1 Hy0) -g1 -x1 #x1 #Hf1 #Hx1
+    ]
+    lapply (sor_inv_nnn â€Š Hf â€Š Hx1 Hx2 Hx) -f1 -f2 #Hf
+    @(sor_pn â€Š Hy Hy0 Hx) -g -g0 -f /2 width=8 by/
+  | lapply (sor_tl â€Š Hf) -Hf #Hf
+    lapply (sor_tl â€Š Hg) -Hg #Hg
+    lapply (sor_tl â€Š Hf1) -Hf1 #Hf1
+    lapply (sor_tl â€Š Hf2) -Hf2 #Hf2
+    cases (pn_split g0) * #y0 #Hy0
+    [ @(sor_np â€Š Hy Hy0 Hx) /2 width=8 by/
+    | @(sor_nn â€Š Hy Hy0 Hx) /2 width=8 by/
+    ]
+  ]
+]
+qed-.