]> matita.cs.unibo.it Git - helm.git/commitdiff
update in ground_2 and basic_2
authorFerruccio Guidi <fguidi@maelstrom.helm.cs.unibo.it>
Wed, 6 Jun 2018 20:54:41 +0000 (22:54 +0200)
committerFerruccio Guidi <fguidi@maelstrom.helm.cs.unibo.it>
Wed, 6 Jun 2018 20:54:41 +0000 (22:54 +0200)
+ advances on cpms, cprs, lprs
+ support for decentralized xoa

23 files changed:
.gitignore
matita/matita/contribs/lambdadelta/Makefile
matita/matita/contribs/lambdadelta/basic_2/etc/scpds/scpds.etc [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cpms.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_ctc.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_aaa.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpxs.ma
matita/matita/contribs/lambdadelta/basic_2/rt_computation/partial.txt
matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma
matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl
matita/matita/contribs/lambdadelta/ground_2/lib/functions.ma
matita/matita/contribs/lambdadelta/ground_2/lib/ltc_ctc.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/ground_2/notation/xoa/ex_5_7.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/ground_2/web/ground_2_src.tbl
matita/matita/contribs/lambdadelta/ground_2/xoa/ex_5_7.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/ground_2/xoa2.conf.xml

index b6713e3907bf392386061f66788f33fd9bc5b142..a457deb5b9fdb961f7ca3caa957bd08398c7ca8c 100644 (file)
@@ -71,7 +71,5 @@ matita/matita/contribs/lambdadelta/.depend
 matita/matita/contribs/lambdadelta/nodes
 matita/matita/contribs/lambdadelta/token
 matita/matita/contribs/lambdadelta/2A1
-matita/matita/contribs/lambdadelta/ground_2/xoa/xoa2.ma
-matita/matita/contribs/lambdadelta/ground_2/notation/xoa/notation2.ma
 matita/matita/contribs/lambdadelta/*/*_probe.txt
 matita/matita/contribs/lambdadelta/*/web/*_sum.tbl
index 13465a4fc32d58f30241ecb54106a20e4ea3db27..0c03faa0ce0328d5f6e9e5b299b0a2c619da1efa 100644 (file)
@@ -11,7 +11,6 @@ XOA          := xoa.native
 XOA_OPTS     := ../../matita.conf.xml $(XOA_CONF)
 
 XOA2_CONF    := ground_2/xoa2.conf.xml
-XOA2_TARGETS := ground_2/notation/xoa/notation2.ma ground_2/xoa/xoa2.ma
 XOA2_OPTS    := ../../matita.conf.xml $(XOA2_CONF)
 
 DEP_INPUT    := .depend
@@ -74,11 +73,9 @@ $(XOA_TARGETS): $(XOA_CONF)
 
 # xoa2 #######################################################################
 
-xoa2: $(XOA2_TARGETS)
-
-$(XOA2_TARGETS): $(XOA2_CONF)
+xoa2: $(XOA2_CONF)
        @echo "  EXEC $(XOA) $(XOA2_CONF)"
-       $(H)MATITA_RT_BASE_DIR=../.. $(XOA_DIR)/$(XOA) $(XOA2_OPTS)
+       $(H)MATITA_RT_BASE_DIR=../.. $(XOA_DIR)/$(XOA) -s $(XOA2_OPTS)
 
 # elim #######################################################################
 
diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/scpds/scpds.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/scpds/scpds.etc
new file mode 100644 (file)
index 0000000..aa136af
--- /dev/null
@@ -0,0 +1,17 @@
+(* these are superseded by confluence of cpms *)
+
+lemma scpds_inv_lstas_eq: ∀h,o,G,L,T1,T2,d. ⦃G, L⦄ ⊢ T1 •*➡*[h, o, d] T2 →
+                          ∀T. ⦃G, L⦄ ⊢ T1 •*[h, d] T → ⦃G, L⦄ ⊢ T ➡* T2.
+#h #o #G #L #T1 #T2 #d2 *
+#T0 #d1 #_ #_ #HT10 #HT02 #T #HT1
+lapply (lstas_mono … HT10 … HT1) #H destruct //
+qed-.
+
+(* Main properties **********************************************************)
+
+theorem scpds_conf_eq: ∀h,o,G,L,T0,T1,d. ⦃G, L⦄ ⊢ T0 •*➡*[h, o, d] T1 →
+                       ∀T2. ⦃G, L⦄ ⊢ T0 •*➡*[h, o, d] T2 →
+                       ∃∃T. ⦃G, L⦄ ⊢ T1 ➡* T & ⦃G, L⦄ ⊢ T2 ➡* T.
+#h #o #G #L #T0 #T1 #d0 * #U1 #d1 #_ #_ #H1 #HUT1 #T2 * #U2 #d2 #_ #_ #H2 #HUT2 -d1 -d2
+lapply (lstas_mono … H1 … H2) #H destruct -h -d0 /2 width=3 by cprs_conf/
+qed-.
index 5fe790c896c8e86dcafaf9c14a7cdae38eeba385..a9f2d248c6715acef109ff5bb9fb9e73f9edba9b 100644 (file)
@@ -12,6 +12,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
+include "ground_2/xoa/ex_5_7.ma".
+include "basic_2/rt_transition/cpm_lsubr.ma".
 include "basic_2/rt_computation/cpms_drops.ma".
 include "basic_2/rt_computation/cprs.ma".
 
@@ -19,19 +21,6 @@ include "basic_2/rt_computation/cprs.ma".
 
 (* Main properties **********************************************************)
 
-(* Basic_2A1: uses: lstas_scpds_trans scpds_strap2 *)
-theorem cpms_trans (h) (G) (L):
-                   ∀n1,T1,T. ⦃G, L⦄ ⊢ T1 ➡*[n1, h] T →
-                   ∀n2,T2. ⦃G, L⦄ ⊢ T ➡*[n2, h] T2 → ⦃G, L⦄ ⊢ T1 ➡*[n1+n2, h] T2.
-/2 width=3 by ltc_trans/ qed-.
-
-(* Basic_2A1: uses: scpds_cprs_trans *)
-theorem cpms_cprs_trans (n) (h) (G) (L):
-                        ∀T1,T. ⦃G, L⦄ ⊢ T1 ➡*[n, h] T →
-                        ∀T2. ⦃G, L⦄ ⊢ T ➡*[h] T2 → ⦃G, L⦄ ⊢ T1 ➡*[n, h] T2.
-#n #h #G #L #T1 #T #HT1 #T2 #HT2 >(plus_n_O … n)
-/2 width=3 by cpms_trans/ qed-.
-
 (* Basic_2A1: includes: cprs_bind *)
 theorem cpms_bind (n) (h) (G) (L):
                   ∀I,V1,T1,T2. ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ➡*[n, h] T2 →
@@ -55,28 +44,6 @@ theorem cpms_appl (n) (h) (G) (L):
 ]
 qed.
 
-lemma cpms_inv_plus (h) (G) (L): ∀n1,n2,T1,T2. ⦃G, L⦄ ⊢ T1 ➡*[n1+n2, h] T2 →
-                                 ∃∃T. ⦃G, L⦄ ⊢ T1 ➡*[n1, h] T & ⦃G, L⦄ ⊢ T ➡*[n2, h] T2.
-#h #G #L #n1 elim n1 -n1 /2 width=3 by ex2_intro/
-#n1 #IH #n2 #T1 #T2 <plus_S1 #H
-elim (cpms_inv_succ_sn … H) -H #T0 #HT10 #HT02
-elim (IH … HT02) -IH -HT02 #T #HT0 #HT2
-lapply (cpms_trans … HT10 … HT0) -T0 #HT1
-/2 width=3 by ex2_intro/
-qed-.
-
-lemma cpms_cast (n) (h) (G) (L):
-                ∀T1,T2. ⦃G, L⦄ ⊢ T1 ➡*[n, h] T2 →
-                ∀U1,U2. ⦃G, L⦄ ⊢ U1 ➡*[n, h] U2 →
-                ⦃G, L⦄ ⊢ ⓝU1.T1 ➡*[n, h] ⓝU2.T2.
-#n #h #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1 -n
-[ /3 width=3 by cpms_cast_sn/
-| #n1 #n2 #T1 #T #HT1 #_ #IH #U1 #U2 #H
-  elim (cpms_inv_plus … H) -H #U #HU1 #HU2
-  /3 width=3 by cpms_trans, cpms_cast_sn/
-]
-qed.
-
 (* Basic_2A1: includes: cprs_beta_rc *)
 theorem cpms_beta_rc (n) (h) (G) (L):
                      ∀V1,V2. ⦃G, L⦄ ⊢ V1 ➡[h] V2 →
@@ -128,71 +95,76 @@ theorem cpms_theta (n) (h) (G) (L):
   /3 width=3 by cpr_pair_sn, cpms_step_sn/
 ]
 qed.
-(*
-(* Advanced inversion lemmas ************************************************)
 
-(* Basic_1: was pr3_gen_appl *)
-lemma cprs_inv_appl1: ∀G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓐV1.T1 ➡* U2 →
-                      ∨∨ ∃∃V2,T2.       ⦃G, L⦄ ⊢ V1 ➡* V2 & ⦃G, L⦄ ⊢ T1 ➡* T2 &
-                                        U2 = ⓐV2. T2
-                       | ∃∃a,W,T.       ⦃G, L⦄ ⊢ T1 ➡* ⓛ{a}W.T &
-                                        ⦃G, L⦄ ⊢ ⓓ{a}ⓝW.V1.T ➡* U2
-                       | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡* V0 & ⬆[0,1] V0 ≘ V2 &
-                                        ⦃G, L⦄ ⊢ T1 ➡* ⓓ{a}V.T &
-                                        ⦃G, L⦄ ⊢ ⓓ{a}V.ⓐV2.T ➡* U2.
-#G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/
-#U #U2 #_ #HU2 * *
-[ #V0 #T0 #HV10 #HT10 #H destruct
-  elim (cpr_inv_appl1 … HU2) -HU2 *
-  [ #V2 #T2 #HV02 #HT02 #H destruct /4 width=5 by cprs_strap1, or3_intro0, ex3_2_intro/
-  | #a #V2 #W #W2 #T #T2 #HV02 #HW2 #HT2 #H1 #H2 destruct
-    lapply (cprs_strap1 … HV10 … HV02) -V0 #HV12
-    lapply (lsubr_cpr_trans … HT2 (L.ⓓⓝW.V1) ?) -HT2
-    /5 width=5 by cprs_bind, cprs_flat_dx, cpr_cprs, lsubr_beta, ex2_3_intro, or3_intro1/
-  | #a #V #V2 #W0 #W2 #T #T2 #HV0 #HV2 #HW02 #HT2 #H1 #H2 destruct
-    /5 width=10 by cprs_flat_sn, cprs_bind_dx, cprs_strap1, ex4_5_intro, or3_intro2/
-  ]
-| /4 width=9 by cprs_strap1, or3_intro1, ex2_3_intro/
-| /4 width=11 by cprs_strap1, or3_intro2, ex4_5_intro/
-]
-qed-.
+(* Basic_2A1: uses: lstas_scpds_trans scpds_strap2 *)
+theorem cpms_trans (h) (G) (L):
+                   ∀n1,T1,T. ⦃G, L⦄ ⊢ T1 ➡*[n1, h] T →
+                   ∀n2,T2. ⦃G, L⦄ ⊢ T ➡*[n2, h] T2 → ⦃G, L⦄ ⊢ T1 ➡*[n1+n2, h] T2.
+/2 width=3 by ltc_trans/ qed-.
 
-(* Advanced inversion lemmas ************************************************)
+(* Basic_2A1: uses: scpds_cprs_trans *)
+theorem cpms_cprs_trans (n) (h) (G) (L):
+                        ∀T1,T. ⦃G, L⦄ ⊢ T1 ➡*[n, h] T →
+                        ∀T2. ⦃G, L⦄ ⊢ T ➡*[h] T2 → ⦃G, L⦄ ⊢ T1 ➡*[n, h] T2.
+#n #h #G #L #T1 #T #HT1 #T2 #HT2 >(plus_n_O … n)
+/2 width=3 by cpms_trans/ qed-.
 
-lemma scpds_inv_abst1: ∀h,o,a,G,L,V1,T1,U2,d. ⦃G, L⦄ ⊢ ⓛ{a}V1.T1 •*➡*[h, o, d] U2 →
-                       ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡* V2 & ⦃G, L.ⓛV1⦄ ⊢ T1 •*➡*[h, o, d] T2 &
-                                U2 = ⓛ{a}V2.T2.
-#h #o #a #G #L #V1 #T1 #U2 #d2 * #X #d1 #Hd21 #Hd1 #H1 #H2
-lapply (da_inv_bind … Hd1) -Hd1 #Hd1
-elim (lstas_inv_bind1 … H1) -H1 #U #HTU1 #H destruct
-elim (cprs_inv_abst1 … H2) -H2 #V2 #T2 #HV12 #HUT2 #H destruct
-/3 width=6 by ex4_2_intro, ex3_2_intro/
-qed-.
+(* Advanced inversion lemmas ************************************************)
 
-lemma scpds_inv_abbr_abst: ∀h,o,a1,a2,G,L,V1,W2,T1,T2,d. ⦃G, L⦄ ⊢ ⓓ{a1}V1.T1 •*➡*[h, o, d] ⓛ{a2}W2.T2 →
-                           ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 •*➡*[h, o, d] T & ⬆[0, 1] ⓛ{a2}W2.T2 ≘ T & a1 = true.
-#h #o #a1 #a2 #G #L #V1 #W2 #T1 #T2 #d2 * #X #d1 #Hd21 #Hd1 #H1 #H2
-lapply (da_inv_bind … Hd1) -Hd1 #Hd1
-elim (lstas_inv_bind1 … H1) -H1 #U1 #HTU1 #H destruct
-elim (cprs_inv_abbr1 … H2) -H2 *
-[ #V2 #U2 #HV12 #HU12 #H destruct
-| /3 width=6 by ex4_2_intro, ex3_intro/
+lemma cpms_inv_appl_sn (n) (h) (G) (L):
+                       ∀V1,T1,X2. ⦃G, L⦄ ⊢ ⓐV1.T1 ➡*[n, h] X2 →
+                       ∨∨ ∃∃V2,T2.
+                            ⦃G, L⦄ ⊢ V1 ➡*[h] V2 & ⦃G, L⦄ ⊢ T1 ➡*[n, h] T2 &
+                            X2 = ⓐV2.T2
+                        | ∃∃n1,n2,p,W,T.
+                            ⦃G, L⦄ ⊢ T1 ➡*[n1, h] ⓛ{p}W.T & ⦃G, L⦄ ⊢ ⓓ{p}ⓝW.V1.T ➡*[n2, h] X2 &
+                            n1 + n2 = n
+                        | ∃∃n1,n2,p,V0,V2,V,T.
+                            ⦃G, L⦄ ⊢ V1 ➡*[h] V0 & ⬆*[1] V0 ≘ V2 &
+                            ⦃G, L⦄ ⊢ T1 ➡*[n1, h] ⓓ{p}V.T & ⦃G, L⦄ ⊢ ⓓ{p}V.ⓐV2.T ➡*[n2, h] X2 &
+                            n1 + n2 = n.
+#n #h #G #L #V1 #T1 #U2 #H
+@(cpms_ind_dx … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/
+#n1 #n2 #U #U2 #_ * *
+[ #V0 #T0 #HV10 #HT10 #H #HU2 destruct
+  elim (cpm_inv_appl1 … HU2) -HU2 *
+  [ #V2 #T2 #HV02 #HT02 #H destruct /4 width=5 by cpms_step_dx, or3_intro0, ex3_2_intro/
+  | #p #V2 #W #W2 #T #T2 #HV02 #HW2 #HT2 #H1 #H2 destruct
+    lapply (cprs_step_dx … HV10 … HV02) -V0 #HV12
+    lapply (lsubr_cpm_trans … HT2 (L.ⓓⓝW.V1) ?) -HT2
+    /5 width=8 by cprs_flat_dx, cpms_bind, cpm_cpms, lsubr_beta, ex3_5_intro, or3_intro1/
+  | #p #V #V2 #W0 #W2 #T #T2 #HV0 #HV2 #HW02 #HT2 #H1 #H2 destruct
+    /6 width=12 by cprs_step_dx, cpm_cpms, cpm_appl, cpm_bind, ex5_7_intro, or3_intro2/
+  ]
+| #m1 #m2 #p #W #T #HT1 #HTU #H #HU2 destruct
+  lapply (cpms_step_dx … HTU … HU2) -U #H
+  @or3_intro1 @(ex3_5_intro … HT1 H) // (**) (* auto fails *)
+| #m1 #m2 #p #V2 #W2 #V #T #HV12 #HVW2 #HT1 #HTU #H #HU2 destruct
+  lapply (cpms_step_dx … HTU … HU2) -U #H
+  @or3_intro2 @(ex5_7_intro … HV12 HVW2 HT1 H) // (**) (* auto fails *)
 ]
 qed-.
 
-lemma scpds_inv_lstas_eq: ∀h,o,G,L,T1,T2,d. ⦃G, L⦄ ⊢ T1 •*➡*[h, o, d] T2 →
-                          ∀T. ⦃G, L⦄ ⊢ T1 •*[h, d] T → ⦃G, L⦄ ⊢ T ➡* T2.
-#h #o #G #L #T1 #T2 #d2 *
-#T0 #d1 #_ #_ #HT10 #HT02 #T #HT1
-lapply (lstas_mono … HT10 … HT1) #H destruct //
+lemma cpms_inv_plus (h) (G) (L): ∀n1,n2,T1,T2. ⦃G, L⦄ ⊢ T1 ➡*[n1+n2, h] T2 →
+                                 ∃∃T. ⦃G, L⦄ ⊢ T1 ➡*[n1, h] T & ⦃G, L⦄ ⊢ T ➡*[n2, h] T2.
+#h #G #L #n1 elim n1 -n1 /2 width=3 by ex2_intro/
+#n1 #IH #n2 #T1 #T2 <plus_S1 #H
+elim (cpms_inv_succ_sn … H) -H #T0 #HT10 #HT02
+elim (IH … HT02) -IH -HT02 #T #HT0 #HT2
+lapply (cpms_trans … HT10 … HT0) -T0 #HT1
+/2 width=3 by ex2_intro/
 qed-.
 
-(* Main properties **********************************************************)
+(* Advanced main properties *************************************************)
 
-theorem scpds_conf_eq: ∀h,o,G,L,T0,T1,d. ⦃G, L⦄ ⊢ T0 •*➡*[h, o, d] T1 →
-                       ∀T2. ⦃G, L⦄ ⊢ T0 •*➡*[h, o, d] T2 →
-                       ∃∃T. ⦃G, L⦄ ⊢ T1 ➡* T & ⦃G, L⦄ ⊢ T2 ➡* T.
-#h #o #G #L #T0 #T1 #d0 * #U1 #d1 #_ #_ #H1 #HUT1 #T2 * #U2 #d2 #_ #_ #H2 #HUT2 -d1 -d2
-lapply (lstas_mono … H1 … H2) #H destruct -h -d0 /2 width=3 by cprs_conf/
-qed-.
-*)
+theorem cpms_cast (n) (h) (G) (L):
+                  ∀T1,T2. ⦃G, L⦄ ⊢ T1 ➡*[n, h] T2 →
+                  ∀U1,U2. ⦃G, L⦄ ⊢ U1 ➡*[n, h] U2 →
+                  ⦃G, L⦄ ⊢ ⓝU1.T1 ➡*[n, h] ⓝU2.T2.
+#n #h #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1 -n
+[ /3 width=3 by cpms_cast_sn/
+| #n1 #n2 #T1 #T #HT1 #_ #IH #U1 #U2 #H
+  elim (cpms_inv_plus … H) -H #U #HU1 #HU2
+  /3 width=3 by cpms_trans, cpms_cast_sn/
+]
+qed.
index a23d8948a4fd6dd001d4bc8213bea4e9353f9e22..a636655eb00dcc6776191d11afb29951e9a86a7f 100644 (file)
@@ -17,7 +17,7 @@ include "basic_2/rt_computation/cpms_cpms.ma".
 
 (* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************)
 
-(* Properties concerning sn parallel reduction on local environments ********)
+(* Properties with parallel rt-transition for full local environments *******)
 
 lemma lpr_cpm_trans (n) (h) (G):
                     ∀L2,T1,T2. ⦃G, L2⦄ ⊢ T1 ➡[n, h] T2 →
@@ -45,26 +45,25 @@ lemma lpr_cpm_trans (n) (h) (G):
 ]
 qed-.
 
-(*
-
-(* Basic_1: uses: pr3_pr2_pr2_t *)
-(* Basic_1: includes: pr3_pr0_pr2_t *)
-(* Basic_2A1: includes: lpr_cpr_trans *)
-lemma lpr_cpm_trans (n) (h) (G): s_r_transitive … (λL. cpm h G L n) (λ_. lpr h G).
-
-lemma cpr_bind2: ∀G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ➡ V2 → ∀I,T1,T2. ⦃G, L.ⓑ{I}V2⦄ ⊢ T1 ➡ T2 →
-                 ∀a. ⦃G, L⦄ ⊢ ⓑ{a,I}V1.T1 ➡* ⓑ{a,I}V2.T2.
-/4 width=5 by lpr_cpr_trans, cprs_bind_dx, lpr_pair/ qed.
+lemma lpr_cpms_trans (n) (h) (G):
+                     ∀L1,L2. ⦃G, L1⦄ ⊢ ➡[h] L2 →
+                     ∀T1,T2. ⦃G, L2⦄ ⊢ T1 ➡*[n, h] T2 → ⦃G, L1⦄ ⊢ T1 ➡*[n, h] T2.
+#n #h #G #L1 #L2 #HL12 #T1 #T2 #H @(cpms_ind_sn … H) -n -T1
+/3 width=3 by lpr_cpm_trans, cpms_trans/
+qed-.
 
 (* Advanced properties ******************************************************)
 
-(* Basic_1: was only: pr3_pr2_pr3_t pr3_wcpr0_t *)
-lemma lpr_cprs_trans: ∀G. b_rs_transitive … (cpr G) (λ_. lpr G).
-#G @b_c_trans_CTC1 /2 width=3 by lpr_cpr_trans/ (**) (* full auto fails *)
-qed-.
+(* Basic_2A1: includes cpr_bind2 *)
+lemma cpm_bind2 (n) (h) (G) (L):
+                ∀V1,V2. ⦃G, L⦄ ⊢ V1 ➡[h] V2 →
+                ∀I,T1,T2. ⦃G, L.ⓑ{I}V2⦄ ⊢ T1 ➡[n, h] T2 →
+                ∀p. ⦃G, L⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n, h] ⓑ{p,I}V2.T2.
+/4 width=5 by lpr_cpm_trans, cpms_bind_dx, lpr_pair/ qed.
 
-lemma cprs_bind2_dx: ∀G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ➡ V2 →
-                     ∀I,T1,T2. ⦃G, L.ⓑ{I}V2⦄ ⊢ T1 ➡* T2 →
-                     ∀a. ⦃G, L⦄ ⊢ ⓑ{a,I}V1.T1 ➡* ⓑ{a,I}V2.T2.
-/4 width=5 by lpr_cprs_trans, cprs_bind_dx, lpr_pair/ qed.
-*)
\ No newline at end of file
+(* Basic_2A1: includes cprs_bind2_dx *)
+lemma cpms_bind2_dx (n) (h) (G) (L):
+                    ∀V1,V2. ⦃G, L⦄ ⊢ V1 ➡[h] V2 →
+                    ∀I,T1,T2. ⦃G, L.ⓑ{I}V2⦄ ⊢ T1 ➡*[n, h] T2 →
+                    ∀p. ⦃G, L⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n, h] ⓑ{p,I}V2.T2.
+/4 width=5 by lpr_cpms_trans, cpms_bind_dx, lpr_pair/ qed.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_ctc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_ctc.ma
new file mode 100644 (file)
index 0000000..dd5b0fc
--- /dev/null
@@ -0,0 +1,31 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "ground_2/lib/ltc_ctc.ma".
+include "basic_2/rt_computation/cpms.ma".
+
+(* CONTEXT-SENSITIVE PARALLEL R-COMPUTATION FOR TERMS ***********************)
+
+(* Properties with contextual transitive closure ****************************)
+
+lemma cprs_CTC (h) (G) (L): CTC … (λL. cpm h G L 0) L ⊆ cpms h G L 0.
+/2 width=1 by ltc_CTC/ qed.
+
+(* Inversion lemmas with contextual transitive closure **********************)
+
+lemma cprs_inv_CTC (h) (G) (L): cpms h G L 0 ⊆ CTC … (λL. cpm h G L 0) L.
+#h #G @ltc_inv_CTC //
+(**) (* this shoould be just @plus_inv_O3 *)
+#x1 #x2 #Hx12 elim (plus_inv_O3 x1 x2) /2 width=1 by conj/
+qed-.
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma
new file mode 100644 (file)
index 0000000..b53cd70
--- /dev/null
@@ -0,0 +1,31 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/cpms_lpr.ma".
+include "basic_2/rt_computation/cprs_ctc.ma".
+
+(* CONTEXT-SENSITIVE PARALLEL R-COMPUTATION FOR TERMS ***********************)
+
+(* Properties concerning sn parallel reduction on local environments ********)
+
+(* Basic_1: uses: pr3_pr2_pr2_t *)
+(* Basic_1: includes: pr3_pr0_pr2_t *)
+lemma lpr_cpr_trans (h) (G): s_r_transitive … (λL. cpm h G L 0) (λ_. lpr h G).
+/3 width=4 by cprs_inv_CTC, lpr_cpm_trans, ltc_inv_CTC/
+qed-.
+
+(* Basic_1: uses: pr3_pr2_pr3_t pr3_wcpr0_t *)
+lemma lpr_cprs_trans (h) (G): s_rs_transitive … (λL. cpm h G L 0) (λ_. lpr h G).
+#h #G @s_r_trans_CTC1 /2 width=3 by lpr_cpr_trans/ (**) (* full auto fails *)
+qed-.
index 97ff315654a2e5807a0c1b5cb271a089fd4ae44a..26df6e4801b68ee1449b592627687a2b42f90623 100644 (file)
@@ -17,8 +17,6 @@ include "basic_2/static/ffdeq_ffdeq.ma".
 include "basic_2/rt_computation/cpxs_fqus.ma".
 include "basic_2/rt_computation/cpxs_ffdeq.ma".
 include "basic_2/rt_computation/lpxs_ffdeq.ma".
-include "basic_2/rt_computation/lpxs_lpx.ma".
-include "basic_2/rt_computation/fpbs_fqus.ma".
 include "basic_2/rt_computation/fpbs_cpxs.ma".
 
 (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************)
index f88fb323916ac571a0a3359e9017d4925731233a..e1214dbac5a6b968f260f70a996f02ed7e194331 100644 (file)
@@ -1,3 +1,23 @@
-lemma lprs_aaa_conf: ∀G,L1,T,A. ⦃G, L1⦄ ⊢ T ⁝ A →
-                     ∀L2. ⦃G, L1⦄ ⊢ ➡* L2 → ⦃G, L2⦄ ⊢ T ⁝ A.
-/3 width=5 by lprs_lpxs, lpxs_aaa_conf/ qed-.
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/lpxs_aaa.ma".
+include "basic_2/rt_computation/lprs_lpxs.ma".
+
+(* PARALLEL R-COMPUTATION FOR FULL LOCAL ENVIRONMENTS ***********************)
+
+(* Properties with atomic arity assignment for terms ************************)
+
+lemma lprs_aaa_conf (h) (G) (T): Conf3 … (λL. aaa G L T) (lprs h G).
+/3 width=5 by lprs_fwd_lpxs, lpxs_aaa_conf/ qed-.
index b386634eea4ba8f0d763f82e3eeb15b880afd553..b910b2763c065d77282fd4abecb1d20acc43c315 100644 (file)
@@ -140,3 +140,41 @@ qed-.
 lemma lprs_pair2: ∀I,G,L1,L2. ⦃G, L1⦄ ⊢ ➡* L2 →
                   ∀V1,V2. ⦃G, L2⦄ ⊢ V1 ➡* V2 → ⦃G, L1.ⓑ{I}V1⦄ ⊢ ➡* L2.ⓑ{I}V2.
 /3 width=3 by lprs_pair, lprs_cprs_trans/ qed.
+
+(* Advanced inversion lemmas ************************************************)
+
+(* Basic_2A1: uses: scpds_inv_abst1 *)
+lemma cpms_inv_abst_sn (n) (h) (G) (L):
+                       ∀p,V1,T1,X2. ⦃G, L⦄ ⊢ ⓛ{p}V1.T1 ➡*[n, h] X2 →
+                       ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡*[h] V2 & ⦃G, L.ⓛV1⦄ ⊢ T1 ➡*[n, h] T2 &
+                                X2 = ⓛ{p}V2.T2.
+#n #h #G #L #p #V1 #T1 #X2 #H
+@(cpms_ind_dx … H) -X2 /2 width=5 by ex3_2_intro/
+#n1 #n2 #X #X2 #_ * #V #T #HV1 #HT1 #H1 #H2 destruct
+elim (cpm_inv_abst1 … H2) -H2 #V2 #T2 #HV2 #HT2 #H2 destruct
+@ex3_2_intro [1,2,5: // ] 
+[ /2 width=3 by cprs_step_dx/
+| @(cpms_trans … HT1) -T1 -V2 -n1
+
+/3 width=5 by cprs_step_dx, cpms_step_dx, ex3_2_intro/  
+
+
+
+#d2 * #X #d1 #Hd21 #Hd1 #H1 #H2
+lapply (da_inv_bind … Hd1) -Hd1 #Hd1
+elim (lstas_inv_bind1 … H1) -H1 #U #HTU1 #H destruct
+elim (cprs_inv_abst1 … H2) -H2 #V2 #T2 #HV12 #HUT2 #H destruct
+/3 width=6 by ex4_2_intro, ex3_2_intro/
+qed-.
+
+lemma scpds_inv_abbr_abst: ∀h,o,a1,a2,G,L,V1,W2,T1,T2,d. ⦃G, L⦄ ⊢ ⓓ{a1}V1.T1 •*➡*[h, o, d] ⓛ{a2}W2.T2 →
+                           ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 •*➡*[h, o, d] T & ⬆[0, 1] ⓛ{a2}W2.T2 ≘ T & a1 = true.
+#h #o #a1 #a2 #G #L #V1 #W2 #T1 #T2 #d2 * #X #d1 #Hd21 #Hd1 #H1 #H2
+lapply (da_inv_bind … Hd1) -Hd1 #Hd1
+elim (lstas_inv_bind1 … H1) -H1 #U1 #HTU1 #H destruct
+elim (cprs_inv_abbr1 … H2) -H2 *
+[ #V2 #U2 #HV12 #HU12 #H destruct
+| /3 width=6 by ex4_2_intro, ex3_intro/
+]
+qed-.
+*)
diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma
new file mode 100644 (file)
index 0000000..ecef51f
--- /dev/null
@@ -0,0 +1,30 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/cprs_ctc.ma".
+include "basic_2/rt_computation/lprs.ma".
+
+(* PARALLEL R-COMPUTATION FOR FULL LOCAL ENVIRONMENTS ***********************)
+
+(* Properties with contextual transitive closure ****************************)
+
+lemma lprs_CTC (h) (G):
+               ∀L1,L2. L1⪤[CTC … (λL. cpm h G L 0)] L2 → ⦃G, L1⦄⊢ ➡*[h] L2. 
+/3 width=3 by cprs_CTC, lex_co/ qed.
+
+(* Inversion lemmas with contextual transitive closure **********************)
+
+lemma lprs_inv_CTC (h) (G):
+                   ∀L1,L2. ⦃G, L1⦄⊢ ➡*[h] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2.
+/3 width=3 by cprs_inv_CTC, lex_co/ qed-.
index 96c53c7dbe92465233710f9ca536464f4ae5f3cc..91ad13808006422bdd1cd791637d4ccd65140836 100644 (file)
@@ -14,7 +14,7 @@
 
 include "basic_2/relocation/lex_tc.ma".
 include "basic_2/rt_computation/cprs_lpr.ma".
-include "basic_2/rt_computation/lprs.ma".
+include "basic_2/rt_computation/lprs_ctc.ma".
 
 (* PARALLEL R-COMPUTATION FOR FULL LOCAL ENVIRONMENTS ***********************)
 
@@ -24,25 +24,25 @@ include "basic_2/rt_computation/lprs.ma".
 lemma lprs_ind_sn (h) (G) (L2): ∀R:predicate lenv. R L2 →
                                 (∀L1,L. ⦃G, L1⦄ ⊢ ➡[h] L → ⦃G, L⦄ ⊢ ➡*[h] L2 → R L → R L1) →
                                 ∀L1. ⦃G, L1⦄ ⊢ ➡*[h] L2 → R L1.
-/3 width=7 by lpr_cprs_trans, cpr_refl, lex_CTC_ind_sn/ qed-.
+/4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_sn/ qed-.
 
 (* Basic_2A1: was: lprs_ind *)
 lemma lprs_ind_dx (h) (G) (L1): ∀R:predicate lenv. R L1 →
                                 (∀L,L2. ⦃G, L1⦄ ⊢ ➡*[h] L → ⦃G, L⦄ ⊢ ➡[h] L2 → R L → R L2) →
                                 ∀L2. ⦃G, L1⦄ ⊢ ➡*[h] L2 → R L2.
-/3 width=7 by lpr_cprs_trans, cpr_refl, lex_CTC_ind_dx/ qed-.
+/4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_dx/ qed-.
 
 (* Properties with unbound rt-transition for full local environments ********)
 
 lemma lpr_lprs (h) (G): ∀L1,L2. ⦃G, L1⦄ ⊢ ➡[h] L2 → ⦃G, L1⦄ ⊢ ➡*[h] L2.
-/3 width=3 by lpr_cprs_trans, lex_CTC_inj/ qed.
+/4 width=3 by lprs_CTC, lpr_cprs_trans, lex_CTC_inj/ qed.
 
 (* Basic_2A1: was: lprs_strap2 *)
 lemma lprs_step_sn (h) (G): ∀L1,L. ⦃G, L1⦄ ⊢ ➡[h] L →
                             ∀L2.⦃G, L⦄ ⊢ ➡*[h] L2 → ⦃G, L1⦄ ⊢ ➡*[h] L2.
-/3 width=3 by lpr_cprs_trans, lex_CTC_step_sn/ qed-.
+/4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_sn/ qed-.
 
 (* Basic_2A1: was: lpxs_strap1 *)
 lemma lprs_step_dx (h) (G): ∀L1,L. ⦃G, L1⦄ ⊢ ➡*[h] L →
                             ∀L2. ⦃G, L⦄ ⊢ ➡[h] L2 → ⦃G, L1⦄ ⊢ ➡*[h] L2.
-/3 width=3 by lpr_cprs_trans, lex_CTC_step_dx/ qed-.
+/4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_dx/ qed-.
index 3844f86203a0350e05cf3f78785692597b69fd2e..fe2d59ee76a8fe44d5e86d813b9343149973a035 100644 (file)
@@ -1,4 +1,26 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "basic_2/rt_computation/cpms_cpxs.ma".
+include "basic_2/rt_computation/lpxs.ma".
 include "basic_2/rt_computation/lprs.ma".
 
-lemma lprs_lpxs: ∀h,g,G,L1,L2. ⦃G, L1⦄ ⊢ ➡* L2 → ⦃G, L1⦄ ⊢ ➡*[h, g] L2.
-/3 width=3 by lpr_lpx, monotonic_TC/ qed.
+(* PARALLEL R-COMPUTATION FOR FULL LOCAL ENVIRONMENTS ***********************)
+
+(* Forward lemmas with unbound rt-computation for full local environments ***)
+
+(* Basic_2A1: was: lprs_lpxs *)
+(* Note: original proof uses lpr_fwd_lpx and monotonic_TC *)
+lemma lprs_fwd_lpxs (h) (G) : ∀L1,L2. ⦃G, L1⦄ ⊢ ➡*[h] L2 → ⦃G, L1⦄ ⊢ ⬈*[h] L2.
+/3 width=3 by cpms_fwd_cpxs, lex_co/ qed-.
index f4acf7091c41d93d9bd17e7b17788d7cfc8ac5c9..861762abd452f2dc789c6a7bfb570cce1050f412 100644 (file)
@@ -13,7 +13,6 @@
 (**************************************************************************)
 
 include "basic_2/relocation/lex_lex.ma".
-include "basic_2/rt_computation/cpxs_cpxs.ma".
 include "basic_2/rt_computation/lpxs_lpx.ma".
 
 (* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************)
index 7c1902149749a2525b28b3ba7c1247f94df82773..5a6398117db713310504d5e2566c621c94cf440f 100644 (file)
@@ -9,6 +9,6 @@ fpbs.ma fpbs_fqup.ma fpbs_fqus.ma fpbs_aaa.ma fpbs_cpx.ma fpbs_fpb.ma fpbs_cpxs.
 fpbg.ma fpbg_fqup.ma fpbg_cpxs.ma fpbg_lpxs.ma fpbg_fpbs.ma fpbg_fpbg.ma
 fsb.ma fsb_ffdeq.ma fsb_aaa.ma fsb_csx.ma fsb_fpbg.ma
 cpms.ma cpms_drops.ma cpms_lsubr.ma cpms_aaa.ma cpms_lpr.ma cpms_cpxs.ma cpms_cpms.ma
-cprs.ma cprs_drops.ma
+cprs.ma cprs_ctc.ma cprs_drops.ma cprs_lpr.ma
 cprs_ext.ma
-lprs.ma lprs_length.ma lprs_drops.ma
+lprs.ma lprs_ctc.ma lprs_length.ma lprs_drops.ma lprs_aaa.ma lprs_lpr.ma lprs_lpxs.ma
index 6279463b0212673abb249f427be38c132cfcf25d..6f6676e9c368fcac422d3b56d7f17c34b832c491 100644 (file)
@@ -13,7 +13,6 @@
 (**************************************************************************)
 
 include "basic_2/rt_computation/lpxs_lfdeq.ma".
-include "basic_2/rt_computation/lpxs_lpx.ma".
 include "basic_2/rt_computation/lpxs_lpxs.ma".
 include "basic_2/rt_computation/rdsx_rdsx.ma".
 
index 1800e235000692e497566a29c0be878b0e40a519..8fc0b30f2c359c68869d885584168a30d8b42028 100644 (file)
@@ -73,9 +73,9 @@ table {
         ]
 *)        
         [ { "context-sensitive parallel r-computation" * } {
-             [ [ "for lenvs on all entries" ] "lprs ( ⦃?,?⦄ ⊢ ➡*[?] ? )" "lprs_length" + "lprs_drops" (* + "lprs_cprs" + "lprs_lprs" *) * ]
+             [ [ "for lenvs on all entries" ] "lprs ( ⦃?,?⦄ ⊢ ➡*[?] ? )" "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" (* + "lprs_cprs" + "lprs_lprs" *) * ]
              [ [ "for binders" ] "cprs_ext" + "( ⦃?,?⦄ ⊢ ? ➡*[?] ?)" * ]
-             [ [ "for terms" ] "cprs" + "( ⦃?,?⦄ ⊢ ? ➡*[?] ?)" "cprs_drops" (* + "cprs_cprs" *) * ]
+             [ [ "for terms" ] "cprs" + "( ⦃?,?⦄ ⊢ ? ➡*[?] ?)" "cprs_ctc" + "cprs_drops" + "cprs_lpr" (* + "cprs_cprs" *) * ]
           }
         ]
         [ { "t-bound context-sensitive parallel rt-computation" * } {
index 4977504b9e988a440fa7d5fb0de75a3e0b247a66..739fb8d4f47cbc12fe91ddcf06b9bfd694b2f4a0 100644 (file)
@@ -20,10 +20,15 @@ definition left_identity (A) (f): predicate A ≝ λi. ∀a:A. a = f i a.
 
 definition right_identity (A) (f): predicate A ≝ λi. ∀a:A. a = f a i.
 
-definition compatible_2 (A) (B): relation3 … (relation A) (relation B) ≝
-                                 λf,Sa,Sb.
-                                 ∀a1,a2. Sa a1 a2 → Sb (f a1) (f a2).
+definition compatible_2 (A) (B):
+                        relation3 … (relation A) (relation B) ≝
+                        λf,Sa,Sb.
+                        ∀a1,a2. Sa a1 a2 → Sb (f a1) (f a2).
 
-definition compatible_3 (A) (B) (C): relation4 … (relation A) (relation B) (relation C) ≝
-                                     λf,Sa,Sb,Sc.
-                                     ∀a1,a2. Sa a1 a2 → ∀b1,b2. Sb b1 b2 → Sc (f a1 b1) (f a2 b2).
+definition compatible_3 (A) (B) (C):
+                        relation4 … (relation A) (relation B) (relation C) ≝
+                        λf,Sa,Sb,Sc.
+                        ∀a1,a2. Sa a1 a2 → ∀b1,b2. Sb b1 b2 → Sc (f a1 b1) (f a2 b2).
+
+definition annulment_2 (A) (f): predicate A ≝
+                       λi:A. ∀a1,a2. i = f a1 a2 → ∧∧ i = a1 & i = a2.
diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/ltc_ctc.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/ltc_ctc.ma
new file mode 100644 (file)
index 0000000..1682ef6
--- /dev/null
@@ -0,0 +1,42 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "ground_2/lib/star.ma".
+include "ground_2/lib/ltc.ma".
+
+(* LABELLED TRANSITIVE CLOSURE **********************************************)
+
+alias symbol "subseteq" = "relation inclusion".
+
+(* Properties with contextual transitive closure ****************************)
+
+lemma ltc_CTC (C) (A) (i) (f) (B) (R:relation4 C A B B):
+              left_identity … f i →
+              ∀c. CTC … (λc. R c i) c ⊆ ltc … f … (R c) i.
+#C #A #i #f #B #R #Hf #c #b1 #b2 #H elim H -b2 /2 width=1 by ltc_rc/
+#b #b2 #_ #Hb2 #IH >(Hf i) -Hf /2 width=3 by ltc_dx/
+qed.
+
+(* Inversion lemmas with contextual transitive closure **********************)
+
+lemma ltc_inv_CTC (C) (A) (i) (f) (B) (R:relation4 C A B B):
+                  associative … f → annulment_2 … f i →
+                  ∀c. ltc … f … (R c) i ⊆ CTC … (λc. R c i) c.
+#C #A #i #f #B #R #H1f #H2f #c #b1 #b2
+@(insert_eq_0 … i) #a #H
+@(ltc_ind_dx A f B … H) -a -b2 /2 width=1 by inj/ -H1f
+#a1 #a2 #b #b2 #_ #IH #Hb2 #H <H
+elim (H2f … H) -H2f -H #H1 #H2 destruct
+/3 width=3 by step/
+qed-.
diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/xoa/ex_5_7.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/xoa/ex_5_7.ma
new file mode 100644 (file)
index 0000000..fb2986f
--- /dev/null
@@ -0,0 +1,26 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* This file was generated by xoa.native: do not edit *********************)
+
+(* multiple existental quantifier (5, 7) *)
+
+notation > "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 , ident x5 , ident x6 break . term 19 P0 break & term 19 P1 break & term 19 P2 break & term 19 P3 break & term 19 P4)"
+ non associative with precedence 20
+ for @{ 'Ex7 (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.λ${ident x6}.$P0) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.λ${ident x6}.$P1) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.λ${ident x6}.$P2) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.λ${ident x6}.$P3) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.λ${ident x6}.$P4) }.
+
+notation < "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 , ident x5 , ident x6 break . term 19 P0 break & term 19 P1 break & term 19 P2 break & term 19 P3 break & term 19 P4)"
+ non associative with precedence 20
+ for @{ 'Ex7 (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.λ${ident x6}:$T6.$P0) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.λ${ident x6}:$T6.$P1) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.λ${ident x6}:$T6.$P2) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.λ${ident x6}:$T6.$P3) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.λ${ident x6}:$T6.$P4) }.
+
index c4ca8f6d26002cd7fb50894c43e15dafb4649fa3..baad25fc2a5a05ac84a893b30364a6b9dd54f24e 100644 (file)
@@ -56,7 +56,8 @@ table {
              [ "stream ( ? ⨮{?} ? )" "stream_eq ( ? ≗{?} ? )" "stream_hdtl ( ⫰{?}? )" "stream_tls ( ⫰*{?}[?]? )" * ]
              [ "list ( Ⓔ{?} ) ( ? ⨮{?} ? )" "list_length ( |?| )" * ]
              [ "bool ( Ⓕ ) ( Ⓣ )" "arith ( ?^? ) ( ↑? ) ( ↓? ) ( ? ∨ ? ) ( ? ∧ ? )" * ]
-             [ "logic ( ⊥ ) ( ⊤ )" "relations ( ? ⊆ ? )" "functions" "exteq ( ? ≐{?,?} ? )" "star" "ltc" * ]
+             [ "ltc" "ltc_ctc" * ]
+             [ "logic ( ⊥ ) ( ⊤ )" "relations ( ? ⊆ ? )" "functions" "exteq ( ? ≐{?,?} ? )" "star" * ]
           }
         ]
      }
diff --git a/matita/matita/contribs/lambdadelta/ground_2/xoa/ex_5_7.ma b/matita/matita/contribs/lambdadelta/ground_2/xoa/ex_5_7.ma
new file mode 100644 (file)
index 0000000..e982211
--- /dev/null
@@ -0,0 +1,28 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* This file was generated by xoa.native: do not edit *********************)
+
+include "basics/pts.ma".
+
+include "ground_2/notation/xoa/ex_5_7.ma".
+
+(* multiple existental quantifier (5, 7) *)
+
+inductive ex5_7 (A0,A1,A2,A3,A4,A5,A6:Type[0]) (P0,P1,P2,P3,P4:A0→A1→A2→A3→A4→A5→A6→Prop) : Prop ≝
+   | ex5_7_intro: ∀x0,x1,x2,x3,x4,x5,x6. P0 x0 x1 x2 x3 x4 x5 x6 → P1 x0 x1 x2 x3 x4 x5 x6 → P2 x0 x1 x2 x3 x4 x5 x6 → P3 x0 x1 x2 x3 x4 x5 x6 → P4 x0 x1 x2 x3 x4 x5 x6 → ex5_7 ? ? ? ? ? ? ? ? ? ? ? ?
+.
+
+interpretation "multiple existental quantifier (5, 7)" 'Ex7 P0 P1 P2 P3 P4 = (ex5_7 ? ? ? ? ? ? ? P0 P1 P2 P3 P4).
+
index f51bae446a701ed584d12b03b0993fee7189ca33..8adc7626b83c71bc440f4d465d2848be2b798ad0 100644 (file)
@@ -2,8 +2,9 @@
 <helm_registry>
   <section name="xoa">
     <key name="output_dir">.</key>
-    <key name="objects">ground_2/xoa/xoa2</key>
-    <key name="notations">ground_2/notation/xoa/notation2</key>
+    <key name="objects">ground_2/xoa</key>
+    <key name="notations">ground_2/notation/xoa</key>
     <key name="include">basics/pts.ma</key>
+    <key name="ex">5 7</key>
   </section>
 </helm_registry>