From: Ferruccio Guidi Date: Mon, 18 Nov 2019 22:12:40 +0000 (+0100) Subject: update for the article X-Git-Tag: make_still_working~219 X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=commitdiff_plain;h=adb9ba187619cea977d1d22971eba27eb437cd6a update for the article + pending conjectures proved + some renaming + probe: dependences are output in order --- diff --git a/.gitignore b/.gitignore index e7228e3ba..5958dcdfb 100644 --- a/.gitignore +++ b/.gitignore @@ -74,7 +74,8 @@ matita/matita/contribs/lambdadelta/.depend matita/matita/contribs/lambdadelta/nodes matita/matita/contribs/lambdadelta/token matita/matita/contribs/lambdadelta/2A -matita/matita/contribs/lambdadelta/*/*_probe.txt +matita/matita/contribs/lambdadelta/*/probe.txt +matita/matita/contribs/lambdadelta/*/deps.txt matita/matita/contribs/lambdadelta/*/web/*_sum.tbl matita/matita/contribs/convergence/ diff --git a/matita/components/binaries/probe/options.ml b/matita/components/binaries/probe/options.ml index 981483e29..ce29c1ef0 100644 --- a/matita/components/binaries/probe/options.ml +++ b/matita/components/binaries/probe/options.ml @@ -16,7 +16,25 @@ module C = NCic module R = Helm_registry module U = NUri module US = NUri.UriSet -module UH = NUri.UriHash + +module UriPair = struct + + type t = U.uri * U.uri + + let equal (u1l,u1r) (u2l,u2r) = + U.eq u1l u2l && U.eq u1r u2r + + let compare (u1l,u1r) (u2l,u2r) = + match U.compare u1l u2l with + | 0 -> U.compare u1r u2r + | c -> c + + let hash (ul,ur) = + Hashtbl.hash (U.hash ul, U.hash ur) + +end + +module UPS = Set.Make(UriPair) type def_xflavour = [ C.def_flavour | `Inductive @@ -62,7 +80,7 @@ let no_devel = ref default_no_devel let no_init = ref default_no_init -let deps = UH.create 11 +let deps = ref UPS.empty let index_of_xflavour = function | `Inductive -> 0 @@ -83,14 +101,14 @@ let clear_slot i _ = slot.(i) <- 0 let iter_xflavours map = A.iteri (fun _ -> map) slot let add_dep c u = - UH.add deps c u + deps := UPS.add (c,u) !deps let out_deps file = let och = open_out file in - let map a b = + let map (a,b) = P.fprintf och "\"%s\": \"%s\"\n" (U.string_of_uri a) (U.string_of_uri b) in - UH.iter map deps; + UPS.iter map !deps; close_out och let clear () = @@ -99,4 +117,4 @@ let clear () = exclude := default_exclude; net := default_net; chars := default_chars; debug_lexer := default_debug_lexer; no_devel := default_no_devel; no_init := default_no_init; - UH.reset deps + deps := UPS.empty diff --git a/matita/matita/contribs/lambdadelta/Makefile b/matita/matita/contribs/lambdadelta/Makefile index dd955bcc2..3e0228cb0 100644 --- a/matita/matita/contribs/lambdadelta/Makefile +++ b/matita/matita/contribs/lambdadelta/Makefile @@ -29,7 +29,7 @@ CONTRIB := lambdadelta_2 WWW := ../../../../helm/www/lambdadelta -TAGS := all xoa xoa2 orig elim deps top leaf stats tbls trim contrib clean \ +TAGS := all xoa xoa2 orig elim deps top leaf stats tbls odeps trim contrib clean \ www up-html PACKAGES := ground_2 static_2 basic_2 apps_2 alpha_1 @@ -48,10 +48,14 @@ define MAS_TEMPLATE MAS_$(1) := $$(shell find $(1) -name "*.ma") MAS += $$(MAS_$(1)) -$(1)/$(1)_probe.txt: $$(MAS_$(1)) +$(1)/probe.txt: $$(MAS_$(1)) @echo " PROBE $(1)" - $$(H)$$(PRB_DIR)/$$(PRB) $$(PRB_OPTS) $(1) -sn -sc -on -oc -f -b $(1)/$(1)_deps.txt > $$@ - $$(H)sort < $(1)/$(1)_deps.txt | uniq > $(1)/$(1)_deps_uniq.txt + $$(H)$$(PRB_DIR)/$$(PRB) $$(PRB_OPTS) $(1) -sn -sc -on -oc -f > $$@ + +$(1)/deps.txt: $$(MAS_$(1)) + @echo " PROBE $(1)" + $$(H)$$(PRB_DIR)/$$(PRB) $$(PRB_OPTS) $(1) -b $$@ + endef $(foreach PKG, $(PACKAGES), $(eval $(call MAS_TEMPLATE,$(PKG)))) @@ -123,7 +127,7 @@ define STATS_TEMPLATE STT_$(1) := $(1).stats STTS += $$(STT_$(1)) - $$(STT_$(1)): C0 = $$(shell cat $(1)/$(1)_probe.txt) + $$(STT_$(1)): C0 = $$(shell cat $(1)/probe.txt) $$(STT_$(1)): C2 = $$(word 2, $$(C0)) $$(STT_$(1)): C3 = $$(word 4, $$(C0)) $$(STT_$(1)): O1 = $$(shell ls $$(MAS_$(1)) | wc -l) @@ -140,7 +144,7 @@ define STATS_TEMPLATE $$(STT_$(1)): M2 = $$(shell grep "$$(OPEN)\*[^*:]*$$$$" $$(MAS_$(1)) | wc -l) $$(STT_$(1)): M3 = $$(shell grep "(\*\*)" $$(MAS_$(1)) | wc -l) -$$(STT_$(1)): $$(MAS_$(1)) $(1)/$(1)_probe.txt +$$(STT_$(1)): $$(MAS_$(1)) $(1)/probe.txt @printf '\x1B[1;40;37m' @printf '%-15s %-46s' 'Statistics for:' $(1) @printf '\x1B[0m\n' @@ -187,10 +191,10 @@ stats: $(STTS) # summary #################################################################### define SUMMARY_TEMPLATE - SUM_$(1) := $(1)/web/$(1)_sum.tbl + SUM_$(1) := $(1)/web/$(1)_sum.tbl SUMS += $$(SUM_$(1)) - $$(SUM_$(1)): C0 = $$(shell cat $(1)/$(1)_probe.txt) + $$(SUM_$(1)): C0 = $$(shell cat $(1)/probe.txt) $$(SUM_$(1)): S1 = $$(word 1, $$(C0)) $$(SUM_$(1)): S2 = $$(word 2, $$(C0)) $$(SUM_$(1)): S3 = $$(word 3, $$(C0)) @@ -203,7 +207,7 @@ define SUMMARY_TEMPLATE $$(SUM_$(1)): P2 = $$(word 9, $$(C0)) $$(SUM_$(1)): P3 = $$(shell echo "$$(P1)+$$(P2)"|bc) - $$(SUM_$(1)): $$(MAS_$(1)) $(1)/$(1)_probe.txt Makefile + $$(SUM_$(1)): $$(MAS_$(1)) $(1)/probe.txt Makefile @printf ' SUMMARY $(1)\n' @printf 'name "$$(basename $$(@F))"\n\n' > $$@ @printf 'table {\n' >> $$@ @@ -239,6 +243,10 @@ endif tbls: $(SUMS) +# odeps ###################################################################### + +odeps: $(PACKAGES:%=%/deps.txt) + # trim ####################################################################### TRIMS := $(MAS) $(TBLS) $(LDWS) diff --git a/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma b/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma index 674e618a8..7b09c887d 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma @@ -12,12 +12,12 @@ (* *) (**************************************************************************) -include "basic_2/notation/constructors/snitem2_3.ma". -include "basic_2/notation/constructors/star_0.ma". -include "basic_2/notation/constructors/snabstpos_2.ma". -include "basic_2/notation/constructors/snabbr_3.ma". -include "basic_2/notation/constructors/snabbrpos_2.ma". -include "basic_2/notation/constructors/snabbrneg_2.ma". +include "static_2/notation/functions/snitem2_3.ma". +include "static_2/notation/functions/star_0.ma". +include "static_2/notation/functions/snabstpos_2.ma". +include "static_2/notation/functions/snabbr_3.ma". +include "static_2/notation/functions/snabbrpos_2.ma". +include "static_2/notation/functions/snabbrneg_2.ma". include "alpha_1/notation/constructors/snitem1_2.ma". include "alpha_1/notation/constructors/snstar_2.ma". include "alpha_1/notation/constructors/snlref_2.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq.ma deleted file mode 100644 index 4ea9ff53f..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq.ma +++ /dev/null @@ -1,197 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/xoa/ex_5_1.ma". -include "ground_2/xoa/ex_9_3.ma". -include "basic_2/rt_transition/cpm_tdeq.ma". -include "basic_2/rt_computation/fpbg_fqup.ma". -include "basic_2/dynamic/cnv_fsb.ma". - -(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) - -(* Inversion lemmas with restricted rt-transition for terms *****************) - -lemma cnv_cpr_tdeq_fwd_refl (h) (a) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → T1 ≛ T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 = T2. -#h #a #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2 -[ // -| #G #K #V1 #V2 #X2 #_ #_ #_ #H1 #_ -a -G -K -V1 -V2 - lapply (tdeq_inv_lref1 … H1) -H1 #H destruct // -| #I #G #K #T2 #X2 #i #_ #_ #_ #H1 #_ -a -I -G -K -T2 - lapply (tdeq_inv_lref1 … H1) -H1 #H destruct // -| #p #I #G #L #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #H1 #H2 - elim (tdeq_inv_pair1 … H1) -H1 #V0 #T0 #HV0 #HT0 #H destruct - elim (cnv_inv_bind … H2) -H2 #HV1 #HT1 - /3 width=3 by eq_f2/ -| #I #G #L #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #H1 #H2 - elim (tdeq_inv_pair1 … H1) -H1 #V0 #T0 #HV0 #HT0 #H destruct - elim (cnv_fwd_flat … H2) -H2 #HV1 #HT1 - /3 width=3 by eq_f2/ -| #G #K #V #T1 #X1 #X2 #HXT1 #HX12 #_ #H1 #H2 - elim (cnv_fpbg_refl_false … H2) -a - @(fpbg_tdeq_div … H1) -H1 - /3 width=9 by cpm_tdneq_cpm_fpbg, cpm_zeta, tdeq_lifts_inv_pair_sn/ -| #G #L #U #T1 #T2 #HT12 #_ #H1 #H2 - elim (cnv_fpbg_refl_false … H2) -a - @(fpbg_tdeq_div … H1) -H1 - /3 width=6 by cpm_tdneq_cpm_fpbg, cpm_eps, tdeq_inv_pair_xy_y/ -| #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #H1 #_ - elim (tdeq_inv_pair … H1) -H1 #H #_ #_ destruct -| #p #G #L #V1 #V2 #X2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #_ #H1 #_ - elim (tdeq_inv_pair … H1) -H1 #H #_ #_ destruct -] -qed-. - -lemma cpm_tdeq_inv_bind_sn (h) (a) (n) (p) (I) (G) (L): - ∀V,T1. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → - ∃∃T2. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. -#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 -elim (cpm_inv_bind1 … H1) -H1 * -[ #XV #T2 #HXV #HT12 #H destruct - elim (tdeq_inv_pair … H2) -H2 #_ #H2XV #H2T12 - elim (cnv_inv_bind … H0) -H0 #HV #HT - lapply (cnv_cpr_tdeq_fwd_refl … HXV H2XV HV) #H destruct -HXV -H2XV - /2 width=4 by ex5_intro/ -| #X1 #HXT1 #HX1 #H1 #H destruct - elim (cnv_fpbg_refl_false … H0) -a - @(fpbg_tdeq_div … H2) -H2 - /3 width=9 by cpm_tdneq_cpm_fpbg, cpm_zeta, tdeq_lifts_inv_pair_sn/ -] -qed-. - -lemma cpm_tdeq_inv_appl_sn (h) (a) (n) (G) (L): - ∀V,T1. ⦃G,L⦄ ⊢ ⓐV.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛ X → - ∃∃m,q,W,U1,T2. ad a m & ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L⦄ ⊢ V ➡*[1,h] W & ⦃G,L⦄ ⊢ T1 ➡*[m,h] ⓛ{q}W.U1 - & ⦃G,L⦄⊢ T1 ![h,a] & ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓐV.T2. -#h #a #n #G #L #V #T1 #H0 #X #H1 #H2 -elim (cpm_inv_appl1 … H1) -H1 * -[ #XV #T2 #HXV #HT12 #H destruct - elim (tdeq_inv_pair … H2) -H2 #_ #H2XV #H2T12 - elim (cnv_inv_appl … H0) -H0 #m #q #W #U1 #Hm #HV #HT #HVW #HTU1 - lapply (cnv_cpr_tdeq_fwd_refl … HXV H2XV HV) #H destruct -HXV -H2XV - /3 width=7 by ex8_5_intro/ -| #q #V2 #W1 #W2 #XT #T2 #_ #_ #_ #H1 #H destruct -H0 - elim (tdeq_inv_pair … H2) -H2 #H #_ #_ destruct -| #q #V2 #XV #W1 #W2 #XT #T2 #_ #_ #_ #_ #H1 #H destruct -H0 - elim (tdeq_inv_pair … H2) -H2 #H #_ #_ destruct -] -qed-. - -lemma cpm_tdeq_inv_cast_sn (h) (a) (n) (G) (L): - ∀U1,T1. ⦃G,L⦄ ⊢ ⓝU1.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛ X → - ∃∃U0,U2,T2. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 & ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 - & ⦃G,L⦄ ⊢ U1 ![h,a] & ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 & U1 ≛ U2 - & ⦃G,L⦄ ⊢ T1 ![h,a] & ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓝU2.T2. -#h #a #n #G #L #U1 #T1 #H0 #X #H1 #H2 -elim (cpm_inv_cast1 … H1) -H1 [ * || * ] -[ #U2 #T2 #HU12 #HT12 #H destruct - elim (tdeq_inv_pair … H2) -H2 #_ #H2U12 #H2T12 - elim (cnv_inv_cast … H0) -H0 #U0 #HU1 #HT1 #HU10 #HT1U0 - /2 width=7 by ex9_3_intro/ -| #HT1X - elim (cnv_fpbg_refl_false … H0) -a - @(fpbg_tdeq_div … H2) -H2 - /3 width=6 by cpm_tdneq_cpm_fpbg, cpm_eps, tdeq_inv_pair_xy_y/ -| #m #HU1X #H destruct - elim (cnv_fpbg_refl_false … H0) -a - @(fpbg_tdeq_div … H2) -H2 - /3 width=6 by cpm_tdneq_cpm_fpbg, cpm_ee, tdeq_inv_pair_xy_x/ -] -qed-. - -lemma cpm_tdeq_inv_bind_dx (h) (a) (n) (p) (I) (G) (L): - ∀X. ⦃G,L⦄ ⊢ X ![h,a] → - ∀V,T2. ⦃G,L⦄ ⊢ X ➡[n,h] ⓑ{p,I}V.T2 → X ≛ ⓑ{p,I}V.T2 → - ∃∃T1. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T1. -#h #a #n #p #I #G #L #X #H0 #V #T2 #H1 #H2 -elim (tdeq_inv_pair2 … H2) #V0 #T1 #_ #_ #H destruct -elim (cpm_tdeq_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T0 #HV #HT1 #H1T12 #H2T12 #H destruct -/2 width=5 by ex5_intro/ -qed-. - -(* Eliminators with restricted rt-transition for terms **********************) - -lemma cpm_tdeq_ind (h) (a) (n) (G) (Q:relation3 …): - (∀I,L. n = 0 → Q L (⓪{I}) (⓪{I})) → - (∀L,s. n = 1 → Q L (⋆s) (⋆(⫯[h]s))) → - (∀p,I,L,V,T1. ⦃G,L⦄⊢ V![h,a] → ⦃G,L.ⓑ{I}V⦄⊢T1![h,a] → - ∀T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → - Q (L.ⓑ{I}V) T1 T2 → Q L (ⓑ{p,I}V.T1) (ⓑ{p,I}V.T2) - ) → - (∀m. ad a m → - ∀L,V. ⦃G,L⦄ ⊢ V ![h,a] → ∀W. ⦃G,L⦄ ⊢ V ➡*[1,h] W → - ∀p,T1,U1. ⦃G,L⦄ ⊢ T1 ➡*[m,h] ⓛ{p}W.U1 → ⦃G,L⦄⊢ T1 ![h,a] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → - Q L T1 T2 → Q L (ⓐV.T1) (ⓐV.T2) - ) → - (∀L,U0,U1,T1. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 → ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 → - ∀U2. ⦃G,L⦄ ⊢ U1 ![h,a] → ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 → - ∀T2. ⦃G,L⦄ ⊢ T1 ![h,a] → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → - Q L U1 U2 → Q L T1 T2 → Q L (ⓝU1.T1) (ⓝU2.T2) - ) → - ∀L,T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2. -#h #a #n #G #Q #IH1 #IH2 #IH3 #IH4 #IH5 #L #T1 -@(insert_eq_0 … G) #F -@(fqup_wf_ind_eq (Ⓣ) … F L T1) -L -T1 -F -#G0 #L0 #T0 #IH #F #L * [| * [| * ]] -[ #I #_ #_ #_ #_ #HF #X #H1X #H2X destruct -G0 -L0 -T0 - elim (cpm_tdeq_inv_atom_sn … H1X H2X) -H1X -H2X * - [ #H1 #H2 destruct /2 width=1 by/ - | #s #H1 #H2 #H3 destruct /2 width=1 by/ - ] -| #p #I #V #T1 #HG #HL #HT #H0 #HF #X #H1X #H2X destruct - elim (cpm_tdeq_inv_bind_sn … H0 … H1X H2X) -H0 -H1X -H2X #T2 #HV #HT1 #H1T12 #H2T12 #H destruct - /3 width=5 by/ -| #V #T1 #HG #HL #HT #H0 #HF #X #H1X #H2X destruct - elim (cpm_tdeq_inv_appl_sn … H0 … H1X H2X) -H0 -H1X -H2X #m #q #W #U1 #T2 #Hm #HV #HVW #HTU1 #HT1 #H1T12 #H2T12 #H destruct - /3 width=7 by/ -| #U1 #T1 #HG #HL #HT #H0 #HF #X #H1X #H2X destruct - elim (cpm_tdeq_inv_cast_sn … H0 … H1X H2X) -H0 -H1X -H2X #U0 #U2 #T2 #HU10 #HT1U0 #HU1 #H1U12 #H2U12 #HT1 #H1T12 #H2T12 #H destruct - /3 width=5 by/ -] -qed-. - -(* Advanced properties with restricted rt-transition for terms **************) - -lemma cpm_tdeq_free (h) (a) (n) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → - ∀F,K. ⦃F,K⦄ ⊢ T1 ➡[n,h] T2. -#h #a #n #G #L #T1 #H0 #T2 #H1 #H2 -@(cpm_tdeq_ind … H0 … H1 H2) -L -T1 -T2 -[ #I #L #H #F #K destruct // -| #L #s #H #F #K destruct // -| #p #I #L #V #T1 #_ #_ #T2 #_ #_ #IH #F #K - /2 width=1 by cpm_bind/ -| #m #_ #L #V #_ #W #_ #q #T1 #U1 #_ #_ #T2 #_ #_ #IH #F #K - /2 width=1 by cpm_appl/ -| #L #U0 #U1 #T1 #_ #_ #U2 #_ #_ #_ #T2 #_ #_ #_ #IHU #IHT #F #K - /2 width=1 by cpm_cast/ -] -qed-. - -(* Advanced inversion lemmas with restricted rt-transition for terms ********) - -lemma cpm_tdeq_inv_bind_sn_void (h) (a) (n) (p) (I) (G) (L): - ∀V,T1. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → - ∃∃T2. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓧ⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. -#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 -elim (cpm_tdeq_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T2 #HV #HT1 #H1T12 #H2T12 #H -/3 width=5 by ex5_intro, cpm_tdeq_free/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma deleted file mode 100644 index 54cd32a9e..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma +++ /dev/null @@ -1,135 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/xoa/ex_4_1_props.ma". -include "basic_2/dynamic/cnv_cpm_tdeq.ma". - -(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) - -definition IH_cnv_cpm_tdeq_conf_lpr (h) (a): relation3 genv lenv term ≝ - λG,L0,T0. ⦃G,L0⦄ ⊢ T0 ![h,a] → - ∀n1,T1. ⦃G,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀n2,T2. ⦃G,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G,L2⦄ ⊢ T2 ➡[n1-n2,h] T & T2 ≛ T. - -(* Diamond propery with restricted rt-transition for terms ******************) - -fact cnv_cpm_tdeq_conf_lpr_atom_atom_aux (h) (G0) (L1) (L2) (I): - ∃∃T. ⦃G0,L1⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T & ⦃G0,L2⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T. -#h #G0 #L1 #L2 #I -/2 width=5 by ex4_intro/ -qed-. - -fact cnv_cpm_tdeq_conf_lpr_atom_ess_aux (h) (G0) (L1) (L2) (s): - ∃∃T. ⦃G0,L1⦄ ⊢ ⋆s ➡[1,h] T & ⋆s ≛ T & ⦃G0,L2⦄ ⊢ ⋆(⫯[h]s) ➡[h] T & ⋆(⫯[h]s) ≛ T. -#h #G0 #L1 #L2 #s -/3 width=5 by tdeq_sort, ex4_intro/ -qed-. - -fact cnv_cpm_tdeq_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓑ{p,I}V0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ ⓑ{p,I}V0.T0 ![h,a] → - ∀n1,T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓑ{p,I}V0.T1 ➡[n2-n1,h] T & ⓑ{p,I}V0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓑ{p,I}V0.T2 ➡[n1-n2,h] T & ⓑ{p,I}V0.T2 ≛ T. -#h #a #p #I #G0 #L0 #V0 #T0 #IH #H0 -#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 -#L1 #HL01 #L2 #HL02 -elim (cnv_inv_bind … H0) -H0 #_ #HT0 -elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ{I}V0) … (L2.ⓑ{I}V0)) [|*: /2 width=1 by lpr_bind_refl_dx/ ] -#T #H1T1 #H2T1 #H1T2 #H2T2 -L0 -T0 -/3 width=7 by cpm_bind, tdeq_pair, ex4_intro/ -qed-. - -fact cnv_cpm_tdeq_conf_lpr_appl_appl_aux (h) (a) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓐV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ ⓐV0.T0 ![h,a] → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓐV0.T1 ➡[n2-n1,h] T & ⓐV0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓐV0.T2 ➡[n1-n2,h] T & ⓐV0.T2 ≛ T. -#h #a #G0 #L0 #V0 #T0 #IH #H0 -#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 -#L1 #HL01 #L2 #HL02 -elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #_ #HT0 #_ #_ -n0 -p0 -X01 -X02 -elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] -#T #H1T1 #H2T1 #H1T2 #H2T2 -L0 -T0 -/3 width=7 by cpm_appl, tdeq_pair, ex4_intro/ -qed-. - -fact cnv_cpm_tdeq_conf_lpr_cast_cast_aux (h) (a) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓝV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ ⓝV0.T0 ![h,a] → - ∀n1,V1. ⦃G0,L0⦄ ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 → - ∀n2,V2. ⦃G0,L0⦄ ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 → - ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓝV1.T1 ➡[n2-n1,h] T & ⓝV1.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓝV2.T2 ➡[n1-n2,h] T & ⓝV2.T2 ≛ T. -#h #a #G0 #L0 #V0 #T0 #IH #H0 -#n1 #V1 #H1V01 #H2V01 #n2 #V2 #H1V02 #H2V02 #T1 #H1T01 #H2T01 #T2 #H1T02 #H2T02 -#L1 #HL01 #L2 #HL02 -elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #HT0 #_ #_ -X0 -elim (IH … H1V01 H2V01 … H1V02 H2V02 … HL01 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] -elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] -#T #H1T1 #H2T1 #H1T2 #H2T2 #V #H1V1 #H2V1 #H1V2 #H2V2 -L0 -V0 -T0 -/3 width=7 by cpm_cast, tdeq_pair, ex4_intro/ -qed-. - -fact cnv_cpm_tdeq_conf_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr h a G L T) → - ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_tdeq_conf_lpr h a G L T. -#h #a #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]] -[ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #H1X1 #H2X1 #n2 #X2 #H1X2 #H2X2 #L1 #HL1 #L2 #HL2 destruct - elim (cpm_tdeq_inv_atom_sn … H1X1 H2X1) -H1X1 -H2X1 * - elim (cpm_tdeq_inv_atom_sn … H1X2 H2X2) -H1X2 -H2X2 * - [ #H21 #H22 #H11 #H12 destruct -a -L - [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_cpm_trans h a G L T) → - ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_tdeq_cpm_trans h a G L T1. -#h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] -[ #I #_ #_ #_ #_ #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -G0 -L0 -T0 - elim (cpm_tdeq_inv_atom_sn … H1X H2X) -H1X -H2X * - [ #H1 #H2 destruct /2 width=4 by ex3_intro/ - | #s #H1 #H2 #H3 destruct - elim (cpm_inv_sort1 … HX2) -HX2 #H #Hn2 destruct >iter_n_Sm - /3 width=4 by cpm_sort, tdeq_sort, ex3_intro/ - ] -| #p #I #V1 #T1 #HG #HL #HT #H0 #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct - elim (cpm_tdeq_inv_bind_sn … H0 … H1X H2X) -H0 -H1X -H2X #T #_ #H0T1 #H1T1 #H2T1 #H destruct - elim (cpm_inv_bind1 … HX2) -HX2 * - [ #V2 #T2 #HV12 #HT2 #H destruct - elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02 - lapply (IH2 … H0T1 … HT10 (L.ⓑ{I}V1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 - lapply (cpm_tdeq_free … HT0 … H1T02 H2T02 G (L.ⓑ{I}V2)) -H1T02 #H1T02 - /3 width=6 by cpm_bind, tdeq_pair, ex3_intro/ - | #T2 #HT2 #HTX2 #H1 #H2 destruct -IH2 - elim (tdeq_inv_lifts_dx … H2T1 … HT2) -H2T1 #XT #HXT1 #H2XT2 - lapply (cpm_inv_lifts_bi … H1T1 (Ⓣ) … HXT1 … HT2) -T [3:|*: /3 width=2 by drops_refl, drops_drop/ ] #H1XT2 - lapply (cnv_inv_lifts … H0T1 (Ⓣ) … HXT1) -H0T1 [3:|*: /3 width=2 by drops_refl, drops_drop/ ] #H0XT2 - elim (IH1 … H0XT2 … H1XT2 H2XT2 … HTX2) -T2 -IH1 -H0XT2 [| /2 width=1 by fqup_zeta/ ] #T2 #HXT2 #H1TX2 #H2XT2 - /3 width=4 by cpm_zeta, ex3_intro/ - ] -| #V1 #XT1 #HG #HL #HT #H0 #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct - elim (cpm_tdeq_inv_appl_sn … H0 … H1X H2X) -H0 -H1X -H2X #m #q #W1 #U1 #XT #_ #_ #_ #_ #H0T1 #H1T1 #H2T1 #H destruct -m -q -W1 -U1 - elim (cpm_inv_appl1 … HX2) -HX2 * - [ #V2 #T2 #HV12 #HT2 #H destruct -IH2 - elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -XT -IH1 -H0T1 [| // ] #T0 #HT10 #H1T02 #H2T02 - /3 width=6 by cpm_appl, tdeq_pair, ex3_intro/ - | #p #V2 #W1 #W2 #T #T2 #HV12 #HW12 #HT2 #H1 #H2 destruct - elim (cpm_tdeq_inv_bind_dx … H0T1 … H1T1 H2T1) -H0T1 -H1T1 -H2T1 #T1 #_ #H0T1 #H1T1 #H2T1 #H destruct - elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02 - lapply (IH2 … H0T1 … HT10 (L.ⓛW1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 - lapply (cpm_tdeq_free … HT0 … H1T02 H2T02 G (L.ⓓⓝW2.V2)) -H1T02 #H1T02 - /3 width=6 by cpm_beta, cpm_bind, tdeq_pair, ex3_intro/ - | #p #V2 #V0 #W1 #W2 #T #T2 #HV12 #HV20 #HW12 #HT2 #H1 #H2 destruct - elim (cpm_tdeq_inv_bind_dx … H0T1 … H1T1 H2T1) -H0T1 -H1T1 -H2T1 #T1 #_ #H0T1 #H1T1 #H2T1 #H destruct - elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02 - lapply (IH2 … H0T1 … HT10 (L.ⓓW1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 - lapply (cpm_tdeq_free … HT0 … H1T02 H2T02 G (L.ⓓW2)) -H1T02 - /4 width=8 by cpm_theta, cpm_appl, cpm_bind, tdeq_pair, ex3_intro/ - ] -| #U1 #T1 #HG #HL #HT #H0 #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -IH2 - elim (cpm_tdeq_inv_cast_sn … H0 … H1X H2X) -H0 -H1X -H2X #U0 #U #T #_ #_ #H0U1 #H1U1 #H2U1 #H0T1 #H1T1 #H2T1 #H destruct -U0 - elim (cpm_inv_cast1 … HX2) -HX2 [ * || * ] - [ #U2 #T2 #HU2 #HT2 #H destruct - elim (IH1 … H0U1 … H1U1 H2U1 … HU2) -U -H0U1 [| // ] #U0 #HU10 #H1U02 #H2U02 - elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 -H0T1 [| // ] #T0 #HT10 #H1T02 #H2T02 - /3 width=6 by cpm_cast, tdeq_pair, ex3_intro/ - | #HTX2 -U -H0U1 - elim (IH1 … H0T1 … H1T1 H2T1 … HTX2) -T -IH1 -H0T1 [| // ] #T0 #HT10 #H1T02 #H2T02 - /3 width=4 by cpm_eps, ex3_intro/ - | #m2 #HUX2 #H destruct -T -H0T1 - elim (IH1 … H0U1 … H1U1 H2U1 … HUX2) -U -H0U1 [| // ] #U0 #HU10 #H1U02 #H2U02 - /3 width=4 by cpm_ee, ex3_intro/ - ] -] -qed-. - -fact cnv_cpm_tdeq_cpm_trans_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - IH_cnv_cpm_tdeq_cpm_trans h a G0 L0 T0. -#h #a #G0 #L0 #T0 -@(fqup_wf_ind (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G0 #L0 #T0 #IH #IH0 -/5 width=10 by cnv_cpm_tdeq_cpm_trans_sub, fqup_fpbg_trans/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma new file mode 100644 index 000000000..e8f23f539 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma @@ -0,0 +1,197 @@ +(**************************************************************************) +(* ___ *) +(* ||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/xoa/ex_5_1.ma". +include "ground_2/xoa/ex_9_3.ma". +include "basic_2/rt_transition/cpm_teqx.ma". +include "basic_2/rt_computation/fpbg_fqup.ma". +include "basic_2/dynamic/cnv_fsb.ma". + +(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) + +(* Inversion lemmas with restricted rt-transition for terms *****************) + +lemma cnv_cpr_teqx_fwd_refl (h) (a) (G) (L): + ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → T1 ≛ T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 = T2. +#h #a #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2 +[ // +| #G #K #V1 #V2 #X2 #_ #_ #_ #H1 #_ -a -G -K -V1 -V2 + lapply (teqx_inv_lref1 … H1) -H1 #H destruct // +| #I #G #K #T2 #X2 #i #_ #_ #_ #H1 #_ -a -I -G -K -T2 + lapply (teqx_inv_lref1 … H1) -H1 #H destruct // +| #p #I #G #L #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #H1 #H2 + elim (teqx_inv_pair1 … H1) -H1 #V0 #T0 #HV0 #HT0 #H destruct + elim (cnv_inv_bind … H2) -H2 #HV1 #HT1 + /3 width=3 by eq_f2/ +| #I #G #L #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #H1 #H2 + elim (teqx_inv_pair1 … H1) -H1 #V0 #T0 #HV0 #HT0 #H destruct + elim (cnv_fwd_flat … H2) -H2 #HV1 #HT1 + /3 width=3 by eq_f2/ +| #G #K #V #T1 #X1 #X2 #HXT1 #HX12 #_ #H1 #H2 + elim (cnv_fpbg_refl_false … H2) -a + @(fpbg_teqx_div … H1) -H1 + /3 width=9 by cpm_tneqx_cpm_fpbg, cpm_zeta, teqx_lifts_inv_pair_sn/ +| #G #L #U #T1 #T2 #HT12 #_ #H1 #H2 + elim (cnv_fpbg_refl_false … H2) -a + @(fpbg_teqx_div … H1) -H1 + /3 width=6 by cpm_tneqx_cpm_fpbg, cpm_eps, teqx_inv_pair_xy_y/ +| #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #H1 #_ + elim (teqx_inv_pair … H1) -H1 #H #_ #_ destruct +| #p #G #L #V1 #V2 #X2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #_ #H1 #_ + elim (teqx_inv_pair … H1) -H1 #H #_ #_ destruct +] +qed-. + +lemma cpm_teqx_inv_bind_sn (h) (a) (n) (p) (I) (G) (L): + ∀V,T1. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ![h,a] → + ∀X. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → + ∃∃T2. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. +#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 +elim (cpm_inv_bind1 … H1) -H1 * +[ #XV #T2 #HXV #HT12 #H destruct + elim (teqx_inv_pair … H2) -H2 #_ #H2XV #H2T12 + elim (cnv_inv_bind … H0) -H0 #HV #HT + lapply (cnv_cpr_teqx_fwd_refl … HXV H2XV HV) #H destruct -HXV -H2XV + /2 width=4 by ex5_intro/ +| #X1 #HXT1 #HX1 #H1 #H destruct + elim (cnv_fpbg_refl_false … H0) -a + @(fpbg_teqx_div … H2) -H2 + /3 width=9 by cpm_tneqx_cpm_fpbg, cpm_zeta, teqx_lifts_inv_pair_sn/ +] +qed-. + +lemma cpm_teqx_inv_appl_sn (h) (a) (n) (G) (L): + ∀V,T1. ⦃G,L⦄ ⊢ ⓐV.T1 ![h,a] → + ∀X. ⦃G,L⦄ ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛ X → + ∃∃m,q,W,U1,T2. ad a m & ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L⦄ ⊢ V ➡*[1,h] W & ⦃G,L⦄ ⊢ T1 ➡*[m,h] ⓛ{q}W.U1 + & ⦃G,L⦄⊢ T1 ![h,a] & ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓐV.T2. +#h #a #n #G #L #V #T1 #H0 #X #H1 #H2 +elim (cpm_inv_appl1 … H1) -H1 * +[ #XV #T2 #HXV #HT12 #H destruct + elim (teqx_inv_pair … H2) -H2 #_ #H2XV #H2T12 + elim (cnv_inv_appl … H0) -H0 #m #q #W #U1 #Hm #HV #HT #HVW #HTU1 + lapply (cnv_cpr_teqx_fwd_refl … HXV H2XV HV) #H destruct -HXV -H2XV + /3 width=7 by ex8_5_intro/ +| #q #V2 #W1 #W2 #XT #T2 #_ #_ #_ #H1 #H destruct -H0 + elim (teqx_inv_pair … H2) -H2 #H #_ #_ destruct +| #q #V2 #XV #W1 #W2 #XT #T2 #_ #_ #_ #_ #H1 #H destruct -H0 + elim (teqx_inv_pair … H2) -H2 #H #_ #_ destruct +] +qed-. + +lemma cpm_teqx_inv_cast_sn (h) (a) (n) (G) (L): + ∀U1,T1. ⦃G,L⦄ ⊢ ⓝU1.T1 ![h,a] → + ∀X. ⦃G,L⦄ ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛ X → + ∃∃U0,U2,T2. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 & ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 + & ⦃G,L⦄ ⊢ U1 ![h,a] & ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 & U1 ≛ U2 + & ⦃G,L⦄ ⊢ T1 ![h,a] & ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓝU2.T2. +#h #a #n #G #L #U1 #T1 #H0 #X #H1 #H2 +elim (cpm_inv_cast1 … H1) -H1 [ * || * ] +[ #U2 #T2 #HU12 #HT12 #H destruct + elim (teqx_inv_pair … H2) -H2 #_ #H2U12 #H2T12 + elim (cnv_inv_cast … H0) -H0 #U0 #HU1 #HT1 #HU10 #HT1U0 + /2 width=7 by ex9_3_intro/ +| #HT1X + elim (cnv_fpbg_refl_false … H0) -a + @(fpbg_teqx_div … H2) -H2 + /3 width=6 by cpm_tneqx_cpm_fpbg, cpm_eps, teqx_inv_pair_xy_y/ +| #m #HU1X #H destruct + elim (cnv_fpbg_refl_false … H0) -a + @(fpbg_teqx_div … H2) -H2 + /3 width=6 by cpm_tneqx_cpm_fpbg, cpm_ee, teqx_inv_pair_xy_x/ +] +qed-. + +lemma cpm_teqx_inv_bind_dx (h) (a) (n) (p) (I) (G) (L): + ∀X. ⦃G,L⦄ ⊢ X ![h,a] → + ∀V,T2. ⦃G,L⦄ ⊢ X ➡[n,h] ⓑ{p,I}V.T2 → X ≛ ⓑ{p,I}V.T2 → + ∃∃T1. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T1. +#h #a #n #p #I #G #L #X #H0 #V #T2 #H1 #H2 +elim (teqx_inv_pair2 … H2) #V0 #T1 #_ #_ #H destruct +elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T0 #HV #HT1 #H1T12 #H2T12 #H destruct +/2 width=5 by ex5_intro/ +qed-. + +(* Eliminators with restricted rt-transition for terms **********************) + +lemma cpm_teqx_ind (h) (a) (n) (G) (Q:relation3 …): + (∀I,L. n = 0 → Q L (⓪{I}) (⓪{I})) → + (∀L,s. n = 1 → Q L (⋆s) (⋆(⫯[h]s))) → + (∀p,I,L,V,T1. ⦃G,L⦄⊢ V![h,a] → ⦃G,L.ⓑ{I}V⦄⊢T1![h,a] → + ∀T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + Q (L.ⓑ{I}V) T1 T2 → Q L (ⓑ{p,I}V.T1) (ⓑ{p,I}V.T2) + ) → + (∀m. ad a m → + ∀L,V. ⦃G,L⦄ ⊢ V ![h,a] → ∀W. ⦃G,L⦄ ⊢ V ➡*[1,h] W → + ∀p,T1,U1. ⦃G,L⦄ ⊢ T1 ➡*[m,h] ⓛ{p}W.U1 → ⦃G,L⦄⊢ T1 ![h,a] → + ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + Q L T1 T2 → Q L (ⓐV.T1) (ⓐV.T2) + ) → + (∀L,U0,U1,T1. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 → ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 → + ∀U2. ⦃G,L⦄ ⊢ U1 ![h,a] → ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 → + ∀T2. ⦃G,L⦄ ⊢ T1 ![h,a] → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + Q L U1 U2 → Q L T1 T2 → Q L (ⓝU1.T1) (ⓝU2.T2) + ) → + ∀L,T1. ⦃G,L⦄ ⊢ T1 ![h,a] → + ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2. +#h #a #n #G #Q #IH1 #IH2 #IH3 #IH4 #IH5 #L #T1 +@(insert_eq_0 … G) #F +@(fqup_wf_ind_eq (Ⓣ) … F L T1) -L -T1 -F +#G0 #L0 #T0 #IH #F #L * [| * [| * ]] +[ #I #_ #_ #_ #_ #HF #X #H1X #H2X destruct -G0 -L0 -T0 + elim (cpm_teqx_inv_atom_sn … H1X H2X) -H1X -H2X * + [ #H1 #H2 destruct /2 width=1 by/ + | #s #H1 #H2 #H3 destruct /2 width=1 by/ + ] +| #p #I #V #T1 #HG #HL #HT #H0 #HF #X #H1X #H2X destruct + elim (cpm_teqx_inv_bind_sn … H0 … H1X H2X) -H0 -H1X -H2X #T2 #HV #HT1 #H1T12 #H2T12 #H destruct + /3 width=5 by/ +| #V #T1 #HG #HL #HT #H0 #HF #X #H1X #H2X destruct + elim (cpm_teqx_inv_appl_sn … H0 … H1X H2X) -H0 -H1X -H2X #m #q #W #U1 #T2 #Hm #HV #HVW #HTU1 #HT1 #H1T12 #H2T12 #H destruct + /3 width=7 by/ +| #U1 #T1 #HG #HL #HT #H0 #HF #X #H1X #H2X destruct + elim (cpm_teqx_inv_cast_sn … H0 … H1X H2X) -H0 -H1X -H2X #U0 #U2 #T2 #HU10 #HT1U0 #HU1 #H1U12 #H2U12 #HT1 #H1T12 #H2T12 #H destruct + /3 width=5 by/ +] +qed-. + +(* Advanced properties with restricted rt-transition for terms **************) + +lemma cpm_teqx_free (h) (a) (n) (G) (L): + ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → + ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + ∀F,K. ⦃F,K⦄ ⊢ T1 ➡[n,h] T2. +#h #a #n #G #L #T1 #H0 #T2 #H1 #H2 +@(cpm_teqx_ind … H0 … H1 H2) -L -T1 -T2 +[ #I #L #H #F #K destruct // +| #L #s #H #F #K destruct // +| #p #I #L #V #T1 #_ #_ #T2 #_ #_ #IH #F #K + /2 width=1 by cpm_bind/ +| #m #_ #L #V #_ #W #_ #q #T1 #U1 #_ #_ #T2 #_ #_ #IH #F #K + /2 width=1 by cpm_appl/ +| #L #U0 #U1 #T1 #_ #_ #U2 #_ #_ #_ #T2 #_ #_ #_ #IHU #IHT #F #K + /2 width=1 by cpm_cast/ +] +qed-. + +(* Advanced inversion lemmas with restricted rt-transition for terms ********) + +lemma cpm_teqx_inv_bind_sn_void (h) (a) (n) (p) (I) (G) (L): + ∀V,T1. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ![h,a] → + ∀X. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → + ∃∃T2. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓧ⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. +#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 +elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T2 #HV #HT1 #H1T12 #H2T12 #H +/3 width=5 by ex5_intro, cpm_teqx_free/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma new file mode 100644 index 000000000..f894128ac --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma @@ -0,0 +1,135 @@ +(**************************************************************************) +(* ___ *) +(* ||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/xoa/ex_4_1_props.ma". +include "basic_2/dynamic/cnv_cpm_teqx.ma". + +(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) + +definition IH_cnv_cpm_teqx_conf_lpr (h) (a): relation3 genv lenv term ≝ + λG,L0,T0. ⦃G,L0⦄ ⊢ T0 ![h,a] → + ∀n1,T1. ⦃G,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ⦃G,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ⦃G,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L0⦄ ⊢ ➡[h] L2 → + ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G,L2⦄ ⊢ T2 ➡[n1-n2,h] T & T2 ≛ T. + +(* Diamond propery with restricted rt-transition for terms ******************) + +fact cnv_cpm_teqx_conf_lpr_atom_atom_aux (h) (G0) (L1) (L2) (I): + ∃∃T. ⦃G0,L1⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T & ⦃G0,L2⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T. +#h #G0 #L1 #L2 #I +/2 width=5 by ex4_intro/ +qed-. + +fact cnv_cpm_teqx_conf_lpr_atom_ess_aux (h) (G0) (L1) (L2) (s): + ∃∃T. ⦃G0,L1⦄ ⊢ ⋆s ➡[1,h] T & ⋆s ≛ T & ⦃G0,L2⦄ ⊢ ⋆(⫯[h]s) ➡[h] T & ⋆(⫯[h]s) ≛ T. +#h #G0 #L1 #L2 #s +/3 width=5 by teqx_sort, ex4_intro/ +qed-. + +fact cnv_cpm_teqx_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G0) (L0) (V0) (T0): + (∀G,L,T. ⦃G0,L0,ⓑ{p,I}V0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + ⦃G0,L0⦄ ⊢ ⓑ{p,I}V0.T0 ![h,a] → + ∀n1,T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → + ∃∃T. ⦃G0,L1⦄ ⊢ ⓑ{p,I}V0.T1 ➡[n2-n1,h] T & ⓑ{p,I}V0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓑ{p,I}V0.T2 ➡[n1-n2,h] T & ⓑ{p,I}V0.T2 ≛ T. +#h #a #p #I #G0 #L0 #V0 #T0 #IH #H0 +#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 +#L1 #HL01 #L2 #HL02 +elim (cnv_inv_bind … H0) -H0 #_ #HT0 +elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ{I}V0) … (L2.ⓑ{I}V0)) [|*: /2 width=1 by lpr_bind_refl_dx/ ] +#T #H1T1 #H2T1 #H1T2 #H2T2 -L0 -T0 +/3 width=7 by cpm_bind, teqx_pair, ex4_intro/ +qed-. + +fact cnv_cpm_teqx_conf_lpr_appl_appl_aux (h) (a) (G0) (L0) (V0) (T0): + (∀G,L,T. ⦃G0,L0,ⓐV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + ⦃G0,L0⦄ ⊢ ⓐV0.T0 ![h,a] → + ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → + ∃∃T. ⦃G0,L1⦄ ⊢ ⓐV0.T1 ➡[n2-n1,h] T & ⓐV0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓐV0.T2 ➡[n1-n2,h] T & ⓐV0.T2 ≛ T. +#h #a #G0 #L0 #V0 #T0 #IH #H0 +#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 +#L1 #HL01 #L2 #HL02 +elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #_ #HT0 #_ #_ -n0 -p0 -X01 -X02 +elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] +#T #H1T1 #H2T1 #H1T2 #H2T2 -L0 -T0 +/3 width=7 by cpm_appl, teqx_pair, ex4_intro/ +qed-. + +fact cnv_cpm_teqx_conf_lpr_cast_cast_aux (h) (a) (G0) (L0) (V0) (T0): + (∀G,L,T. ⦃G0,L0,ⓝV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + ⦃G0,L0⦄ ⊢ ⓝV0.T0 ![h,a] → + ∀n1,V1. ⦃G0,L0⦄ ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 → + ∀n2,V2. ⦃G0,L0⦄ ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 → + ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → + ∃∃T. ⦃G0,L1⦄ ⊢ ⓝV1.T1 ➡[n2-n1,h] T & ⓝV1.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓝV2.T2 ➡[n1-n2,h] T & ⓝV2.T2 ≛ T. +#h #a #G0 #L0 #V0 #T0 #IH #H0 +#n1 #V1 #H1V01 #H2V01 #n2 #V2 #H1V02 #H2V02 #T1 #H1T01 #H2T01 #T2 #H1T02 #H2T02 +#L1 #HL01 #L2 #HL02 +elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #HT0 #_ #_ -X0 +elim (IH … H1V01 H2V01 … H1V02 H2V02 … HL01 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] +elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] +#T #H1T1 #H2T1 #H1T2 #H2T2 #V #H1V1 #H2V1 #H1V2 #H2V2 -L0 -V0 -T0 +/3 width=7 by cpm_cast, teqx_pair, ex4_intro/ +qed-. + +fact cnv_cpm_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_teqx_conf_lpr h a G L T. +#h #a #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]] +[ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #H1X1 #H2X1 #n2 #X2 #H1X2 #H2X2 #L1 #HL1 #L2 #HL2 destruct + elim (cpm_teqx_inv_atom_sn … H1X1 H2X1) -H1X1 -H2X1 * + elim (cpm_teqx_inv_atom_sn … H1X2 H2X2) -H1X2 -H2X2 * + [ #H21 #H22 #H11 #H12 destruct -a -L + [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_cpm_trans h a G L T) → + ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_teqx_cpm_trans h a G L T1. +#h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] +[ #I #_ #_ #_ #_ #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -G0 -L0 -T0 + elim (cpm_teqx_inv_atom_sn … H1X H2X) -H1X -H2X * + [ #H1 #H2 destruct /2 width=4 by ex3_intro/ + | #s #H1 #H2 #H3 destruct + elim (cpm_inv_sort1 … HX2) -HX2 #H #Hn2 destruct >iter_n_Sm + /3 width=4 by cpm_sort, teqx_sort, ex3_intro/ + ] +| #p #I #V1 #T1 #HG #HL #HT #H0 #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct + elim (cpm_teqx_inv_bind_sn … H0 … H1X H2X) -H0 -H1X -H2X #T #_ #H0T1 #H1T1 #H2T1 #H destruct + elim (cpm_inv_bind1 … HX2) -HX2 * + [ #V2 #T2 #HV12 #HT2 #H destruct + elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02 + lapply (IH2 … H0T1 … HT10 (L.ⓑ{I}V1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 + lapply (cpm_teqx_free … HT0 … H1T02 H2T02 G (L.ⓑ{I}V2)) -H1T02 #H1T02 + /3 width=6 by cpm_bind, teqx_pair, ex3_intro/ + | #T2 #HT2 #HTX2 #H1 #H2 destruct -IH2 + elim (teqx_inv_lifts_dx … H2T1 … HT2) -H2T1 #XT #HXT1 #H2XT2 + lapply (cpm_inv_lifts_bi … H1T1 (Ⓣ) … HXT1 … HT2) -T [3:|*: /3 width=2 by drops_refl, drops_drop/ ] #H1XT2 + lapply (cnv_inv_lifts … H0T1 (Ⓣ) … HXT1) -H0T1 [3:|*: /3 width=2 by drops_refl, drops_drop/ ] #H0XT2 + elim (IH1 … H0XT2 … H1XT2 H2XT2 … HTX2) -T2 -IH1 -H0XT2 [| /2 width=1 by fqup_zeta/ ] #T2 #HXT2 #H1TX2 #H2XT2 + /3 width=4 by cpm_zeta, ex3_intro/ + ] +| #V1 #XT1 #HG #HL #HT #H0 #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct + elim (cpm_teqx_inv_appl_sn … H0 … H1X H2X) -H0 -H1X -H2X #m #q #W1 #U1 #XT #_ #_ #_ #_ #H0T1 #H1T1 #H2T1 #H destruct -m -q -W1 -U1 + elim (cpm_inv_appl1 … HX2) -HX2 * + [ #V2 #T2 #HV12 #HT2 #H destruct -IH2 + elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -XT -IH1 -H0T1 [| // ] #T0 #HT10 #H1T02 #H2T02 + /3 width=6 by cpm_appl, teqx_pair, ex3_intro/ + | #p #V2 #W1 #W2 #T #T2 #HV12 #HW12 #HT2 #H1 #H2 destruct + elim (cpm_teqx_inv_bind_dx … H0T1 … H1T1 H2T1) -H0T1 -H1T1 -H2T1 #T1 #_ #H0T1 #H1T1 #H2T1 #H destruct + elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02 + lapply (IH2 … H0T1 … HT10 (L.ⓛW1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 + lapply (cpm_teqx_free … HT0 … H1T02 H2T02 G (L.ⓓⓝW2.V2)) -H1T02 #H1T02 + /3 width=6 by cpm_beta, cpm_bind, teqx_pair, ex3_intro/ + | #p #V2 #V0 #W1 #W2 #T #T2 #HV12 #HV20 #HW12 #HT2 #H1 #H2 destruct + elim (cpm_teqx_inv_bind_dx … H0T1 … H1T1 H2T1) -H0T1 -H1T1 -H2T1 #T1 #_ #H0T1 #H1T1 #H2T1 #H destruct + elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02 + lapply (IH2 … H0T1 … HT10 (L.ⓓW1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 + lapply (cpm_teqx_free … HT0 … H1T02 H2T02 G (L.ⓓW2)) -H1T02 + /4 width=8 by cpm_theta, cpm_appl, cpm_bind, teqx_pair, ex3_intro/ + ] +| #U1 #T1 #HG #HL #HT #H0 #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -IH2 + elim (cpm_teqx_inv_cast_sn … H0 … H1X H2X) -H0 -H1X -H2X #U0 #U #T #_ #_ #H0U1 #H1U1 #H2U1 #H0T1 #H1T1 #H2T1 #H destruct -U0 + elim (cpm_inv_cast1 … HX2) -HX2 [ * || * ] + [ #U2 #T2 #HU2 #HT2 #H destruct + elim (IH1 … H0U1 … H1U1 H2U1 … HU2) -U -H0U1 [| // ] #U0 #HU10 #H1U02 #H2U02 + elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 -H0T1 [| // ] #T0 #HT10 #H1T02 #H2T02 + /3 width=6 by cpm_cast, teqx_pair, ex3_intro/ + | #HTX2 -U -H0U1 + elim (IH1 … H0T1 … H1T1 H2T1 … HTX2) -T -IH1 -H0T1 [| // ] #T0 #HT10 #H1T02 #H2T02 + /3 width=4 by cpm_eps, ex3_intro/ + | #m2 #HUX2 #H destruct -T -H0T1 + elim (IH1 … H0U1 … H1U1 H2U1 … HUX2) -U -H0U1 [| // ] #U0 #HU10 #H1U02 #H2U02 + /3 width=4 by cpm_ee, ex3_intro/ + ] +] +qed-. + +fact cnv_cpm_teqx_cpm_trans_aux (h) (a) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → + IH_cnv_cpm_teqx_cpm_trans h a G0 L0 T0. +#h #a #G0 #L0 #T0 +@(fqup_wf_ind (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G0 #L0 #T0 #IH #IH0 +/5 width=10 by cnv_cpm_teqx_cpm_trans_sub, fqup_fpbg_trans/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpme.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpme.ma deleted file mode 100644 index a3aa68739..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpme.ma +++ /dev/null @@ -1,47 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_cnr.ma". -include "basic_2/rt_computation/cpre.ma". -include "basic_2/dynamic/cnv_preserve.ma". - -(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) - -(* Properties with t-bound evaluation on terms ******************************) - -lemma cnv_cpme_trans (h) (a) (n) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[h,n] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T2 ![h,a]. -#h #a #n #G #L #T1 #HT1 #T2 * #HT12 #_ -/2 width=4 by cnv_cpms_trans/ -qed-. - -lemma cnv_cpme_cpms_conf (h) (a) (n) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∀T1. ⦃G,L⦄ ⊢ T ➡*[n,h] T1 → - ∀T2. ⦃G,L⦄ ⊢ T ➡*[h,n] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[h] 𝐍⦃T2⦄. -#h #a #n #G #L #T0 #HT0 #T1 #HT01 #T2 * #HT02 #HT2 -elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → ⦃G0,L0⦄ ⊢ T0 ![h,a] → @@ -30,11 +30,11 @@ fact cnv_cpms_conf_lpr_tdeq_tdeq_aux (h) (a) (G0) (L0) (T0): #h #a #G #L0 #T0 #IH2 #IH1 #HT0 #n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 -elim (cnv_cpms_tdeq_conf_lpr_aux … IH2 IH1 … H1T01 … H1T02 … HL01 … HL02) -IH2 -IH1 -H1T01 -H1T02 -HL01 -HL02 +elim (cnv_cpms_teqx_conf_lpr_aux … IH2 IH1 … H1T01 … H1T02 … HL01 … HL02) -IH2 -IH1 -H1T01 -H1T02 -HL01 -HL02 /2 width=3 by ex2_intro/ qed-. -fact cnv_cpms_conf_lpr_refl_tdneq_sub (h) (a) (G0) (L0) (T0) (m21) (m22): +fact cnv_cpms_conf_lpr_refl_tneqx_sub (h) (a) (G0) (L0) (T0) (m21) (m22): (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → ⦃G0,L0⦄ ⊢ T0 ![h,a] → @@ -56,7 +56,7 @@ lapply (cpms_trans … HTY2 … HY2) -Y2 #HT2Y /2 width=3 by ex2_intro/ qed-. -fact cnv_cpms_conf_lpr_step_tdneq_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22): +fact cnv_cpms_conf_lpr_step_tneqx_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22): (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → ⦃G0,L0⦄ ⊢ T0 ![h,a] → @@ -82,11 +82,11 @@ cut (⦃G0, L0, T0⦄ >[h] ⦃G0, L0, X2⦄) [ /4 width=5 by cpms_fwd_fpbs, cpm_ lapply (fpbg_fpbs_trans ?? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 by cpms_fwd_fpbs/ ] #H2fpbg lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ20 … L0 ?) // #HZ0 elim (IH1 … HXT2 … HXZ20 … L2 … L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ] -HXT2 -HXZ20 #Z2 #HTZ2 #HZ02 -elim (tdeq_dec X1 Z0) #H2XZ +elim (teqx_dec X1 Z0) #H2XZ [ -IH - elim (cnv_cpms_conf_lpr_tdeq_tdeq_aux … HX1 … H1XT1 H2XT1 … HXZ10 H2XZ … L1 … L0) [2,3: // |4,5: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] + elim (cnv_cpms_conf_lpr_teqx_teqx_aux … HX1 … H1XT1 H2XT1 … HXZ10 H2XZ … L1 … L0) [2,3: // |4,5: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] | -H1XT1 -H2XT1 - elim (cpms_tdneq_fwd_step_sn_aux … HXZ10 HX1 H2XZ) [|*: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] + elim (cpms_tneqx_fwd_step_sn_aux … HXZ10 HX1 H2XZ) [|*: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] -HXZ10 -H2XZ #n1 #n2 #X0 #H1X10 #H2X10 #HXZ0 #Hn elim (IH … H1X10 H2X10 … HXZ0 … L1 … L0) [2,3: // |4,5: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] >Hn -n1 -n2 -X0 -IH @@ -98,7 +98,7 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → ⦃G0,L0⦄ ⊢ T0 ![h,a] → @@ -110,18 +110,18 @@ fact cnv_cpms_conf_lpr_tdeq_tdneq_aux (h) (a) (G0) (L0) (T0) (n1) (m21) (m22): #T1 #H1T01 #H2T01 generalize in match m22; generalize in match m21; -m21 -m22 generalize in match IH1; generalize in match IH2; -@(cpms_tdeq_ind_sn … H1T01 HT0 H2T01 IH1 IH2) -n1 -T0 +@(cpms_teqx_ind_sn … H1T01 HT0 H2T01 IH1 IH2) -n1 -T0 [ #HT1 #IH2 #IH1 #m21 #m22 #X2 #HX02 #HnX02 #T2 #HXT2 #L1 #HL01 #L2 #HL02 [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → ⦃G0,L0⦄ ⊢ T0 ![h,a] → @@ -152,18 +152,18 @@ fact cnv_cpms_conf_lpr_aux (h) (a) (G0) (L0) (T0): ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpms_conf_lpr h a G L T. #h #a #G #L #T #IH2 #IH1 #G0 #L0 #T0 #HG #HL #HT #HT0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 destruct -elim (tdeq_dec T0 T1) #H2T01 -elim (tdeq_dec T0 T2) #H2T02 -[ @(cnv_cpms_conf_lpr_tdeq_tdeq_aux … IH2 IH1) -IH2 -IH1 /2 width=1 by/ -| elim (cpms_tdneq_fwd_step_sn_aux … HT02 HT0 H2T02 IH1 IH2) -HT02 -H2T02 +elim (teqx_dec T0 T1) #H2T01 +elim (teqx_dec T0 T2) #H2T02 +[ @(cnv_cpms_conf_lpr_teqx_teqx_aux … IH2 IH1) -IH2 -IH1 /2 width=1 by/ +| elim (cpms_tneqx_fwd_step_sn_aux … HT02 HT0 H2T02 IH1 IH2) -HT02 -H2T02 #m21 #m22 #X2 #HX02 #HnX02 #HXT2 #H2 destruct - @(cnv_cpms_conf_lpr_tdeq_tdneq_aux … IH2 IH1) -IH2 -IH1 /2 width=4 by/ -| elim (cpms_tdneq_fwd_step_sn_aux … HT01 HT0 H2T01 IH1 IH2) -HT01 -H2T01 + @(cnv_cpms_conf_lpr_teqx_tneqx_aux … IH2 IH1) -IH2 -IH1 /2 width=4 by/ +| elim (cpms_tneqx_fwd_step_sn_aux … HT01 HT0 H2T01 IH1 IH2) -HT01 -H2T01 #m11 #m12 #X1 #HX01 #HnX01 #HXT1 #H1 destruct - @ex2_commute @(cnv_cpms_conf_lpr_tdeq_tdneq_aux … IH2 IH1) -IH2 -IH1 /2 width=4 by/ -| elim (cpms_tdneq_fwd_step_sn_aux … HT01 HT0 H2T01 IH1 IH2) -HT01 -H2T01 - elim (cpms_tdneq_fwd_step_sn_aux … HT02 HT0 H2T02 IH1 IH2) -HT02 -H2T02 + @ex2_commute @(cnv_cpms_conf_lpr_teqx_tneqx_aux … IH2 IH1) -IH2 -IH1 /2 width=4 by/ +| elim (cpms_tneqx_fwd_step_sn_aux … HT01 HT0 H2T01 IH1 IH2) -HT01 -H2T01 + elim (cpms_tneqx_fwd_step_sn_aux … HT02 HT0 H2T02 IH1 IH2) -HT02 -H2T02 #m21 #m22 #X2 #HX02 #HnX02 #HXT2 #H2 #m11 #m12 #X1 #HX01 #HnX01 #HXT1 #H1 destruct - @(cnv_cpms_conf_lpr_tdneq_tdneq_aux … IH2 IH1) -IH2 -IH1 /2 width=4 by/ + @(cnv_cpms_conf_lpr_tneqx_tneqx_aux … IH2 IH1) -IH2 -IH1 /2 width=4 by/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq.ma deleted file mode 100644 index b0c9d9e16..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq.ma +++ /dev/null @@ -1,65 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/dynamic/cnv_cpm_tdeq_trans.ma". - -(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) - -(* Properties with restricted rt-computation for terms **********************) - -fact cpms_tdneq_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1): - ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - ∃∃n1,n2,T0. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T0 & T1 ≛ T0 → ⊥ & ⦃G,L⦄ ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n. -#h #a #n #G #L #T1 #T2 #H -@(cpms_ind_sn … H) -n -T1 -[ #_ #H2T2 elim H2T2 -H2T2 // -| #n1 #n2 #T1 #T #H1T1 #H1T2 #IH #H0T1 #H2T12 #IH2 #IH1 - elim (tdeq_dec T1 T) #H2T1 - [ elim (tdeq_dec T T2) #H2T2 - [ -IH -IH2 -IH1 -H0T1 /4 width=7 by tdeq_trans, ex4_3_intro/ - | lapply (cnv_cpm_trans_lpr_aux … IH2 IH1 … H1T1 L ?) [6:|*: // ] -H1T2 -H2T12 #H0T - elim (IH H0T H2T2) [|*: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] -IH -IH2 -H0T -H2T2 (**) - #m1 #m2 #T0 #H1T0 #H2T0 #H1T02 #H destruct - elim (cnv_cpm_tdeq_cpm_trans_aux … IH1 … H0T1 … H1T1 H2T1 … H1T0) -IH1 -H0T1 -H1T1 -H1T0 - #T3 #H1T13 #H1T30 #H2T30 - @(ex4_3_intro … H1T13) /4 width=3 by cpms_step_sn, tdeq_canc_sn/ (**) (* explicit constructor *) - ] - | -IH -IH2 -IH1 -H2T12 /3 width=7 by tdeq_trans, ex4_3_intro/ - ] -] -qed-. - -fact cpms_tdeq_ind_sn (h) (a) (G) (L) (T2) (Q:relation2 …): - (⦃G,L⦄ ⊢ T2 ![h,a] → Q 0 T2) → - (∀n1,n2,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 ≛ T → ⦃G,L⦄ ⊢ T ➡*[n2,h] T2 → ⦃G,L⦄ ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) → - ∀n,T1. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 ≛ T2 → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - Q n T1. -#h #a #G #L #T2 #Q #IB1 #IB2 #n #T1 #H -@(cpms_ind_sn … H) -n -T1 -[ -IB2 #H0T2 #_ #_ #_ /2 width=1 by/ -| #n1 #n2 #T1 #T #H1T1 #H1T2 #IH #H0T1 #H2T12 #IH2 #IH1 -IB1 - elim (tdeq_dec T1 T) #H2T1 - [ lapply (cnv_cpm_trans_lpr_aux … IH2 IH1 … H1T1 L ?) [6:|*: // ] #H0T - lapply (tdeq_canc_sn … H2T1 … H2T12) -H2T12 #H2T2 - /6 width=7 by cpm_fpbq, fpbq_fpbg_trans/ (**) - | -IB2 -IH -IH2 -IH1 - elim (cnv_fpbg_refl_false … H0T1) -a -Q - /3 width=8 by cpm_tdneq_cpm_cpms_tdeq_sym_fwd_fpbg/ - ] -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq_conf.ma deleted file mode 100644 index 20759ddc7..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq_conf.ma +++ /dev/null @@ -1,71 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/dynamic/cnv_cpm_tdeq_conf.ma". -include "basic_2/dynamic/cnv_cpms_tdeq.ma". - -(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) - -(* Sub confluence propery with restricted rt-transition for terms ***********) - -fact cnv_cpms_tdeq_strip_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![h,a] → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. -#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 -@(cpms_tdeq_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 -[ #H0T1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02 - arith_l3 - /3 width=7 by cpms_step_sn, tdeq_trans, ex4_intro/ -] -qed-. - -fact cnv_cpms_tdeq_conf_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![h,a] → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. -#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 -generalize in match IH1; generalize in match IH2; -@(cpms_tdeq_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 -[ #H0T1 #IH2 #IH1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02 - arith_l3 - /3 width=7 by cpms_step_sn, tdeq_trans, ex4_intro/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma new file mode 100644 index 000000000..7654a5eb8 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma @@ -0,0 +1,65 @@ +(**************************************************************************) +(* ___ *) +(* ||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/dynamic/cnv_cpm_teqx_trans.ma". + +(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) + +(* Properties with restricted rt-computation for terms **********************) + +fact cpms_tneqx_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1): + ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + ∃∃n1,n2,T0. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T0 & T1 ≛ T0 → ⊥ & ⦃G,L⦄ ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n. +#h #a #n #G #L #T1 #T2 #H +@(cpms_ind_sn … H) -n -T1 +[ #_ #H2T2 elim H2T2 -H2T2 // +| #n1 #n2 #T1 #T #H1T1 #H1T2 #IH #H0T1 #H2T12 #IH2 #IH1 + elim (teqx_dec T1 T) #H2T1 + [ elim (teqx_dec T T2) #H2T2 + [ -IH -IH2 -IH1 -H0T1 /4 width=7 by teqx_trans, ex4_3_intro/ + | lapply (cnv_cpm_trans_lpr_aux … IH2 IH1 … H1T1 L ?) [6:|*: // ] -H1T2 -H2T12 #H0T + elim (IH H0T H2T2) [|*: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] -IH -IH2 -H0T -H2T2 (**) + #m1 #m2 #T0 #H1T0 #H2T0 #H1T02 #H destruct + elim (cnv_cpm_teqx_cpm_trans_aux … IH1 … H0T1 … H1T1 H2T1 … H1T0) -IH1 -H0T1 -H1T1 -H1T0 + #T3 #H1T13 #H1T30 #H2T30 + @(ex4_3_intro … H1T13) /4 width=3 by cpms_step_sn, teqx_canc_sn/ (**) (* explicit constructor *) + ] + | -IH -IH2 -IH1 -H2T12 /3 width=7 by teqx_trans, ex4_3_intro/ + ] +] +qed-. + +fact cpms_teqx_ind_sn (h) (a) (G) (L) (T2) (Q:relation2 …): + (⦃G,L⦄ ⊢ T2 ![h,a] → Q 0 T2) → + (∀n1,n2,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 ≛ T → ⦃G,L⦄ ⊢ T ➡*[n2,h] T2 → ⦃G,L⦄ ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) → + ∀n,T1. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 ≛ T2 → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + Q n T1. +#h #a #G #L #T2 #Q #IB1 #IB2 #n #T1 #H +@(cpms_ind_sn … H) -n -T1 +[ -IB2 #H0T2 #_ #_ #_ /2 width=1 by/ +| #n1 #n2 #T1 #T #H1T1 #H1T2 #IH #H0T1 #H2T12 #IH2 #IH1 -IB1 + elim (teqx_dec T1 T) #H2T1 + [ lapply (cnv_cpm_trans_lpr_aux … IH2 IH1 … H1T1 L ?) [6:|*: // ] #H0T + lapply (teqx_canc_sn … H2T1 … H2T12) -H2T12 #H2T2 + /6 width=7 by cpm_fpbq, fpbq_fpbg_trans/ (**) + | -IB2 -IH -IH2 -IH1 + elim (cnv_fpbg_refl_false … H0T1) -a -Q + /3 width=8 by cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg/ + ] +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma new file mode 100644 index 000000000..f0e8dff67 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma @@ -0,0 +1,71 @@ +(**************************************************************************) +(* ___ *) +(* ||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/dynamic/cnv_cpm_teqx_conf.ma". +include "basic_2/dynamic/cnv_cpms_teqx.ma". + +(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) + +(* Sub confluence propery with restricted rt-transition for terms ***********) + +fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → + ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![h,a] → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → + ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. +#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 +@(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 +[ #H0T1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02 + arith_l3 + /3 width=7 by cpms_step_sn, teqx_trans, ex4_intro/ +] +qed-. + +fact cnv_cpms_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → + ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![h,a] → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → + ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → + ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. +#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 +generalize in match IH1; generalize in match IH2; +@(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 +[ #H0T1 #IH2 #IH1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02 + arith_l3 + /3 width=7 by cpms_step_sn, teqx_trans, ex4_intro/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpme.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpme.ma deleted file mode 100644 index 801a56a09..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpme.ma +++ /dev/null @@ -1,35 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/cpme_aaa.ma". -include "basic_2/rt_computation/cnuw_cnuw.ma". -include "basic_2/rt_computation/cpmuwe.ma". -include "basic_2/dynamic/cnv_cpme.ma". - -(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) - -(* Advanced Properties with t-unbound whd evaluation on terms ***************) - -lemma cnv_R_cpmuwe_dec (h) (a) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n). -#h #a #G #L #T1 #HT1 #n -elim (cnv_fwd_aaa … HT1) #A #HA -elim (cpme_total_aaa h n … HA) -HA #T2 #HT12 -elim (cnuw_dec h G L T2) #HnT1 -[ /5 width=3 by cpme_fwd_cpms, cpmuwe_intro, ex_intro, or_introl/ -| @or_intror * #T3 * #HT13 #HT3 - lapply (cnv_cpme_cpms_conf … HT1 … HT13 … HT12) -a -T1 #HT32 - /4 width=9 by cpme_fwd_cpms, cnuw_cpms_trans/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma new file mode 100644 index 000000000..701746c9f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma @@ -0,0 +1,35 @@ +(**************************************************************************) +(* ___ *) +(* ||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/cpmre_aaa.ma". +include "basic_2/rt_computation/cnuw_cnuw.ma". +include "basic_2/rt_computation/cpmuwe.ma". +include "basic_2/dynamic/cnv_cpmre.ma". + +(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) + +(* Advanced Properties with t-unbound whd evaluation on terms ***************) + +lemma cnv_R_cpmuwe_dec (h) (a) (G) (L): + ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n). +#h #a #G #L #T1 #HT1 #n +elim (cnv_fwd_aaa … HT1) #A #HA +elim (cpmre_total_aaa h n … HA) -HA #T2 #HT12 +elim (cnuw_dec h G L T2) #HnT1 +[ /5 width=3 by cpmre_fwd_cpms, cpmuwe_intro, ex_intro, or_introl/ +| @or_intror * #T3 * #HT13 #HT3 + lapply (cnv_cpmre_cpms_conf … HT1 … HT13 … HT12) -a -T1 #HT32 + /4 width=9 by cpmre_fwd_cpms, cnuw_cpms_trans/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma index d87201dad..f0557da92 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma @@ -15,7 +15,7 @@ include "basic_2/rt_computation/cpmuwe_cpmuwe.ma". include "basic_2/rt_equivalence/cpes_cpes.ma". include "basic_2/dynamic/cnv_cpmuwe.ma". (**) (* should be included by the next *) -include "basic_2/dynamic/cnv_cpmuwe_cpme.ma". +include "basic_2/dynamic/cnv_cpmuwe_cpmre.ma". include "basic_2/dynamic/cnv_cpes.ma". include "basic_2/dynamic/cnv_preserve_cpes.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpes.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpes.ma index 57b9fc3df..55ce4a700 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpes.ma @@ -12,10 +12,10 @@ (* *) (**************************************************************************) -include "basic_2/rt_computation/cpme_aaa.ma". -include "basic_2/rt_computation/cpre_cpre.ma". +include "basic_2/rt_computation/cpmre_aaa.ma". +include "basic_2/rt_computation/cprre_cprre.ma". include "basic_2/rt_equivalence/cpes.ma". -include "basic_2/dynamic/cnv_cpme.ma". +include "basic_2/dynamic/cnv_cpmre.ma". (* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) @@ -27,15 +27,15 @@ lemma cnv_cpes_dec (h) (a) (n1) (n2) (G) (L): #h #a #n1 #n2 #G #L #T1 #HT1 #T2 #HT2 elim (cnv_fwd_aaa … HT1) #A1 #HA1 elim (cnv_fwd_aaa … HT2) #A2 #HA2 -elim (cpme_total_aaa h n1 … HA1) -HA1 #U1 #HTU1 -elim (cpme_total_aaa h n2 … HA2) -HA2 #U2 #HTU2 +elim (cpmre_total_aaa h n1 … HA1) -HA1 #U1 #HTU1 +elim (cpmre_total_aaa h n2 … HA2) -HA2 #U2 #HTU2 elim (eq_term_dec U1 U2) [ #H destruct | #HnU12 ] [ cases HTU1 -HTU1 #HTU1 #_ cases HTU2 -HTU2 #HTU2 #_ /3 width=3 by cpms_div, or_introl/ | @or_intror * #T0 #HT10 #HT20 - lapply (cnv_cpme_cpms_conf … HT1 … HT10 … HTU1) -T1 #H1 - lapply (cnv_cpme_cpms_conf … HT2 … HT20 … HTU2) -T2 #H2 - /3 width=6 by cpre_mono/ + lapply (cnv_cpmre_cpms_conf … HT1 … HT10 … HTU1) -T1 #H1 + lapply (cnv_cpmre_cpms_conf … HT2 … HT20 … HTU2) -T2 #H2 + /3 width=6 by cprre_mono/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpme.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpme.ma deleted file mode 100644 index dcee3eb9f..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpme.ma +++ /dev/null @@ -1,39 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/notation/relations/predeval_6.ma". -include "basic_2/rt_transition/cnr.ma". -include "basic_2/rt_computation/cpms.ma". - -(* EVALUATION FOR T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ON TERMS *) - -(* Basic_2A1: uses: cpre *) -definition cpme (h) (n) (G) (L): relation2 term term ≝ - λT1,T2. ∧∧ ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T2⦄. - -interpretation "evaluation for t-bound context-sensitive parallel rt-transition (term)" - 'PRedEval h n G L T1 T2 = (cpme h n G L T1 T2). - -(* Basic properties *********************************************************) - -lemma cpme_intro (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T2⦄ → ⦃G,L⦄⊢T1➡*[h,n]𝐍⦃T2⦄. -/2 width=1 by conj/ qed. - -(* Basic forward lemmas *****************************************************) - -lemma cpme_fwd_cpms (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄⊢T1➡*[h,n]𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2. -#h #n #G #L #T1 #T2 * // -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpme_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpme_aaa.ma deleted file mode 100644 index 6d6182540..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpme_aaa.ma +++ /dev/null @@ -1,32 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/csx_aaa.ma". -include "basic_2/rt_computation/cpms_aaa.ma". -include "basic_2/rt_computation/cpre_csx.ma". -include "basic_2/rt_computation/cpre_cpms.ma". - -(* EVALUATION FOR T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ON TERMS *) - -(* Properties with atomic atomic arity assignment on terms ******************) - -lemma cpme_total_aaa (h) (n) (A) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ⁝ A → ∃T2. ⦃G,L⦄ ⊢ T1 ➡*[h,n] 𝐍⦃T2⦄. -#h #n #A #G #L #T1 #HT1 -elim (cpms_total_aaa h … n … HT1) #T0 #HT10 -elim (cpre_total_csx h G L T0) -[ #T2 /3 width=4 by cpms_cpre_trans, ex_intro/ -| /4 width=4 by cpms_fwd_cpxs, aaa_csx, csx_cpxs_trans/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma new file mode 100644 index 000000000..112f0aa34 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma @@ -0,0 +1,39 @@ +(**************************************************************************) +(* ___ *) +(* ||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/notation/relations/predeval_6.ma". +include "basic_2/rt_transition/cnr.ma". +include "basic_2/rt_computation/cpms.ma". + +(* EVALUATION FOR T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ON TERMS *) + +(* Basic_2A1: uses: cprre *) +definition cpmre (h) (n) (G) (L): relation2 term term ≝ + λT1,T2. ∧∧ ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T2⦄. + +interpretation "evaluation for t-bound context-sensitive parallel rt-transition (term)" + 'PRedEval h n G L T1 T2 = (cpmre h n G L T1 T2). + +(* Basic properties *********************************************************) + +lemma cpmre_intro (h) (n) (G) (L): + ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T2⦄ → ⦃G,L⦄⊢T1➡*[h,n]𝐍⦃T2⦄. +/2 width=1 by conj/ qed. + +(* Basic forward lemmas *****************************************************) + +lemma cpmre_fwd_cpms (h) (n) (G) (L): + ∀T1,T2. ⦃G,L⦄⊢T1➡*[h,n]𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2. +#h #n #G #L #T1 #T2 * // +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma new file mode 100644 index 000000000..840985f84 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma @@ -0,0 +1,32 @@ +(**************************************************************************) +(* ___ *) +(* ||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/csx_aaa.ma". +include "basic_2/rt_computation/cpms_aaa.ma". +include "basic_2/rt_computation/cprre_csx.ma". +include "basic_2/rt_computation/cprre_cpms.ma". + +(* EVALUATION FOR T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ON TERMS *) + +(* Properties with atomic atomic arity assignment on terms ******************) + +lemma cpmre_total_aaa (h) (n) (A) (G) (L): + ∀T1. ⦃G,L⦄ ⊢ T1 ⁝ A → ∃T2. ⦃G,L⦄ ⊢ T1 ➡*[h,n] 𝐍⦃T2⦄. +#h #n #A #G #L #T1 #HT1 +elim (cpms_total_aaa h … n … HT1) #T0 #HT10 +elim (cprre_total_csx h G L T0) +[ #T2 /3 width=4 by cpms_cprre_trans, ex_intro/ +| /4 width=4 by cpms_fwd_cpxs, aaa_csx, csx_cpxs_trans/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma index 5a0471b2a..a71f3de70 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma @@ -20,10 +20,10 @@ include "basic_2/rt_computation/cpms_fpbs.ma". (* Forward lemmas with proper parallel rst-computation for closures *********) -lemma cpms_tdneq_fwd_fpbg (h) (n): +lemma cpms_tneqx_fwd_fpbg (h) (n): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → (T1 ≛ T2 → ⊥) → ⦃G,L,T1⦄ >[h] ⦃G,L,T2⦄. -/3 width=2 by cpms_fwd_cpxs, cpxs_tdneq_fpbg/ qed-. +/3 width=2 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-. lemma fpbg_cpms_trans (h) (n): ∀G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T⦄ → @@ -40,9 +40,9 @@ lemma fqup_cpms_fwd_fpbg (h): ∀n,T2. ⦃G2,L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. /3 width=5 by cpms_fwd_fpbs, fqup_fpbg, fpbg_fpbs_trans/ qed-. -lemma cpm_tdneq_cpm_cpms_tdeq_sym_fwd_fpbg (h) (G) (L) (T1): +lemma cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg (h) (G) (L) (T1): ∀n1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → ∀n2,T2. ⦃G,L⦄⊢ T ➡*[n2,h] T2 → T1 ≛ T2 → ⦃G,L,T1⦄ >[h] ⦃G,L,T1⦄. #h #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12 -/4 width=7 by cpms_fwd_fpbs, cpm_fpb, fpbs_tdeq_trans, tdeq_sym, ex2_3_intro/ +/4 width=7 by cpms_fwd_fpbs, cpm_fpb, fpbs_teqx_trans, teqx_sym, ex2_3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_rdeq.ma deleted file mode 100644 index f6c8198ac..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_rdeq.ma +++ /dev/null @@ -1,30 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/cpxs_rdeq.ma". -include "basic_2/rt_computation/cpms_cpxs.ma". - -(* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) - -(* Properties with sort-irrelevant equivalence for local environments *******) - -lemma cpms_rdeq_conf_sn (h) (n) (G) (L1) (L2): - ∀T1,T2. ⦃G,L1⦄ ⊢ T1 ➡*[n,h] T2 → - L1 ≛[T1] L2 → L1 ≛[T2] L2. -/3 width=5 by cpms_fwd_cpxs, cpxs_rdeq_conf_sn/ qed-. - -lemma cpms_rdeq_conf_dx (h) (n) (G) (L1) (L2): - ∀T1,T2. ⦃G,L2⦄ ⊢ T1 ➡*[n,h] T2 → - L1 ≛[T1] L2 → L1 ≛[T2] L2. -/3 width=5 by cpms_fwd_cpxs, cpxs_rdeq_conf_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma new file mode 100644 index 000000000..cda3b2b8e --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma @@ -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/cpxs_reqx.ma". +include "basic_2/rt_computation/cpms_cpxs.ma". + +(* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) + +(* Properties with sort-irrelevant equivalence for local environments *******) + +lemma cpms_reqx_conf_sn (h) (n) (G) (L1) (L2): + ∀T1,T2. ⦃G,L1⦄ ⊢ T1 ➡*[n,h] T2 → + L1 ≛[T1] L2 → L1 ≛[T2] L2. +/3 width=5 by cpms_fwd_cpxs, cpxs_reqx_conf_sn/ qed-. + +lemma cpms_reqx_conf_dx (h) (n) (G) (L1) (L2): + ∀T1,T2. ⦃G,L2⦄ ⊢ T1 ➡*[n,h] T2 → + L1 ≛[T1] L2 → L1 ≛[T2] L2. +/3 width=5 by cpms_fwd_cpxs, cpxs_reqx_conf_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma index 1939101a3..37015eb4f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/syntax/tweq_tdeq.ma". +include "static_2/syntax/tweq_teqx.ma". include "basic_2/rt_computation/csx_cpxs.ma". include "basic_2/rt_computation/cpms_cpxs.ma". include "basic_2/rt_computation/cnuw_cnuw.ma". @@ -31,7 +31,7 @@ elim (cnuw_dec_ex h G L T1) | * #n1 #T0 #HT10 #HnT10 elim (IHT1 … T0) -IHT1 [ #T2 #n2 * #HT02 #HT2 /4 width=5 by cpms_trans, cpmuwe_intro, ex1_2_intro/ - | /3 width=1 by tdeq_tweq/ + | /3 width=1 by teqx_tweq/ | /2 width=2 by cpms_fwd_cpxs/ ] ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre.ma deleted file mode 100644 index 605915021..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre.ma +++ /dev/null @@ -1,22 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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/notation/relations/predeval_5.ma". -include "basic_2/rt_computation/cpme.ma". -include "basic_2/rt_computation/cprs.ma". - -(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS ***********) - -interpretation "evaluation for context-sensitive parallel r-transition (term)" - 'PRedEval h G L T1 T2 = (cpme h O G L T1 T2). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_cpms.ma deleted file mode 100644 index 2dd997c45..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_cpms.ma +++ /dev/null @@ -1,27 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_cpms.ma". -include "basic_2/rt_computation/cpre.ma". - -(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS **********) - -(* Properties with t-bound rt-computarion on terms **************************) - -lemma cpms_cpre_trans (h) (n) (G) (L): - ∀T1,T0. ⦃G,L⦄ ⊢T1 ➡*[n,h] T0 → - ∀T2. ⦃G,L⦄ ⊢ T0 ➡*[h] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[h,n] 𝐍⦃T2⦄. -#h #n #G #L #T1 #T0 #HT10 #T2 * #HT02 #HT2 -/3 width=3 by cpms_cprs_trans, cpme_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_cpre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_cpre.ma deleted file mode 100644 index a855b327f..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_cpre.ma +++ /dev/null @@ -1,40 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_cnr.ma". -include "basic_2/rt_computation/cprs_cprs.ma". -include "basic_2/rt_computation/cpre.ma". - -(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS *********) - -(* Properties with context-sensitive parallel r-computation for terms ******) - -lemma cpre_cprs_conf (h) (G) (L) (T): - ∀T1. ⦃G,L⦄ ⊢ T ➡*[h] T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[h] 𝐍⦃T2⦄. -#h #G #L #T0 #T1 #HT01 #T2 * #HT02 #HT2 -elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20 -lapply (cprs_inv_cnr_sn … HT20 HT2) -HT20 #H destruct -/2 width=1 by cpme_intro/ -qed-. - -(* Main properties *********************************************************) - -(* Basic_1: was: nf2_pr3_confluence *) -theorem cpre_mono (h) (G) (L) (T): - ∀T1. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T1⦄ → ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T2⦄ → T1 = T2. -#h #G #L #T0 #T1 * #HT01 #HT1 #T2 * #HT02 #HT2 -elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20 ->(cprs_inv_cnr_sn … HT10 HT1) -T1 ->(cprs_inv_cnr_sn … HT20 HT2) -T2 // -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_csx.ma deleted file mode 100644 index 555ff0cb7..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpre_csx.ma +++ /dev/null @@ -1,33 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_transition/cpm_cpx.ma". -include "basic_2/rt_transition/cnr_tdeq.ma". -include "basic_2/rt_computation/csx.ma". -include "basic_2/rt_computation/cpre.ma". - -(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS **********) - -(* Properties with strong normalization for unbound rt-transition for terms *) - -(* Basic_1: was just: nf2_sn3 *) -lemma cpre_total_csx (h) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∃T2. ⦃G,L⦄ ⊢ T1 ➡*[h] 𝐍⦃T2⦄. -#h #G #L #T1 #H -@(csx_ind … H) -T1 #T1 #_ #IHT1 -elim (cnr_dec_tdeq h G L T1) [ /3 width=3 by ex_intro, cpme_intro/ ] * -#T0 #HT10 #HnT10 -elim (IHT1 … HnT10) -IHT1 -HnT10 [| /2 width=2 by cpm_fwd_cpx/ ] -#T2 * /4 width=3 by cprs_step_sn, ex_intro, cpme_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre.ma new file mode 100644 index 000000000..bd1a28398 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre.ma @@ -0,0 +1,23 @@ +(**************************************************************************) +(* ___ *) +(* ||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/notation/relations/predeval_5.ma". +include "basic_2/rt_computation/cpmre.ma". +include "basic_2/rt_computation/cprs.ma". + +(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS ***********) + +(* Basic_2A1: was: cpre *) +interpretation "evaluation for context-sensitive parallel r-transition (term)" + 'PRedEval h G L T1 T2 = (cpmre h O G L T1 T2). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma new file mode 100644 index 000000000..02474ff5f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma @@ -0,0 +1,27 @@ +(**************************************************************************) +(* ___ *) +(* ||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_cpms.ma". +include "basic_2/rt_computation/cprre.ma". + +(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS **********) + +(* Properties with t-bound rt-computarion on terms **************************) + +lemma cpms_cprre_trans (h) (n) (G) (L): + ∀T1,T0. ⦃G,L⦄ ⊢T1 ➡*[n,h] T0 → + ∀T2. ⦃G,L⦄ ⊢ T0 ➡*[h] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[h,n] 𝐍⦃T2⦄. +#h #n #G #L #T1 #T0 #HT10 #T2 * #HT02 #HT2 +/3 width=3 by cpms_cprs_trans, cpmre_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma new file mode 100644 index 000000000..24d9483d1 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma @@ -0,0 +1,41 @@ +(**************************************************************************) +(* ___ *) +(* ||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_cnr.ma". +include "basic_2/rt_computation/cprs_cprs.ma". +include "basic_2/rt_computation/cprre.ma". + +(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS *********) + +(* Properties with context-sensitive parallel r-computation for terms ******) + +lemma cprre_cprs_conf (h) (G) (L) (T): + ∀T1. ⦃G,L⦄ ⊢ T ➡*[h] T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[h] 𝐍⦃T2⦄. +#h #G #L #T0 #T1 #HT01 #T2 * #HT02 #HT2 +elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20 +lapply (cprs_inv_cnr_sn … HT20 HT2) -HT20 #H destruct +/2 width=1 by cpmre_intro/ +qed-. + +(* Main properties *********************************************************) + +(* Basic_1: was: nf2_pr3_confluence *) +(* Basic_2A1: was: cpre_mono *) +theorem cprre_mono (h) (G) (L) (T): + ∀T1. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T1⦄ → ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T2⦄ → T1 = T2. +#h #G #L #T0 #T1 * #HT01 #HT1 #T2 * #HT02 #HT2 +elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20 +>(cprs_inv_cnr_sn … HT10 HT1) -T1 +>(cprs_inv_cnr_sn … HT20 HT2) -T2 // +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma new file mode 100644 index 000000000..fac487cab --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma @@ -0,0 +1,34 @@ +(**************************************************************************) +(* ___ *) +(* ||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_transition/cpm_cpx.ma". +include "basic_2/rt_transition/cnr_teqx.ma". +include "basic_2/rt_computation/csx.ma". +include "basic_2/rt_computation/cprre.ma". + +(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS **********) + +(* Properties with strong normalization for unbound rt-transition for terms *) + +(* Basic_1: was just: nf2_sn3 *) +(* Basic_2A1: was: csx_cpre *) +lemma cprre_total_csx (h) (G) (L): + ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∃T2. ⦃G,L⦄ ⊢ T1 ➡*[h] 𝐍⦃T2⦄. +#h #G #L #T1 #H +@(csx_ind … H) -T1 #T1 #_ #IHT1 +elim (cnr_dec_teqx h G L T1) [ /3 width=3 by ex_intro, cpmre_intro/ ] * +#T0 #HT10 #HnT10 +elim (IHT1 … HnT10) -IHT1 -HnT10 [| /2 width=2 by cpm_fwd_cpx/ ] +#T2 * /4 width=3 by cprs_step_sn, ex_intro, cpmre_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma index 453c91e45..d10463afe 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma @@ -28,5 +28,5 @@ lemma cpxs_cnx (h) (G) (L) (T1): lemma cpxs_inv_cnx1 (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → T1 ≛ T2. #h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 -/5 width=9 by cnx_tdeq_trans, tdeq_trans/ +/5 width=9 by cnx_teqx_trans, teqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fdeq.ma deleted file mode 100644 index 1b12ae605..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fdeq.ma +++ /dev/null @@ -1,31 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/fdeq.ma". -include "basic_2/rt_computation/cpxs_rdeq.ma". - -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) - -(* Properties with sort-irrelevant equivalence for closures *****************) - -lemma fdeq_cpxs_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T⦄ → - ∀T2. ⦃G2,L2⦄ ⊢ T ⬈*[h] T2 → - ∃∃T0. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T0 & ⦃G1,L1,T0⦄ ≛ ⦃G2,L2,T2⦄. -#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 -elim (fdeq_inv_gen_dx … H) -H #H #HL12 #HT1 destruct -elim (rdeq_cpxs_trans … HT2 … HL12) #T0 #HT0 #HT02 -lapply (cpxs_rdeq_conf_dx … HT2 … HL12) -HL12 #HL12 -elim (tdeq_cpxs_trans … HT1 … HT0) -T #T #HT1 #HT0 -/4 width=5 by fdeq_intro_dx, tdeq_trans, ex2_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma new file mode 100644 index 000000000..23709c963 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma @@ -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 "static_2/static/feqx.ma". +include "basic_2/rt_computation/cpxs_reqx.ma". + +(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) + +(* Properties with sort-irrelevant equivalence for closures *****************) + +lemma feqx_cpxs_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T⦄ → + ∀T2. ⦃G2,L2⦄ ⊢ T ⬈*[h] T2 → + ∃∃T0. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T0 & ⦃G1,L1,T0⦄ ≛ ⦃G2,L2,T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 +elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct +elim (reqx_cpxs_trans … HT2 … HL12) #T0 #HT0 #HT02 +lapply (cpxs_reqx_conf_dx … HT2 … HL12) -HL12 #HL12 +elim (teqx_cpxs_trans … HT1 … HT0) -T #T #HT1 #HT0 +/4 width=5 by feqx_intro_dx, teqx_trans, ex2_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma index eb8e6748a..eb71bafca 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma @@ -53,70 +53,70 @@ lemma fqus_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 #U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. -(* Note: a proof based on fqu_cpx_trans_tdneq might exist *) +(* Note: a proof based on fqu_cpx_trans_tneqx might exist *) (* Basic_2A1: uses: fqu_cpxs_trans_neq *) -lemma fqu_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❴1❵) #U2 #HVU2 @(ex3_intro … U2) [1,3: /3 width=7 by cpxs_delta, fqu_drop/ - | #H lapply (tdeq_inv_lref1 … H) -H + | #H lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ ] | #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②{I}V2.T)) [1,3: /2 width=4 by fqu_pair_sn, cpxs_pair_sn/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) [1,3: /2 width=4 by fqu_bind_dx, cpxs_bind/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) [1,3: /4 width=4 by lsubr_cpxs_trans, cpxs_bind, lsubr_unit, fqu_clear/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ{I}V.T2)) [1,3: /2 width=4 by fqu_flat_dx, cpxs_flat/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #I #G #L #T1 #U1 #HTU1 #T2 #HT12 #H0 elim (cpxs_lifts_sn … HT12 (Ⓣ) … (L.ⓘ{I}) … HTU1) -HT12 - /4 width=6 by fqu_drop, drops_refl, drops_drop, tdeq_inv_lifts_bi, ex3_intro/ + /4 width=6 by fqu_drop, drops_refl, drops_drop, teqx_inv_lifts_bi, ex3_intro/ ] qed-. (* Basic_2A1: uses: fquq_cpxs_trans_neq *) -lemma fquq_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → +lemma fquq_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 -[ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tdneq … H12 … HTU2 H) -T2 +[ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ ] qed-. (* Basic_2A1: uses: fqup_cpxs_trans_neq *) -lemma fqup_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → +lemma fqup_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 -[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tdneq … H12 … HTU2 H) -T2 +[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ | #G #G1 #L #L1 #T #T1 #H1 #_ #IH12 #U2 #HTU2 #H elim (IH12 … HTU2 H) -T2 - #U1 #HTU1 #H #H12 elim (fqu_cpxs_trans_tdneq … H1 … HTU1 H) -T1 + #U1 #HTU1 #H #H12 elim (fqu_cpxs_trans_tneqx … H1 … HTU1 H) -T1 /3 width=8 by fqup_strap2, ex3_intro/ ] qed-. (* Basic_2A1: uses: fqus_cpxs_trans_neq *) -lemma fqus_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → +lemma fqus_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 -[ #H12 elim (fqup_cpxs_trans_tdneq … H12 … HTU2 H) -T2 +[ #H12 elim (fqup_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_rdeq.ma deleted file mode 100644 index 1d3dfa50d..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_rdeq.ma +++ /dev/null @@ -1,49 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_transition/cpx_rdeq.ma". -include "basic_2/rt_computation/cpxs_tdeq.ma". - -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) - -(* Properties with sort-irrelevant equivalence for local environments *******) - -(* Basic_2A1: was just: lleq_cpxs_trans *) -lemma rdeq_cpxs_trans: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈*[h] T1 → - ∀L2. L2 ≛[T0] L0 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. -#h #G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/ -#T0 #T #HT0 #_ #IH #L2 #HL2 -elim (rdeq_cpx_trans … HL2 … HT0) #U1 #H1 #H2 -elim (IH L2) -IH /2 width=5 by cpx_rdeq_conf_dx/ -L0 #U2 #H3 #H4 -elim (tdeq_cpxs_trans … H2 … H3) -T #U0 #H2 #H3 -/3 width=5 by cpxs_strap2, tdeq_trans, ex2_intro/ -qed-. - -(* Basic_2A1: was just: cpxs_lleq_conf *) -lemma cpxs_rdeq_conf: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈*[h] T1 → - ∀L2. L0 ≛[T0] L2 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. -/3 width=3 by rdeq_cpxs_trans, rdeq_sym/ qed-. - -(* Basic_2A1: was just: cpxs_lleq_conf_dx *) -lemma cpxs_rdeq_conf_dx: ∀h,G,L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ⬈*[h] T2 → - ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. -#h #G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_rdeq_conf_dx/ -qed-. - -(* Basic_2A1: was just: lleq_conf_sn *) -lemma cpxs_rdeq_conf_sn: ∀h,G,L1,T1,T2. ⦃G,L1⦄ ⊢ T1 ⬈*[h] T2 → - ∀L2. L1 ≛[T1] L2 → L1 ≛[T2] L2. -/4 width=6 by cpxs_rdeq_conf_dx, rdeq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma new file mode 100644 index 000000000..eb1444b26 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma @@ -0,0 +1,49 @@ +(**************************************************************************) +(* ___ *) +(* ||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_transition/cpx_reqx.ma". +include "basic_2/rt_computation/cpxs_teqx.ma". + +(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) + +(* Properties with sort-irrelevant equivalence for local environments *******) + +(* Basic_2A1: was just: lleq_cpxs_trans *) +lemma reqx_cpxs_trans: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈*[h] T1 → + ∀L2. L2 ≛[T0] L0 → + ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. +#h #G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/ +#T0 #T #HT0 #_ #IH #L2 #HL2 +elim (reqx_cpx_trans … HL2 … HT0) #U1 #H1 #H2 +elim (IH L2) -IH /2 width=5 by cpx_reqx_conf_dx/ -L0 #U2 #H3 #H4 +elim (teqx_cpxs_trans … H2 … H3) -T #U0 #H2 #H3 +/3 width=5 by cpxs_strap2, teqx_trans, ex2_intro/ +qed-. + +(* Basic_2A1: was just: cpxs_lleq_conf *) +lemma cpxs_reqx_conf: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈*[h] T1 → + ∀L2. L0 ≛[T0] L2 → + ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. +/3 width=3 by reqx_cpxs_trans, reqx_sym/ qed-. + +(* Basic_2A1: was just: cpxs_lleq_conf_dx *) +lemma cpxs_reqx_conf_dx: ∀h,G,L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ⬈*[h] T2 → + ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. +#h #G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_reqx_conf_dx/ +qed-. + +(* Basic_2A1: was just: lleq_conf_sn *) +lemma cpxs_reqx_conf_sn: ∀h,G,L1,T1,T2. ⦃G,L1⦄ ⊢ T1 ⬈*[h] T2 → + ∀L2. L1 ≛[T1] L2 → L1 ≛[T2] L2. +/4 width=6 by cpxs_reqx_conf_dx, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_tdeq.ma deleted file mode 100644 index b1d2c9464..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_tdeq.ma +++ /dev/null @@ -1,45 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_transition/rpx_rdeq.ma". -include "basic_2/rt_computation/cpxs.ma". - -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) - -(* Properties with sort-irrelevant equivalence for terms ********************) - -lemma tdeq_cpxs_trans: ∀h,U1,T1. U1 ≛ T1 → ∀G,L,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → - ∃∃U2. ⦃G,L⦄ ⊢ U1 ⬈*[h] U2 & U2 ≛ T2. -#h #U1 #T1 #HUT1 #G #L #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/ -#T #T2 #_ #HT2 * #U #HU1 #HUT elim (tdeq_cpx_trans … HUT … HT2) -T -T1 -/3 width=3 by ex2_intro, cpxs_strap1/ -qed-. - -(* Note: this requires tdeq to be symmetric *) -(* Nasic_2A1: uses: cpxs_neq_inv_step_sn *) -lemma cpxs_tdneq_fwd_step_sn: ∀h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → - ∃∃T,T0. ⦃G,L⦄ ⊢ T1 ⬈[h] T & T1 ≛ T → ⊥ & ⦃G,L⦄ ⊢ T ⬈*[h] T0 & T0 ≛ T2. -#h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 -[ #H elim H -H // -| #T1 #T0 #HT10 #HT02 #IH #Hn12 - elim (tdeq_dec T1 T0) [ -HT10 -HT02 #H10 | -IH #Hn10 ] - [ elim IH -IH /3 width=3 by tdeq_trans/ -Hn12 - #T3 #T4 #HT03 #Hn03 #HT34 #H42 - elim (tdeq_cpx_trans … H10 … HT03) -HT03 #T5 #HT15 #H53 - elim (tdeq_cpxs_trans … H53 … HT34) -HT34 #T6 #HT56 #H64 - /5 width=8 by tdeq_canc_sn, (* 2x *) tdeq_trans, ex4_2_intro/ - | /3 width=6 by ex4_2_intro/ - ] -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma index 1de400dad..571a46efe 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/syntax/teqo_tdeq.ma". +include "static_2/syntax/teqo_teqx.ma". include "basic_2/rt_computation/cpxs_lsubr.ma". include "basic_2/rt_computation/cpxs_cnx.ma". include "basic_2/rt_computation/lpxs_cpxs.ma". @@ -99,4 +99,4 @@ qed-. lemma cpxs_fwd_cnx (h) (G) (L): ∀T1. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → ∀X2. ⦃G,L⦄ ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2. -/3 width=5 by cpxs_inv_cnx1, tdeq_teqo/ qed-. +/3 width=5 by cpxs_inv_cnx1, teqx_teqo/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma new file mode 100644 index 000000000..7af7b41b8 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma @@ -0,0 +1,45 @@ +(**************************************************************************) +(* ___ *) +(* ||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_transition/rpx_reqx.ma". +include "basic_2/rt_computation/cpxs.ma". + +(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) + +(* Properties with sort-irrelevant equivalence for terms ********************) + +lemma teqx_cpxs_trans: ∀h,U1,T1. U1 ≛ T1 → ∀G,L,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → + ∃∃U2. ⦃G,L⦄ ⊢ U1 ⬈*[h] U2 & U2 ≛ T2. +#h #U1 #T1 #HUT1 #G #L #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/ +#T #T2 #_ #HT2 * #U #HU1 #HUT elim (teqx_cpx_trans … HUT … HT2) -T -T1 +/3 width=3 by ex2_intro, cpxs_strap1/ +qed-. + +(* Note: this requires teqx to be symmetric *) +(* Nasic_2A1: uses: cpxs_neq_inv_step_sn *) +lemma cpxs_tneqx_fwd_step_sn: ∀h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → + ∃∃T,T0. ⦃G,L⦄ ⊢ T1 ⬈[h] T & T1 ≛ T → ⊥ & ⦃G,L⦄ ⊢ T ⬈*[h] T0 & T0 ≛ T2. +#h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 +[ #H elim H -H // +| #T1 #T0 #HT10 #HT02 #IH #Hn12 + elim (teqx_dec T1 T0) [ -HT10 -HT02 #H10 | -IH #Hn10 ] + [ elim IH -IH /3 width=3 by teqx_trans/ -Hn12 + #T3 #T4 #HT03 #Hn03 #HT34 #H42 + elim (teqx_cpx_trans … H10 … HT03) -HT03 #T5 #HT15 #H53 + elim (teqx_cpxs_trans … H53 … HT34) -HT34 #T6 #HT56 #H64 + /5 width=8 by teqx_canc_sn, (* 2x *) teqx_trans, ex4_2_intro/ + | /3 width=6 by ex4_2_intro/ + ] +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma index 7fe343b8a..31ebb2c77 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma @@ -13,13 +13,13 @@ (**************************************************************************) include "basic_2/notation/relations/predtystrong_4.ma". -include "static_2/syntax/tdeq.ma". +include "static_2/syntax/teqx.ma". include "basic_2/rt_transition/cpx.ma". (* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) definition csx: ∀h. relation3 genv lenv term ≝ - λh,G,L. SN … (cpx h G L) tdeq. + λh,G,L. SN … (cpx h G L) teqx. interpretation "strong normalization for unbound context-sensitive parallel rt-transition (term)" @@ -52,7 +52,7 @@ fact csx_fwd_pair_sn_aux: ∀h,G,L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → #h #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct @csx_intro #V2 #HLV2 #HV2 @(IH (②{I}V2.T)) -IH /2 width=3 by cpx_pair_sn/ -HLV2 -#H elim (tdeq_inv_pair … H) -H /2 width=1 by/ +#H elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_head *) @@ -64,7 +64,7 @@ fact csx_fwd_bind_dx_aux: ∀h,G,L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → #h #G #L #U #H elim H -H #U0 #_ #IH #p #I #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 @(IH (ⓑ{p, I}V.T2)) -IH /2 width=3 by cpx_bind/ -HLT2 -#H elim (tdeq_inv_pair … H) -H /2 width=1 by/ +#H elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_bind *) @@ -76,7 +76,7 @@ fact csx_fwd_flat_dx_aux: ∀h,G,L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → #h #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 @(IH (ⓕ{I}V.T2)) -IH /2 width=3 by cpx_flat/ -HLT2 -#H elim (tdeq_inv_pair … H) -H /2 width=1 by/ +#H elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_flat *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma index aa206225c..33262e95a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/rt_computation/cpxs_tdeq.ma". +include "basic_2/rt_computation/cpxs_teqx.ma". include "basic_2/rt_computation/cpxs_cpxs.ma". include "basic_2/rt_computation/csx_csx.ma". @@ -35,7 +35,7 @@ qed-. (* Eliminators with unbound context-sensitive rt-computation for terms ******) -lemma csx_ind_cpxs_tdeq: ∀h,G,L. ∀Q:predicate term. +lemma csx_ind_cpxs_teqx: ∀h,G,L. ∀Q:predicate term. (∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → @@ -43,18 +43,18 @@ lemma csx_ind_cpxs_tdeq: ∀h,G,L. ∀Q:predicate term. ∀T0. ⦃G,L⦄ ⊢ T1 ⬈*[h] T0 → ∀T2. T0 ≛ T2 → Q T2. #h #G #L #Q #IH #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IH1 #T0 #HT10 #T2 #HT02 -@IH -IH /3 width=3 by csx_cpxs_trans, csx_tdeq_trans/ -HT1 #V2 #HTV2 #HnTV2 -lapply (tdeq_tdneq_trans … HT02 … HnTV2) -HnTV2 #H -elim (tdeq_cpxs_trans … HT02 … HTV2) -T2 #V0 #HTV0 #HV02 -lapply (tdneq_tdeq_canc_dx … H … HV02) -H #HnTV0 -elim (tdeq_dec T1 T0) #H -[ lapply (tdeq_tdneq_trans … H … HnTV0) -H -HnTV0 #Hn10 +@IH -IH /3 width=3 by csx_cpxs_trans, csx_teqx_trans/ -HT1 #V2 #HTV2 #HnTV2 +lapply (teqx_tneqx_trans … HT02 … HnTV2) -HnTV2 #H +elim (teqx_cpxs_trans … HT02 … HTV2) -T2 #V0 #HTV0 #HV02 +lapply (tneqx_teqx_canc_dx … H … HV02) -H #HnTV0 +elim (teqx_dec T1 T0) #H +[ lapply (teqx_tneqx_trans … H … HnTV0) -H -HnTV0 #Hn10 lapply (cpxs_trans … HT10 … HTV0) -T0 #H10 - elim (cpxs_tdneq_fwd_step_sn … H10 … Hn10) -H10 -Hn10 - /3 width=8 by tdeq_trans/ -| elim (cpxs_tdneq_fwd_step_sn … HT10 … H) -HT10 -H #T #V #HT1 #HnT1 #HTV #HVT0 - elim (tdeq_cpxs_trans … HVT0 … HTV0) -T0 - /3 width=8 by cpxs_trans, tdeq_trans/ + elim (cpxs_tneqx_fwd_step_sn … H10 … Hn10) -H10 -Hn10 + /3 width=8 by teqx_trans/ +| elim (cpxs_tneqx_fwd_step_sn … HT10 … H) -HT10 -H #T #V #HT1 #HnT1 #HTV #HVT0 + elim (teqx_cpxs_trans … HVT0 … HTV0) -T0 + /3 width=8 by cpxs_trans, teqx_trans/ ] qed-. @@ -65,5 +65,5 @@ lemma csx_ind_cpxs: ∀h,G,L. ∀Q:predicate term. ) → ∀T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q T. #h #G #L #Q #IH #T #HT -@(csx_ind_cpxs_tdeq … IH … HT) -IH -HT // (**) (* full auto fails *) +@(csx_ind_cpxs_teqx … IH … HT) -IH -HT // (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma index 07cace3d3..915866a22 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma @@ -12,26 +12,26 @@ (* *) (**************************************************************************) -include "basic_2/rt_transition/lpx_rdeq.ma". +include "basic_2/rt_transition/lpx_reqx.ma". include "basic_2/rt_computation/csx_drops.ma". (* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) (* Advanced properties ******************************************************) -lemma csx_tdeq_trans (h) (G): +lemma csx_teqx_trans (h) (G): ∀L,T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∀T2. T1 ≛ T2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. #h #G #L #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2 -@csx_intro #T1 #HT21 #HnT21 elim (tdeq_cpx_trans … HT2 … HT21) -HT21 -/4 width=5 by tdeq_repl/ +@csx_intro #T1 #HT21 #HnT21 elim (teqx_cpx_trans … HT2 … HT21) -HT21 +/4 width=5 by teqx_repl/ qed-. lemma csx_cpx_trans (h) (G): ∀L,T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∀T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. #h #G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12 -elim (tdeq_dec T1 T2) /3 width=4 by csx_tdeq_trans/ +elim (teqx_dec T1 T2) /3 width=4 by csx_teqx_trans/ qed-. (* Basic_1: was just: sn3_cast *) @@ -43,7 +43,7 @@ lemma csx_cast (h) (G): #T #HT #IHT @csx_intro #X #H1 #H2 elim (cpx_inv_cast1 … H1) -H1 [ * #W0 #T0 #HLW0 #HLT0 #H destruct - elim (tdneq_inv_pair … H2) -H2 + elim (tneqx_inv_pair … H2) -H2 [ -W -T #H elim H -H // | -HW -IHT /3 width=3 by csx_cpx_trans/ | -HW -HT -IHW /4 width=3 by csx_cpx_trans, cpx_pair_sn/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma index ad0c072fb..c8b10e80c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/relocation/lifts_tdeq.ma". +include "static_2/relocation/lifts_teqx.ma". include "basic_2/rt_transition/cpx_drops.ma". include "basic_2/rt_computation/csx.ma". @@ -27,7 +27,7 @@ lemma csx_lifts: ∀h,G. d_liftable1 … (csx h G). #T1 #_ #IH #b #f #L #HLK #U1 #HTU1 @csx_intro #U2 #HU12 #HnU12 elim (cpx_inv_lifts_sn … HU12 … HLK … HTU1) -HU12 -/4 width=7 by tdeq_lifts_bi/ +/4 width=7 by teqx_lifts_bi/ qed-. (* Inversion lemmas with generic slicing ************************************) @@ -39,5 +39,5 @@ lemma csx_inv_lifts: ∀h,G. d_deliftable1 … (csx h G). #U1 #_ #IH #b #f #K #HLK #T1 #HTU1 @csx_intro #T2 #HT12 #HnT12 elim (cpx_lifts_sn … HT12 … HLK … HTU1) -HT12 -/4 width=7 by tdeq_inv_lifts_bi/ +/4 width=7 by teqx_inv_lifts_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fdeq.ma deleted file mode 100644 index fcb2f9af8..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fdeq.ma +++ /dev/null @@ -1,26 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/fdeq.ma". -include "basic_2/rt_computation/csx_rdeq.ma". - -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) - -(* Properties with sort-irrelevant equivalence for closures *****************) - -lemma csx_fdeq_conf: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. -#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 -/3 width=3 by csx_rdeq_conf, csx_tdeq_trans/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma new file mode 100644 index 000000000..a3cf91954 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma @@ -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 *) +(* *) +(**************************************************************************) + +include "static_2/static/feqx.ma". +include "basic_2/rt_computation/csx_reqx.ma". + +(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) + +(* Properties with sort-irrelevant equivalence for closures *****************) + +lemma csx_feqx_conf: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 +/3 width=3 by csx_reqx_conf, csx_teqx_trans/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma index 6027a70f5..0329b7386 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma @@ -14,7 +14,7 @@ include "basic_2/rt_transition/fpbq.ma". include "basic_2/rt_computation/csx_fqus.ma". -include "basic_2/rt_computation/csx_fdeq.ma". +include "basic_2/rt_computation/csx_feqx.ma". include "basic_2/rt_computation/csx_lpx.ma". (* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) @@ -25,5 +25,5 @@ include "basic_2/rt_computation/csx_lpx.ma". lemma csx_fpbq_conf: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. #h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -/2 width=6 by csx_cpx_trans, csx_fquq_conf, csx_lpx_conf, csx_fdeq_conf/ +/2 width=6 by csx_cpx_trans, csx_fquq_conf, csx_lpx_conf, csx_feqx_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma index 716032c85..aff46798d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/csx_drops.ma". (* Main properties with generic computation properties **********************) -theorem csx_gcp: ∀h. gcp (cpx h) tdeq (csx h). +theorem csx_gcp: ∀h. gcp (cpx h) teqx (csx h). #h @mk_gcp [ normalize /3 width=13 by cnx_lifts/ | /2 width=4 by cnx_sort/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma index d0644bbf5..77a8bcabd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/csx_csx_vector.ma". (* Main properties with generic candidates of reducibility ******************) -theorem csx_gcr (h): gcr (cpx h) tdeq (csx h) (csx h). +theorem csx_gcr (h): gcr (cpx h) teqx (csx h) (csx h). #h @mk_gcr [ // | #G #L #Vs #Hvs #T #HT #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma index 92e42f1f9..79d69cf4c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma @@ -36,7 +36,7 @@ lemma csx_abst (h) (G): @(csx_ind … HT) -T #T #HT #IHT @csx_intro #X #H1 #H2 elim (cpx_inv_abst1 … H1) -H1 #W0 #T0 #HLW0 #HLT0 #H destruct -elim (tdneq_inv_pair … H2) -H2 +elim (tneqx_inv_pair … H2) -H2 [ #H elim H -H // | -IHT #H lapply (csx_cpx_trans … HLT0) // -HT #HT0 /4 width=5 by csx_lpx_conf, lpx_pair/ @@ -53,7 +53,7 @@ lemma csx_abbr (h) (G): @csx_intro #X #H1 #H2 elim (cpx_inv_abbr1 … H1) -H1 * [ #V1 #T1 #HLV1 #HLT1 #H destruct - elim (tdneq_inv_pair … H2) -H2 + elim (tneqx_inv_pair … H2) -H2 [ #H elim H -H // | /4 width=5 by csx_cpx_trans, csx_lpx_conf, lpx_pair/ | -IHV /4 width=3 by csx_cpx_trans, cpx_cpxs, cpx_pair_sn/ @@ -83,12 +83,12 @@ elim (cpx_inv_appl1 … HL) -HL * elim (cpx_inv_abbr1 … HL) -HL * [ #V3 #T3 #HV3 #HLT3 #H0 destruct elim (cpx_lifts_sn … HLV10 (Ⓣ) … (L.ⓓV) … HV12) -HLV10 /3 width=1 by drops_refl, drops_drop/ #V4 #HV04 #HV24 - elim (tdeq_dec (ⓓ{p}V.ⓐV2.T) (ⓓ{p}V3.ⓐV4.T3)) #H0 + elim (teqx_dec (ⓓ{p}V.ⓐV2.T) (ⓓ{p}V3.ⓐV4.T3)) #H0 [ -IHVT -HV3 -HV24 -HLT3 - elim (tdeq_inv_pair … H0) -H0 #_ #HV3 #H0 - elim (tdeq_inv_pair … H0) -H0 #_ #HV24 #HT3 - elim (tdneq_inv_pair … H) -H #H elim H -H -G -L - /3 width=6 by tdeq_inv_lifts_bi, tdeq_pair/ + elim (teqx_inv_pair … H0) -H0 #_ #HV3 #H0 + elim (teqx_inv_pair … H0) -H0 #_ #HV24 #HT3 + elim (tneqx_inv_pair … H) -H #H elim H -H -G -L + /3 width=6 by teqx_inv_lifts_bi, teqx_pair/ | -V1 @(IHVT … H0 … HV04) -V0 /4 width=1 by cpx_cpxs, cpx_flat, cpx_bind/ ] | #T0 #HT0 #HLT0 #H0 destruct -H -IHVT diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma index 5e32b0e6d..6d37e77be 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma @@ -31,9 +31,9 @@ elim (cpx_inv_appl1 … H1) -H1 * @IHT1 -IHT1 [4: // | skip ] [ lapply (lsubr_cpx_trans … HLT0 (L.ⓓⓝW.V) ?) -HLT0 -H2 /3 width=1 by cpx_bind, cpx_flat, lsubr_beta/ - | #H elim (tdeq_inv_pair … H) -H - #_ #H elim (tdeq_inv_pair … H) -H - #_ /4 width=1 by tdeq_pair/ + | #H elim (teqx_inv_pair … H) -H + #_ #H elim (teqx_inv_pair … H) -H + #_ /4 width=1 by teqx_pair/ ] | -IHT1 -H2 #q #V0 #W0 #W2 #T0 #T2 #HLV0 #HLW02 #HLT02 #H1 #H3 destruct lapply (lsubr_cpx_trans … HLT02 (L.ⓓⓝW0.V) ?) -HLT02 @@ -55,7 +55,7 @@ fact csx_fwd_bind_dx_unit_aux (h) (G): #h #G #L #U #H elim H -H #U0 #_ #IH #p #I #J #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 @(IH (ⓑ{p, I}V.T2)) -IH /2 width=4 by cpx_bind_unit/ -HLT2 -#H elim (tdeq_inv_pair … H) -H /2 width=1 by/ +#H elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. lemma csx_fwd_bind_dx_unit (h) (G): diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_rdeq.ma deleted file mode 100644 index dcd0462e1..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_rdeq.ma +++ /dev/null @@ -1,35 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_transition/cpx_rdeq.ma". -include "basic_2/rt_computation/csx_csx.ma". - -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) - -(* Properties with sort-irrelevant equivalence for local environments *******) - -(* Basic_2A1: uses: csx_lleq_conf *) -lemma csx_rdeq_conf: ∀h,G,L1,T. ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → - ∀L2. L1 ≛[T] L2 → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. -#h #G #L1 #T #H -@(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 -@csx_intro #T2 #HT12 #HnT12 -elim (rdeq_cpx_trans … HL12 … HT12) -HT12 -/5 width=5 by cpx_rdeq_conf_sn, csx_tdeq_trans, tdeq_trans/ -qed-. - -(* Basic_2A1: uses: csx_lleq_conf *) -lemma csx_rdeq_trans: ∀h,L1,L2,T. L1 ≛[T] L2 → - ∀G. ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. -/3 width=3 by csx_rdeq_conf, rdeq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma new file mode 100644 index 000000000..7b3cfdae3 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma @@ -0,0 +1,35 @@ +(**************************************************************************) +(* ___ *) +(* ||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_transition/cpx_reqx.ma". +include "basic_2/rt_computation/csx_csx.ma". + +(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) + +(* Properties with sort-irrelevant equivalence for local environments *******) + +(* Basic_2A1: uses: csx_lleq_conf *) +lemma csx_reqx_conf: ∀h,G,L1,T. ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → + ∀L2. L1 ≛[T] L2 → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L1 #T #H +@(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 +@csx_intro #T2 #HT12 #HnT12 +elim (reqx_cpx_trans … HL12 … HT12) -HT12 +/5 width=5 by cpx_reqx_conf_sn, csx_teqx_trans, teqx_trans/ +qed-. + +(* Basic_2A1: uses: csx_lleq_conf *) +lemma csx_reqx_trans: ∀h,L1,L2,T. L1 ≛[T] L2 → + ∀G. ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +/3 width=3 by csx_reqx_conf, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma index 50a460732..7253cdb50 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma @@ -27,7 +27,7 @@ lemma csx_appl_simple: ∀h,G,L,V. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ∀T1. @csx_intro #X #H1 #H2 elim (cpx_inv_appl1_simple … H1) // -H1 #V0 #T0 #HLV0 #HLT10 #H destruct -elim (tdneq_inv_pair … H2) -H2 +elim (tneqx_inv_pair … H2) -H2 [ #H elim H -H // | #HV0 @(csx_cpx_trans … (ⓐV0.T1)) /2 width=1 by cpx_flat/ -HLT10 @(IHV … HLV0 … HV0) -HV0 /4 width=5 by csx_cpx_trans, cpx_pair_sn/ (**) (* full auto too slow *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma index c56f1f718..70ee928ff 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma @@ -34,7 +34,7 @@ lemma csx_appl_simple_teqo (h) (G) (L): @csx_intro #X #HL #H elim (cpx_inv_appl1_simple … HL) -HL // #V0 #T0 #HLV0 #HLT10 #H0 destruct -elim (tdneq_inv_pair … H) -H +elim (tneqx_inv_pair … H) -H [ #H elim H -H // | -IHT1 #HV0 @(csx_cpx_trans … (ⓐV0.T1)) /2 width=1 by cpx_flat/ -HLT10 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma index b14847da0..258ba5107 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma @@ -52,13 +52,13 @@ lemma fpbg_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ qed-. (* Basic_2A1: uses: fpbg_fleq_trans *) -lemma fpbg_fdeq_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G,L,T⦄ → +lemma fpbg_feqx_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G,L,T⦄ → ∀G2,L2,T2. ⦃G,L,T⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. -/3 width=5 by fpbg_fpbq_trans, fpbq_fdeq/ qed-. +/3 width=5 by fpbg_fpbq_trans, fpbq_feqx/ qed-. (* Properties with t-bound rt-transition for terms **************************) -lemma cpm_tdneq_cpm_fpbg (h) (G) (L): +lemma cpm_tneqx_cpm_fpbg (h) (G) (L): ∀n1,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → ⦃G,L,T1⦄ >[h] ⦃G,L,T2⦄. /4 width=5 by fpbq_fpbs, cpm_fpbq, cpm_fpb, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma index 6fef34261..35828f20c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/rt_computation/cpxs_tdeq.ma". +include "basic_2/rt_computation/cpxs_teqx.ma". include "basic_2/rt_computation/fpbs_cpxs.ma". include "basic_2/rt_computation/fpbg_fpbs.ma". @@ -21,11 +21,11 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Properties with unbound context-sensitive parallel rt-computation ********) (* Basic_2A1: was: cpxs_fpbg *) -lemma cpxs_tdneq_fpbg (h): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → +lemma cpxs_tneqx_fpbg (h): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → ⦃G,L,T1⦄ >[h] ⦃G,L,T2⦄. #h #G #L #T1 #T2 #H #H0 -elim (cpxs_tdneq_fwd_step_sn … H … H0) -H -H0 -/4 width=5 by cpxs_tdeq_fpbs, fpb_cpx, ex2_3_intro/ +elim (cpxs_tneqx_fwd_step_sn … H … H0) -H -H0 +/4 width=5 by cpxs_teqx_fpbs, fpb_cpx, ex2_3_intro/ qed. lemma cpxs_fpbg_trans (h): ∀G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma index e80960d04..f7e3f5b23 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/static/fdeq_fdeq.ma". +include "static_2/static/feqx_feqx.ma". include "basic_2/rt_transition/fpbq_fpb.ma". include "basic_2/rt_computation/fpbs_fqup.ma". include "basic_2/rt_computation/fpbg.ma". @@ -30,11 +30,11 @@ qed-. (* Advanced properties with sort-irrelevant equivalence on closures *********) (* Basic_2A1: uses: fleq_fpbg_trans *) -lemma fdeq_fpbg_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → +lemma feqx_fpbg_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → ∀G1,L1,T1. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. #h #G #G2 #L #L2 #T #T2 * #G0 #L0 #T0 #H0 #H02 #G1 #L1 #T1 #H1 -elim (fdeq_fpb_trans … H1 … H0) -G -L -T -/4 width=9 by fpbs_strap2, fpbq_fdeq, ex2_3_intro/ +elim (feqx_fpb_trans … H1 … H0) -G -L -T +/4 width=9 by fpbs_strap2, fpbq_feqx, ex2_3_intro/ qed-. (* Properties with parallel proper rst-reduction on closures ****************) @@ -51,7 +51,7 @@ lemma fpbq_fpbg_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. #h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fpbq_inv_fpb … H1) -H1 -/2 width=5 by fdeq_fpbg_trans, fpb_fpbg_trans/ +/2 width=5 by feqx_fpbg_trans, fpb_fpbg_trans/ qed-. (* Properties with parallel rst-compuutation on closures ********************) @@ -78,10 +78,10 @@ lemma fpbs_inv_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2 [ /2 width=1 by or_introl/ | #G #G2 #L #L2 #T #T2 #_ #H2 * #H1 elim (fpbq_inv_fpb … H2) -H2 #H2 - [ /3 width=5 by fdeq_trans, or_introl/ - | elim (fdeq_fpb_trans … H1 … H2) -G -L -T - /4 width=5 by ex2_3_intro, or_intror, fdeq_fpbs/ - | /3 width=5 by fpbg_fdeq_trans, or_intror/ + [ /3 width=5 by feqx_trans, or_introl/ + | elim (feqx_fpb_trans … H1 … H2) -G -L -T + /4 width=5 by ex2_3_intro, or_intror, feqx_fpbs/ + | /3 width=5 by fpbg_feqx_trans, or_intror/ | /4 width=5 by fpbg_fpbq_trans, fpb_fpbq, or_intror/ ] ] @@ -93,8 +93,8 @@ lemma fpbs_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ⦃F1,K1,T1⦄ ≥[h] ⦃F2,K2,T2 ∀G2,L2,U2. ⦃F2,K2,T2⦄ ≻[h] ⦃G2,L2,U2⦄ → ∃∃G1,L1,U1. ⦃F1,K1,T1⦄ ≻[h] ⦃G1,L1,U1⦄ & ⦃G1,L1,U1⦄ ≥[h] ⦃G2,L2,U2⦄. #h #F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H -[ #H12 #G2 #L2 #U2 #H2 elim (fdeq_fpb_trans … H12 … H2) -F2 -K2 -T2 - /3 width=5 by fdeq_fpbs, ex2_3_intro/ +[ #H12 #G2 #L2 #U2 #H2 elim (feqx_fpb_trans … H12 … H2) -F2 -K2 -T2 + /3 width=5 by feqx_fpbs, ex2_3_intro/ | * #H1 #H2 #H3 #H4 #H5 #H6 #H7 #H8 #H9 @(ex2_3_intro … H4) -H4 /3 width=5 by fpbs_strap1, fpb_fpbq/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma index 746aa6953..c2fde98d7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced properties with sort-irrelevant equivalence for terms ***********) -lemma fpbg_tdeq_div: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T⦄ → +lemma fpbg_teqx_div: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T⦄ → ∀T2. T2 ≛ T → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. -/4 width=5 by fpbg_fdeq_trans, tdeq_fdeq, tdeq_sym/ qed-. +/4 width=5 by fpbg_feqx_trans, teqx_feqx, teqx_sym/ qed-. (* Properties with plus-iterated structural successor for closures **********) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma index 0921a5e12..654110c10 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma @@ -20,9 +20,9 @@ include "basic_2/rt_computation/fpbg.ma". (* Properties with unbound rt-computation on full local environments ********) (* Basic_2A1: uses: lpxs_fpbg *) -lemma lpxs_rdneq_fpbg: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → +lemma lpxs_rneqx_fpbg: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → ⦃G,L1,T⦄ >[h] ⦃G,L2,T⦄. #h #G #L1 #L2 #T #H #H0 -elim (lpxs_rdneq_inv_step_sn … H … H0) -H -H0 -/4 width=7 by fpb_lpx, lpxs_fdeq_fpbs, fdeq_intro_sn, ex2_3_intro/ +elim (lpxs_rneqx_inv_step_sn … H … H0) -H -H0 +/4 width=7 by fpb_lpx, lpxs_feqx_fpbs, feqx_intro_sn, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma index 9d6f5c280..19584074f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma @@ -54,22 +54,22 @@ lemma fpbs_strap2: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G,L,T /2 width=5 by tri_TC_strap/ qed-. (* Basic_2A1: uses: lleq_fpbs fleq_fpbs *) -lemma fdeq_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. -/3 width=1 by fpbq_fpbs, fpbq_fdeq/ qed. +lemma feqx_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +/3 width=1 by fpbq_fpbs, fpbq_feqx/ qed. (* Basic_2A1: uses: fpbs_lleq_trans *) -lemma fpbs_fdeq_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → +lemma fpbs_feqx_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → ∀G2,L2,T2. ⦃G,L,T⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. -/3 width=9 by fpbs_strap1, fpbq_fdeq/ qed-. +/3 width=9 by fpbs_strap1, fpbq_feqx/ qed-. (* Basic_2A1: uses: lleq_fpbs_trans *) -lemma fdeq_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → +lemma feqx_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → ∀G1,L1,T1. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. -/3 width=5 by fpbs_strap2, fpbq_fdeq/ qed-. +/3 width=5 by fpbs_strap2, fpbq_feqx/ qed-. -lemma tdeq_rdeq_lpx_fpbs: ∀h,T1,T2. T1 ≛ T2 → ∀L1,L0. L1 ≛[T2] L0 → +lemma teqx_reqx_lpx_fpbs: ∀h,T1,T2. T1 ≛ T2 → ∀L1,L0. L1 ≛[T2] L0 → ∀G,L2. ⦃G,L0⦄ ⊢ ⬈[h] L2 → ⦃G,L1,T1⦄ ≥[h] ⦃G,L2,T2⦄. -/4 width=5 by fdeq_fpbs, fpbs_strap1, fpbq_lpx, fdeq_intro_dx/ qed. +/4 width=5 by feqx_fpbs, fpbs_strap1, fpbq_lpx, feqx_intro_dx/ qed. (* Basic_2A1: removed theorems 3: fpb_fpbsa_trans fpbs_fpbsa fpbsa_inv_fpbs diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma index 5dd4e5378..4d41c9b62 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/rt_transition/cpx_fdeq.ma". +include "basic_2/rt_transition/cpx_feqx.ma". include "basic_2/rt_computation/lpxs_cpxs.ma". include "basic_2/rt_computation/fpbs_lpxs.ma". @@ -21,19 +21,19 @@ include "basic_2/rt_computation/fpbs_lpxs.ma". (* Properties with unbound context-sensitive parallel rt-transition *********) (* Basic_2A1: uses: fpbs_cpx_trans_neq *) -lemma fpbs_cpx_tdneq_trans: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → +lemma fpbs_cpx_tneqx_trans: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ≥[h] ⦃G2,L2,U2⦄. #h #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2 elim (fpbs_inv_star … H) -H #G0 #L0 #L3 #T0 #T3 #HT10 #H10 #HL03 #H32 -elim (fdeq_cpx_trans … H32 … HTU2) -HTU2 #T4 #HT34 #H42 -lapply (fdeq_tdneq_repl_dx … H32 … H42 … HnTU2) -T2 #HnT34 +elim (feqx_cpx_trans … H32 … HTU2) -HTU2 #T4 #HT34 #H42 +lapply (feqx_tneqx_repl_dx … H32 … H42 … HnTU2) -T2 #HnT34 lapply (lpxs_cpx_trans … HT34 … HL03) -HT34 #HT34 -elim (fqus_cpxs_trans_tdneq … H10 … HT34 HnT34) -T3 #T2 #HT02 #HnT02 #H24 -elim (tdeq_dec T1 T0) [ #H10 | -HnT02 #HnT10 ] +elim (fqus_cpxs_trans_tneqx … H10 … HT34 HnT34) -T3 #T2 #HT02 #HnT02 #H24 +elim (teqx_dec T1 T0) [ #H10 | -HnT02 #HnT10 ] [ lapply (cpxs_trans … HT10 … HT02) -HT10 -HT02 #HT12 - elim (cpxs_tdneq_fwd_step_sn … HT12) [2: /3 width=3 by tdeq_canc_sn/ ] -T0 -HT12 -| elim (cpxs_tdneq_fwd_step_sn … HT10 … HnT10) -HT10 -HnT10 + elim (cpxs_tneqx_fwd_step_sn … HT12) [2: /3 width=3 by teqx_canc_sn/ ] -T0 -HT12 +| elim (cpxs_tneqx_fwd_step_sn … HT10 … HnT10) -HT10 -HnT10 ] -/4 width=16 by fpbs_intro_star, cpxs_tdeq_fpbs_trans, ex3_intro/ +/4 width=16 by fpbs_intro_star, cpxs_teqx_fpbs_trans, ex3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma index ec1d680a8..a0534a0e3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma @@ -36,14 +36,14 @@ lemma cpxs_fpbs_trans: ∀h,G1,G2,L1,L2,T,T2. ⦃G1,L1,T⦄ ≥[h] ⦃G2,L2,T2 /3 width=5 by fpbs_strap2, fpbq_cpx/ qed-. -lemma cpxs_tdeq_fpbs_trans: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → +lemma cpxs_teqx_fpbs_trans: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → ∀T0. T ≛ T0 → ∀G2,L2,T2. ⦃G1,L1,T0⦄ ≥[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. -/3 width=3 by cpxs_fpbs_trans, tdeq_fpbs_trans/ qed-. +/3 width=3 by cpxs_fpbs_trans, teqx_fpbs_trans/ qed-. -lemma cpxs_tdeq_fpbs: ∀h,G,L,T1,T. ⦃G,L⦄ ⊢ T1 ⬈*[h] T → +lemma cpxs_teqx_fpbs: ∀h,G,L,T1,T. ⦃G,L⦄ ⊢ T1 ⬈*[h] T → ∀T2. T ≛ T2 → ⦃G,L,T1⦄ ≥[h] ⦃G,L,T2⦄. -/4 width=3 by cpxs_fpbs_trans, fdeq_fpbs, tdeq_fdeq/ qed. +/4 width=3 by cpxs_fpbs_trans, feqx_fpbs, teqx_feqx/ qed. (* Properties with star-iterated structural successor for closures **********) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma index 4a970e58b..25f0a3ffb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma @@ -13,20 +13,20 @@ (**************************************************************************) include "static_2/s_computation/fqus_fqup.ma". -include "static_2/static/fdeq_fqup.ma". +include "static_2/static/feqx_fqup.ma". include "basic_2/rt_computation/fpbs_fqus.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) (* Advanced properties ******************************************************) -lemma tdeq_fpbs_trans: ∀h,T1,T. T1 ≛ T → +lemma teqx_fpbs_trans: ∀h,T1,T. T1 ≛ T → ∀G1,G2,L1,L2,T2. ⦃G1,L1,T⦄ ≥[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. -/3 width=5 by fdeq_fpbs_trans, tdeq_fdeq/ qed-. +/3 width=5 by feqx_fpbs_trans, teqx_feqx/ qed-. -lemma fpbs_tdeq_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T⦄ → +lemma fpbs_teqx_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T⦄ → ∀T2. T ≛ T2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. -/3 width=5 by fpbs_fdeq_trans, tdeq_fdeq/ qed-. +/3 width=5 by fpbs_feqx_trans, teqx_feqx/ qed-. (* Properties with plus-iterated structural successor for closures **********) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma index d3b96eb96..3ab294cf9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma @@ -12,11 +12,11 @@ (* *) (**************************************************************************) -include "static_2/static/fdeq_fqus.ma". -include "static_2/static/fdeq_fdeq.ma". +include "static_2/static/feqx_fqus.ma". +include "static_2/static/feqx_feqx.ma". include "basic_2/rt_computation/cpxs_fqus.ma". -include "basic_2/rt_computation/cpxs_fdeq.ma". -include "basic_2/rt_computation/lpxs_fdeq.ma". +include "basic_2/rt_computation/cpxs_feqx.ma". +include "basic_2/rt_computation/lpxs_feqx.ma". include "basic_2/rt_computation/fpbs_cpxs.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) @@ -41,9 +41,9 @@ lemma lpxs_fpbs_trans: ∀h,G1,G2,L,L2,T1,T2. ⦃G1,L,T1⦄ ≥[h] ⦃G2,L2,T2 qed-. (* Basic_2A1: uses: lpxs_lleq_fpbs *) -lemma lpxs_fdeq_fpbs: ∀h,G1,L1,L,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] L → +lemma lpxs_feqx_fpbs: ∀h,G1,L1,L,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] L → ∀G2,L2,T2. ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. -/3 width=3 by lpxs_fpbs_trans, fdeq_fpbs/ qed. +/3 width=3 by lpxs_fpbs_trans, feqx_fpbs/ qed. lemma fpbs_lpx_trans: ∀h,G1,G2,L1,L,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L,T2⦄ → ∀L2. ⦃G2,L⦄ ⊢ ⬈[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. @@ -62,14 +62,14 @@ lemma cpxs_fqus_lpxs_fpbs: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → ∀L2.⦃G2,L⦄ ⊢ ⬈*[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. /3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed. -lemma fpbs_cpxs_tdeq_fqup_lpx_trans: ∀h,G1,G3,L1,L3,T1,T3. ⦃G1,L1,T1⦄ ≥ [h] ⦃G3,L3,T3⦄ → +lemma fpbs_cpxs_teqx_fqup_lpx_trans: ∀h,G1,G3,L1,L3,T1,T3. ⦃G1,L1,T1⦄ ≥ [h] ⦃G3,L3,T3⦄ → ∀T4. ⦃G3,L3⦄ ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 → ∀G2,L4,T2. ⦃G3,L3,T5⦄ ⬂+ ⦃G2,L4,T2⦄ → ∀L2. ⦃G2,L4⦄ ⊢ ⬈[h] L2 → ⦃G1,L1,T1⦄ ≥ [h] ⦃G2,L2,T2⦄. #h #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42 @(fpbs_lpx_trans … HL42) -L2 (**) (* full auto too slow *) @(fpbs_fqup_trans … H34) -G2 -L4 -T2 -/3 width=3 by fpbs_cpxs_trans, fpbs_tdeq_trans/ +/3 width=3 by fpbs_cpxs_trans, fpbs_teqx_trans/ qed-. (* Advanced properties ******************************************************) @@ -79,7 +79,7 @@ lemma fpbs_intro_star: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → ∀G,L,T0. ⦃G1,L1,T⦄ ⬂* ⦃G,L,T0⦄ → ∀L0. ⦃G,L⦄ ⊢ ⬈*[h] L0 → ∀G2,L2,T2. ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ . -/3 width=5 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, fpbq_fdeq/ qed. +/3 width=5 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, fpbq_feqx/ qed. (* Advanced inversion lemmas *************************************************) @@ -100,10 +100,10 @@ lemma fpbs_inv_star: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2 elim (lpx_fqus_trans … H34 … HL10) -L0 /3 width=9 by lpxs_step_sn, cpxs_trans, ex4_5_intro/ | #G0 #L0 #T0 #H10 #_ * #G3 #L3 #L4 #T3 #T4 #HT03 #H34 #HL34 #H42 - elim (fdeq_cpxs_trans … H10 … HT03) -T0 #T0 #HT10 #H03 - elim (fdeq_fqus_trans … H03 … H34) -G0 -L0 -T3 #G0 #L0 #T3 #H03 #H34 - elim (fdeq_lpxs_trans … H34 … HL34) -L3 #L3 #HL03 #H34 - /3 width=13 by fdeq_trans, ex4_5_intro/ + elim (feqx_cpxs_trans … H10 … HT03) -T0 #T0 #HT10 #H03 + elim (feqx_fqus_trans … H03 … H34) -G0 -L0 -T3 #G0 #L0 #T3 #H03 #H34 + elim (feqx_lpxs_trans … H34 … HL34) -L3 #L3 #HL03 #H34 + /3 width=13 by feqx_trans, ex4_5_intro/ ] ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma index de36632c3..5b383e05d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma @@ -39,18 +39,18 @@ generalize in match IHu; -IHu generalize in match H10; -H10 #G2 #L2 #T2 * -G2 -L2 -T2 [ -IHd -IHc | -IHu -IHd | ] [ /4 width=5 by fpbs_fqup_trans, fqu_fqup/ | #T2 #HT02 #HnT02 - elim (fpbs_cpx_tdneq_trans … H10 … HT02 HnT02) -T0 + elim (fpbs_cpx_tneqx_trans … H10 … HT02 HnT02) -T0 /3 width=4 by/ | #L2 #HL02 #HnL02 @(IHd … HL02 HnL02) -IHd -HnL02 [ -IHu -IHc | ] [ /3 width=3 by fpbs_lpxs_trans, lpx_lpxs/ | #G3 #L3 #T3 #H03 #_ elim (lpx_fqup_trans … H03 … HL02) -L2 #L4 #T4 #HT04 #H43 #HL43 - elim (tdeq_dec T0 T4) [ -IHc -HT04 #HT04 | -IHu #HnT04 ] - [ elim (tdeq_fqup_trans … H43 … HT04) -T4 #L2 #T4 #H04 #HT43 #HL24 - /4 width=7 by fsb_fpbs_trans, tdeq_rdeq_lpx_fpbs, fpbs_fqup_trans/ - | elim (cpxs_tdneq_fwd_step_sn … HT04 HnT04) -HT04 -HnT04 #T2 #T5 #HT02 #HnT02 #HT25 #HT54 - elim (fpbs_cpx_tdneq_trans … H10 … HT02 HnT02) -T0 #T0 #HT10 #HnT10 #H02 - /3 width=14 by fpbs_cpxs_tdeq_fqup_lpx_trans/ + elim (teqx_dec T0 T4) [ -IHc -HT04 #HT04 | -IHu #HnT04 ] + [ elim (teqx_fqup_trans … H43 … HT04) -T4 #L2 #T4 #H04 #HT43 #HL24 + /4 width=7 by fsb_fpbs_trans, teqx_reqx_lpx_fpbs, fpbs_fqup_trans/ + | elim (cpxs_tneqx_fwd_step_sn … HT04 HnT04) -HT04 -HnT04 #T2 #T5 #HT02 #HnT02 #HT25 #HT54 + elim (fpbs_cpx_tneqx_trans … H10 … HT02 HnT02) -T0 #T0 #HT10 #HnT10 #H02 + /3 width=14 by fpbs_cpxs_teqx_fqup_lpx_trans/ ] ] ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fdeq.ma deleted file mode 100644 index a24b46ffe..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fdeq.ma +++ /dev/null @@ -1,29 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_transition/fpb_fdeq.ma". -include "basic_2/rt_computation/fsb.ma". - -(* STRONGLY NORMALIZING CLOSURES FOR PARALLEL RST-TRANSITION ****************) - -(* Properties with sort-irrelevant equivalence for closures *****************) - -lemma fsb_fdeq_trans: ∀h,G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ≥[h] 𝐒⦃G2,L2,T2⦄. -#h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 -#G1 #L1 #T1 #_ #IH #G2 #L2 #T2 #H12 -@fsb_intro #G #L #T #H2 -elim (fdeq_fpb_trans … H12 … H2) -G2 -L2 -T2 -/2 width=5 by/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma new file mode 100644 index 000000000..b55d19073 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma @@ -0,0 +1,29 @@ +(**************************************************************************) +(* ___ *) +(* ||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_transition/fpb_feqx.ma". +include "basic_2/rt_computation/fsb.ma". + +(* STRONGLY NORMALIZING CLOSURES FOR PARALLEL RST-TRANSITION ****************) + +(* Properties with sort-irrelevant equivalence for closures *****************) + +lemma fsb_feqx_trans: ∀h,G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → + ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ≥[h] 𝐒⦃G2,L2,T2⦄. +#h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 +#G1 #L1 #T1 #_ #IH #G2 #L2 #T2 #H12 +@fsb_intro #G #L #T #H2 +elim (feqx_fpb_trans … H12 … H2) -G2 -L2 -T2 +/2 width=5 by/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma index 0ebebad3a..1d8e0eb7d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma @@ -13,7 +13,7 @@ (**************************************************************************) include "basic_2/rt_computation/fpbg_fpbs.ma". -include "basic_2/rt_computation/fsb_fdeq.ma". +include "basic_2/rt_computation/fsb_feqx.ma". (* STRONGLY NORMALIZING CLOSURES FOR PARALLEL RST-TRANSITION ****************) @@ -24,7 +24,7 @@ lemma fsb_fpbs_trans: ∀h,G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → #h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12 elim (fpbs_inv_fpbg … H12) -H12 -[ -IH /2 width=5 by fsb_fdeq_trans/ +[ -IH /2 width=5 by fsb_feqx_trans/ | -H1 * /2 width=5 by/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_fdeq.ma deleted file mode 100644 index e21438d63..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_fdeq.ma +++ /dev/null @@ -1,29 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/fdeq.ma". -include "basic_2/rt_computation/lpxs_rdeq.ma". - -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) - -(* Properties with sort-irrelevant equivalence on closures ******************) - -lemma fdeq_lpxs_trans (h): ∀G1,G2,L1,L0,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L0,T2⦄ → - ∀L2. ⦃G2,L0⦄ ⊢⬈*[h] L2 → - ∃∃L. ⦃G1,L1⦄ ⊢⬈*[h] L & ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄. -#h #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 -elim (fdeq_inv_gen_dx … H1) -H1 #HG #HL10 #HT12 destruct -elim (rdeq_lpxs_trans … HL02 … HL10) -L0 #L0 #HL10 #HL02 -/3 width=3 by fdeq_intro_dx, ex2_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma new file mode 100644 index 000000000..e6fc7f0bb --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma @@ -0,0 +1,29 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/feqx.ma". +include "basic_2/rt_computation/lpxs_reqx.ma". + +(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) + +(* Properties with sort-irrelevant equivalence on closures ******************) + +lemma feqx_lpxs_trans (h): ∀G1,G2,L1,L0,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L0,T2⦄ → + ∀L2. ⦃G2,L0⦄ ⊢⬈*[h] L2 → + ∃∃L. ⦃G1,L1⦄ ⊢⬈*[h] L & ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄. +#h #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 +elim (feqx_inv_gen_dx … H1) -H1 #HG #HL10 #HT12 destruct +elim (reqx_lpxs_trans … HL02 … HL10) -L0 #L0 #HL10 #HL02 +/3 width=3 by feqx_intro_dx, ex2_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_rdeq.ma deleted file mode 100644 index dd0a02ce2..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_rdeq.ma +++ /dev/null @@ -1,51 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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_transition/lpx_rdeq.ma". -include "basic_2/rt_computation/lpxs_lpx.ma". - -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) - -(* Properties with sort-irrelevant equivalence on referred entries **********) - -(* Basic_2A1: uses: lleq_lpxs_trans *) -lemma rdeq_lpxs_trans (h) (G) (T:term): - ∀L2,K2. ⦃G,L2⦄ ⊢ ⬈*[h] K2 → - ∀L1. L1 ≛[T] L2 → - ∃∃K1. ⦃G,L1⦄ ⊢ ⬈*[h] K1 & K1 ≛[T] K2. -#h #G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ -#L #L2 #HL2 #_ #IH #L1 #HT -elim (rdeq_lpx_trans … HL2 … HT) -L #L #HL1 #HT -elim (IH … HT) -L2 #K #HLK #HT -/3 width=3 by lpxs_step_sn, ex2_intro/ -qed-. - -(* Basic_2A1: uses: lpxs_nlleq_inv_step_sn *) -lemma lpxs_rdneq_inv_step_sn (h) (G) (T:term): - ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → - ∃∃L,L0. ⦃G,L1⦄ ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ & - ⦃G,L⦄ ⊢ ⬈*[h] L0 & L0 ≛[T] L2. -#h #G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1 -[ #H elim H -H // -| #L1 #L #H1 #H2 #IH2 #H12 elim (rdeq_dec L1 L T) #H - [ -H1 -H2 elim IH2 -IH2 /3 width=3 by rdeq_trans/ -H12 - #L0 #L3 #H1 #H2 #H3 #H4 lapply (rdeq_rdneq_trans … H … H2) -H2 - #H2 elim (rdeq_lpx_trans … H1 … H) -L - #L #H1 #H lapply (rdneq_rdeq_div … H … H2) -H2 - #H2 elim (rdeq_lpxs_trans … H3 … H) -L0 - /3 width=8 by rdeq_trans, ex4_2_intro/ - | -H12 -IH2 /3 width=6 by ex4_2_intro/ - ] -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma new file mode 100644 index 000000000..16c930462 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma @@ -0,0 +1,51 @@ +(**************************************************************************) +(* ___ *) +(* ||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_transition/lpx_reqx.ma". +include "basic_2/rt_computation/lpxs_lpx.ma". + +(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) + +(* Properties with sort-irrelevant equivalence on referred entries **********) + +(* Basic_2A1: uses: lleq_lpxs_trans *) +lemma reqx_lpxs_trans (h) (G) (T:term): + ∀L2,K2. ⦃G,L2⦄ ⊢ ⬈*[h] K2 → + ∀L1. L1 ≛[T] L2 → + ∃∃K1. ⦃G,L1⦄ ⊢ ⬈*[h] K1 & K1 ≛[T] K2. +#h #G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ +#L #L2 #HL2 #_ #IH #L1 #HT +elim (reqx_lpx_trans … HL2 … HT) -L #L #HL1 #HT +elim (IH … HT) -L2 #K #HLK #HT +/3 width=3 by lpxs_step_sn, ex2_intro/ +qed-. + +(* Basic_2A1: uses: lpxs_nlleq_inv_step_sn *) +lemma lpxs_rneqx_inv_step_sn (h) (G) (T:term): + ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → + ∃∃L,L0. ⦃G,L1⦄ ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ & + ⦃G,L⦄ ⊢ ⬈*[h] L0 & L0 ≛[T] L2. +#h #G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1 +[ #H elim H -H // +| #L1 #L #H1 #H2 #IH2 #H12 elim (reqx_dec L1 L T) #H + [ -H1 -H2 elim IH2 -IH2 /3 width=3 by reqx_trans/ -H12 + #L0 #L3 #H1 #H2 #H3 #H4 lapply (reqx_rneqx_trans … H … H2) -H2 + #H2 elim (reqx_lpx_trans … H1 … H) -L + #L #H1 #H lapply (rneqx_reqx_div … H … H2) -H2 + #H2 elim (reqx_lpxs_trans … H3 … H) -L0 + /3 width=8 by reqx_trans, ex4_2_intro/ + | -H12 -IH2 /3 width=6 by ex4_2_intro/ + ] +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma index 43e4b0461..06500ddc9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma @@ -13,13 +13,13 @@ (**************************************************************************) include "basic_2/notation/relations/predtysnstrong_4.ma". -include "static_2/static/rdeq.ma". +include "static_2/static/reqx.ma". include "basic_2/rt_transition/lpx.ma". (* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) definition rsx (h) (G) (T): predicate lenv ≝ - SN … (lpx h G) (rdeq T). + SN … (lpx h G) (reqx T). interpretation "strong normalization for unbound context-sensitive parallel rt-transition on referred entries (local environment)" @@ -56,7 +56,7 @@ lemma rsx_fwd_pair_sn (h) (G): #h #G #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IHL1 @rsx_intro #L2 #HL12 #HnL12 -/4 width=3 by rdeq_fwd_pair_sn/ +/4 width=3 by reqx_fwd_pair_sn/ qed-. (* Basic_2A1: uses: lsx_fwd_flat_dx *) @@ -66,7 +66,7 @@ lemma rsx_fwd_flat_dx (h) (G): #h #G #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IHL1 @rsx_intro #L2 #HL12 #HnL12 -/4 width=3 by rdeq_fwd_flat_dx/ +/4 width=3 by reqx_fwd_flat_dx/ qed-. fact rsx_fwd_pair_aux (h) (G): @@ -74,7 +74,7 @@ fact rsx_fwd_pair_aux (h) (G): ∀I,K,V. L = K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄. #h #G #L #H @(rsx_ind … H) -L #L1 #_ #IH #I #K1 #V #H destruct -/5 width=5 by lpx_pair, rsx_intro, rdeq_fwd_zero_pair/ +/5 width=5 by lpx_pair, rsx_intro, reqx_fwd_zero_pair/ qed-. lemma rsx_fwd_pair (h) (G): diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma index a4c10c8e9..8e7c7793a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma @@ -28,7 +28,7 @@ fact rsx_fwd_lref_pair_csx_aux (h) (G): @csx_intro #V2 #HV12 #HnV12 @(IH … I) -IH [1,4: // | -HnV12 | -G #H ] [ /2 width=1 by lpx_pair/ -| elim (rdeq_inv_zero_pair_sn … H) -H #Y #X #_ #H1 #H2 destruct -I +| elim (reqx_inv_zero_pair_sn … H) -H #Y #X #_ #H1 #H2 destruct -I /2 width=1 by/ ] qed-. @@ -85,8 +85,8 @@ lemma rsx_lref_pair_lpxs (h) (G): @(rsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #I @rsx_intro #Y #HY #HnY elim (lpx_inv_pair_sn … HY) -HY #K2 #V2 #HK02 #HV02 #H destruct -elim (tdeq_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] -[ /5 width=5 by rsx_rdeq_trans, lpxs_step_dx, rdeq_pair/ +elim (teqx_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] +[ /5 width=5 by rsx_reqx_trans, lpxs_step_dx, reqx_pair/ | @(IHV0 … HnV02) -IHV0 -HnV02 [ /2 width=3 by lpxs_cpx_trans/ | /3 width=3 by rsx_lpx_trans, rsx_cpx_trans/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma index 15c7d4dfb..7abac34cd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/static/rdeq_drops.ma". +include "static_2/static/reqx_drops.ma". include "basic_2/rt_transition/lpx_drops.ma". include "basic_2/rt_computation/rsx_length.ma". include "basic_2/rt_computation/rsx_fqup.ma". @@ -27,7 +27,7 @@ lemma rsx_lifts (h) (G): d_liftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒⦃L #h #G #K #T #H @(rsx_ind … H) -K #K1 #_ #IH #b #f #L1 #HLK1 #Hf #U #HTU @rsx_intro #L2 #HL12 #HnL12 elim (lpx_drops_conf … HLK1 … HL12) -/5 width=9 by rdeq_lifts_bi, lpx_fwd_length/ +/5 width=9 by reqx_lifts_bi, lpx_fwd_length/ qed-. (* Inversion lemmas on relocation *******************************************) @@ -37,7 +37,7 @@ lemma rsx_inv_lifts (h) (G): d_deliftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] #h #G #L #U #H @(rsx_ind … H) -L #L1 #_ #IH #b #f #K1 #HLK1 #Hf #T #HTU @rsx_intro #K2 #HK12 #HnK12 elim (drops_lpx_trans … HLK1 … HK12) -HK12 -/4 width=10 by rdeq_inv_lifts_bi/ +/4 width=10 by reqx_inv_lifts_bi/ qed-. (* Advanced properties ******************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma index b41e150fe..bd56111e1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/static/rdeq_fqup.ma". +include "static_2/static/reqx_fqup.ma". include "basic_2/rt_computation/rsx.ma". (* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) @@ -38,7 +38,7 @@ lemma rsx_fwd_bind_dx_void (h) (G): @(rsx_ind … H) -L #L1 #_ #IH @rsx_intro #Y #H #HT elim (lpx_inv_unit_sn … H) -H #L2 #HL12 #H destruct -/4 width=4 by rdeq_fwd_bind_dx_void/ +/4 width=4 by reqx_fwd_bind_dx_void/ qed-. (* Advanced inversion lemmas ************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma index ae3d76915..1954e6b6b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/static/rdeq_length.ma". +include "static_2/static/reqx_length.ma". include "basic_2/rt_transition/lpx_length.ma". include "basic_2/rt_computation/rsx.ma". @@ -23,18 +23,18 @@ include "basic_2/rt_computation/rsx.ma". (* Basic_2A1: uses: lsx_sort *) lemma rsx_sort (h) (G): ∀L,s. G ⊢ ⬈*[h,⋆s] 𝐒⦃L⦄. #h #G #L1 #s @rsx_intro #L2 #H #Hs -elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_sort_length/ +elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_sort_length/ qed. (* Basic_2A1: uses: lsx_gref *) lemma rsx_gref (h) (G): ∀L,l. G ⊢ ⬈*[h,§l] 𝐒⦃L⦄. #h #G #L1 #s @rsx_intro #L2 #H #Hs -elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_gref_length/ +elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_gref_length/ qed. lemma rsx_unit (h) (G): ∀I,L. G ⊢ ⬈*[h,#0] 𝐒⦃L.ⓤ{I}⦄. #h #G #I #L1 @rsx_intro #Y #HY #HnY elim HnY -HnY elim (lpx_inv_unit_sn … HY) -HY #L2 #HL12 #H destruct -/3 width=3 by lpx_fwd_length, rdeq_unit_length/ +/3 width=3 by lpx_fwd_length, reqx_unit_length/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma index 9598d49d0..bdb9c7de3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/rt_computation/lpxs_rdeq.ma". +include "basic_2/rt_computation/lpxs_reqx.ma". include "basic_2/rt_computation/lpxs_lpxs.ma". include "basic_2/rt_computation/rsx_rsx.ma". @@ -36,7 +36,7 @@ qed-. (* Eliminators with unbound rt-computation for full local environments ******) -lemma rsx_ind_lpxs_rdeq (h) (G) (T) (Q:predicate lenv): +lemma rsx_ind_lpxs_reqx (h) (G) (T) (Q:predicate lenv): (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 @@ -45,18 +45,18 @@ lemma rsx_ind_lpxs_rdeq (h) (G) (T) (Q:predicate lenv): ∀L0. ⦃G,L1⦄ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2. #h #G #T #Q #IH #L1 #H @(rsx_ind … H) -L1 #L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02 -@IH -IH /3 width=3 by rsx_lpxs_trans, rsx_rdeq_trans/ -HL1 #K2 #HLK2 #HnLK2 -lapply (rdeq_rdneq_trans … HL02 … HnLK2) -HnLK2 #H -elim (rdeq_lpxs_trans … HLK2 … HL02) -L2 #K0 #HLK0 #HK02 -lapply (rdneq_rdeq_canc_dx … H … HK02) -H #HnLK0 -elim (rdeq_dec L1 L0 T) #H -[ lapply (rdeq_rdneq_trans … H … HnLK0) -H -HnLK0 #Hn10 +@IH -IH /3 width=3 by rsx_lpxs_trans, rsx_reqx_trans/ -HL1 #K2 #HLK2 #HnLK2 +lapply (reqx_rneqx_trans … HL02 … HnLK2) -HnLK2 #H +elim (reqx_lpxs_trans … HLK2 … HL02) -L2 #K0 #HLK0 #HK02 +lapply (rneqx_reqx_canc_dx … H … HK02) -H #HnLK0 +elim (reqx_dec L1 L0 T) #H +[ lapply (reqx_rneqx_trans … H … HnLK0) -H -HnLK0 #Hn10 lapply (lpxs_trans … HL10 … HLK0) -L0 #H10 - elim (lpxs_rdneq_inv_step_sn … H10 … Hn10) -H10 -Hn10 - /3 width=8 by rdeq_trans/ -| elim (lpxs_rdneq_inv_step_sn … HL10 … H) -HL10 -H #L #K #HL1 #HnL1 #HLK #HKL0 - elim (rdeq_lpxs_trans … HLK0 … HKL0) -L0 - /3 width=8 by lpxs_trans, rdeq_trans/ + elim (lpxs_rneqx_inv_step_sn … H10 … Hn10) -H10 -Hn10 + /3 width=8 by reqx_trans/ +| elim (lpxs_rneqx_inv_step_sn … HL10 … H) -HL10 -H #L #K #HL1 #HnL1 #HLK #HKL0 + elim (reqx_lpxs_trans … HLK0 … HKL0) -L0 + /3 width=8 by lpxs_trans, reqx_trans/ ] qed-. @@ -68,7 +68,7 @@ lemma rsx_ind_lpxs (h) (G) (T) (Q:predicate lenv): ) → ∀L. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ → Q L. #h #G #T #Q #IH #L #HL -@(rsx_ind_lpxs_rdeq … IH … HL) -IH -HL // (**) (* full auto fails *) +@(rsx_ind_lpxs_reqx … IH … HL) -IH -HL // (**) (* full auto fails *) qed-. (* Advanced properties ******************************************************) @@ -83,10 +83,10 @@ fact rsx_bind_lpxs_aux (h) (G): #Y #HY #IHY #L2 #H #HL12 destruct @rsx_intro_lpxs #L0 #HL20 lapply (lpxs_trans … HL12 … HL20) #HL10 #H -elim (rdneq_inv_bind … H) -H [ -IHY | -HY -IHL1 -HL12 ] -[ #HnV elim (rdeq_dec L1 L2 V) +elim (rneqx_inv_bind … H) -H [ -IHY | -HY -IHL1 -HL12 ] +[ #HnV elim (reqx_dec L1 L2 V) [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10 - /3 width=4 by rsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *) + /3 width=4 by rsx_lpxs_trans, lpxs_bind_refl_dx, reqx_canc_sn/ (**) (* full auto too slow *) | -HnV -HL10 /4 width=4 by rsx_lpxs_trans, lpxs_bind_refl_dx/ ] | /3 width=4 by lpxs_bind_refl_dx/ @@ -109,10 +109,10 @@ lemma rsx_flat_lpxs (h) (G): #L1 #HL1 #IHL1 #L2 #T #H @(rsx_ind_lpxs … H) -L2 #L2 #HL2 #IHL2 #HL12 @rsx_intro_lpxs #L0 #HL20 lapply (lpxs_trans … HL12 … HL20) -#HL10 #H elim (rdneq_inv_flat … H) -H [ -HL1 -IHL2 | -HL2 -IHL1 ] -[ #HnV elim (rdeq_dec L1 L2 V) +#HL10 #H elim (rneqx_inv_flat … H) -H [ -HL1 -IHL2 | -HL2 -IHL1 ] +[ #HnV elim (reqx_dec L1 L2 V) [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10 - /3 width=5 by rsx_lpxs_trans, rdeq_canc_sn/ (**) (* full auto too slow: 47s *) + /3 width=5 by rsx_lpxs_trans, reqx_canc_sn/ (**) (* full auto too slow: 47s *) | -HnV -HL10 /3 width=4 by rsx_lpxs_trans/ ] | /3 width=3 by/ @@ -135,10 +135,10 @@ fact rsx_bind_lpxs_void_aux (h) (G): #Y #HY #IHY #L2 #H #HL12 destruct @rsx_intro_lpxs #L0 #HL20 lapply (lpxs_trans … HL12 … HL20) #HL10 #H -elim (rdneq_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ] -[ #HnV elim (rdeq_dec L1 L2 V) +elim (rneqx_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ] +[ #HnV elim (reqx_dec L1 L2 V) [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10 - /3 width=6 by rsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *) + /3 width=6 by rsx_lpxs_trans, lpxs_bind_refl_dx, reqx_canc_sn/ (**) (* full auto too slow *) | -HnV -HL10 /4 width=4 by rsx_lpxs_trans, lpxs_bind_refl_dx/ ] | /3 width=4 by lpxs_bind_refl_dx/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma index f801c96b7..0c31405a8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/rt_transition/lpx_rdeq.ma". +include "basic_2/rt_transition/lpx_reqx.ma". include "basic_2/rt_computation/rsx.ma". (* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) @@ -20,13 +20,13 @@ include "basic_2/rt_computation/rsx.ma". (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lleq_trans *) -lemma rsx_rdeq_trans (h) (G): +lemma rsx_reqx_trans (h) (G): ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄. #h #G #L1 #T #H @(rsx_ind … H) -L1 #L1 #_ #IHL1 #L2 #HL12 @rsx_intro -#L #HL2 #HnL2 elim (rdeq_lpx_trans … HL2 … HL12) -HL2 -/4 width=5 by rdeq_repl/ +#L #HL2 #HnL2 elim (reqx_lpx_trans … HL2 … HL12) -HL2 +/4 width=5 by reqx_repl/ qed-. (* Basic_2A1: uses: lsx_lpx_trans *) @@ -34,5 +34,5 @@ lemma rsx_lpx_trans (h) (G): ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → ∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄. #h #G #L1 #T #H @(rsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12 -elim (rdeq_dec L1 L2 T) /3 width=4 by rsx_rdeq_trans/ +elim (reqx_dec L1 L2 T) /3 width=4 by rsx_reqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma index f37dc4184..76203c518 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma @@ -12,8 +12,8 @@ (* *) (**************************************************************************) -include "basic_2/rt_computation/cpre_csx.ma". -include "basic_2/rt_computation/cpre_cpre.ma". +include "basic_2/rt_computation/cprre_csx.ma". +include "basic_2/rt_computation/cprre_cprre.ma". include "basic_2/rt_equivalence/cpcs_cprs.ma". (* CONTEXT-SENSITIVE PARALLEL R-EQUIVALENCE FOR TERMS ***********************) @@ -25,16 +25,16 @@ lemma csx_cpcs_dec (h) (G) (L): ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∀T2. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄ → Decidable … (⦃G,L⦄ ⊢ T1 ⬌*[h] T2). #h #G #L #T1 #HT1 #T2 #HT2 -elim (cpre_total_csx … HT1) -HT1 #U1 #HTU1 -elim (cpre_total_csx … HT2) -HT2 #U2 #HTU2 +elim (cprre_total_csx … HT1) -HT1 #U1 #HTU1 +elim (cprre_total_csx … HT2) -HT2 #U2 #HTU2 elim (eq_term_dec U1 U2) [ #H destruct | #HnU12 ] [ cases HTU1 -HTU1 #HTU1 #_ cases HTU2 -HTU2 #HTU2 #_ /3 width=3 by cprs_div, or_introl/ | @or_intror #H elim (cpcs_inv_cprs … H) -H #T0 #HT10 #HT20 - lapply (cpre_cprs_conf … HT10 … HTU1) -T1 #H1 - lapply (cpre_cprs_conf … HT20 … HTU2) -T2 #H2 - /3 width=6 by cpre_mono/ + lapply (cprre_cprs_conf … HT10 … HTU1) -T1 #H1 + lapply (cprre_cprs_conf … HT20 … HTU2) -T2 #H2 + /3 width=6 by cprre_mono/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_tdeq.ma deleted file mode 100644 index 00d42e11d..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_tdeq.ma +++ /dev/null @@ -1,97 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/relocation/lifts_tdeq.ma". -include "basic_2/rt_transition/cpr_drops_basic.ma". -include "basic_2/rt_transition/cnr_simple.ma". -include "basic_2/rt_transition/cnr_drops.ma". - -(* NORMAL TERMS FOR CONTEXT-SENSITIVE R-TRANSITION **************************) - -(* Properties with context-free sort-irrelevant equivalence for terms *******) - -(* Basic_1: was: nf2_dec *) -(* Basic_2A1: uses: cnr_dec *) -lemma cnr_dec_tdeq (h) (G) (L): - ∀T1. ∨∨ ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T1⦄ - | ∃∃T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 & (T1 ≛ T2 → ⊥). -#h #G #L #T1 -@(fqup_wf_ind_eq (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 #T0 #IH #G #L * * -[ #s #HG #HL #HT destruct -IH - /3 width=4 by cnr_sort, or_introl/ -| #i #HG #HL #HT destruct -IH - elim (drops_F_uni L i) - [ /3 width=6 by cnr_lref_atom, or_introl/ - | * * [ #I | * #V ] #K #HLK - [ /3 width=7 by cnr_lref_unit, or_introl/ - | elim (lifts_total V 𝐔❴↑i❵) #W #HVW - @or_intror @(ex2_intro … W) [ /2 width=6 by cpm_delta_drops/ ] #H - lapply (tdeq_inv_lref1 … H) -H #H destruct - /2 width=5 by lifts_inv_lref2_uni_lt/ - | /3 width=7 by cnr_lref_abst, or_introl/ - ] - ] -| #l #HG #HL #HT destruct -IH - /3 width=4 by cnr_gref, or_introl/ -| #p * [ cases p ] #V1 #T1 #HG #HL #HT destruct - [ elim (cpr_subst h G (L.ⓓV1) T1 0 L V1) [| /2 width=1 by drops_refl/ ] #T2 #X2 #HT12 #HXT2 -IH - elim (tdeq_dec T1 T2) [ -HT12 #HT12 | #HnT12 ] - [ elim (tdeq_inv_lifts_dx … HT12 … HXT2) -T2 #X1 #HXT1 #_ -X2 - @or_intror @(ex2_intro … X1) [ /2 width=3 by cpm_zeta/ ] #H - /2 width=7 by tdeq_lifts_inv_pair_sn/ - | @or_intror @(ex2_intro … (+ⓓV1.T2)) [ /2 width=1 by cpm_bind/ ] #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ - ] - | elim (IH G L V1) [ elim (IH G (L.ⓓV1) T1) [| * | // ] | * | // ] -IH - [ #HT1 #HV1 /3 width=6 by cnr_abbr_neg, or_introl/ - | #T2 #HT12 #HnT12 #_ - @or_intror @(ex2_intro … (-ⓓV1.T2)) [ /2 width=1 by cpm_bind/ ] #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ - | #V2 #HV12 #HnV12 - @or_intror @(ex2_intro … (-ⓓV2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ - ] - | elim (IH G L V1) [ elim (IH G (L.ⓛV1) T1) [| * | // ] | * | // ] -IH - [ #HT1 #HV1 /3 width=6 by cnr_abst, or_introl/ - | #T2 #HT12 #HnT12 #_ - @or_intror @(ex2_intro … (ⓛ{p}V1.T2)) [ /2 width=1 by cpm_bind/ ] #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ - | #V2 #HV12 #HnV12 - @or_intror @(ex2_intro … (ⓛ{p}V2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ - ] - ] -| * #V1 #T1 #HG #HL #HT destruct [| -IH ] - [ elim (IH G L V1) [ elim (IH G L T1) [| * | // ] | * | // ] -IH - [ #HT1 #HV1 - elim (simple_dec_ex T1) [| * #p * #W1 #U1 #H destruct ] - [ /3 width=6 by cnr_appl_simple, or_introl/ - | elim (lifts_total V1 𝐔❴1❵) #X1 #HVX1 - @or_intror @(ex2_intro … (ⓓ{p}W1.ⓐX1.U1)) [ /2 width=3 by cpm_theta/ ] #H - elim (tdeq_inv_pair … H) -H #H destruct - | @or_intror @(ex2_intro … (ⓓ{p}ⓝW1.V1.U1)) [ /2 width=1 by cpm_beta/ ] #H - elim (tdeq_inv_pair … H) -H #H destruct - ] - | #T2 #HT12 #HnT12 #_ - @or_intror @(ex2_intro … (ⓐV1.T2)) [ /2 width=1 by cpm_appl/ ] #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ - | #V2 #HV12 #HnV12 - @or_intror @(ex2_intro … (ⓐV2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ - ] - | @or_intror @(ex2_intro … T1) [ /2 width=1 by cpm_eps/ ] #H - /2 width=4 by tdeq_inv_pair_xy_y/ - ] -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma new file mode 100644 index 000000000..f0e91e7c1 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma @@ -0,0 +1,97 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/relocation/lifts_teqx.ma". +include "basic_2/rt_transition/cpr_drops_basic.ma". +include "basic_2/rt_transition/cnr_simple.ma". +include "basic_2/rt_transition/cnr_drops.ma". + +(* NORMAL TERMS FOR CONTEXT-SENSITIVE R-TRANSITION **************************) + +(* Properties with context-free sort-irrelevant equivalence for terms *******) + +(* Basic_1: was: nf2_dec *) +(* Basic_2A1: uses: cnr_dec *) +lemma cnr_dec_teqx (h) (G) (L): + ∀T1. ∨∨ ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T1⦄ + | ∃∃T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 & (T1 ≛ T2 → ⊥). +#h #G #L #T1 +@(fqup_wf_ind_eq (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 #T0 #IH #G #L * * +[ #s #HG #HL #HT destruct -IH + /3 width=4 by cnr_sort, or_introl/ +| #i #HG #HL #HT destruct -IH + elim (drops_F_uni L i) + [ /3 width=6 by cnr_lref_atom, or_introl/ + | * * [ #I | * #V ] #K #HLK + [ /3 width=7 by cnr_lref_unit, or_introl/ + | elim (lifts_total V 𝐔❴↑i❵) #W #HVW + @or_intror @(ex2_intro … W) [ /2 width=6 by cpm_delta_drops/ ] #H + lapply (teqx_inv_lref1 … H) -H #H destruct + /2 width=5 by lifts_inv_lref2_uni_lt/ + | /3 width=7 by cnr_lref_abst, or_introl/ + ] + ] +| #l #HG #HL #HT destruct -IH + /3 width=4 by cnr_gref, or_introl/ +| #p * [ cases p ] #V1 #T1 #HG #HL #HT destruct + [ elim (cpr_subst h G (L.ⓓV1) T1 0 L V1) [| /2 width=1 by drops_refl/ ] #T2 #X2 #HT12 #HXT2 -IH + elim (teqx_dec T1 T2) [ -HT12 #HT12 | #HnT12 ] + [ elim (teqx_inv_lifts_dx … HT12 … HXT2) -T2 #X1 #HXT1 #_ -X2 + @or_intror @(ex2_intro … X1) [ /2 width=3 by cpm_zeta/ ] #H + /2 width=7 by teqx_lifts_inv_pair_sn/ + | @or_intror @(ex2_intro … (+ⓓV1.T2)) [ /2 width=1 by cpm_bind/ ] #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ + ] + | elim (IH G L V1) [ elim (IH G (L.ⓓV1) T1) [| * | // ] | * | // ] -IH + [ #HT1 #HV1 /3 width=6 by cnr_abbr_neg, or_introl/ + | #T2 #HT12 #HnT12 #_ + @or_intror @(ex2_intro … (-ⓓV1.T2)) [ /2 width=1 by cpm_bind/ ] #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ + | #V2 #HV12 #HnV12 + @or_intror @(ex2_intro … (-ⓓV2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ + ] + | elim (IH G L V1) [ elim (IH G (L.ⓛV1) T1) [| * | // ] | * | // ] -IH + [ #HT1 #HV1 /3 width=6 by cnr_abst, or_introl/ + | #T2 #HT12 #HnT12 #_ + @or_intror @(ex2_intro … (ⓛ{p}V1.T2)) [ /2 width=1 by cpm_bind/ ] #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ + | #V2 #HV12 #HnV12 + @or_intror @(ex2_intro … (ⓛ{p}V2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ + ] + ] +| * #V1 #T1 #HG #HL #HT destruct [| -IH ] + [ elim (IH G L V1) [ elim (IH G L T1) [| * | // ] | * | // ] -IH + [ #HT1 #HV1 + elim (simple_dec_ex T1) [| * #p * #W1 #U1 #H destruct ] + [ /3 width=6 by cnr_appl_simple, or_introl/ + | elim (lifts_total V1 𝐔❴1❵) #X1 #HVX1 + @or_intror @(ex2_intro … (ⓓ{p}W1.ⓐX1.U1)) [ /2 width=3 by cpm_theta/ ] #H + elim (teqx_inv_pair … H) -H #H destruct + | @or_intror @(ex2_intro … (ⓓ{p}ⓝW1.V1.U1)) [ /2 width=1 by cpm_beta/ ] #H + elim (teqx_inv_pair … H) -H #H destruct + ] + | #T2 #HT12 #HnT12 #_ + @or_intror @(ex2_intro … (ⓐV1.T2)) [ /2 width=1 by cpm_appl/ ] #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ + | #V2 #HV12 #HnV12 + @or_intror @(ex2_intro … (ⓐV2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ + ] + | @or_intror @(ex2_intro … T1) [ /2 width=1 by cpm_eps/ ] #H + /2 width=4 by teqx_inv_pair_xy_y/ + ] +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma index a79e8d74e..70681cf76 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma @@ -13,13 +13,13 @@ (**************************************************************************) include "basic_2/notation/relations/predtynormal_4.ma". -include "static_2/syntax/tdeq.ma". +include "static_2/syntax/teqx.ma". include "basic_2/rt_transition/cpx.ma". (* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) definition cnx: ∀h. relation3 genv lenv term ≝ - λh,G,L. NF … (cpx h G L) tdeq. + λh,G,L. NF … (cpx h G L) teqx. interpretation "normality for unbound context-sensitive parallel rt-transition (term)" @@ -33,7 +33,7 @@ lemma cnx_inv_abst: ∀h,p,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓛ{p}V.T⦄ → [ #V2 #HV2 lapply (HVT1 (ⓛ{p}V2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 | #T2 #HT2 lapply (HVT1 (ⓛ{p}V1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 ] -#H elim (tdeq_inv_pair … H) -H // +#H elim (teqx_inv_pair … H) -H // qed-. (* Basic_2A1: was: cnx_inv_abbr *) @@ -43,25 +43,25 @@ lemma cnx_inv_abbr_neg: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃-ⓓV.T⦄ → [ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 | #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 ] -#H elim (tdeq_inv_pair … H) -H // +#H elim (teqx_inv_pair … H) -H // qed-. (* Basic_2A1: was: cnx_inv_eps *) lemma cnx_inv_cast: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓝV.T⦄ → ⊥. #h #G #L #V #T #H lapply (H T ?) -H -/2 width=6 by cpx_eps, tdeq_inv_pair_xy_y/ +/2 width=6 by cpx_eps, teqx_inv_pair_xy_y/ qed-. (* Basic properties *********************************************************) lemma cnx_sort: ∀h,G,L,s. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃⋆s⦄. #h #G #L #s #X #H elim (cpx_inv_sort1 … H) -H -/2 width=1 by tdeq_sort/ +/2 width=1 by teqx_sort/ qed. lemma cnx_abst: ∀h,p,G,L,W,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃W⦄ → ⦃G,L.ⓛW⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓛ{p}W.T⦄. #h #p #G #L #W #T #HW #HT #X #H elim (cpx_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct -@tdeq_pair [ @HW | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) +@teqx_pair [ @HW | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma index 6f7976b64..4f07b3e5e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/relocation/lifts_tdeq.ma". +include "static_2/relocation/lifts_teqx.ma". include "basic_2/rt_transition/cpx_drops_basic.ma". include "basic_2/rt_transition/cnx.ma". @@ -23,11 +23,11 @@ include "basic_2/rt_transition/cnx.ma". lemma cnx_inv_abbr_pos (h) (G) (L): ∀V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃+ⓓV.T⦄ → ⊥. #h #G #L #V #U1 #H elim (cpx_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 -elim (tdeq_dec U1 U2) #HnU12 [ -HU12 | -HTU2 ] -[ elim (tdeq_inv_lifts_dx … HnU12 … HTU2) -U2 #T1 #HTU1 #_ -T2 +elim (teqx_dec U1 U2) #HnU12 [ -HU12 | -HTU2 ] +[ elim (teqx_inv_lifts_dx … HnU12 … HTU2) -U2 #T1 #HTU1 #_ -T2 lapply (H T1 ?) -H [ /2 width=3 by cpx_zeta/ ] #H - /2 width=9 by tdeq_lifts_inv_pair_sn/ + /2 width=9 by teqx_lifts_inv_pair_sn/ | lapply (H (+ⓓV.U2) ?) -H [ /2 width=1 by cpx_bind/ ] -HU12 #H - elim (tdeq_inv_pair … H) -H #_ #_ /2 width=1 by/ + elim (teqx_inv_pair … H) -H #_ #_ /2 width=1 by/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma index abbc125a0..43fccb612 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma @@ -12,16 +12,16 @@ (* *) (**************************************************************************) -include "basic_2/rt_transition/rpx_rdeq.ma". +include "basic_2/rt_transition/rpx_reqx.ma". include "basic_2/rt_transition/cnx.ma". (* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) (* Advanced properties ******************************************************) -lemma cnx_tdeq_trans: ∀h,G,L,T1. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → +lemma cnx_teqx_trans: ∀h,G,L,T1. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → ∀T2. T1 ≛ T2 → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T2⦄. #h #G #L #T1 #HT1 #T2 #HT12 #T #HT2 -elim (tdeq_cpx_trans … HT12 … HT2) -HT2 #T0 #HT10 #HT0 -lapply (HT1 … HT10) -HT1 -HT10 /2 width=5 by tdeq_repl/ (**) (* full auto fails *) +elim (teqx_cpx_trans … HT12 … HT2) -HT2 #T0 #HT10 #HT0 +lapply (HT1 … HT10) -HT1 -HT10 /2 width=5 by teqx_repl/ (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma index 70cffc7bd..977d278f9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "static_2/relocation/lifts_tdeq.ma". +include "static_2/relocation/lifts_teqx.ma". include "basic_2/rt_transition/cpx_drops.ma". include "basic_2/rt_transition/cnx.ma". @@ -34,7 +34,7 @@ qed. lemma cnx_lifts: ∀h,G. d_liftable1 … (cnx h G). #h #G #K #T #HT #b #f #L #HLK #U #HTU #U0 #H elim (cpx_inv_lifts_sn … H … HLK … HTU) -b -L #T0 #HTU0 #HT0 -lapply (HT … HT0) -G -K /2 width=6 by tdeq_lifts_bi/ +lapply (HT … HT0) -G -K /2 width=6 by teqx_lifts_bi/ qed-. (* Inversion lemmas with generic slicing ************************************) @@ -44,7 +44,7 @@ lemma cnx_inv_lref_pair: ∀h,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ #h #I #G #L #K #V #i #HLK #H elim (lifts_total V (𝐔❴↑i❵)) #W #HVW lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK -#H lapply (tdeq_inv_lref1 … H) -H #H destruct +#H lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ qed-. @@ -52,5 +52,5 @@ qed-. lemma cnx_inv_lifts: ∀h,G. d_deliftable1 … (cnx h G). #h #G #L #U #HU #b #f #K #HLK #T #HTU #T0 #H elim (cpx_lifts_sn … H … HLK … HTU) -b -K #U0 #HTU0 #HU0 -lapply (HU … HU0) -G -L /2 width=6 by tdeq_inv_lifts_bi/ +lapply (HU … HU0) -G -L /2 width=6 by teqx_inv_lifts_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma index 322930c7f..4263b28cb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma @@ -23,16 +23,16 @@ lemma cnx_inv_appl: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓐV.T⦄ → ∧∧ ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ & ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ & 𝐒⦃T⦄. #h #G #L #V1 #T1 #HVT1 @and3_intro [ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpx_pair_sn/ -HV2 - #H elim (tdeq_inv_pair … H) -H // + #H elim (teqx_inv_pair … H) -H // | #T2 #HT2 lapply (HVT1 (ⓐV1.T2) ?) -HVT1 /2 width=1 by cpx_flat/ -HT2 - #H elim (tdeq_inv_pair … H) -H // + #H elim (teqx_inv_pair … H) -H // | generalize in match HVT1; -HVT1 elim T1 -T1 * // #p * #W1 #U1 #_ #_ #H [ elim (lifts_total V1 (𝐔❴1❵)) #V2 #HV12 lapply (H (ⓓ{p}W1.ⓐV2.U1) ?) -H /2 width=3 by cpx_theta/ -HV12 - #H elim (tdeq_inv_pair … H) -H #H destruct + #H elim (teqx_inv_pair … H) -H #H destruct | lapply (H (ⓓ{p}ⓝW1.V1.U1) ?) -H /2 width=1 by cpx_beta/ - #H elim (tdeq_inv_pair … H) -H #H destruct + #H elim (teqx_inv_pair … H) -H #H destruct ] ] qed-. @@ -43,5 +43,5 @@ lemma cnx_appl_simple: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ → ⦃G,L ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓐV.T⦄. #h #G #L #V #T #HV #HT #HS #X #H elim (cpx_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct -@tdeq_pair [ @HV | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) +@teqx_pair [ @HV | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_tdeq.ma deleted file mode 100644 index 7f05e3b1c..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_tdeq.ma +++ /dev/null @@ -1,46 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/syntax/tdeq.ma". -include "basic_2/rt_transition/cpm_drops.ma". - -(* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) - -(* Inversion lemmas with sort-irrelevant equivalence for terms **************) - -lemma cpm_tdeq_inv_lref_sn (n) (h) (G) (L) (i): - ∀X. ⦃G,L⦄ ⊢ #i ➡[n,h] X → #i ≛ X → - ∧∧ X = #i & n = 0. -#n #h #G #L #i #X #H1 #H2 -lapply (tdeq_inv_lref1 … H2) -H2 #H destruct -elim (cpm_inv_lref1_drops … H1) -H1 // * [| #m ] -#K #V1 #V2 #_ #_ #H -V1 -elim (lifts_inv_lref2_uni_lt … H) -H // -qed-. - -lemma cpm_tdeq_inv_atom_sn (n) (h) (I) (G) (L): - ∀X. ⦃G,L⦄ ⊢ ⓪{I} ➡[n,h] X → ⓪{I} ≛ X → - ∨∨ ∧∧ X = ⓪{I} & n = 0 - | ∃∃s. X = ⋆(⫯[h]s) & I = Sort s & n = 1. -#n #h * #s #G #L #X #H1 #H2 -[ elim (cpm_inv_sort1 … H1) -H1 - cases n -n [| #n ] #H #Hn destruct -H2 - [ /3 width=1 by or_introl, conj/ - | <(le_n_O_to_eq n) [| /2 width=3 by le_S_S_to_le/ ] -n - /3 width=3 by ex3_intro, or_intror/ - ] -| elim (cpm_tdeq_inv_lref_sn … H1 H2) -H1 -H2 /3 width=1 by or_introl, conj/ -| elim (cpm_inv_gref1 … H1) -H1 -H2 /3 width=1 by or_introl, conj/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma new file mode 100644 index 000000000..fec97dfb6 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma @@ -0,0 +1,46 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/syntax/teqx.ma". +include "basic_2/rt_transition/cpm_drops.ma". + +(* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) + +(* Inversion lemmas with sort-irrelevant equivalence for terms **************) + +lemma cpm_teqx_inv_lref_sn (n) (h) (G) (L) (i): + ∀X. ⦃G,L⦄ ⊢ #i ➡[n,h] X → #i ≛ X → + ∧∧ X = #i & n = 0. +#n #h #G #L #i #X #H1 #H2 +lapply (teqx_inv_lref1 … H2) -H2 #H destruct +elim (cpm_inv_lref1_drops … H1) -H1 // * [| #m ] +#K #V1 #V2 #_ #_ #H -V1 +elim (lifts_inv_lref2_uni_lt … H) -H // +qed-. + +lemma cpm_teqx_inv_atom_sn (n) (h) (I) (G) (L): + ∀X. ⦃G,L⦄ ⊢ ⓪{I} ➡[n,h] X → ⓪{I} ≛ X → + ∨∨ ∧∧ X = ⓪{I} & n = 0 + | ∃∃s. X = ⋆(⫯[h]s) & I = Sort s & n = 1. +#n #h * #s #G #L #X #H1 #H2 +[ elim (cpm_inv_sort1 … H1) -H1 + cases n -n [| #n ] #H #Hn destruct -H2 + [ /3 width=1 by or_introl, conj/ + | <(le_n_O_to_eq n) [| /2 width=3 by le_S_S_to_le/ ] -n + /3 width=3 by ex3_intro, or_intror/ + ] +| elim (cpm_teqx_inv_lref_sn … H1 H2) -H1 -H2 /3 width=1 by or_introl, conj/ +| elim (cpm_inv_gref1 … H1) -H1 -H2 /3 width=1 by or_introl, conj/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_tdeq.ma deleted file mode 100644 index 910c7abe1..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_tdeq.ma +++ /dev/null @@ -1,32 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/relocation/lifts_tdeq.ma". -include "basic_2/rt_transition/cpr_drops_basic.ma". - -(* CONTEXT-SENSITIVE PARALLEL R-TRANSITION FOR TERMS ************************) - -(* Properties with context-free sort-irrelevant equivalence *****************) - -lemma cpr_abbr_pos_tdneq (h) (G) (L) (V) (T1): - ∃∃T2. ⦃G,L⦄ ⊢ +ⓓV.T1 ➡[h] T2 & (+ⓓV.T1 ≛ T2 → ⊥). -#h #G #L #V #U1 -elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 -elim (tdeq_dec U1 U2) [ -HU12 #HU12 | -HTU2 #HnU12 ] -[ elim (tdeq_inv_lifts_dx … HU12 … HTU2) -U2 #T1 #HTU1 #_ -T2 - /3 width=9 by cpm_zeta, tdeq_lifts_inv_pair_sn, ex2_intro/ -| @(ex2_intro … (+ⓓV.U2)) [ /2 width=1 by cpm_bind/ ] -HU12 #H - elim (tdeq_inv_pair … H) -H #_ #_ /2 width=1 by/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma new file mode 100644 index 000000000..49a988290 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma @@ -0,0 +1,32 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/relocation/lifts_teqx.ma". +include "basic_2/rt_transition/cpr_drops_basic.ma". + +(* CONTEXT-SENSITIVE PARALLEL R-TRANSITION FOR TERMS ************************) + +(* Properties with context-free sort-irrelevant equivalence *****************) + +lemma cpr_abbr_pos_tneqx (h) (G) (L) (V) (T1): + ∃∃T2. ⦃G,L⦄ ⊢ +ⓓV.T1 ➡[h] T2 & (+ⓓV.T1 ≛ T2 → ⊥). +#h #G #L #V #U1 +elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 +elim (teqx_dec U1 U2) [ -HU12 #HU12 | -HTU2 #HnU12 ] +[ elim (teqx_inv_lifts_dx … HU12 … HTU2) -U2 #T1 #HTU1 #_ -T2 + /3 width=9 by cpm_zeta, teqx_lifts_inv_pair_sn, ex2_intro/ +| @(ex2_intro … (+ⓓV.U2)) [ /2 width=1 by cpm_bind/ ] -HU12 #H + elim (teqx_inv_pair … H) -H #_ #_ /2 width=1 by/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fdeq.ma deleted file mode 100644 index f8224c247..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fdeq.ma +++ /dev/null @@ -1,32 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/fdeq.ma". -include "basic_2/rt_transition/cpx_rdeq.ma". -include "basic_2/rt_transition/rpx_rdeq.ma". - -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) - -(* Properties with sort-irrelevant equivalence for closures *****************) - -lemma fdeq_cpx_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T⦄ → - ∀T2. ⦃G2,L2⦄ ⊢ T ⬈[h] T2 → - ∃∃T0. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T0 & ⦃G1,L1,T0⦄ ≛ ⦃G2,L2,T2⦄. -#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 -elim (fdeq_inv_gen_dx … H) -H #H #HL12 #HT1 destruct -elim (rdeq_cpx_trans … HL12 … HT2) #T0 #HT0 #HT02 -lapply (cpx_rdeq_conf_dx … HT2 … HL12) -HL12 #HL12 -elim (tdeq_cpx_trans … HT1 … HT0) -T #T #HT1 #HT0 -/4 width=5 by fdeq_intro_dx, tdeq_trans, ex2_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma new file mode 100644 index 000000000..3d19c0bc9 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma @@ -0,0 +1,32 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/feqx.ma". +include "basic_2/rt_transition/cpx_reqx.ma". +include "basic_2/rt_transition/rpx_reqx.ma". + +(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) + +(* Properties with sort-irrelevant equivalence for closures *****************) + +lemma feqx_cpx_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T⦄ → + ∀T2. ⦃G2,L2⦄ ⊢ T ⬈[h] T2 → + ∃∃T0. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T0 & ⦃G1,L1,T0⦄ ≛ ⦃G2,L2,T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 +elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct +elim (reqx_cpx_trans … HL12 … HT2) #T0 #HT0 #HT02 +lapply (cpx_reqx_conf_dx … HT2 … HL12) -HL12 #HL12 +elim (teqx_cpx_trans … HT1 … HT0) -T #T #HT1 #HT0 +/4 width=5 by feqx_intro_dx, teqx_trans, ex2_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma index 7cddd25cd..6c1d31e77 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma @@ -14,7 +14,7 @@ (* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) -include "static_2/relocation/lifts_tdeq.ma". +include "static_2/relocation/lifts_teqx.ma". include "static_2/s_computation/fqus_fqup.ma". include "basic_2/rt_transition/cpx_drops.ma". include "basic_2/rt_transition/cpx_lsubr.ma". @@ -66,65 +66,65 @@ lemma fqus_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2, ] qed-. -lemma fqu_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❴1❵) #U2 #HVU2 @(ex3_intro … U2) [1,3: /3 width=7 by cpx_delta, fqu_drop/ - | #H lapply (tdeq_inv_lref1 … H) -H + | #H lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ ] | #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②{I}V2.T)) [1,3: /2 width=4 by fqu_pair_sn, cpx_pair_sn/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) [1,3: /2 width=4 by fqu_bind_dx, cpx_bind/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) [1,3: /4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit, fqu_clear/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ{I}V.T2)) [1,3: /2 width=4 by fqu_flat_dx, cpx_flat/ - | #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ + | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #I #G #L #T1 #U1 #HTU1 #T2 #HT12 #H0 elim (cpx_lifts_sn … HT12 (Ⓣ) … (L.ⓘ{I}) … HTU1) -HT12 - /4 width=6 by fqu_drop, drops_refl, drops_drop, tdeq_inv_lifts_bi, ex3_intro/ + /4 width=6 by fqu_drop, drops_refl, drops_drop, teqx_inv_lifts_bi, ex3_intro/ ] qed-. -lemma fquq_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → +lemma fquq_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 -[ #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tdneq … H12 … HTU2 H) -T2 +[ #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ ] qed-. -lemma fqup_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → +lemma fqup_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 -[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tdneq … H12 … HTU2 H) -T2 +[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ | #G #G1 #L #L1 #T #T1 #H1 #_ #IH12 #U2 #HTU2 #H elim (IH12 … HTU2 H) -T2 - #U1 #HTU1 #H #H12 elim (fqu_cpx_trans_tdneq … H1 … HTU1 H) -T1 + #U1 #HTU1 #H #H12 elim (fqu_cpx_trans_tneqx … H1 … HTU1 H) -T1 /3 width=8 by fqup_strap2, ex3_intro/ ] qed-. -lemma fqus_cpx_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → +lemma fqus_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,U2⦄. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 -[ #H12 elim (fqup_cpx_trans_tdneq … H12 … HTU2 H) -T2 +[ #H12 elim (fqup_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_rdeq.ma deleted file mode 100644 index 8e84ffab9..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_rdeq.ma +++ /dev/null @@ -1,29 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_rdeq.ma". -include "basic_2/rt_transition/rpx_fsle.ma". - -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) - -(* Properties with sort-irrelevant equivalence for local environments *******) - -(* Basic_2A1: was just: cpx_lleq_conf_sn *) -lemma cpx_rdeq_conf_sn: ∀h,G. s_r_confluent1 … (cpx h G) rdeq. -/3 width=6 by cpx_rex_conf/ qed-. - -(* Basic_2A1: was just: cpx_lleq_conf_dx *) -lemma cpx_rdeq_conf_dx: ∀h,G,L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ⬈[h] T2 → - ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. -/4 width=5 by cpx_rdeq_conf_sn, rdeq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma new file mode 100644 index 000000000..08823139b --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma @@ -0,0 +1,29 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx_reqx.ma". +include "basic_2/rt_transition/rpx_fsle.ma". + +(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) + +(* Properties with sort-irrelevant equivalence for local environments *******) + +(* Basic_2A1: was just: cpx_lleq_conf_sn *) +lemma cpx_reqx_conf_sn: ∀h,G. s_r_confluent1 … (cpx h G) reqx. +/3 width=6 by cpx_rex_conf/ qed-. + +(* Basic_2A1: was just: cpx_lleq_conf_dx *) +lemma cpx_reqx_conf_dx: ∀h,G,L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ⬈[h] T2 → + ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. +/4 width=5 by cpx_reqx_conf_sn, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma index 8c0702056..57a4c6964 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma @@ -14,7 +14,7 @@ include "basic_2/notation/relations/predsubtyproper_7.ma". include "static_2/s_transition/fqu.ma". -include "static_2/static/rdeq.ma". +include "static_2/static/reqx.ma". include "basic_2/rt_transition/lpr_lpx.ma". (* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_fdeq.ma deleted file mode 100644 index a08244671..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_fdeq.ma +++ /dev/null @@ -1,46 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/s_transition/fqu_tdeq.ma". -include "static_2/static/fdeq.ma". -include "basic_2/rt_transition/fpb_rdeq.ma". - -(* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************) - -(* Properties with degree-based equivalence for closures ********************) - -(* Basic_2A1: uses: fleq_fpb_trans *) -lemma fdeq_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ⦃F1,K1,T1⦄ ≛ ⦃F2,K2,T2⦄ → - ∀G2,L2,U2. ⦃F2,K2,T2⦄ ≻[h] ⦃G2,L2,U2⦄ → - ∃∃G1,L1,U1. ⦃F1,K1,T1⦄ ≻[h] ⦃G1,L1,U1⦄ & ⦃G1,L1,U1⦄ ≛ ⦃G2,L2,U2⦄. -#h #F1 #F2 #K1 #K2 #T1 #T2 * -F2 -K2 -T2 -#K2 #T2 #HK12 #HT12 #G2 #L2 #U2 #H12 -elim (tdeq_fpb_trans … HT12 … H12) -T2 #K0 #T0 #H #HT0 #HK0 -elim (rdeq_fpb_trans … HK12 … H) -K2 #L0 #U0 #H #HUT0 #HLK0 -@(ex2_3_intro … H) -H (**) (* full auto too slow *) -/4 width=3 by fdeq_intro_dx, rdeq_trans, tdeq_rdeq_conf, tdeq_trans/ -qed-. - -(* Inversion lemmas with degree-based equivalence for closures **************) - -(* Basic_2A1: uses: fpb_inv_fleq *) -lemma fpb_inv_fdeq: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⊥. -#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 -[ #G2 #L2 #T2 #H12 #H elim (fdeq_inv_gen_sn … H) -H - /3 width=11 by rdeq_fwd_length, fqu_inv_tdeq/ -| #T2 #_ #HnT #H elim (fdeq_inv_gen_sn … H) -H /2 width=1 by/ -| #L2 #_ #HnL #H elim (fdeq_inv_gen_sn … H) -H /2 width=1 by/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma new file mode 100644 index 000000000..0dac369a3 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma @@ -0,0 +1,46 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/s_transition/fqu_teqx.ma". +include "static_2/static/feqx.ma". +include "basic_2/rt_transition/fpb_reqx.ma". + +(* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************) + +(* Properties with degree-based equivalence for closures ********************) + +(* Basic_2A1: uses: fleq_fpb_trans *) +lemma feqx_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ⦃F1,K1,T1⦄ ≛ ⦃F2,K2,T2⦄ → + ∀G2,L2,U2. ⦃F2,K2,T2⦄ ≻[h] ⦃G2,L2,U2⦄ → + ∃∃G1,L1,U1. ⦃F1,K1,T1⦄ ≻[h] ⦃G1,L1,U1⦄ & ⦃G1,L1,U1⦄ ≛ ⦃G2,L2,U2⦄. +#h #F1 #F2 #K1 #K2 #T1 #T2 * -F2 -K2 -T2 +#K2 #T2 #HK12 #HT12 #G2 #L2 #U2 #H12 +elim (teqx_fpb_trans … HT12 … H12) -T2 #K0 #T0 #H #HT0 #HK0 +elim (reqx_fpb_trans … HK12 … H) -K2 #L0 #U0 #H #HUT0 #HLK0 +@(ex2_3_intro … H) -H (**) (* full auto too slow *) +/4 width=3 by feqx_intro_dx, reqx_trans, teqx_reqx_conf, teqx_trans/ +qed-. + +(* Inversion lemmas with degree-based equivalence for closures **************) + +(* Basic_2A1: uses: fpb_inv_fleq *) +lemma fpb_inv_feqx: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → + ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⊥. +#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +[ #G2 #L2 #T2 #H12 #H elim (feqx_inv_gen_sn … H) -H + /3 width=11 by reqx_fwd_length, fqu_inv_teqx/ +| #T2 #_ #HnT #H elim (feqx_inv_gen_sn … H) -H /2 width=1 by/ +| #L2 #_ #HnL #H elim (feqx_inv_gen_sn … H) -H /2 width=1 by/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_rdeq.ma deleted file mode 100644 index b09005faf..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_rdeq.ma +++ /dev/null @@ -1,50 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_fqus.ma". -include "basic_2/rt_transition/cpx_rdeq.ma". -include "basic_2/rt_transition/lpx_rdeq.ma". -include "basic_2/rt_transition/fpb.ma". - -(* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************) - -(* Properties with sort-irrelevant equivalence for local environments *******) - -lemma tdeq_fpb_trans: ∀h,U2,U1. U2 ≛ U1 → - ∀G1,G2,L1,L2,T1. ⦃G1,L1,U1⦄ ≻[h] ⦃G2,L2,T1⦄ → - ∃∃L,T2. ⦃G1,L1,U2⦄ ≻[h] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. -#h #U2 #U1 #HU21 #G1 #G2 #L1 #L2 #T1 * -G2 -L2 -T1 -[ #G2 #L2 #T1 #H - elim (tdeq_fqu_trans … H … HU21) -H - /3 width=5 by fpb_fqu, ex3_2_intro/ -| #T1 #HUT1 #HnUT1 - elim (tdeq_cpx_trans … HU21 … HUT1) -HUT1 - /6 width=5 by fpb_cpx, tdeq_canc_sn, tdeq_trans, ex3_2_intro/ -| /6 width=5 by fpb_lpx, rpx_tdeq_div, tdeq_rdeq_conf, ex3_2_intro/ -] -qed-. - -(* Basic_2A1: was just: lleq_fpb_trans *) -lemma rdeq_fpb_trans: ∀h,F,K1,K2,T. K1 ≛[T] K2 → - ∀G,L2,U. ⦃F,K2,T⦄ ≻[h] ⦃G,L2,U⦄ → - ∃∃L1,U0. ⦃F,K1,T⦄ ≻[h] ⦃G,L1,U0⦄ & U0 ≛ U & L1 ≛[U] L2. -#h #F #K1 #K2 #T #HT #G #L2 #U * -G -L2 -U -[ #G #L2 #U #H2 elim (rdeq_fqu_trans … H2 … HT) -K2 - /3 width=5 by fpb_fqu, ex3_2_intro/ -| #U #HTU #HnTU elim (rdeq_cpx_trans … HT … HTU) -HTU - /5 width=11 by fpb_cpx, cpx_rdeq_conf_sn, tdeq_trans, tdeq_rdeq_conf, ex3_2_intro/ (**) (* time: 36s on dev *) -| #L2 #HKL2 #HnKL2 elim (rdeq_lpx_trans … HKL2 … HT) -HKL2 - /6 width=5 by fpb_lpx, (* 2x *) rdeq_canc_sn, ex3_2_intro/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma new file mode 100644 index 000000000..de168279c --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma @@ -0,0 +1,50 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx_fqus.ma". +include "basic_2/rt_transition/cpx_reqx.ma". +include "basic_2/rt_transition/lpx_reqx.ma". +include "basic_2/rt_transition/fpb.ma". + +(* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************) + +(* Properties with sort-irrelevant equivalence for local environments *******) + +lemma teqx_fpb_trans: ∀h,U2,U1. U2 ≛ U1 → + ∀G1,G2,L1,L2,T1. ⦃G1,L1,U1⦄ ≻[h] ⦃G2,L2,T1⦄ → + ∃∃L,T2. ⦃G1,L1,U2⦄ ≻[h] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#h #U2 #U1 #HU21 #G1 #G2 #L1 #L2 #T1 * -G2 -L2 -T1 +[ #G2 #L2 #T1 #H + elim (teqx_fqu_trans … H … HU21) -H + /3 width=5 by fpb_fqu, ex3_2_intro/ +| #T1 #HUT1 #HnUT1 + elim (teqx_cpx_trans … HU21 … HUT1) -HUT1 + /6 width=5 by fpb_cpx, teqx_canc_sn, teqx_trans, ex3_2_intro/ +| /6 width=5 by fpb_lpx, rpx_teqx_div, teqx_reqx_conf, ex3_2_intro/ +] +qed-. + +(* Basic_2A1: was just: lleq_fpb_trans *) +lemma reqx_fpb_trans: ∀h,F,K1,K2,T. K1 ≛[T] K2 → + ∀G,L2,U. ⦃F,K2,T⦄ ≻[h] ⦃G,L2,U⦄ → + ∃∃L1,U0. ⦃F,K1,T⦄ ≻[h] ⦃G,L1,U0⦄ & U0 ≛ U & L1 ≛[U] L2. +#h #F #K1 #K2 #T #HT #G #L2 #U * -G -L2 -U +[ #G #L2 #U #H2 elim (reqx_fqu_trans … H2 … HT) -K2 + /3 width=5 by fpb_fqu, ex3_2_intro/ +| #U #HTU #HnTU elim (reqx_cpx_trans … HT … HTU) -HTU + /5 width=11 by fpb_cpx, cpx_reqx_conf_sn, teqx_trans, teqx_reqx_conf, ex3_2_intro/ (**) (* time: 36s on dev *) +| #L2 #HKL2 #HnKL2 elim (reqx_lpx_trans … HKL2 … HT) -HKL2 + /6 width=5 by fpb_lpx, (* 2x *) reqx_canc_sn, ex3_2_intro/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma index 690e8ff32..e875cac28 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma @@ -13,7 +13,7 @@ (**************************************************************************) include "basic_2/notation/relations/predsubty_7.ma". -include "static_2/static/fdeq.ma". +include "static_2/static/feqx.ma". include "static_2/s_transition/fquq.ma". include "basic_2/rt_transition/lpr_lpx.ma". @@ -24,7 +24,7 @@ inductive fpbq (h) (G1) (L1) (T1): relation3 genv lenv term ≝ | fpbq_fquq: ∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂⸮ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2 | fpbq_cpx : ∀T2. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T2 → fpbq h G1 L1 T1 G1 L1 T2 | fpbq_lpx : ∀L2. ⦃G1,L1⦄ ⊢ ⬈[h] L2 → fpbq h G1 L1 T1 G1 L2 T1 -| fpbq_fdeq: ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2 +| fpbq_feqx: ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2 . interpretation diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma index a29292aae..ead3fc1bf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma @@ -13,7 +13,7 @@ (**************************************************************************) include "static_2/static/aaa_fqus.ma". -include "static_2/static/aaa_fdeq.ma". +include "static_2/static/aaa_feqx.ma". include "basic_2/rt_transition/lpx_aaa.ma". include "basic_2/rt_transition/fpbq.ma". @@ -24,5 +24,5 @@ include "basic_2/rt_transition/fpbq.ma". lemma fpbq_aaa_conf: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2. #h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 -/3 width=8 by lpx_aaa_conf, cpx_aaa_conf, aaa_fdeq_conf, aaa_fquq_conf, ex_intro/ +/3 width=8 by lpx_aaa_conf, cpx_aaa_conf, aaa_feqx_conf, aaa_fquq_conf, ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma index 21143003b..af02bdefa 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/rt_transition/fpb_fdeq.ma". +include "basic_2/rt_transition/fpb_feqx.ma". include "basic_2/rt_transition/fpbq.ma". (* PARALLEL RST-TRANSITION FOR CLOSURES *************************************) @@ -26,9 +26,9 @@ lemma fpb_fpbq: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → qed. (* Basic_2A1: fpb_fpbq_alt *) -lemma fpb_fpbq_ffdneq: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → +lemma fpb_fpbq_fneqx: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → ∧∧ ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ & (⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⊥). -/3 width=10 by fpb_fpbq, fpb_inv_fdeq, conj/ qed-. +/3 width=10 by fpb_fpbq, fpb_inv_feqx, conj/ qed-. (* Inversrion lemmas with proper parallel rst-transition for closures *******) @@ -38,17 +38,17 @@ lemma fpbq_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ | ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄. #h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 [ #G2 #L2 #T2 * [2: * #H1 #H2 #H3 destruct ] - /3 width=1 by fpb_fqu, fdeq_intro_sn, or_intror, or_introl/ -| #T2 #H elim (tdeq_dec T1 T2) - /4 width=1 by fpb_cpx, fdeq_intro_sn, or_intror, or_introl/ -| #L2 elim (rdeq_dec L1 L2 T1) - /4 width=1 by fpb_lpx, fdeq_intro_sn, or_intror, or_introl/ + /3 width=1 by fpb_fqu, feqx_intro_sn, or_intror, or_introl/ +| #T2 #H elim (teqx_dec T1 T2) + /4 width=1 by fpb_cpx, feqx_intro_sn, or_intror, or_introl/ +| #L2 elim (reqx_dec L1 L2 T1) + /4 width=1 by fpb_lpx, feqx_intro_sn, or_intror, or_introl/ | /2 width=1 by or_introl/ ] qed-. (* Basic_2A1: fpbq_inv_fpb_alt *) -lemma fpbq_ffdneq_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → +lemma fpbq_fneqx_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → (⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⊥) → ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄. #h #G1 #G2 #L1 #L2 #T1 #T2 #H #H0 elim (fpbq_inv_fpb … H) -H // #H elim H0 -H0 // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_rdeq.ma deleted file mode 100644 index 8055506a6..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_rdeq.ma +++ /dev/null @@ -1,32 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_req.ma". -include "basic_2/rt_transition/rpx_rdeq.ma". -include "basic_2/rt_transition/rpx_lpx.ma". - -(* UNBOUND PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS ***************) - -(* Properties with sort-irrelevant equivalence for local environments *******) - -(* Basic_2A1: uses: lleq_lpx_trans *) -lemma rdeq_lpx_trans (h) (G): ∀L2,K2. ⦃G,L2⦄ ⊢ ⬈[h] K2 → - ∀L1. ∀T:term. L1 ≛[T] L2 → - ∃∃K1. ⦃G,L1⦄ ⊢ ⬈[h] K1 & K1 ≛[T] K2. -#h #G #L2 #K2 #HLK2 #L1 #T #HL12 -lapply (lpx_rpx … T HLK2) -HLK2 #HLK2 -elim (rdeq_rpx_trans … HLK2 … HL12) -L2 #K #H #HK2 -elim (rpx_inv_lpx_req … H) -H #K1 #HLK1 #HK1 -/3 width=5 by req_rdeq_trans, ex2_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma new file mode 100644 index 000000000..ad623b08b --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma @@ -0,0 +1,32 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx_req.ma". +include "basic_2/rt_transition/rpx_reqx.ma". +include "basic_2/rt_transition/rpx_lpx.ma". + +(* UNBOUND PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS ***************) + +(* Properties with sort-irrelevant equivalence for local environments *******) + +(* Basic_2A1: uses: lleq_lpx_trans *) +lemma reqx_lpx_trans (h) (G): ∀L2,K2. ⦃G,L2⦄ ⊢ ⬈[h] K2 → + ∀L1. ∀T:term. L1 ≛[T] L2 → + ∃∃K1. ⦃G,L1⦄ ⊢ ⬈[h] K1 & K1 ≛[T] K2. +#h #G #L2 #K2 #HLK2 #L1 #T #HL12 +lapply (lpx_rpx … T HLK2) -HLK2 #HLK2 +elim (reqx_rpx_trans … HLK2 … HL12) -L2 #K #H #HK2 +elim (rpx_inv_lpx_req … H) -H #K1 #HLK1 #HK1 +/3 width=5 by req_reqx_trans, ex2_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rdeq.ma deleted file mode 100644 index b8117c047..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rdeq.ma +++ /dev/null @@ -1,170 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_drops.ma". -include "static_2/static/rdeq_fqup.ma". -include "static_2/static/rdeq_rdeq.ma". -include "basic_2/rt_transition/rpx_fsle.ma". - -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) - -(* Properties with sort-irrelevant equivalence for local environments *******) - -lemma rpx_pair_sn_split: ∀h,G,L1,L2,V. ⦃G,L1⦄ ⊢ ⬈[h,V] L2 → ∀I,T. - ∃∃L. ⦃G,L1⦄ ⊢ ⬈[h,②{I}V.T] L & L ≛[V] L2. -/3 width=5 by rpx_fsge_comp, rex_pair_sn_split/ qed-. - -lemma rpx_flat_dx_split: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈[h,T] L2 → ∀I,V. - ∃∃L. ⦃G,L1⦄ ⊢ ⬈[h,ⓕ{I}V.T] L & L ≛[T] L2. -/3 width=5 by rpx_fsge_comp, rex_flat_dx_split/ qed-. - -lemma rpx_bind_dx_split: ∀h,I,G,L1,L2,V1,T. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈[h,T] L2 → ∀p. - ∃∃L,V. ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V1.T] L & L.ⓑ{I}V ≛[T] L2 & ⦃G,L1⦄ ⊢ V1 ⬈[h] V. -/3 width=5 by rpx_fsge_comp, rex_bind_dx_split/ qed-. - -lemma rpx_bind_dx_split_void: ∀h,G,K1,L2,T. ⦃G,K1.ⓧ⦄ ⊢ ⬈[h,T] L2 → ∀p,I,V. - ∃∃K2. ⦃G,K1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] K2 & K2.ⓧ ≛[T] L2. -/3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void/ qed-. - -lemma rpx_tdeq_conf: ∀h,G. s_r_confluent1 … cdeq (rpx h G). -/2 width=5 by tdeq_rex_conf/ qed-. - -lemma rpx_tdeq_div: ∀h,T1,T2. T1 ≛ T2 → - ∀G,L1,L2. ⦃G,L1⦄ ⊢ ⬈[h,T2] L2 → ⦃G,L1⦄ ⊢ ⬈[h,T1] L2. -/2 width=5 by tdeq_rex_div/ qed-. - -lemma cpx_tdeq_conf_rex: ∀h,G. R_confluent2_rex … (cpx h G) cdeq (cpx h G) cdeq. -#h #G #L0 #T0 #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1 /2 width=3 by ex2_intro/ -[ #G #L0 #s0 #X0 #H0 #L1 #HL01 #L2 #HL02 - elim (tdeq_inv_sort1 … H0) -H0 #s1 #H destruct - /3 width=3 by tdeq_sort, ex2_intro/ -| #I #G #K0 #V0 #V1 #W1 #_ #IH #HVW1 #T2 #H0 #L1 #H1 #L2 #H2 - >(tdeq_inv_lref1 … H0) -H0 - elim (rpx_inv_zero_pair_sn … H1) -H1 #K1 #X1 #HK01 #HX1 #H destruct - elim (rdeq_inv_zero_pair_sn … H2) -H2 #K2 #X2 #HK02 #HX2 #H destruct - elim (IH X2 … HK01 … HK02) // -K0 -V0 #V #HV1 #HV2 - elim (tdeq_lifts_sn … HV1 … HVW1) -V1 /3 width=5 by cpx_delta, ex2_intro/ -| #I0 #G #K0 #V1 #W1 #i #_ #IH #HVW1 #T2 #H0 #L1 #H1 #L2 #H2 - >(tdeq_inv_lref1 … H0) -H0 - elim (rpx_inv_lref_bind_sn … H1) -H1 #I1 #K1 #HK01 #H destruct - elim (rdeq_inv_lref_bind_sn … H2) -H2 #I2 #K2 #HK02 #H destruct - elim (IH … HK01 … HK02) [|*: //] -K0 #V #HV1 #HV2 - elim (tdeq_lifts_sn … HV1 … HVW1) -V1 /3 width=5 by cpx_lref, ex2_intro/ -| #p #I #G #L0 #V0 #V1 #T0 #T1 #_ #_ #IHV #IHT #X0 #H0 #L1 #H1 #L2 #H2 - elim (tdeq_inv_pair1 … H0) -H0 #V2 #T2 #HV02 #HT02 #H destruct - elim (rpx_inv_bind … H1) -H1 #HL01 #H1 - elim (rdeq_inv_bind … H2) -H2 #HL02 #H2 - lapply (rdeq_bind_repl_dx … H2 (BPair I V2) ?) -H2 /2 width=1 by ext2_pair/ #H2 - elim (IHV … HV02 … HL01 … HL02) -IHV -HV02 -HL01 -HL02 - elim (IHT … HT02 … H1 … H2) -L0 -T0 - /3 width=5 by cpx_bind, tdeq_pair, ex2_intro/ -| #I #G #L0 #V0 #V1 #T0 #T1 #_ #_ #IHV #IHT #X0 #H0 #L1 #H1 #L2 #H2 - elim (tdeq_inv_pair1 … H0) -H0 #V2 #T2 #HV02 #HT02 #H destruct - elim (rpx_inv_flat … H1) -H1 #HL01 #H1 - elim (rdeq_inv_flat … H2) -H2 #HL02 #H2 - elim (IHV … HV02 … HL01 … HL02) -IHV -HV02 -HL01 -HL02 - elim (IHT … HT02 … H1 … H2) -L0 -V0 -T0 - /3 width=5 by cpx_flat, tdeq_pair, ex2_intro/ -| #G #L0 #V0 #U0 #T0 #T1 #HTU0 #_ #IH #X0 #H0 #L1 #H1 #L2 #H2 - elim (tdeq_inv_pair1 … H0) -H0 #V2 #U2 #HV02 #HU02 #H destruct - elim (rpx_inv_bind … H1) -H1 #HL01 #H1 - elim (rdeq_inv_bind … H2) -H2 #HL02 #H2 - lapply (rpx_inv_lifts_bi … H1 (Ⓣ) … HTU0) -H1 [6:|*: /3 width=2 by drops_refl, drops_drop/ ] #H1 - lapply (rdeq_inv_lifts_bi … H2 (Ⓣ) … HTU0) -H2 [6:|*: /3 width=2 by drops_refl, drops_drop/ ] #H2 - elim (tdeq_inv_lifts_sn … HU02 … HTU0) -U0 #T2 #HTU2 #HT02 - elim (IH … HT02 … H1 … H2) -L0 -T0 #T #HT1 - /3 width=5 by cpx_zeta, ex2_intro/ -| #G #L0 #V0 #T0 #T1 #_ #IH #X0 #H0 #L1 #H1 #L2 #H2 - elim (tdeq_inv_pair1 … H0) -H0 #V2 #T2 #_ #HT02 #H destruct - elim (rpx_inv_flat … H1) -H1 #HL01 #H1 - elim (rdeq_inv_flat … H2) -H2 #HL02 #H2 - elim (IH … HT02 … H1 … H2) -L0 -V0 -T0 - /3 width=3 by cpx_eps, ex2_intro/ -| #G #L0 #V0 #T0 #T1 #_ #IH #X0 #H0 #L1 #H1 #L2 #H2 - elim (tdeq_inv_pair1 … H0) -H0 #V2 #T2 #HV02 #_ #H destruct - elim (rpx_inv_flat … H1) -H1 #HL01 #H1 - elim (rdeq_inv_flat … H2) -H2 #HL02 #H2 - elim (IH … HV02 … HL01 … HL02) -L0 -V0 -T1 - /3 width=3 by cpx_ee, ex2_intro/ -| #p #G #L0 #V0 #V1 #W0 #W1 #T0 #T1 #_ #_ #_ #IHV #IHW #IHT #X0 #H0 #L1 #H1 #L2 #H2 - elim (tdeq_inv_pair1 … H0) -H0 #V2 #X #HV02 #H0 #H destruct - elim (tdeq_inv_pair1 … H0) -H0 #W2 #T2 #HW02 #HT02 #H destruct - elim (rpx_inv_flat … H1) -H1 #H1LV0 #H1 - elim (rpx_inv_bind … H1) -H1 #H1LW0 #H1LT0 - elim (rdeq_inv_flat … H2) -H2 #H2LV0 #H2 - elim (rdeq_inv_bind … H2) -H2 #H2LW0 #H2LT0 - lapply (rdeq_bind_repl_dx … H2LT0 (BPair Abst W2) ?) -H2LT0 /2 width=1 by ext2_pair/ #H2LT0 - elim (IHV … HV02 … H1LV0 … H2LV0) -IHV -HV02 -H1LV0 -H2LV0 - elim (IHW … HW02 … H1LW0 … H2LW0) -IHW -HW02 -H1LW0 -H2LW0 - elim (IHT … HT02 … H1LT0 … H2LT0) -L0 -V0 -T0 - /4 width=7 by cpx_beta, tdeq_pair, ex2_intro/ (* note: 2 tdeq_pair *) -| #p #G #L0 #V0 #V1 #U1 #W0 #W1 #T0 #T1 #_ #_ #_ #IHV #IHW #IHT #HVU1 #X0 #H0 #L1 #H1 #L2 #H2 - elim (tdeq_inv_pair1 … H0) -H0 #V2 #X #HV02 #H0 #H destruct - elim (tdeq_inv_pair1 … H0) -H0 #W2 #T2 #HW02 #HT02 #H destruct - elim (rpx_inv_flat … H1) -H1 #H1LV0 #H1 - elim (rpx_inv_bind … H1) -H1 #H1LW0 #H1LT0 - elim (rdeq_inv_flat … H2) -H2 #H2LV0 #H2 - elim (rdeq_inv_bind … H2) -H2 #H2LW0 #H2LT0 - lapply (rdeq_bind_repl_dx … H2LT0 (BPair Abbr W2) ?) -H2LT0 /2 width=1 by ext2_pair/ #H2LT0 - elim (IHV … HV02 … H1LV0 … H2LV0) -IHV -HV02 -H1LV0 -H2LV0 #V #HV1 - elim (IHW … HW02 … H1LW0 … H2LW0) -IHW -HW02 -H1LW0 -H2LW0 - elim (IHT … HT02 … H1LT0 … H2LT0) -L0 -V0 -T0 - elim (tdeq_lifts_sn … HV1 … HVU1) -V1 - /4 width=9 by cpx_theta, tdeq_pair, ex2_intro/ (* note: 2 tdeq_pair *) -] -qed-. - -lemma cpx_tdeq_conf: ∀h,G,L. ∀T0:term. ∀T1. ⦃G,L⦄ ⊢ T0 ⬈[h] T1 → - ∀T2. T0 ≛ T2 → - ∃∃T. T1 ≛ T & ⦃G,L⦄ ⊢ T2 ⬈[h] T. -#h #G #L #T0 #T1 #HT01 #T2 #HT02 -elim (cpx_tdeq_conf_rex … HT01 … HT02 L … L) -HT01 -HT02 -/2 width=3 by rex_refl, ex2_intro/ -qed-. - -lemma tdeq_cpx_trans: ∀h,G,L,T2. ∀T0:term. T2 ≛ T0 → - ∀T1. ⦃G,L⦄ ⊢ T0 ⬈[h] T1 → - ∃∃T. ⦃G,L⦄ ⊢ T2 ⬈[h] T & T ≛ T1. -#h #G #L #T2 #T0 #HT20 #T1 #HT01 -elim (cpx_tdeq_conf … HT01 T2) -HT01 /3 width=3 by tdeq_sym, ex2_intro/ -qed-. - -(* Basic_2A1: uses: cpx_lleq_conf *) -lemma cpx_rdeq_conf: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → - ∀L2. L0 ≛[T0] L2 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈[h] T & T1 ≛ T. -#h #G #L0 #T0 #T1 #HT01 #L2 #HL02 -elim (cpx_tdeq_conf_rex … HT01 T0 … L0 … HL02) -HT01 -HL02 -/2 width=3 by rex_refl, ex2_intro/ -qed-. - -(* Basic_2A1: uses: lleq_cpx_trans *) -lemma rdeq_cpx_trans: ∀h,G,L2,L0,T0. L2 ≛[T0] L0 → - ∀T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈[h] T & T ≛ T1. -#h #G #L2 #L0 #T0 #HL20 #T1 #HT01 -elim (cpx_rdeq_conf … HT01 L2) -HT01 -/3 width=3 by rdeq_sym, tdeq_sym, ex2_intro/ -qed-. - -lemma rpx_rdeq_conf: ∀h,G,T. confluent2 … (rpx h G T) (rdeq T). -/3 width=6 by rpx_fsge_comp, rdeq_fsge_comp, cpx_tdeq_conf_rex, rex_conf/ qed-. - -lemma rdeq_rpx_trans: ∀h,G,T,L2,K2. ⦃G,L2⦄ ⊢ ⬈[h,T] K2 → - ∀L1. L1 ≛[T] L2 → - ∃∃K1. ⦃G,L1⦄ ⊢ ⬈[h,T] K1 & K1 ≛[T] K2. -#h #G #T #L2 #K2 #HLK2 #L1 #HL12 -elim (rpx_rdeq_conf … HLK2 L1) -/3 width=3 by rdeq_sym, ex2_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma new file mode 100644 index 000000000..b0b50cf3a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma @@ -0,0 +1,170 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx_drops.ma". +include "static_2/static/reqx_fqup.ma". +include "static_2/static/reqx_reqx.ma". +include "basic_2/rt_transition/rpx_fsle.ma". + +(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) + +(* Properties with sort-irrelevant equivalence for local environments *******) + +lemma rpx_pair_sn_split: ∀h,G,L1,L2,V. ⦃G,L1⦄ ⊢ ⬈[h,V] L2 → ∀I,T. + ∃∃L. ⦃G,L1⦄ ⊢ ⬈[h,②{I}V.T] L & L ≛[V] L2. +/3 width=5 by rpx_fsge_comp, rex_pair_sn_split/ qed-. + +lemma rpx_flat_dx_split: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈[h,T] L2 → ∀I,V. + ∃∃L. ⦃G,L1⦄ ⊢ ⬈[h,ⓕ{I}V.T] L & L ≛[T] L2. +/3 width=5 by rpx_fsge_comp, rex_flat_dx_split/ qed-. + +lemma rpx_bind_dx_split: ∀h,I,G,L1,L2,V1,T. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈[h,T] L2 → ∀p. + ∃∃L,V. ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V1.T] L & L.ⓑ{I}V ≛[T] L2 & ⦃G,L1⦄ ⊢ V1 ⬈[h] V. +/3 width=5 by rpx_fsge_comp, rex_bind_dx_split/ qed-. + +lemma rpx_bind_dx_split_void: ∀h,G,K1,L2,T. ⦃G,K1.ⓧ⦄ ⊢ ⬈[h,T] L2 → ∀p,I,V. + ∃∃K2. ⦃G,K1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] K2 & K2.ⓧ ≛[T] L2. +/3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void/ qed-. + +lemma rpx_teqx_conf: ∀h,G. s_r_confluent1 … cdeq (rpx h G). +/2 width=5 by teqx_rex_conf/ qed-. + +lemma rpx_teqx_div: ∀h,T1,T2. T1 ≛ T2 → + ∀G,L1,L2. ⦃G,L1⦄ ⊢ ⬈[h,T2] L2 → ⦃G,L1⦄ ⊢ ⬈[h,T1] L2. +/2 width=5 by teqx_rex_div/ qed-. + +lemma cpx_teqx_conf_rex: ∀h,G. R_confluent2_rex … (cpx h G) cdeq (cpx h G) cdeq. +#h #G #L0 #T0 #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1 /2 width=3 by ex2_intro/ +[ #G #L0 #s0 #X0 #H0 #L1 #HL01 #L2 #HL02 + elim (teqx_inv_sort1 … H0) -H0 #s1 #H destruct + /3 width=3 by teqx_sort, ex2_intro/ +| #I #G #K0 #V0 #V1 #W1 #_ #IH #HVW1 #T2 #H0 #L1 #H1 #L2 #H2 + >(teqx_inv_lref1 … H0) -H0 + elim (rpx_inv_zero_pair_sn … H1) -H1 #K1 #X1 #HK01 #HX1 #H destruct + elim (reqx_inv_zero_pair_sn … H2) -H2 #K2 #X2 #HK02 #HX2 #H destruct + elim (IH X2 … HK01 … HK02) // -K0 -V0 #V #HV1 #HV2 + elim (teqx_lifts_sn … HV1 … HVW1) -V1 /3 width=5 by cpx_delta, ex2_intro/ +| #I0 #G #K0 #V1 #W1 #i #_ #IH #HVW1 #T2 #H0 #L1 #H1 #L2 #H2 + >(teqx_inv_lref1 … H0) -H0 + elim (rpx_inv_lref_bind_sn … H1) -H1 #I1 #K1 #HK01 #H destruct + elim (reqx_inv_lref_bind_sn … H2) -H2 #I2 #K2 #HK02 #H destruct + elim (IH … HK01 … HK02) [|*: //] -K0 #V #HV1 #HV2 + elim (teqx_lifts_sn … HV1 … HVW1) -V1 /3 width=5 by cpx_lref, ex2_intro/ +| #p #I #G #L0 #V0 #V1 #T0 #T1 #_ #_ #IHV #IHT #X0 #H0 #L1 #H1 #L2 #H2 + elim (teqx_inv_pair1 … H0) -H0 #V2 #T2 #HV02 #HT02 #H destruct + elim (rpx_inv_bind … H1) -H1 #HL01 #H1 + elim (reqx_inv_bind … H2) -H2 #HL02 #H2 + lapply (reqx_bind_repl_dx … H2 (BPair I V2) ?) -H2 /2 width=1 by ext2_pair/ #H2 + elim (IHV … HV02 … HL01 … HL02) -IHV -HV02 -HL01 -HL02 + elim (IHT … HT02 … H1 … H2) -L0 -T0 + /3 width=5 by cpx_bind, teqx_pair, ex2_intro/ +| #I #G #L0 #V0 #V1 #T0 #T1 #_ #_ #IHV #IHT #X0 #H0 #L1 #H1 #L2 #H2 + elim (teqx_inv_pair1 … H0) -H0 #V2 #T2 #HV02 #HT02 #H destruct + elim (rpx_inv_flat … H1) -H1 #HL01 #H1 + elim (reqx_inv_flat … H2) -H2 #HL02 #H2 + elim (IHV … HV02 … HL01 … HL02) -IHV -HV02 -HL01 -HL02 + elim (IHT … HT02 … H1 … H2) -L0 -V0 -T0 + /3 width=5 by cpx_flat, teqx_pair, ex2_intro/ +| #G #L0 #V0 #U0 #T0 #T1 #HTU0 #_ #IH #X0 #H0 #L1 #H1 #L2 #H2 + elim (teqx_inv_pair1 … H0) -H0 #V2 #U2 #HV02 #HU02 #H destruct + elim (rpx_inv_bind … H1) -H1 #HL01 #H1 + elim (reqx_inv_bind … H2) -H2 #HL02 #H2 + lapply (rpx_inv_lifts_bi … H1 (Ⓣ) … HTU0) -H1 [6:|*: /3 width=2 by drops_refl, drops_drop/ ] #H1 + lapply (reqx_inv_lifts_bi … H2 (Ⓣ) … HTU0) -H2 [6:|*: /3 width=2 by drops_refl, drops_drop/ ] #H2 + elim (teqx_inv_lifts_sn … HU02 … HTU0) -U0 #T2 #HTU2 #HT02 + elim (IH … HT02 … H1 … H2) -L0 -T0 #T #HT1 + /3 width=5 by cpx_zeta, ex2_intro/ +| #G #L0 #V0 #T0 #T1 #_ #IH #X0 #H0 #L1 #H1 #L2 #H2 + elim (teqx_inv_pair1 … H0) -H0 #V2 #T2 #_ #HT02 #H destruct + elim (rpx_inv_flat … H1) -H1 #HL01 #H1 + elim (reqx_inv_flat … H2) -H2 #HL02 #H2 + elim (IH … HT02 … H1 … H2) -L0 -V0 -T0 + /3 width=3 by cpx_eps, ex2_intro/ +| #G #L0 #V0 #T0 #T1 #_ #IH #X0 #H0 #L1 #H1 #L2 #H2 + elim (teqx_inv_pair1 … H0) -H0 #V2 #T2 #HV02 #_ #H destruct + elim (rpx_inv_flat … H1) -H1 #HL01 #H1 + elim (reqx_inv_flat … H2) -H2 #HL02 #H2 + elim (IH … HV02 … HL01 … HL02) -L0 -V0 -T1 + /3 width=3 by cpx_ee, ex2_intro/ +| #p #G #L0 #V0 #V1 #W0 #W1 #T0 #T1 #_ #_ #_ #IHV #IHW #IHT #X0 #H0 #L1 #H1 #L2 #H2 + elim (teqx_inv_pair1 … H0) -H0 #V2 #X #HV02 #H0 #H destruct + elim (teqx_inv_pair1 … H0) -H0 #W2 #T2 #HW02 #HT02 #H destruct + elim (rpx_inv_flat … H1) -H1 #H1LV0 #H1 + elim (rpx_inv_bind … H1) -H1 #H1LW0 #H1LT0 + elim (reqx_inv_flat … H2) -H2 #H2LV0 #H2 + elim (reqx_inv_bind … H2) -H2 #H2LW0 #H2LT0 + lapply (reqx_bind_repl_dx … H2LT0 (BPair Abst W2) ?) -H2LT0 /2 width=1 by ext2_pair/ #H2LT0 + elim (IHV … HV02 … H1LV0 … H2LV0) -IHV -HV02 -H1LV0 -H2LV0 + elim (IHW … HW02 … H1LW0 … H2LW0) -IHW -HW02 -H1LW0 -H2LW0 + elim (IHT … HT02 … H1LT0 … H2LT0) -L0 -V0 -T0 + /4 width=7 by cpx_beta, teqx_pair, ex2_intro/ (* note: 2 teqx_pair *) +| #p #G #L0 #V0 #V1 #U1 #W0 #W1 #T0 #T1 #_ #_ #_ #IHV #IHW #IHT #HVU1 #X0 #H0 #L1 #H1 #L2 #H2 + elim (teqx_inv_pair1 … H0) -H0 #V2 #X #HV02 #H0 #H destruct + elim (teqx_inv_pair1 … H0) -H0 #W2 #T2 #HW02 #HT02 #H destruct + elim (rpx_inv_flat … H1) -H1 #H1LV0 #H1 + elim (rpx_inv_bind … H1) -H1 #H1LW0 #H1LT0 + elim (reqx_inv_flat … H2) -H2 #H2LV0 #H2 + elim (reqx_inv_bind … H2) -H2 #H2LW0 #H2LT0 + lapply (reqx_bind_repl_dx … H2LT0 (BPair Abbr W2) ?) -H2LT0 /2 width=1 by ext2_pair/ #H2LT0 + elim (IHV … HV02 … H1LV0 … H2LV0) -IHV -HV02 -H1LV0 -H2LV0 #V #HV1 + elim (IHW … HW02 … H1LW0 … H2LW0) -IHW -HW02 -H1LW0 -H2LW0 + elim (IHT … HT02 … H1LT0 … H2LT0) -L0 -V0 -T0 + elim (teqx_lifts_sn … HV1 … HVU1) -V1 + /4 width=9 by cpx_theta, teqx_pair, ex2_intro/ (* note: 2 teqx_pair *) +] +qed-. + +lemma cpx_teqx_conf: ∀h,G,L. ∀T0:term. ∀T1. ⦃G,L⦄ ⊢ T0 ⬈[h] T1 → + ∀T2. T0 ≛ T2 → + ∃∃T. T1 ≛ T & ⦃G,L⦄ ⊢ T2 ⬈[h] T. +#h #G #L #T0 #T1 #HT01 #T2 #HT02 +elim (cpx_teqx_conf_rex … HT01 … HT02 L … L) -HT01 -HT02 +/2 width=3 by rex_refl, ex2_intro/ +qed-. + +lemma teqx_cpx_trans: ∀h,G,L,T2. ∀T0:term. T2 ≛ T0 → + ∀T1. ⦃G,L⦄ ⊢ T0 ⬈[h] T1 → + ∃∃T. ⦃G,L⦄ ⊢ T2 ⬈[h] T & T ≛ T1. +#h #G #L #T2 #T0 #HT20 #T1 #HT01 +elim (cpx_teqx_conf … HT01 T2) -HT01 /3 width=3 by teqx_sym, ex2_intro/ +qed-. + +(* Basic_2A1: uses: cpx_lleq_conf *) +lemma cpx_reqx_conf: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → + ∀L2. L0 ≛[T0] L2 → + ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈[h] T & T1 ≛ T. +#h #G #L0 #T0 #T1 #HT01 #L2 #HL02 +elim (cpx_teqx_conf_rex … HT01 T0 … L0 … HL02) -HT01 -HL02 +/2 width=3 by rex_refl, ex2_intro/ +qed-. + +(* Basic_2A1: uses: lleq_cpx_trans *) +lemma reqx_cpx_trans: ∀h,G,L2,L0,T0. L2 ≛[T0] L0 → + ∀T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → + ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈[h] T & T ≛ T1. +#h #G #L2 #L0 #T0 #HL20 #T1 #HT01 +elim (cpx_reqx_conf … HT01 L2) -HT01 +/3 width=3 by reqx_sym, teqx_sym, ex2_intro/ +qed-. + +lemma rpx_reqx_conf: ∀h,G,T. confluent2 … (rpx h G T) (reqx T). +/3 width=6 by rpx_fsge_comp, reqx_fsge_comp, cpx_teqx_conf_rex, rex_conf/ qed-. + +lemma reqx_rpx_trans: ∀h,G,T,L2,K2. ⦃G,L2⦄ ⊢ ⬈[h,T] K2 → + ∀L1. L1 ≛[T] L2 → + ∃∃K1. ⦃G,L1⦄ ⊢ ⬈[h,T] K1 & K1 ≛[T] K2. +#h #G #T #L2 #K2 #HLK2 #L1 #HL12 +elim (rpx_reqx_conf … HLK2 L1) +/3 width=3 by reqx_sym, ex2_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl index 7773fd7b9..7636e65e8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl @@ -25,7 +25,7 @@ table { ] [ { "context-sensitive native validity" * } { [ [ "restricted refinement for lenvs" ] "lsubv ( ? ⊢ ? ⫃![?,?] ? )" "lsubv_drops" + "lsubv_lsubr" + "lsubv_lsuba" + "lsubv_cpms" + "lsubv_cpcs" + "lsubv_cnv" + "lsubv_lsubv" * ] - [ [ "for terms" ] "cnv" + "( ⦃?,?⦄ ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_tdeq" + "cnv_cpm_tdeq_trans" + "cnv_cpm_tdeq_conf" + "cnv_cpms_tdeq" + "cnv_cpms_conf" + "cnv_cpms_tdeq_conf" + "cnv_cpme" + "cnv_cpmuwe" + "cnv_cpmuwe_cpme" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ] + [ [ "for terms" ] "cnv" + "( ⦃?,?⦄ ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_teqx" + "cnv_cpm_teqx_trans" + "cnv_cpm_teqx_conf" + "cnv_cpms_teqx" + "cnv_cpms_conf" + "cnv_cpms_teqx_conf" + "cnv_cpmre" + "cnv_cpmuwe" + "cnv_cpmuwe_cpmre" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ] } ] } @@ -65,7 +65,7 @@ table { } ] [ { "context-sensitive parallel r-computation" * } { - [ [ "evaluation for terms" ] "cpre ( ⦃?,?⦄ ⊢ ? ➡*[?] 𝐍⦃?⦄ )" "cpre_csx" + "cpre_cpms" + "cpre_cpre" * ] + [ [ "evaluation for terms" ] "cprre ( ⦃?,?⦄ ⊢ ? ➡*[?] 𝐍⦃?⦄ )" "cprre_csx" + "cprre_cpms" + "cprre_cprre" * ] [ [ "for lenvs on all entries" ] "lprs ( ⦃?,?⦄ ⊢ ➡*[?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ] [ [ "for binders" ] "cprs_ext" + "( ⦃?,?⦄ ⊢ ? ➡*[?] ?)" * ] [ [ "for terms" ] "cprs" + "( ⦃?,?⦄ ⊢ ? ➡*[?] ?)" "cprs_ctc" + "cprs_tweq" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ] @@ -74,12 +74,12 @@ table { [ { "t-bound context-sensitive parallel rt-computation" * } { [ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( ⦃?,?⦄ ⊢ ? ⬌*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ] [ [ "t-unbound whd normal form for terms" ] "cnuw ( ⦃?,?⦄ ⊢ ⬌𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ] - [ [ "t-bpund evaluation for terms" ] "cpme ( ⦃?,?⦄ ⊢ ? ➡*[?,?] 𝐍⦃?⦄ )" "cpme_aaa" * ] - [ [ "for terms" ] "cpms" + "( ⦃?,?⦄ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_rdeq" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ] + [ [ "t-bpund evaluation for terms" ] "cpmre ( ⦃?,?⦄ ⊢ ? ➡*[?,?] 𝐍⦃?⦄ )" "cpmre_aaa" * ] + [ [ "for terms" ] "cpms" + "( ⦃?,?⦄ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqx" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ] } ] [ { "unbound context-sensitive parallel rst-computation" * } { - [ [ "strongly normalizing for closures" ] "fsb" + "( ≥[?] 𝐒⦃?,?,?⦄ )" "fsb_fdeq" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] + [ [ "strongly normalizing for closures" ] "fsb" + "( ≥[?] 𝐒⦃?,?,?⦄ )" "fsb_feqx" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] [ [ "proper for closures" ] "fpbg" + "( ⦃?,?,?⦄ >[?] ⦃?,?,?⦄ )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] [ [ "for closures" ] "fpbs" + "( ⦃?,?,?⦄ ≥[?] ⦃?,?,?⦄ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] } @@ -88,10 +88,10 @@ table { [ [ "compatibility for lenvs" ] "jsx" + "( ? ⊢ ? ⊒[?] ? )" "jsx_drops" + "jsx_lsubr" + "jsx_csx" + "jsx_rsx" + "jsx_jsx" * ] [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*[?,?] 𝐒⦃?⦄ )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ] [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_cnx_vector" + "csx_csx_vector" * ] - [ [ "strongly normalizing for terms" ] "csx" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_rdeq" + "csx_fdeq" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] - [ [ "for lenvs on all entries" ] "lpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_rdeq" + "lpxs_fdeq" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] + [ [ "strongly normalizing for terms" ] "csx" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqx" + "csx_feqx" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] + [ [ "for lenvs on all entries" ] "lpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqx" + "lpxs_feqx" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] [ [ "for binders" ] "cpxs_ext" + "( ⦃?,?⦄ ⊢ ? ⬈*[?] ? )" * ] - [ [ "for terms" ] "cpxs" + "( ⦃?,?⦄ ⊢ ? ⬈*[?] ? )" "cpxs_tdeq" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_rdeq" + "cpxs_fdeq" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] + [ [ "for terms" ] "cpxs" + "( ⦃?,?⦄ ⊢ ? ⬈*[?] ? )" "cpxs_teqx" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqx" + "cpxs_feqx" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] } ] } @@ -103,27 +103,27 @@ table { } ] [ { "context-sensitive parallel r-transition" * } { - [ [ "normal form for terms" ] "cnr ( ⦃?,?⦄ ⊢ ➡[?] 𝐍⦃?⦄ )" "cnr_simple" + "cnr_tdeq" + "cnr_drops" * ] + [ [ "normal form for terms" ] "cnr ( ⦃?,?⦄ ⊢ ➡[?] 𝐍⦃?⦄ )" "cnr_simple" + "cnr_teqx" + "cnr_drops" * ] [ [ "for lenvs on all entries" ] "lpr" + "( ⦃?,?⦄ ⊢ ➡[?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_lpr" * ] [ [ "for binders" ] "cpr_ext" + "( ⦃?,?⦄ ⊢ ? ➡[?] ? )" * ] - [ [ "for terms" ] "cpr" + "( ⦃?,?⦄ ⊢ ? ➡[?] ? )" "cpr_drops" + "cpr_drops_basic" + "cpr_tdeq" + "cpr_cpr" * ] + [ [ "for terms" ] "cpr" + "( ⦃?,?⦄ ⊢ ? ➡[?] ? )" "cpr_drops" + "cpr_drops_basic" + "cpr_teqx" + "cpr_cpr" * ] } ] [ { "t-bound context-sensitive parallel rt-transition" * } { - [ [ "for terms" ] "cpm" + "( ⦃?,?⦄ ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_tdeq" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" * ] + [ [ "for terms" ] "cpm" + "( ⦃?,?⦄ ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" * ] } ] [ { "unbound parallel rst-transition" * } { [ [ "for closures" ] "fpbq" + "( ⦃?,?,?⦄ ≽[?] ⦃?,?,?⦄ )" "fpbq_aaa" + "fpbq_fpb" * ] - [ [ "proper for closures" ] "fpb" + "( ⦃?,?,?⦄ ≻[?] ⦃?,?,?⦄ )" "fpb_rdeq" + "fpb_fdeq" * ] + [ [ "proper for closures" ] "fpb" + "( ⦃?,?,?⦄ ≻[?] ⦃?,?,?⦄ )" "fpb_reqx" + "fpb_feqx" * ] } ] [ { "unbound context-sensitive parallel rt-transition" * } { [ [ "normal form for terms" ] "cnx" + "( ⦃?,?⦄ ⊢ ⬈[?] 𝐍⦃?⦄ )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] - [ [ "for lenvs on referred entries" ] "rpx" + "( ⦃?,?⦄ ⊢ ⬈[?,?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_rdeq" + "rpx_lpx" + "rpx_rpx" * ] - [ [ "for lenvs on all entries" ] "lpx" + "( ⦃?,?⦄ ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_rdeq" + "lpx_aaa" * ] + [ [ "for lenvs on referred entries" ] "rpx" + "( ⦃?,?⦄ ⊢ ⬈[?,?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ] + [ [ "for lenvs on all entries" ] "lpx" + "( ⦃?,?⦄ ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqx" + "lpx_aaa" * ] [ [ "for binders" ] "cpx_ext" + "( ⦃?,?⦄ ⊢ ? ⬈[?] ? )" * ] - [ [ "for terms" ] "cpx" + "( ⦃?,?⦄ ⊢ ? ⬈[?] ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_rdeq" + "cpx_fdeq" * ] + [ [ "for terms" ] "cpx" + "( ⦃?,?⦄ ⊢ ? ⬈[?] ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqx" + "cpx_feqx" * ] } ] [ { "bound context-sensitive parallel rt-transition" * } { @@ -150,7 +150,7 @@ class "italic" { 2 } "scpes_cpcs" + "scpes_scpes" } ] - [ [ "for lenvs on referred entries" ] "rpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_rdeq" + "rpxs_fdeq" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ] + [ [ "for lenvs on referred entries" ] "rpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_reqx" + "rpxs_feqx" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ] [ [ "for lenvs on referred entries" ] "lfpr" + "( ⦃?,?⦄ ⊢ ➡[?,?] ? )" "lfpr_length" + "lfpr_drops" + "lfpr_fquq" + "lfpr_fqup" + "lfpr_aaa" + "lfpr_rpx" + "lfpr_lfpr" * ] [ { "evaluation for context-sensitive rt-reduction" * } { diff --git a/matita/matita/contribs/lambdadelta/compile_partial.sh b/matita/matita/contribs/lambdadelta/compile_partial.sh index 13afbaf04..df9e42328 100644 --- a/matita/matita/contribs/lambdadelta/compile_partial.sh +++ b/matita/matita/contribs/lambdadelta/compile_partial.sh @@ -2,3 +2,4 @@ ../../matitac.opt static_2 ../../matitac.opt basic_2 ../../matitac.opt apps_2 +../../matitac.opt alpha_1 diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma index 36fa26303..e65b5375a 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma @@ -15,6 +15,7 @@ include "ground_2/notation/functions/uparrow_1.ma". include "ground_2/notation/functions/downarrow_1.ma". include "arithmetics/nat.ma". +include "ground_2/pull/pull_2.ma". include "ground_2/lib/relations.ma". (* ARITHMETICAL PROPERTIES **************************************************) @@ -153,6 +154,14 @@ lemma lt_S_S: ∀x,y. x < y → ↑x < ↑y. lemma lt_S: ∀n,m. n < m → n < ↑m. /2 width=1 by le_S/ qed. +lemma monotonic_lt_minus_r: +∀p,q,n. q < n -> q < p → n-p < n-q. +#p #q #n #Hn #H +lapply (monotonic_le_minus_r … n H) -H #H +@(le_to_lt_to_lt … H) -H +/2 width=1 by lt_plus_to_minus/ +qed. + lemma max_S1_le_S: ∀n1,n2,n. (n1 ∨ n2) ≤ n → (↑n1 ∨ n2) ≤ ↑n. /4 width=2 by to_max, le_maxr, le_S_S, le_S/ qed-. @@ -294,6 +303,21 @@ lemma le_elim: ∀R:relation nat. #n1 #H elim (lt_le_false … H) -H // qed-. +lemma nat_elim_le_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 +<(minus_minus_m_m … Hn) -Hn +lapply (minus_le n2 n1) +let d ≝ (n2-n1) +@(nat_elim1 … d) -d -n1 #d +@pull_2 #Hd +<(minus_minus_m_m … Hd) in ⊢ (%→?); -Hd +let n1 ≝ (n2-d) #IHd +@IH -IH [| // ] #m #Hn +/4 width=3 by lt_to_le, lt_to_le_to_lt/ +qed-. + (* Iterators ****************************************************************) (* Note: see also: lib/arithemetics/bigops.ma *) diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma index 76381a9fa..cc4bf1797 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma @@ -12,7 +12,6 @@ (* *) (**************************************************************************) -include "ground_2/pull/pull_2.ma". include "ground_2/pull/pull_4.ma". include "ground_2/relocation/rtmap_uni.ma". include "static_2/notation/relations/relation_3.ma". diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_tdeq.ma deleted file mode 100644 index 3485e88cd..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_tdeq.ma +++ /dev/null @@ -1,90 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/syntax/tdeq.ma". -include "static_2/relocation/lifts_lifts.ma". - -(* GENERIC RELOCATION FOR TERMS *********************************************) - -(* Properties with sort-irrelevant equivalence for terms ********************) - -lemma tdeq_lifts_sn: liftable2_sn tdeq. -#T1 #T2 #H elim H -T1 -T2 [||| * ] -[ #s1 #s2 #f #X #H >(lifts_inv_sort1 … H) -H - /3 width=3 by lifts_sort, tdeq_sort, ex2_intro/ -| #i #f #X #H elim (lifts_inv_lref1 … H) -H - /3 width=3 by lifts_lref, tdeq_lref, ex2_intro/ -| #l #f #X #H >(lifts_inv_gref1 … H) -H - /2 width=3 by lifts_gref, tdeq_gref, ex2_intro/ -| #p #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f #X #H elim (lifts_inv_bind1 … H) -H - #W1 #U1 #HVW1 #HTU1 #H destruct - elim (IHV … HVW1) -V1 elim (IHT … HTU1) -T1 - /3 width=5 by lifts_bind, tdeq_pair, ex2_intro/ -| #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f #X #H elim (lifts_inv_flat1 … H) -H - #W1 #U1 #HVW1 #HTU1 #H destruct - elim (IHV … HVW1) -V1 elim (IHT … HTU1) -T1 - /3 width=5 by lifts_flat, tdeq_pair, ex2_intro/ -] -qed-. - -lemma tdeq_lifts_dx: liftable2_dx tdeq. -/3 width=3 by tdeq_lifts_sn, liftable2_sn_dx, tdeq_sym/ qed-. - -lemma tdeq_lifts_bi: liftable2_bi tdeq. -/3 width=6 by tdeq_lifts_sn, liftable2_sn_bi/ qed-. - -(* Inversion lemmas with sort-irrelevant equivalence for terms **************) - -lemma tdeq_inv_lifts_sn: deliftable2_sn tdeq. -#U1 #U2 #H elim H -U1 -U2 [||| * ] -[ #s1 #s2 #f #X #H >(lifts_inv_sort2 … H) -H - /3 width=3 by lifts_sort, tdeq_sort, ex2_intro/ -| #i #f #X #H elim (lifts_inv_lref2 … H) -H - /3 width=3 by lifts_lref, tdeq_lref, ex2_intro/ -| #l #f #X #H >(lifts_inv_gref2 … H) -H - /2 width=3 by lifts_gref, tdeq_gref, ex2_intro/ -| #p #I #W1 #W2 #U1 #U2 #_ #_ #IHW #IHU #f #X #H elim (lifts_inv_bind2 … H) -H - #V1 #T1 #HVW1 #HTU1 #H destruct - elim (IHW … HVW1) -W1 elim (IHU … HTU1) -U1 - /3 width=5 by lifts_bind, tdeq_pair, ex2_intro/ -| #I #W1 #W2 #U1 #U2 #_ #_ #IHW #IHU #f #X #H elim (lifts_inv_flat2 … H) -H - #V1 #T1 #HVW1 #HTU1 #H destruct - elim (IHW … HVW1) -W1 elim (IHU … HTU1) -U1 - /3 width=5 by lifts_flat, tdeq_pair, ex2_intro/ -] -qed-. - -lemma tdeq_inv_lifts_dx: deliftable2_dx tdeq. -/3 width=3 by tdeq_inv_lifts_sn, deliftable2_sn_dx, tdeq_sym/ qed-. - -lemma tdeq_inv_lifts_bi: deliftable2_bi tdeq. -/3 width=6 by tdeq_inv_lifts_sn, deliftable2_sn_bi/ qed-. - -lemma tdeq_lifts_inv_pair_sn (I) (f:rtmap): - ∀X,T. ⇧*[f]X ≘ T → ∀V. ②{I}V.T ≛ X → ⊥. -#I #f #X #T #H elim H -f -X -T -[ #f #s #V #H - elim (tdeq_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct -| #f #i #j #_ #V #H - elim (tdeq_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct -| #f #l #V #H - elim (tdeq_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct -| #f #p #J #X1 #T1 #X2 #T2 #_ #_ #_ #IH2 #V #H - elim (tdeq_inv_pair1 … H) -H #Z1 #Z2 #_ #HZ2 #H destruct - /2 width=2 by/ -| #f #J #X1 #T1 #X2 #T2 #_ #_ #_ #IH2 #V #H - elim (tdeq_inv_pair1 … H) -H #Z1 #Z2 #_ #HZ2 #H destruct - /2 width=2 by/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_teqx.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_teqx.ma new file mode 100644 index 000000000..e508856c6 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_teqx.ma @@ -0,0 +1,90 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/syntax/teqx.ma". +include "static_2/relocation/lifts_lifts.ma". + +(* GENERIC RELOCATION FOR TERMS *********************************************) + +(* Properties with sort-irrelevant equivalence for terms ********************) + +lemma teqx_lifts_sn: liftable2_sn teqx. +#T1 #T2 #H elim H -T1 -T2 [||| * ] +[ #s1 #s2 #f #X #H >(lifts_inv_sort1 … H) -H + /3 width=3 by lifts_sort, teqx_sort, ex2_intro/ +| #i #f #X #H elim (lifts_inv_lref1 … H) -H + /3 width=3 by lifts_lref, teqx_lref, ex2_intro/ +| #l #f #X #H >(lifts_inv_gref1 … H) -H + /2 width=3 by lifts_gref, teqx_gref, ex2_intro/ +| #p #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f #X #H elim (lifts_inv_bind1 … H) -H + #W1 #U1 #HVW1 #HTU1 #H destruct + elim (IHV … HVW1) -V1 elim (IHT … HTU1) -T1 + /3 width=5 by lifts_bind, teqx_pair, ex2_intro/ +| #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f #X #H elim (lifts_inv_flat1 … H) -H + #W1 #U1 #HVW1 #HTU1 #H destruct + elim (IHV … HVW1) -V1 elim (IHT … HTU1) -T1 + /3 width=5 by lifts_flat, teqx_pair, ex2_intro/ +] +qed-. + +lemma teqx_lifts_dx: liftable2_dx teqx. +/3 width=3 by teqx_lifts_sn, liftable2_sn_dx, teqx_sym/ qed-. + +lemma teqx_lifts_bi: liftable2_bi teqx. +/3 width=6 by teqx_lifts_sn, liftable2_sn_bi/ qed-. + +(* Inversion lemmas with sort-irrelevant equivalence for terms **************) + +lemma teqx_inv_lifts_sn: deliftable2_sn teqx. +#U1 #U2 #H elim H -U1 -U2 [||| * ] +[ #s1 #s2 #f #X #H >(lifts_inv_sort2 … H) -H + /3 width=3 by lifts_sort, teqx_sort, ex2_intro/ +| #i #f #X #H elim (lifts_inv_lref2 … H) -H + /3 width=3 by lifts_lref, teqx_lref, ex2_intro/ +| #l #f #X #H >(lifts_inv_gref2 … H) -H + /2 width=3 by lifts_gref, teqx_gref, ex2_intro/ +| #p #I #W1 #W2 #U1 #U2 #_ #_ #IHW #IHU #f #X #H elim (lifts_inv_bind2 … H) -H + #V1 #T1 #HVW1 #HTU1 #H destruct + elim (IHW … HVW1) -W1 elim (IHU … HTU1) -U1 + /3 width=5 by lifts_bind, teqx_pair, ex2_intro/ +| #I #W1 #W2 #U1 #U2 #_ #_ #IHW #IHU #f #X #H elim (lifts_inv_flat2 … H) -H + #V1 #T1 #HVW1 #HTU1 #H destruct + elim (IHW … HVW1) -W1 elim (IHU … HTU1) -U1 + /3 width=5 by lifts_flat, teqx_pair, ex2_intro/ +] +qed-. + +lemma teqx_inv_lifts_dx: deliftable2_dx teqx. +/3 width=3 by teqx_inv_lifts_sn, deliftable2_sn_dx, teqx_sym/ qed-. + +lemma teqx_inv_lifts_bi: deliftable2_bi teqx. +/3 width=6 by teqx_inv_lifts_sn, deliftable2_sn_bi/ qed-. + +lemma teqx_lifts_inv_pair_sn (I) (f:rtmap): + ∀X,T. ⇧*[f]X ≘ T → ∀V. ②{I}V.T ≛ X → ⊥. +#I #f #X #T #H elim H -f -X -T +[ #f #s #V #H + elim (teqx_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct +| #f #i #j #_ #V #H + elim (teqx_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct +| #f #l #V #H + elim (teqx_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct +| #f #p #J #X1 #T1 #X2 #T2 #_ #_ #_ #IH2 #V #H + elim (teqx_inv_pair1 … H) -H #Z1 #Z2 #_ #HZ2 #H destruct + /2 width=2 by/ +| #f #J #X1 #T1 #X2 #T2 #_ #_ #_ #IH2 #V #H + elim (teqx_inv_pair1 … H) -H #Z1 #Z2 #_ #HZ2 #H destruct + /2 width=2 by/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma deleted file mode 100644 index fa341e425..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma +++ /dev/null @@ -1,36 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/syntax/tdeq.ma". -include "static_2/s_transition/fqu_length.ma". - -(* SUPCLOSURE ***************************************************************) - -(* Inversion lemmas with context-free sort-irrelevant equivalence for terms *) - -fact fqu_inv_tdeq_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - G1 = G2 → |L1| = |L2| → T1 ≛ T2 → ⊥. -#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 -[1: #I #G #L #V #_ #H elim (succ_inv_refl_sn … H) -|6: #I #G #L #T #U #_ #_ #H elim (succ_inv_refl_sn … H) -] -/2 width=6 by tdeq_inv_pair_xy_y, tdeq_inv_pair_xy_x/ -qed-. - -(* Basic_2A1: uses: fqu_inv_eq *) -lemma fqu_inv_tdeq: ∀b,G,L1,L2,T1,T2. ⦃G,L1,T1⦄ ⬂[b] ⦃G,L2,T2⦄ → - |L1| = |L2| → T1 ≛ T2 → ⊥. -#b #G #L1 #L2 #T1 #T2 #H -@(fqu_inv_tdeq_aux … H) // (**) (* full auto fails *) -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqx.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqx.ma new file mode 100644 index 000000000..8e94430e6 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqx.ma @@ -0,0 +1,36 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/syntax/teqx.ma". +include "static_2/s_transition/fqu_length.ma". + +(* SUPCLOSURE ***************************************************************) + +(* Inversion lemmas with context-free sort-irrelevant equivalence for terms *) + +fact fqu_inv_teqx_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → + G1 = G2 → |L1| = |L2| → T1 ≛ T2 → ⊥. +#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 +[1: #I #G #L #V #_ #H elim (succ_inv_refl_sn … H) +|6: #I #G #L #T #U #_ #_ #H elim (succ_inv_refl_sn … H) +] +/2 width=6 by teqx_inv_pair_xy_y, teqx_inv_pair_xy_x/ +qed-. + +(* Basic_2A1: uses: fqu_inv_eq *) +lemma fqu_inv_teqx: ∀b,G,L1,L2,T1,T2. ⦃G,L1,T1⦄ ⬂[b] ⦃G,L2,T2⦄ → + |L1| = |L2| → T1 ≛ T2 → ⊥. +#b #G #L1 #L2 #T1 #T2 #H +@(fqu_inv_teqx_aux … H) // (**) (* full auto fails *) +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_fdeq.ma deleted file mode 100644 index d002095bb..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fdeq.ma +++ /dev/null @@ -1,25 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/fdeq.ma". -include "static_2/static/aaa_rdeq.ma". - -(* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) - -(* Properties with sort-irrelevant equivalence on referred entries **********) - -lemma aaa_fdeq_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → - ∀A. ⦃G1,L1⦄ ⊢ T1 ⁝ A → ⦃G2,L2⦄ ⊢ T2 ⁝ A. -#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 -/2 width=5 by aaa_tdeq_conf_rdeq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqx.ma new file mode 100644 index 000000000..157aac353 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqx.ma @@ -0,0 +1,25 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/feqx.ma". +include "static_2/static/aaa_reqx.ma". + +(* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) + +(* Properties with sort-irrelevant equivalence on referred entries **********) + +lemma aaa_feqx_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → + ∀A. ⦃G1,L1⦄ ⊢ T1 ⁝ A → ⦃G2,L2⦄ ⊢ T2 ⁝ A. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +/2 width=5 by aaa_teqx_conf_reqx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_rdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_rdeq.ma deleted file mode 100644 index c08a02487..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_rdeq.ma +++ /dev/null @@ -1,45 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq.ma". -include "static_2/static/aaa.ma". - -(* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) - -(* Properties with sort-irrelevant equivalence on referred entries **********) - -lemma aaa_tdeq_conf_rdeq: ∀G,L1,T1,A. ⦃G,L1⦄ ⊢ T1 ⁝ A → ∀T2. T1 ≛ T2 → - ∀L2. L1 ≛[T1] L2 → ⦃G,L2⦄ ⊢ T2 ⁝ A. -#G #L1 #T1 #A #H elim H -G -L1 -T1 -A -[ #G #L1 #s1 #X #H1 elim (tdeq_inv_sort1 … H1) -H1 // -| #I #G #L1 #V1 #B #_ #IH #X #H1 >(tdeq_inv_lref1 … H1) -H1 - #Y #H2 elim (rdeq_inv_zero_pair_sn … H2) -H2 - #L2 #V2 #HL12 #HV12 #H destruct /3 width=1 by aaa_zero/ -| #I #G #L1 #A #i #_ #IH #X #H1 >(tdeq_inv_lref1 … H1) -H1 - #Y #H2 elim (rdeq_inv_lref_bind_sn … H2) -H2 - #J #L2 #HL12 #H destruct /3 width=1 by aaa_lref/ -| #p #G #L1 #V1 #T1 #B #A #_ #_ #IHV #IHT #X #H1 elim (tdeq_inv_pair1 … H1) -H1 - #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (rdeq_inv_bind … H2) -H2 destruct - /5 width=2 by aaa_abbr, rdeq_bind_repl_dx, ext2_pair/ -| #p #G #L1 #V1 #T1 #B #A #_ #_ #IHV #IHT #X #H1 elim (tdeq_inv_pair1 … H1) -H1 - #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (rdeq_inv_bind … H2) -H2 destruct - /5 width=2 by aaa_abst, rdeq_bind_repl_dx, ext2_pair/ -| #G #L1 #V1 #T1 #B #A #_ #_ #IHV #IHT #X #H1 elim (tdeq_inv_pair1 … H1) -H1 - #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (rdeq_inv_flat … H2) -H2 destruct - /3 width=3 by aaa_appl/ -| #G #L1 #V1 #T1 #A #_ #_ #IHV #IHT #X #H1 elim (tdeq_inv_pair1 … H1) -H1 - #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (rdeq_inv_flat … H2) -H2 destruct - /3 width=1 by aaa_cast/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqx.ma new file mode 100644 index 000000000..b502a8a27 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqx.ma @@ -0,0 +1,45 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx.ma". +include "static_2/static/aaa.ma". + +(* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) + +(* Properties with sort-irrelevant equivalence on referred entries **********) + +lemma aaa_teqx_conf_reqx: ∀G,L1,T1,A. ⦃G,L1⦄ ⊢ T1 ⁝ A → ∀T2. T1 ≛ T2 → + ∀L2. L1 ≛[T1] L2 → ⦃G,L2⦄ ⊢ T2 ⁝ A. +#G #L1 #T1 #A #H elim H -G -L1 -T1 -A +[ #G #L1 #s1 #X #H1 elim (teqx_inv_sort1 … H1) -H1 // +| #I #G #L1 #V1 #B #_ #IH #X #H1 >(teqx_inv_lref1 … H1) -H1 + #Y #H2 elim (reqx_inv_zero_pair_sn … H2) -H2 + #L2 #V2 #HL12 #HV12 #H destruct /3 width=1 by aaa_zero/ +| #I #G #L1 #A #i #_ #IH #X #H1 >(teqx_inv_lref1 … H1) -H1 + #Y #H2 elim (reqx_inv_lref_bind_sn … H2) -H2 + #J #L2 #HL12 #H destruct /3 width=1 by aaa_lref/ +| #p #G #L1 #V1 #T1 #B #A #_ #_ #IHV #IHT #X #H1 elim (teqx_inv_pair1 … H1) -H1 + #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (reqx_inv_bind … H2) -H2 destruct + /5 width=2 by aaa_abbr, reqx_bind_repl_dx, ext2_pair/ +| #p #G #L1 #V1 #T1 #B #A #_ #_ #IHV #IHT #X #H1 elim (teqx_inv_pair1 … H1) -H1 + #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (reqx_inv_bind … H2) -H2 destruct + /5 width=2 by aaa_abst, reqx_bind_repl_dx, ext2_pair/ +| #G #L1 #V1 #T1 #B #A #_ #_ #IHV #IHT #X #H1 elim (teqx_inv_pair1 … H1) -H1 + #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (reqx_inv_flat … H2) -H2 destruct + /3 width=3 by aaa_appl/ +| #G #L1 #V1 #T1 #A #_ #_ #IHV #IHT #X #H1 elim (teqx_inv_pair1 … H1) -H1 + #V2 #T2 #HV12 #HT12 #H #L2 #H2 elim (reqx_inv_flat … H2) -H2 destruct + /3 width=1 by aaa_cast/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq.ma deleted file mode 100644 index 1c5b47ba1..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq.ma +++ /dev/null @@ -1,52 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/notation/relations/stareqsn_6.ma". -include "static_2/syntax/genv.ma". -include "static_2/static/rdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) - -inductive fdeq (G) (L1) (T1): relation3 genv lenv term ≝ -| fdeq_intro_sn: ∀L2,T2. L1 ≛[T1] L2 → T1 ≛ T2 → - fdeq G L1 T1 G L2 T2 -. - -interpretation - "sort-irrelevant equivalence on referred entries (closure)" - 'StarEqSn G1 L1 T1 G2 L2 T2 = (fdeq G1 L1 T1 G2 L2 T2). - -(* Basic_properties *********************************************************) - -lemma fdeq_intro_dx (G): ∀L1,L2,T2. L1 ≛[T2] L2 → - ∀T1. T1 ≛ T2 → ⦃G,L1,T1⦄ ≛ ⦃G,L2,T2⦄. -/3 width=3 by fdeq_intro_sn, tdeq_rdeq_div/ qed. - -(* Basic inversion lemmas ***************************************************) - -lemma fdeq_inv_gen_sn: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → - ∧∧ G1 = G2 & L1 ≛[T1] L2 & T1 ≛ T2. -#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/ -qed-. - -lemma fdeq_inv_gen_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → - ∧∧ G1 = G2 & L1 ≛[T2] L2 & T1 ≛ T2. -#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 -/3 width=3 by tdeq_rdeq_conf, and3_intro/ -qed-. - -(* Basic_2A1: removed theorems 6: - fleq_refl fleq_sym fleq_inv_gen - fleq_trans fleq_canc_sn fleq_canc_dx -*) diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fdeq.ma deleted file mode 100644 index 1edc17d50..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fdeq.ma +++ /dev/null @@ -1,52 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_rdeq.ma". -include "static_2/static/fdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) - -(* Advanced properties ******************************************************) - -lemma fdeq_sym: tri_symmetric … fdeq. -#G1 #G2 #L1 #L2 #T1 #T2 * -G1 -L1 -T1 -/3 width=1 by fdeq_intro_dx, rdeq_sym, tdeq_sym/ -qed-. - -(* Main properties **********************************************************) - -theorem fdeq_trans: tri_transitive … fdeq. -#G1 #G #L1 #L #T1 #T * -G -L -T -#L #T #HL1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 -/4 width=5 by fdeq_intro_sn, rdeq_trans, tdeq_rdeq_div, tdeq_trans/ -qed-. - -theorem fdeq_canc_sn: ∀G,G1,L,L1,T,T1. ⦃G,L,T⦄ ≛ ⦃G1,L1,T1⦄→ - ∀G2,L2,T2. ⦃G,L,T⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. -/3 width=5 by fdeq_trans, fdeq_sym/ qed-. - -theorem fdeq_canc_dx: ∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G2,L2,T2⦄ ≛ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. -/3 width=5 by fdeq_trans, fdeq_sym/ qed-. - -(* Main inversion lemmas with degree-based equivalence on terms *************) - -theorem fdeq_tdneq_repl_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → - ∀U1,U2. ⦃G1,L1,U1⦄ ≛ ⦃G2,L2,U2⦄ → - (T2 ≛ U2 → ⊥) → (T1 ≛ U1 → ⊥). -#G1 #G2 #L1 #L2 #T1 #T2 #HT #U1 #U2 #HU #HnTU2 #HTU1 -elim (fdeq_inv_gen_sn … HT) -HT #_ #_ #HT -elim (fdeq_inv_gen_sn … HU) -HU #_ #_ #HU -/3 width=5 by tdeq_repl/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqup.ma deleted file mode 100644 index 333a0f787..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqup.ma +++ /dev/null @@ -1,29 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_fqup.ma". -include "static_2/static/fdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) - -(* Properties with sort-irrelevant equivalence for terms ********************) - -lemma tdeq_fdeq: ∀T1,T2. T1 ≛ T2 → - ∀G,L. ⦃G,L,T1⦄ ≛ ⦃G,L,T2⦄. -/2 width=1 by fdeq_intro_sn/ qed. - -(* Advanced properties ******************************************************) - -lemma fdeq_refl: tri_reflexive … fdeq. -/2 width=1 by fdeq_intro_sn/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma deleted file mode 100644 index ce0dda0d0..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma +++ /dev/null @@ -1,31 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_fqus.ma". -include "static_2/static/fdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) - -(* Properties with star-iterated structural successor for closures **********) - -lemma fdeq_fqus_trans: ∀b,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∃∃G,L0,T0. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G,L0,T0⦄ & ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄. -#b #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2 -elim(fdeq_inv_gen_dx … H1) -H1 #HG #HL1 #HT1 destruct -elim (rdeq_fqus_trans … H2 … HL1) -L #L #T0 #H2 #HT02 #HL2 -elim (tdeq_fqus_trans … H2 … HT1) -T #L0 #T #H2 #HT0 #HL0 -lapply (tdeq_rdeq_conf … HT02 … HL0) -HL0 #HL0 -/4 width=7 by fdeq_intro_dx, rdeq_trans, tdeq_trans, ex2_3_intro/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_req.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_req.ma deleted file mode 100644 index 5dbf18b5e..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_req.ma +++ /dev/null @@ -1,27 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rdeq_req.ma". -include "static_2/static/fdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) - -(* Properties with syntactic equivalence on referred entries ****************) - -lemma req_rdeq_trans: ∀L1,L,T1. L1 ≡[T1] L → - ∀G1,G2,L2,T2. ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. -#L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H -elim (fdeq_inv_gen_sn … H) -H #H #HL2 #T12 destruct -/3 width=3 by fdeq_intro_sn, req_rdeq_trans/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma new file mode 100644 index 000000000..a341e7688 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma @@ -0,0 +1,52 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/notation/relations/stareqsn_6.ma". +include "static_2/syntax/genv.ma". +include "static_2/static/reqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) + +inductive feqx (G) (L1) (T1): relation3 genv lenv term ≝ +| feqx_intro_sn: ∀L2,T2. L1 ≛[T1] L2 → T1 ≛ T2 → + feqx G L1 T1 G L2 T2 +. + +interpretation + "sort-irrelevant equivalence on referred entries (closure)" + 'StarEqSn G1 L1 T1 G2 L2 T2 = (feqx G1 L1 T1 G2 L2 T2). + +(* Basic_properties *********************************************************) + +lemma feqx_intro_dx (G): ∀L1,L2,T2. L1 ≛[T2] L2 → + ∀T1. T1 ≛ T2 → ⦃G,L1,T1⦄ ≛ ⦃G,L2,T2⦄. +/3 width=3 by feqx_intro_sn, teqx_reqx_div/ qed. + +(* Basic inversion lemmas ***************************************************) + +lemma feqx_inv_gen_sn: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → + ∧∧ G1 = G2 & L1 ≛[T1] L2 & T1 ≛ T2. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/ +qed-. + +lemma feqx_inv_gen_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → + ∧∧ G1 = G2 & L1 ≛[T2] L2 & T1 ≛ T2. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +/3 width=3 by teqx_reqx_conf, and3_intro/ +qed-. + +(* Basic_2A1: removed theorems 6: + fleq_refl fleq_sym fleq_inv_gen + fleq_trans fleq_canc_sn fleq_canc_dx +*) diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma new file mode 100644 index 000000000..52c7f3109 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma @@ -0,0 +1,52 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx_reqx.ma". +include "static_2/static/feqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) + +(* Advanced properties ******************************************************) + +lemma feqx_sym: tri_symmetric … feqx. +#G1 #G2 #L1 #L2 #T1 #T2 * -G1 -L1 -T1 +/3 width=1 by feqx_intro_dx, reqx_sym, teqx_sym/ +qed-. + +(* Main properties **********************************************************) + +theorem feqx_trans: tri_transitive … feqx. +#G1 #G #L1 #L #T1 #T * -G -L -T +#L #T #HL1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 +/4 width=5 by feqx_intro_sn, reqx_trans, teqx_reqx_div, teqx_trans/ +qed-. + +theorem feqx_canc_sn: ∀G,G1,L,L1,T,T1. ⦃G,L,T⦄ ≛ ⦃G1,L1,T1⦄→ + ∀G2,L2,T2. ⦃G,L,T⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. +/3 width=5 by feqx_trans, feqx_sym/ qed-. + +theorem feqx_canc_dx: ∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → + ∀G2,L2,T2. ⦃G2,L2,T2⦄ ≛ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. +/3 width=5 by feqx_trans, feqx_sym/ qed-. + +(* Main inversion lemmas with degree-based equivalence on terms *************) + +theorem feqx_tneqx_repl_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → + ∀U1,U2. ⦃G1,L1,U1⦄ ≛ ⦃G2,L2,U2⦄ → + (T2 ≛ U2 → ⊥) → (T1 ≛ U1 → ⊥). +#G1 #G2 #L1 #L2 #T1 #T2 #HT #U1 #U2 #HU #HnTU2 #HTU1 +elim (feqx_inv_gen_sn … HT) -HT #_ #_ #HT +elim (feqx_inv_gen_sn … HU) -HU #_ #_ #HU +/3 width=5 by teqx_repl/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqup.ma new file mode 100644 index 000000000..2919d492b --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqup.ma @@ -0,0 +1,29 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx_fqup.ma". +include "static_2/static/feqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) + +(* Properties with sort-irrelevant equivalence for terms ********************) + +lemma teqx_feqx: ∀T1,T2. T1 ≛ T2 → + ∀G,L. ⦃G,L,T1⦄ ≛ ⦃G,L,T2⦄. +/2 width=1 by feqx_intro_sn/ qed. + +(* Advanced properties ******************************************************) + +lemma feqx_refl: tri_reflexive … feqx. +/2 width=1 by feqx_intro_sn/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqus.ma new file mode 100644 index 000000000..f929f33b7 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqus.ma @@ -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 "static_2/static/reqx_fqus.ma". +include "static_2/static/feqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) + +(* Properties with star-iterated structural successor for closures **********) + +lemma feqx_fqus_trans: ∀b,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → + ∀G2,L2,T2. ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ → + ∃∃G,L0,T0. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G,L0,T0⦄ & ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄. +#b #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2 +elim(feqx_inv_gen_dx … H1) -H1 #HG #HL1 #HT1 destruct +elim (reqx_fqus_trans … H2 … HL1) -L #L #T0 #H2 #HT02 #HL2 +elim (teqx_fqus_trans … H2 … HT1) -T #L0 #T #H2 #HT0 #HL0 +lapply (teqx_reqx_conf … HT02 … HL0) -HL0 #HL0 +/4 width=7 by feqx_intro_dx, reqx_trans, teqx_trans, ex2_3_intro/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_req.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_req.ma new file mode 100644 index 000000000..219186271 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_req.ma @@ -0,0 +1,27 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/reqx_req.ma". +include "static_2/static/feqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) + +(* Properties with syntactic equivalence on referred entries ****************) + +lemma req_reqx_trans: ∀L1,L,T1. L1 ≡[T1] L → + ∀G1,G2,L2,T2. ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. +#L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H +elim (feqx_inv_gen_sn … H) -H #H #HL2 #T12 destruct +/3 width=3 by feqx_intro_sn, req_reqx_trans/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma index e2ac985dc..6c248d9d5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma @@ -298,13 +298,47 @@ qed-. (* Basic properties *********************************************************) -axiom lsubf_eq_repl_back1: ∀f2,L1,L2. eq_repl_back … (λf1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +lemma lsubf_eq_repl_back1: ∀f2,L1,L2. eq_repl_back … (λf1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +#f2 #L1 #L2 #f #H elim H -f -f2 -L1 -L2 +[ #f1 #f2 #Hf12 #g1 #Hfg1 + /3 width=3 by lsubf_atom, eq_canc_sn/ +| #f1 #f2 #I1 #I2 #K1 #K2 #_ #IH #g #H + elim (eq_inv_px … H) -H [|*: // ] #g1 #Hfg1 #H destruct + /3 width=1 by lsubf_push/ +| #f1 #f2 #I #K1 #K2 #_ #IH #g #H + elim (eq_inv_nx … H) -H [|*: // ] #g1 #Hfg1 #H destruct + /3 width=1 by lsubf_bind/ +| #f #f0 #f1 #f2 #K1 #L2 #W #V #Hf #Hf1 #_ #IH #g #H + elim (eq_inv_nx … H) -H [|*: // ] #g1 #Hfg1 #H destruct + /3 width=5 by lsubf_beta, sor_eq_repl_back3/ +| #f #f0 #f1 #f2 #I1 #I2 #K1 #K2 #V #Hf #Hf1 #_ #IH #g #H + elim (eq_inv_nx … H) -H [|*: // ] #g1 #Hfg1 #H destruct + /3 width=5 by lsubf_unit, sor_eq_repl_back3/ +] +qed-. lemma lsubf_eq_repl_fwd1: ∀f2,L1,L2. eq_repl_fwd … (λf1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). #f2 #L1 #L2 @eq_repl_sym /2 width=3 by lsubf_eq_repl_back1/ qed-. -axiom lsubf_eq_repl_back2: ∀f1,L1,L2. eq_repl_back … (λf2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +lemma lsubf_eq_repl_back2: ∀f1,L1,L2. eq_repl_back … (λf2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +#f1 #L1 #L2 #f #H elim H -f1 -f -L1 -L2 +[ #f1 #f2 #Hf12 #g2 #Hfg2 + /3 width=3 by lsubf_atom, eq_trans/ +| #f1 #f2 #I1 #I2 #K1 #K2 #_ #IH #g #H + elim (eq_inv_px … H) -H [|*: // ] #g2 #Hfg2 #H destruct + /3 width=1 by lsubf_push/ +| #f1 #f2 #I #K1 #K2 #_ #IH #g #H + elim (eq_inv_nx … H) -H [|*: // ] #g2 #Hfg2 #H destruct + /3 width=1 by lsubf_bind/ +| #f #f0 #f1 #f2 #K1 #L2 #W #V #Hf #Hf1 #_ #IH #g #H + elim (eq_inv_nx … H) -H [|*: // ] #g2 #Hfg2 #H destruct + /3 width=5 by lsubf_beta/ +| #f #f0 #f1 #f2 #I1 #I2 #K1 #K2 #V #Hf #Hf1 #_ #IH #g #H + elim (eq_inv_nx … H) -H [|*: // ] #g2 #Hfg2 #H destruct + /3 width=5 by lsubf_unit/ +] +qed-. lemma lsubf_eq_repl_fwd2: ∀f1,L1,L2. eq_repl_fwd … (λf2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). #f1 #L1 #L2 @eq_repl_sym /2 width=3 by lsubf_eq_repl_back2/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma deleted file mode 100644 index 99fe14ee6..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma +++ /dev/null @@ -1,193 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/notation/relations/stareqsn_3.ma". -include "static_2/syntax/tdeq_ext.ma". -include "static_2/static/rex.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) - -definition rdeq: relation3 term lenv lenv ≝ - rex cdeq. - -interpretation - "sort-irrelevant equivalence on referred entries (local environment)" - 'StarEqSn T L1 L2 = (rdeq T L1 L2). - -interpretation - "sort-irrelevant ranged equivalence (local environment)" - 'StarEqSn f L1 L2 = (sex cdeq_ext cfull f L1 L2). - -(* Basic properties ***********************************************************) - -lemma frees_tdeq_conf_rdeq: ∀f,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f → ∀T2. T1 ≛ T2 → - ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T2⦄ ≘ f. -#f #L1 #T1 #H elim H -f -L1 -T1 -[ #f #L1 #s1 #Hf #X #H1 #L2 #_ - elim (tdeq_inv_sort1 … H1) -H1 #s2 #H destruct - /2 width=3 by frees_sort/ -| #f #i #Hf #X #H1 - >(tdeq_inv_lref1 … H1) -X #Y #H2 - >(sex_inv_atom1 … H2) -Y - /2 width=1 by frees_atom/ -| #f #I #L1 #V1 #_ #IH #X #H1 - >(tdeq_inv_lref1 … H1) -X #Y #H2 - elim (sex_inv_next1 … H2) -H2 #Z #L2 #HL12 #HZ #H destruct - elim (ext2_inv_pair_sn … HZ) -HZ #V2 #HV12 #H destruct - /3 width=1 by frees_pair/ -| #f #I #L1 #Hf #X #H1 - >(tdeq_inv_lref1 … H1) -X #Y #H2 - elim (sex_inv_next1 … H2) -H2 #Z #L2 #_ #HZ #H destruct - >(ext2_inv_unit_sn … HZ) -Z /2 width=1 by frees_unit/ -| #f #I #L1 #i #_ #IH #X #H1 - >(tdeq_inv_lref1 … H1) -X #Y #H2 - elim (sex_inv_push1 … H2) -H2 #J #L2 #HL12 #_ #H destruct - /3 width=1 by frees_lref/ -| #f #L1 #l #Hf #X #H1 #L2 #_ - >(tdeq_inv_gref1 … H1) -X /2 width=1 by frees_gref/ -| #f1V #f1T #f1 #p #I #L1 #V1 #T1 #_ #_ #Hf1 #IHV #IHT #X #H1 - elim (tdeq_inv_pair1 … H1) -H1 #V2 #T2 #HV12 #HT12 #H1 #L2 #HL12 destruct - /6 width=5 by frees_bind, sex_inv_tl, ext2_pair, sle_sex_trans, sor_inv_sle_dx, sor_inv_sle_sn/ -| #f1V #f1T #f1 #I #L1 #V1 #T1 #_ #_ #Hf1 #IHV #IHT #X #H1 - elim (tdeq_inv_pair1 … H1) -H1 #V2 #T2 #HV12 #HT12 #H1 #L2 #HL12 destruct - /5 width=5 by frees_flat, sle_sex_trans, sor_inv_sle_dx, sor_inv_sle_sn/ -] -qed-. - -lemma frees_tdeq_conf: ∀f,L,T1. L ⊢ 𝐅+⦃T1⦄ ≘ f → - ∀T2. T1 ≛ T2 → L ⊢ 𝐅+⦃T2⦄ ≘ f. -/4 width=7 by frees_tdeq_conf_rdeq, sex_refl, ext2_refl/ qed-. - -lemma frees_rdeq_conf: ∀f,L1,T. L1 ⊢ 𝐅+⦃T⦄ ≘ f → - ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T⦄ ≘ f. -/2 width=7 by frees_tdeq_conf_rdeq, tdeq_refl/ qed-. - -lemma tdeq_rex_conf (R): s_r_confluent1 … cdeq (rex R). -#R #L1 #T1 #T2 #HT12 #L2 * -/3 width=5 by frees_tdeq_conf, ex2_intro/ -qed-. - -lemma tdeq_rex_div (R): ∀T1,T2. T1 ≛ T2 → - ∀L1,L2. L1 ⪤[R,T2] L2 → L1 ⪤[R,T1] L2. -/3 width=5 by tdeq_rex_conf, tdeq_sym/ qed-. - -lemma tdeq_rdeq_conf: s_r_confluent1 … cdeq rdeq. -/2 width=5 by tdeq_rex_conf/ qed-. - -lemma tdeq_rdeq_div: ∀T1,T2. T1 ≛ T2 → - ∀L1,L2. L1 ≛[T2] L2 → L1 ≛[T1] L2. -/2 width=5 by tdeq_rex_div/ qed-. - -lemma rdeq_atom: ∀I. ⋆ ≛[⓪{I}] ⋆. -/2 width=1 by rex_atom/ qed. - -lemma rdeq_sort: ∀I1,I2,L1,L2,s. - L1 ≛[⋆s] L2 → L1.ⓘ{I1} ≛[⋆s] L2.ⓘ{I2}. -/2 width=1 by rex_sort/ qed. - -lemma rdeq_pair: ∀I,L1,L2,V1,V2. - L1 ≛[V1] L2 → V1 ≛ V2 → L1.ⓑ{I}V1 ≛[#0] L2.ⓑ{I}V2. -/2 width=1 by rex_pair/ qed. - -lemma rdeq_unit: ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ≛[f] L2 → - L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. -/2 width=3 by rex_unit/ qed. - -lemma rdeq_lref: ∀I1,I2,L1,L2,i. - L1 ≛[#i] L2 → L1.ⓘ{I1} ≛[#↑i] L2.ⓘ{I2}. -/2 width=1 by rex_lref/ qed. - -lemma rdeq_gref: ∀I1,I2,L1,L2,l. - L1 ≛[§l] L2 → L1.ⓘ{I1} ≛[§l] L2.ⓘ{I2}. -/2 width=1 by rex_gref/ qed. - -lemma rdeq_bind_repl_dx: ∀I,I1,L1,L2.∀T:term. - L1.ⓘ{I} ≛[T] L2.ⓘ{I1} → - ∀I2. I ≛ I2 → - L1.ⓘ{I} ≛[T] L2.ⓘ{I2}. -/2 width=2 by rex_bind_repl_dx/ qed-. - -(* Basic inversion lemmas ***************************************************) - -lemma rdeq_inv_atom_sn: ∀Y2. ∀T:term. ⋆ ≛[T] Y2 → Y2 = ⋆. -/2 width=3 by rex_inv_atom_sn/ qed-. - -lemma rdeq_inv_atom_dx: ∀Y1. ∀T:term. Y1 ≛[T] ⋆ → Y1 = ⋆. -/2 width=3 by rex_inv_atom_dx/ qed-. - -lemma rdeq_inv_zero: - ∀Y1,Y2. Y1 ≛[#0] Y2 → - ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I,L1,L2,V1,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 - | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ≛[f] L2 & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. -#Y1 #Y2 #H elim (rex_inv_zero … H) -H * -/3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/ -qed-. - -lemma rdeq_inv_lref: ∀Y1,Y2,i. Y1 ≛[#↑i] Y2 → - ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. L1 ≛[#i] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. -/2 width=1 by rex_inv_lref/ qed-. - -(* Basic_2A1: uses: lleq_inv_bind lleq_inv_bind_O *) -lemma rdeq_inv_bind: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → - ∧∧ L1 ≛[V] L2 & L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. -/2 width=2 by rex_inv_bind/ qed-. - -(* Basic_2A1: uses: lleq_inv_flat *) -lemma rdeq_inv_flat: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → - ∧∧ L1 ≛[V] L2 & L1 ≛[T] L2. -/2 width=2 by rex_inv_flat/ qed-. - -(* Advanced inversion lemmas ************************************************) - -lemma rdeq_inv_zero_pair_sn: ∀I,Y2,L1,V1. L1.ⓑ{I}V1 ≛[#0] Y2 → - ∃∃L2,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y2 = L2.ⓑ{I}V2. -/2 width=1 by rex_inv_zero_pair_sn/ qed-. - -lemma rdeq_inv_zero_pair_dx: ∀I,Y1,L2,V2. Y1 ≛[#0] L2.ⓑ{I}V2 → - ∃∃L1,V1. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1. -/2 width=1 by rex_inv_zero_pair_dx/ qed-. - -lemma rdeq_inv_lref_bind_sn: ∀I1,Y2,L1,i. L1.ⓘ{I1} ≛[#↑i] Y2 → - ∃∃I2,L2. L1 ≛[#i] L2 & Y2 = L2.ⓘ{I2}. -/2 width=2 by rex_inv_lref_bind_sn/ qed-. - -lemma rdeq_inv_lref_bind_dx: ∀I2,Y1,L2,i. Y1 ≛[#↑i] L2.ⓘ{I2} → - ∃∃I1,L1. L1 ≛[#i] L2 & Y1 = L1.ⓘ{I1}. -/2 width=2 by rex_inv_lref_bind_dx/ qed-. - -(* Basic forward lemmas *****************************************************) - -lemma rdeq_fwd_zero_pair: ∀I,K1,K2,V1,V2. - K1.ⓑ{I}V1 ≛[#0] K2.ⓑ{I}V2 → K1 ≛[V1] K2. -/2 width=3 by rex_fwd_zero_pair/ qed-. - -(* Basic_2A1: uses: lleq_fwd_bind_sn lleq_fwd_flat_sn *) -lemma rdeq_fwd_pair_sn: ∀I,L1,L2,V,T. L1 ≛[②{I}V.T] L2 → L1 ≛[V] L2. -/2 width=3 by rex_fwd_pair_sn/ qed-. - -(* Basic_2A1: uses: lleq_fwd_bind_dx lleq_fwd_bind_O_dx *) -lemma rdeq_fwd_bind_dx: ∀p,I,L1,L2,V,T. - L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. -/2 width=2 by rex_fwd_bind_dx/ qed-. - -(* Basic_2A1: uses: lleq_fwd_flat_dx *) -lemma rdeq_fwd_flat_dx: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → L1 ≛[T] L2. -/2 width=3 by rex_fwd_flat_dx/ qed-. - -lemma rdeq_fwd_dx: ∀I2,L1,K2. ∀T:term. L1 ≛[T] K2.ⓘ{I2} → - ∃∃I1,K1. L1 = K1.ⓘ{I1}. -/2 width=5 by rex_fwd_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_drops.ma deleted file mode 100644 index 15e7ca69c..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_drops.ma +++ /dev/null @@ -1,52 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/relocation/lifts_tdeq.ma". -include "static_2/static/rex_drops.ma". -include "static_2/static/rdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) - -(* Properties with generic slicing for local environments *******************) - -lemma rdeq_lifts_sn: f_dedropable_sn cdeq. -/3 width=5 by rex_liftable_dedropable_sn, tdeq_lifts_sn/ qed-. - -(* Inversion lemmas with generic slicing for local environments *************) - -lemma rdeq_inv_lifts_sn: f_dropable_sn cdeq. -/2 width=5 by rex_dropable_sn/ qed-. - -lemma rdeq_inv_lifts_dx: f_dropable_dx cdeq. -/2 width=5 by rex_dropable_dx/ qed-. - -lemma rdeq_inv_lifts_bi: ∀L1,L2,U. L1 ≛[U] L2 → ∀b,f. 𝐔⦃f⦄ → - ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → - ∀T. ⇧*[f] T ≘ U → K1 ≛[T] K2. -/2 width=10 by rex_inv_lifts_bi/ qed-. - -lemma rdeq_inv_lref_pair_sn: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[V1] K2 & V1 ≛ V2. -/2 width=3 by rex_inv_lref_pair_sn/ qed-. - -lemma rdeq_inv_lref_pair_dx: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[V1] K2 & V1 ≛ V2. -/2 width=3 by rex_inv_lref_pair_dx/ qed-. - -lemma rdeq_inv_lref_pair_bi (L1) (L2) (i): - L1 ≛[#i] L2 → - ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I1}V1 → - ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I2}V2 → - ∧∧ K1 ≛[V1] K2 & V1 ≛ V2 & I1 = I2. -/2 width=6 by rex_inv_lref_pair_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqup.ma deleted file mode 100644 index 904bb601b..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqup.ma +++ /dev/null @@ -1,39 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/rex_fqup.ma". -include "static_2/static/rdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) - -(* Advanced properties ******************************************************) - -lemma rdeq_refl: ∀T. reflexive … (rdeq T). -/2 width=1 by rex_refl/ qed. - -lemma rdeq_pair_refl: ∀V1,V2. V1 ≛ V2 → - ∀I,L. ∀T:term. L.ⓑ{I}V1 ≛[T] L.ⓑ{I}V2. -/2 width=1 by rex_pair_refl/ qed. - -(* Advanced inversion lemmas ************************************************) - -lemma rdeq_inv_bind_void: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → - L1 ≛[V] L2 ∧ L1.ⓧ ≛[T] L2.ⓧ. -/2 width=3 by rex_inv_bind_void/ qed-. - -(* Advanced forward lemmas **************************************************) - -lemma rdeq_fwd_bind_dx_void: ∀p,I,L1,L2,V,T. - L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓧ ≛[T] L2.ⓧ. -/2 width=4 by rex_fwd_bind_dx_void/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma deleted file mode 100644 index d69864390..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma +++ /dev/null @@ -1,156 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/s_computation/fqus_fqup.ma". -include "static_2/static/rdeq_drops.ma". -include "static_2/static/rdeq_fqup.ma". -include "static_2/static/rdeq_rdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) - -(* Properties with extended structural successor for closures ***************) - -lemma fqu_tdeq_conf: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,T1⦄ → - ∀U2. U1 ≛ U2 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂[b] ⦃G2,L,T2⦄ & L2 ≛[T1] L & T1 ≛ T2. -#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1 -[ #I #G #L #W #X #H >(tdeq_inv_lref1 … H) -X - /2 width=5 by fqu_lref_O, ex3_2_intro/ -| #I #G #L #W1 #U1 #X #H - elim (tdeq_inv_pair1 … H) -H #W2 #U2 #HW12 #_ #H destruct - /2 width=5 by fqu_pair_sn, ex3_2_intro/ -| #p #I #G #L #W1 #U1 #Hb #X #H - elim (tdeq_inv_pair1 … H) -H #W2 #U2 #HW12 #HU12 #H destruct - /3 width=5 by rdeq_pair_refl, fqu_bind_dx, ex3_2_intro/ -| #p #I #G #L #W1 #U1 #Hb #X #H - elim (tdeq_inv_pair1 … H) -H #W2 #U2 #HW12 #HU12 #H destruct - /3 width=5 by fqu_clear, ex3_2_intro/ -| #I #G #L #W1 #U1 #X #H - elim (tdeq_inv_pair1 … H) -H #W2 #U2 #_ #HU12 #H destruct - /2 width=5 by fqu_flat_dx, ex3_2_intro/ -| #I #G #L #T1 #U1 #HTU1 #U2 #HU12 - elim (tdeq_inv_lifts_sn … HU12 … HTU1) -U1 - /3 width=5 by fqu_drop, ex3_2_intro/ -] -qed-. - -lemma tdeq_fqu_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,T1⦄ → - ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. -#b #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21 -elim (fqu_tdeq_conf … H12 U2) -H12 -/3 width=5 by rdeq_sym, tdeq_sym, ex3_2_intro/ -qed-. - -(* Basic_2A1: uses: lleq_fqu_trans *) -lemma rdeq_fqu_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂[b] ⦃G2,K2,U⦄ → - ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. -#b #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U -[ #I #G #L2 #V2 #L1 #H elim (rdeq_inv_zero_pair_dx … H) -H - #K1 #V1 #HV1 #HV12 #H destruct - /3 width=7 by tdeq_rdeq_conf, fqu_lref_O, ex3_2_intro/ -| * [ #p ] #I #G #L2 #V #T #L1 #H - [ elim (rdeq_inv_bind … H) - | elim (rdeq_inv_flat … H) - ] -H - /2 width=5 by fqu_pair_sn, ex3_2_intro/ -| #p #I #G #L2 #V #T #Hb #L1 #H elim (rdeq_inv_bind … H) -H - /3 width=5 by fqu_bind_dx, ex3_2_intro/ -| #p #I #G #L2 #V #T #Hb #L1 #H elim (rdeq_inv_bind_void … H) -H - /3 width=5 by fqu_clear, ex3_2_intro/ -| #I #G #L2 #V #T #L1 #H elim (rdeq_inv_flat … H) -H - /2 width=5 by fqu_flat_dx, ex3_2_intro/ -| #I #G #L2 #T #U #HTU #Y #HU - elim (rdeq_fwd_dx … HU) #L1 #V1 #H destruct - /5 width=14 by rdeq_inv_lifts_bi, fqu_drop, drops_refl, drops_drop, ex3_2_intro/ -] -qed-. - -(* Properties with optional structural successor for closures ***************) - -lemma tdeq_fquq_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,T1⦄ → - ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂⸮[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. -#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H -[ #H #U2 #HU21 elim (tdeq_fqu_trans … H … HU21) -U1 - /3 width=5 by fqu_fquq, ex3_2_intro/ -| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ -] -qed-. - -(* Basic_2A1: was just: lleq_fquq_trans *) -lemma rdeq_fquq_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂⸮[b] ⦃G2,K2,U⦄ → - ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂⸮[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. -#b #G1 #G2 #L2 #K2 #T #U #H elim H -H -[ #H #L1 #HL12 elim (rdeq_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/ -| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ -] -qed-. - -(* Properties with plus-iterated structural successor for closures **********) - -(* Basic_2A1: was just: lleq_fqup_trans *) -lemma rdeq_fqup_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂+[b] ⦃G2,K2,U⦄ → - ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂+[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. -#b #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U -[ #G2 #K2 #U #HTU #L1 #HL12 elim (rdeq_fqu_trans … HTU … HL12) -L2 - /3 width=5 by fqu_fqup, ex3_2_intro/ -| #G #G2 #K #K2 #U #U2 #_ #HU2 #IHTU #L1 #HL12 - elim (IHTU … HL12) -L2 #K0 #U0 #HTU #HU0 #HK0 - elim (rdeq_fqu_trans … HU2 … HK0) -K #K1 #U1 #HU1 #HU12 #HK12 - elim (tdeq_fqu_trans … HU1 … HU0) -U #K3 #U3 #HU03 #HU31 #HK31 - @(ex3_2_intro … K3 U3) (**) (* full auto too slow *) - /3 width=5 by rdeq_trans, tdeq_rdeq_conf, fqup_strap1, tdeq_trans/ -] -qed-. - -lemma tdeq_fqup_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,T1⦄ → - ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂+[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. -#b #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1 -[ #G1 #L1 #U1 #H #U2 #HU21 elim (tdeq_fqu_trans … H … HU21) -U1 - /3 width=5 by fqu_fqup, ex3_2_intro/ -| #G1 #G #L1 #L #U1 #U #H #_ #IH #U2 #HU21 - elim (tdeq_fqu_trans … H … HU21) -U1 #L0 #T #H1 #HTU #HL0 - lapply (tdeq_rdeq_div … HTU … HL0) -HL0 #HL0 - elim (IH … HTU) -U #K2 #U1 #H2 #HUT1 #HKL2 - elim (rdeq_fqup_trans … H2 … HL0) -L #K #U #H2 #HU1 #HK2 - lapply (tdeq_rdeq_conf … HUT1 … HK2) -HK2 #HK2 - /3 width=7 by rdeq_trans, fqup_strap2, tdeq_trans, ex3_2_intro/ -] -qed-. - -(* Properties with star-iterated structural successor for closures **********) - -lemma tdeq_fqus_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,T1⦄ → - ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂*[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. -#b #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H -[ #H elim (tdeq_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/ -| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ -] -qed-. - -(* Basic_2A1: was just: lleq_fqus_trans *) -lemma rdeq_fqus_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂*[b] ⦃G2,K2,U⦄ → - ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂*[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. -#b #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H -[ #H elim (rdeq_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/ -| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_length.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_length.ma deleted file mode 100644 index 1b50d4cd5..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_length.ma +++ /dev/null @@ -1,55 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/relocation/lifts_tdeq.ma". -include "static_2/static/rex_length.ma". -include "static_2/static/rex_fsle.ma". -include "static_2/static/rdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) - -(* Advanved properties with free variables inclusion ************************) - -lemma rdeq_fsge_comp: rex_fsge_compatible cdeq. -#L1 #L2 #T * #f1 #Hf1 #HL12 -lapply (frees_rdeq_conf … Hf1 … HL12) -lapply (sex_fwd_length … HL12) -/3 width=8 by lveq_length_eq, ex4_4_intro/ (**) (* full auto fails *) -qed-. - -(* Properties with length for local environments ****************************) - -(* Basic_2A1: uses: lleq_sort *) -lemma rdeq_sort_length: ∀L1,L2. |L1| = |L2| → ∀s. L1 ≛[⋆s] L2. -/2 width=1 by rex_sort_length/ qed. - -(* Basic_2A1: uses: lleq_gref *) -lemma rdeq_gref_length: ∀L1,L2. |L1| = |L2| → ∀l. L1 ≛[§l] L2. -/2 width=1 by rex_gref_length/ qed. - -lemma rdeq_unit_length: ∀L1,L2. |L1| = |L2| → - ∀I. L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. -/2 width=1 by rex_unit_length/ qed. - -(* Basic_2A1: uses: lleq_lift_le lleq_lift_ge *) -lemma rdeq_lifts_bi: ∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ≛[T] K2 → - ∀b,f. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → - ∀U. ⇧*[f] T ≘ U → L1 ≛[U] L2. -/3 width=9 by rex_lifts_bi, tdeq_lifts_sn/ qed-. - -(* Forward lemmas with length for local environments ************************) - -(* Basic_2A1: lleq_fwd_length *) -lemma rdeq_fwd_length: ∀L1,L2. ∀T:term. L1 ≛[T] L2 → |L1| = |L2|. -/2 width=3 by rex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_rdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_rdeq.ma deleted file mode 100644 index 30069162d..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_rdeq.ma +++ /dev/null @@ -1,99 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/syntax/ext2_ext2.ma". -include "static_2/syntax/tdeq_tdeq.ma". -include "static_2/static/rdeq_length.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) - -(* Advanced properties ******************************************************) - -(* Basic_2A1: uses: lleq_sym *) -lemma rdeq_sym: ∀T. symmetric … (rdeq T). -/3 width=3 by rdeq_fsge_comp, rex_sym, tdeq_sym/ qed-. - -(* Basic_2A1: uses: lleq_dec *) -lemma rdeq_dec: ∀L1,L2. ∀T:term. Decidable (L1 ≛[T] L2). -/3 width=1 by rex_dec, tdeq_dec/ qed-. - -(* Main properties **********************************************************) - -(* Basic_2A1: uses: lleq_bind lleq_bind_O *) -theorem rdeq_bind: ∀p,I,L1,L2,V1,V2,T. - L1 ≛[V1] L2 → L1.ⓑ{I}V1 ≛[T] L2.ⓑ{I}V2 → - L1 ≛[ⓑ{p,I}V1.T] L2. -/2 width=2 by rex_bind/ qed. - -(* Basic_2A1: uses: lleq_flat *) -theorem rdeq_flat: ∀I,L1,L2,V,T. - L1 ≛[V] L2 → L1 ≛[T] L2 → L1 ≛[ⓕ{I}V.T] L2. -/2 width=1 by rex_flat/ qed. - -theorem rdeq_bind_void: ∀p,I,L1,L2,V,T. - L1 ≛[V] L2 → L1.ⓧ ≛[T] L2.ⓧ → L1 ≛[ⓑ{p,I}V.T] L2. -/2 width=1 by rex_bind_void/ qed. - -(* Basic_2A1: uses: lleq_trans *) -theorem rdeq_trans: ∀T. Transitive … (rdeq T). -#T #L1 #L * #f1 #Hf1 #HL1 #L2 * #f2 #Hf2 #HL2 -lapply (frees_tdeq_conf_rdeq … Hf1 T … HL1) // #H0 -lapply (frees_mono … Hf2 … H0) -Hf2 -H0 -/5 width=7 by sex_trans, sex_eq_repl_back, tdeq_trans, ext2_trans, ex2_intro/ -qed-. - -(* Basic_2A1: uses: lleq_canc_sn *) -theorem rdeq_canc_sn: ∀T. left_cancellable … (rdeq T). -/3 width=3 by rdeq_trans, rdeq_sym/ qed-. - -(* Basic_2A1: uses: lleq_canc_dx *) -theorem rdeq_canc_dx: ∀T. right_cancellable … (rdeq T). -/3 width=3 by rdeq_trans, rdeq_sym/ qed-. - -theorem rdeq_repl: ∀L1,L2. ∀T:term. L1 ≛[T] L2 → - ∀K1. L1 ≛[T] K1 → ∀K2. L2 ≛[T] K2 → K1 ≛[T] K2. -/3 width=3 by rdeq_canc_sn, rdeq_trans/ qed-. - -(* Negated properties *******************************************************) - -(* Note: auto works with /4 width=8/ so rdeq_canc_sn is preferred **********) -(* Basic_2A1: uses: lleq_nlleq_trans *) -lemma rdeq_rdneq_trans: ∀T:term.∀L1,L. L1 ≛[T] L → - ∀L2. (L ≛[T] L2 → ⊥) → (L1 ≛[T] L2 → ⊥). -/3 width=3 by rdeq_canc_sn/ qed-. - -(* Basic_2A1: uses: nlleq_lleq_div *) -lemma rdneq_rdeq_div: ∀T:term.∀L2,L. L2 ≛[T] L → - ∀L1. (L1 ≛[T] L → ⊥) → (L1 ≛[T] L2 → ⊥). -/3 width=3 by rdeq_trans/ qed-. - -theorem rdneq_rdeq_canc_dx: ∀L1,L. ∀T:term. (L1 ≛[T] L → ⊥) → - ∀L2. L2 ≛[T] L → L1 ≛[T] L2 → ⊥. -/3 width=3 by rdeq_trans/ qed-. - -(* Negated inversion lemmas *************************************************) - -(* Basic_2A1: uses: nlleq_inv_bind nlleq_inv_bind_O *) -lemma rdneq_inv_bind: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → - (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V → ⊥). -/3 width=2 by rnex_inv_bind, tdeq_dec/ qed-. - -(* Basic_2A1: uses: nlleq_inv_flat *) -lemma rdneq_inv_flat: ∀I,L1,L2,V,T. (L1 ≛[ⓕ{I}V.T] L2 → ⊥) → - (L1 ≛[V] L2 → ⊥) ∨ (L1 ≛[T] L2 → ⊥). -/3 width=2 by rnex_inv_flat, tdeq_dec/ qed-. - -lemma rdneq_inv_bind_void: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → - (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓧ ≛[T] L2.ⓧ → ⊥). -/3 width=3 by rnex_inv_bind_void, tdeq_dec/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_req.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_req.ma deleted file mode 100644 index 5ef8bef9b..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_req.ma +++ /dev/null @@ -1,27 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/static/req_fsle.ma". -include "static_2/static/rdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) - -(* Properties with syntactic equivalence on referred entries ****************) - -lemma req_rdeq: ∀L1,L2. ∀T:term. L1 ≡[T] L2 → L1 ≛[T] L2. -/2 width=3 by rex_co/ qed. - -lemma req_rdeq_trans: ∀L1,L. ∀T:term. L1 ≡[T] L → - ∀L2. L ≛[T] L2 → L1 ≛[T] L2. -/2 width=3 by req_rex_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma new file mode 100644 index 000000000..e3cb96b73 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma @@ -0,0 +1,193 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/notation/relations/stareqsn_3.ma". +include "static_2/syntax/teqx_ext.ma". +include "static_2/static/rex.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) + +definition reqx: relation3 term lenv lenv ≝ + rex cdeq. + +interpretation + "sort-irrelevant equivalence on referred entries (local environment)" + 'StarEqSn T L1 L2 = (reqx T L1 L2). + +interpretation + "sort-irrelevant ranged equivalence (local environment)" + 'StarEqSn f L1 L2 = (sex cdeq_ext cfull f L1 L2). + +(* Basic properties ***********************************************************) + +lemma frees_teqx_conf_reqx: ∀f,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f → ∀T2. T1 ≛ T2 → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T2⦄ ≘ f. +#f #L1 #T1 #H elim H -f -L1 -T1 +[ #f #L1 #s1 #Hf #X #H1 #L2 #_ + elim (teqx_inv_sort1 … H1) -H1 #s2 #H destruct + /2 width=3 by frees_sort/ +| #f #i #Hf #X #H1 + >(teqx_inv_lref1 … H1) -X #Y #H2 + >(sex_inv_atom1 … H2) -Y + /2 width=1 by frees_atom/ +| #f #I #L1 #V1 #_ #IH #X #H1 + >(teqx_inv_lref1 … H1) -X #Y #H2 + elim (sex_inv_next1 … H2) -H2 #Z #L2 #HL12 #HZ #H destruct + elim (ext2_inv_pair_sn … HZ) -HZ #V2 #HV12 #H destruct + /3 width=1 by frees_pair/ +| #f #I #L1 #Hf #X #H1 + >(teqx_inv_lref1 … H1) -X #Y #H2 + elim (sex_inv_next1 … H2) -H2 #Z #L2 #_ #HZ #H destruct + >(ext2_inv_unit_sn … HZ) -Z /2 width=1 by frees_unit/ +| #f #I #L1 #i #_ #IH #X #H1 + >(teqx_inv_lref1 … H1) -X #Y #H2 + elim (sex_inv_push1 … H2) -H2 #J #L2 #HL12 #_ #H destruct + /3 width=1 by frees_lref/ +| #f #L1 #l #Hf #X #H1 #L2 #_ + >(teqx_inv_gref1 … H1) -X /2 width=1 by frees_gref/ +| #f1V #f1T #f1 #p #I #L1 #V1 #T1 #_ #_ #Hf1 #IHV #IHT #X #H1 + elim (teqx_inv_pair1 … H1) -H1 #V2 #T2 #HV12 #HT12 #H1 #L2 #HL12 destruct + /6 width=5 by frees_bind, sex_inv_tl, ext2_pair, sle_sex_trans, sor_inv_sle_dx, sor_inv_sle_sn/ +| #f1V #f1T #f1 #I #L1 #V1 #T1 #_ #_ #Hf1 #IHV #IHT #X #H1 + elim (teqx_inv_pair1 … H1) -H1 #V2 #T2 #HV12 #HT12 #H1 #L2 #HL12 destruct + /5 width=5 by frees_flat, sle_sex_trans, sor_inv_sle_dx, sor_inv_sle_sn/ +] +qed-. + +lemma frees_teqx_conf: ∀f,L,T1. L ⊢ 𝐅+⦃T1⦄ ≘ f → + ∀T2. T1 ≛ T2 → L ⊢ 𝐅+⦃T2⦄ ≘ f. +/4 width=7 by frees_teqx_conf_reqx, sex_refl, ext2_refl/ qed-. + +lemma frees_reqx_conf: ∀f,L1,T. L1 ⊢ 𝐅+⦃T⦄ ≘ f → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T⦄ ≘ f. +/2 width=7 by frees_teqx_conf_reqx, teqx_refl/ qed-. + +lemma teqx_rex_conf (R): s_r_confluent1 … cdeq (rex R). +#R #L1 #T1 #T2 #HT12 #L2 * +/3 width=5 by frees_teqx_conf, ex2_intro/ +qed-. + +lemma teqx_rex_div (R): ∀T1,T2. T1 ≛ T2 → + ∀L1,L2. L1 ⪤[R,T2] L2 → L1 ⪤[R,T1] L2. +/3 width=5 by teqx_rex_conf, teqx_sym/ qed-. + +lemma teqx_reqx_conf: s_r_confluent1 … cdeq reqx. +/2 width=5 by teqx_rex_conf/ qed-. + +lemma teqx_reqx_div: ∀T1,T2. T1 ≛ T2 → + ∀L1,L2. L1 ≛[T2] L2 → L1 ≛[T1] L2. +/2 width=5 by teqx_rex_div/ qed-. + +lemma reqx_atom: ∀I. ⋆ ≛[⓪{I}] ⋆. +/2 width=1 by rex_atom/ qed. + +lemma reqx_sort: ∀I1,I2,L1,L2,s. + L1 ≛[⋆s] L2 → L1.ⓘ{I1} ≛[⋆s] L2.ⓘ{I2}. +/2 width=1 by rex_sort/ qed. + +lemma reqx_pair: ∀I,L1,L2,V1,V2. + L1 ≛[V1] L2 → V1 ≛ V2 → L1.ⓑ{I}V1 ≛[#0] L2.ⓑ{I}V2. +/2 width=1 by rex_pair/ qed. + +lemma reqx_unit: ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ≛[f] L2 → + L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. +/2 width=3 by rex_unit/ qed. + +lemma reqx_lref: ∀I1,I2,L1,L2,i. + L1 ≛[#i] L2 → L1.ⓘ{I1} ≛[#↑i] L2.ⓘ{I2}. +/2 width=1 by rex_lref/ qed. + +lemma reqx_gref: ∀I1,I2,L1,L2,l. + L1 ≛[§l] L2 → L1.ⓘ{I1} ≛[§l] L2.ⓘ{I2}. +/2 width=1 by rex_gref/ qed. + +lemma reqx_bind_repl_dx: ∀I,I1,L1,L2.∀T:term. + L1.ⓘ{I} ≛[T] L2.ⓘ{I1} → + ∀I2. I ≛ I2 → + L1.ⓘ{I} ≛[T] L2.ⓘ{I2}. +/2 width=2 by rex_bind_repl_dx/ qed-. + +(* Basic inversion lemmas ***************************************************) + +lemma reqx_inv_atom_sn: ∀Y2. ∀T:term. ⋆ ≛[T] Y2 → Y2 = ⋆. +/2 width=3 by rex_inv_atom_sn/ qed-. + +lemma reqx_inv_atom_dx: ∀Y1. ∀T:term. Y1 ≛[T] ⋆ → Y1 = ⋆. +/2 width=3 by rex_inv_atom_dx/ qed-. + +lemma reqx_inv_zero: + ∀Y1,Y2. Y1 ≛[#0] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I,L1,L2,V1,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 + | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ≛[f] L2 & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. +#Y1 #Y2 #H elim (rex_inv_zero … H) -H * +/3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/ +qed-. + +lemma reqx_inv_lref: ∀Y1,Y2,i. Y1 ≛[#↑i] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I1,I2,L1,L2. L1 ≛[#i] L2 & + Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. +/2 width=1 by rex_inv_lref/ qed-. + +(* Basic_2A1: uses: lleq_inv_bind lleq_inv_bind_O *) +lemma reqx_inv_bind: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → + ∧∧ L1 ≛[V] L2 & L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. +/2 width=2 by rex_inv_bind/ qed-. + +(* Basic_2A1: uses: lleq_inv_flat *) +lemma reqx_inv_flat: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → + ∧∧ L1 ≛[V] L2 & L1 ≛[T] L2. +/2 width=2 by rex_inv_flat/ qed-. + +(* Advanced inversion lemmas ************************************************) + +lemma reqx_inv_zero_pair_sn: ∀I,Y2,L1,V1. L1.ⓑ{I}V1 ≛[#0] Y2 → + ∃∃L2,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y2 = L2.ⓑ{I}V2. +/2 width=1 by rex_inv_zero_pair_sn/ qed-. + +lemma reqx_inv_zero_pair_dx: ∀I,Y1,L2,V2. Y1 ≛[#0] L2.ⓑ{I}V2 → + ∃∃L1,V1. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1. +/2 width=1 by rex_inv_zero_pair_dx/ qed-. + +lemma reqx_inv_lref_bind_sn: ∀I1,Y2,L1,i. L1.ⓘ{I1} ≛[#↑i] Y2 → + ∃∃I2,L2. L1 ≛[#i] L2 & Y2 = L2.ⓘ{I2}. +/2 width=2 by rex_inv_lref_bind_sn/ qed-. + +lemma reqx_inv_lref_bind_dx: ∀I2,Y1,L2,i. Y1 ≛[#↑i] L2.ⓘ{I2} → + ∃∃I1,L1. L1 ≛[#i] L2 & Y1 = L1.ⓘ{I1}. +/2 width=2 by rex_inv_lref_bind_dx/ qed-. + +(* Basic forward lemmas *****************************************************) + +lemma reqx_fwd_zero_pair: ∀I,K1,K2,V1,V2. + K1.ⓑ{I}V1 ≛[#0] K2.ⓑ{I}V2 → K1 ≛[V1] K2. +/2 width=3 by rex_fwd_zero_pair/ qed-. + +(* Basic_2A1: uses: lleq_fwd_bind_sn lleq_fwd_flat_sn *) +lemma reqx_fwd_pair_sn: ∀I,L1,L2,V,T. L1 ≛[②{I}V.T] L2 → L1 ≛[V] L2. +/2 width=3 by rex_fwd_pair_sn/ qed-. + +(* Basic_2A1: uses: lleq_fwd_bind_dx lleq_fwd_bind_O_dx *) +lemma reqx_fwd_bind_dx: ∀p,I,L1,L2,V,T. + L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. +/2 width=2 by rex_fwd_bind_dx/ qed-. + +(* Basic_2A1: uses: lleq_fwd_flat_dx *) +lemma reqx_fwd_flat_dx: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → L1 ≛[T] L2. +/2 width=3 by rex_fwd_flat_dx/ qed-. + +lemma reqx_fwd_dx: ∀I2,L1,K2. ∀T:term. L1 ≛[T] K2.ⓘ{I2} → + ∃∃I1,K1. L1 = K1.ⓘ{I1}. +/2 width=5 by rex_fwd_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_drops.ma new file mode 100644 index 000000000..1a0837d5c --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_drops.ma @@ -0,0 +1,52 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/relocation/lifts_teqx.ma". +include "static_2/static/rex_drops.ma". +include "static_2/static/reqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) + +(* Properties with generic slicing for local environments *******************) + +lemma reqx_lifts_sn: f_dedropable_sn cdeq. +/3 width=5 by rex_liftable_dedropable_sn, teqx_lifts_sn/ qed-. + +(* Inversion lemmas with generic slicing for local environments *************) + +lemma reqx_inv_lifts_sn: f_dropable_sn cdeq. +/2 width=5 by rex_dropable_sn/ qed-. + +lemma reqx_inv_lifts_dx: f_dropable_dx cdeq. +/2 width=5 by rex_dropable_dx/ qed-. + +lemma reqx_inv_lifts_bi: ∀L1,L2,U. L1 ≛[U] L2 → ∀b,f. 𝐔⦃f⦄ → + ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → + ∀T. ⇧*[f] T ≘ U → K1 ≛[T] K2. +/2 width=10 by rex_inv_lifts_bi/ qed-. + +lemma reqx_inv_lref_pair_sn: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 → + ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[V1] K2 & V1 ≛ V2. +/2 width=3 by rex_inv_lref_pair_sn/ qed-. + +lemma reqx_inv_lref_pair_dx: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 → + ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[V1] K2 & V1 ≛ V2. +/2 width=3 by rex_inv_lref_pair_dx/ qed-. + +lemma reqx_inv_lref_pair_bi (L1) (L2) (i): + L1 ≛[#i] L2 → + ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I1}V1 → + ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I2}V2 → + ∧∧ K1 ≛[V1] K2 & V1 ≛ V2 & I1 = I2. +/2 width=6 by rex_inv_lref_pair_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqup.ma new file mode 100644 index 000000000..d31901784 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqup.ma @@ -0,0 +1,39 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/rex_fqup.ma". +include "static_2/static/reqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) + +(* Advanced properties ******************************************************) + +lemma reqx_refl: ∀T. reflexive … (reqx T). +/2 width=1 by rex_refl/ qed. + +lemma reqx_pair_refl: ∀V1,V2. V1 ≛ V2 → + ∀I,L. ∀T:term. L.ⓑ{I}V1 ≛[T] L.ⓑ{I}V2. +/2 width=1 by rex_pair_refl/ qed. + +(* Advanced inversion lemmas ************************************************) + +lemma reqx_inv_bind_void: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → + L1 ≛[V] L2 ∧ L1.ⓧ ≛[T] L2.ⓧ. +/2 width=3 by rex_inv_bind_void/ qed-. + +(* Advanced forward lemmas **************************************************) + +lemma reqx_fwd_bind_dx_void: ∀p,I,L1,L2,V,T. + L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓧ ≛[T] L2.ⓧ. +/2 width=4 by rex_fwd_bind_dx_void/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqus.ma new file mode 100644 index 000000000..462a00014 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqus.ma @@ -0,0 +1,156 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/s_computation/fqus_fqup.ma". +include "static_2/static/reqx_drops.ma". +include "static_2/static/reqx_fqup.ma". +include "static_2/static/reqx_reqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) + +(* Properties with extended structural successor for closures ***************) + +lemma fqu_teqx_conf: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,T1⦄ → + ∀U2. U1 ≛ U2 → + ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂[b] ⦃G2,L,T2⦄ & L2 ≛[T1] L & T1 ≛ T2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1 +[ #I #G #L #W #X #H >(teqx_inv_lref1 … H) -X + /2 width=5 by fqu_lref_O, ex3_2_intro/ +| #I #G #L #W1 #U1 #X #H + elim (teqx_inv_pair1 … H) -H #W2 #U2 #HW12 #_ #H destruct + /2 width=5 by fqu_pair_sn, ex3_2_intro/ +| #p #I #G #L #W1 #U1 #Hb #X #H + elim (teqx_inv_pair1 … H) -H #W2 #U2 #HW12 #HU12 #H destruct + /3 width=5 by reqx_pair_refl, fqu_bind_dx, ex3_2_intro/ +| #p #I #G #L #W1 #U1 #Hb #X #H + elim (teqx_inv_pair1 … H) -H #W2 #U2 #HW12 #HU12 #H destruct + /3 width=5 by fqu_clear, ex3_2_intro/ +| #I #G #L #W1 #U1 #X #H + elim (teqx_inv_pair1 … H) -H #W2 #U2 #_ #HU12 #H destruct + /2 width=5 by fqu_flat_dx, ex3_2_intro/ +| #I #G #L #T1 #U1 #HTU1 #U2 #HU12 + elim (teqx_inv_lifts_sn … HU12 … HTU1) -U1 + /3 width=5 by fqu_drop, ex3_2_intro/ +] +qed-. + +lemma teqx_fqu_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21 +elim (fqu_teqx_conf … H12 U2) -H12 +/3 width=5 by reqx_sym, teqx_sym, ex3_2_intro/ +qed-. + +(* Basic_2A1: uses: lleq_fqu_trans *) +lemma reqx_fqu_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂[b] ⦃G2,K2,U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U +[ #I #G #L2 #V2 #L1 #H elim (reqx_inv_zero_pair_dx … H) -H + #K1 #V1 #HV1 #HV12 #H destruct + /3 width=7 by teqx_reqx_conf, fqu_lref_O, ex3_2_intro/ +| * [ #p ] #I #G #L2 #V #T #L1 #H + [ elim (reqx_inv_bind … H) + | elim (reqx_inv_flat … H) + ] -H + /2 width=5 by fqu_pair_sn, ex3_2_intro/ +| #p #I #G #L2 #V #T #Hb #L1 #H elim (reqx_inv_bind … H) -H + /3 width=5 by fqu_bind_dx, ex3_2_intro/ +| #p #I #G #L2 #V #T #Hb #L1 #H elim (reqx_inv_bind_void … H) -H + /3 width=5 by fqu_clear, ex3_2_intro/ +| #I #G #L2 #V #T #L1 #H elim (reqx_inv_flat … H) -H + /2 width=5 by fqu_flat_dx, ex3_2_intro/ +| #I #G #L2 #T #U #HTU #Y #HU + elim (reqx_fwd_dx … HU) #L1 #V1 #H destruct + /5 width=14 by reqx_inv_lifts_bi, fqu_drop, drops_refl, drops_drop, ex3_2_intro/ +] +qed-. + +(* Properties with optional structural successor for closures ***************) + +lemma teqx_fquq_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂⸮[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H +[ #H #U2 #HU21 elim (teqx_fqu_trans … H … HU21) -U1 + /3 width=5 by fqu_fquq, ex3_2_intro/ +| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ +] +qed-. + +(* Basic_2A1: was just: lleq_fquq_trans *) +lemma reqx_fquq_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂⸮[b] ⦃G2,K2,U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂⸮[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H elim H -H +[ #H #L1 #HL12 elim (reqx_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/ +| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ +] +qed-. + +(* Properties with plus-iterated structural successor for closures **********) + +(* Basic_2A1: was just: lleq_fqup_trans *) +lemma reqx_fqup_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂+[b] ⦃G2,K2,U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂+[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U +[ #G2 #K2 #U #HTU #L1 #HL12 elim (reqx_fqu_trans … HTU … HL12) -L2 + /3 width=5 by fqu_fqup, ex3_2_intro/ +| #G #G2 #K #K2 #U #U2 #_ #HU2 #IHTU #L1 #HL12 + elim (IHTU … HL12) -L2 #K0 #U0 #HTU #HU0 #HK0 + elim (reqx_fqu_trans … HU2 … HK0) -K #K1 #U1 #HU1 #HU12 #HK12 + elim (teqx_fqu_trans … HU1 … HU0) -U #K3 #U3 #HU03 #HU31 #HK31 + @(ex3_2_intro … K3 U3) (**) (* full auto too slow *) + /3 width=5 by reqx_trans, teqx_reqx_conf, fqup_strap1, teqx_trans/ +] +qed-. + +lemma teqx_fqup_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂+[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1 +[ #G1 #L1 #U1 #H #U2 #HU21 elim (teqx_fqu_trans … H … HU21) -U1 + /3 width=5 by fqu_fqup, ex3_2_intro/ +| #G1 #G #L1 #L #U1 #U #H #_ #IH #U2 #HU21 + elim (teqx_fqu_trans … H … HU21) -U1 #L0 #T #H1 #HTU #HL0 + lapply (teqx_reqx_div … HTU … HL0) -HL0 #HL0 + elim (IH … HTU) -U #K2 #U1 #H2 #HUT1 #HKL2 + elim (reqx_fqup_trans … H2 … HL0) -L #K #U #H2 #HU1 #HK2 + lapply (teqx_reqx_conf … HUT1 … HK2) -HK2 #HK2 + /3 width=7 by reqx_trans, fqup_strap2, teqx_trans, ex3_2_intro/ +] +qed-. + +(* Properties with star-iterated structural successor for closures **********) + +lemma teqx_fqus_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂*[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H +[ #H elim (teqx_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/ +| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ +] +qed-. + +(* Basic_2A1: was just: lleq_fqus_trans *) +lemma reqx_fqus_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂*[b] ⦃G2,K2,U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂*[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H +[ #H elim (reqx_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/ +| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_length.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_length.ma new file mode 100644 index 000000000..d8750ca24 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_length.ma @@ -0,0 +1,55 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/relocation/lifts_teqx.ma". +include "static_2/static/rex_length.ma". +include "static_2/static/rex_fsle.ma". +include "static_2/static/reqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) + +(* Advanved properties with free variables inclusion ************************) + +lemma reqx_fsge_comp: rex_fsge_compatible cdeq. +#L1 #L2 #T * #f1 #Hf1 #HL12 +lapply (frees_reqx_conf … Hf1 … HL12) +lapply (sex_fwd_length … HL12) +/3 width=8 by lveq_length_eq, ex4_4_intro/ (**) (* full auto fails *) +qed-. + +(* Properties with length for local environments ****************************) + +(* Basic_2A1: uses: lleq_sort *) +lemma reqx_sort_length: ∀L1,L2. |L1| = |L2| → ∀s. L1 ≛[⋆s] L2. +/2 width=1 by rex_sort_length/ qed. + +(* Basic_2A1: uses: lleq_gref *) +lemma reqx_gref_length: ∀L1,L2. |L1| = |L2| → ∀l. L1 ≛[§l] L2. +/2 width=1 by rex_gref_length/ qed. + +lemma reqx_unit_length: ∀L1,L2. |L1| = |L2| → + ∀I. L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. +/2 width=1 by rex_unit_length/ qed. + +(* Basic_2A1: uses: lleq_lift_le lleq_lift_ge *) +lemma reqx_lifts_bi: ∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ≛[T] K2 → + ∀b,f. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → + ∀U. ⇧*[f] T ≘ U → L1 ≛[U] L2. +/3 width=9 by rex_lifts_bi, teqx_lifts_sn/ qed-. + +(* Forward lemmas with length for local environments ************************) + +(* Basic_2A1: lleq_fwd_length *) +lemma reqx_fwd_length: ∀L1,L2. ∀T:term. L1 ≛[T] L2 → |L1| = |L2|. +/2 width=3 by rex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_req.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_req.ma new file mode 100644 index 000000000..8ec1b14b0 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_req.ma @@ -0,0 +1,27 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/static/req_fsle.ma". +include "static_2/static/reqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) + +(* Properties with syntactic equivalence on referred entries ****************) + +lemma req_reqx: ∀L1,L2. ∀T:term. L1 ≡[T] L2 → L1 ≛[T] L2. +/2 width=3 by rex_co/ qed. + +lemma req_reqx_trans: ∀L1,L. ∀T:term. L1 ≡[T] L → + ∀L2. L ≛[T] L2 → L1 ≛[T] L2. +/2 width=3 by req_rex_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_reqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_reqx.ma new file mode 100644 index 000000000..f190e907a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_reqx.ma @@ -0,0 +1,99 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/syntax/ext2_ext2.ma". +include "static_2/syntax/teqx_teqx.ma". +include "static_2/static/reqx_length.ma". + +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) + +(* Advanced properties ******************************************************) + +(* Basic_2A1: uses: lleq_sym *) +lemma reqx_sym: ∀T. symmetric … (reqx T). +/3 width=3 by reqx_fsge_comp, rex_sym, teqx_sym/ qed-. + +(* Basic_2A1: uses: lleq_dec *) +lemma reqx_dec: ∀L1,L2. ∀T:term. Decidable (L1 ≛[T] L2). +/3 width=1 by rex_dec, teqx_dec/ qed-. + +(* Main properties **********************************************************) + +(* Basic_2A1: uses: lleq_bind lleq_bind_O *) +theorem reqx_bind: ∀p,I,L1,L2,V1,V2,T. + L1 ≛[V1] L2 → L1.ⓑ{I}V1 ≛[T] L2.ⓑ{I}V2 → + L1 ≛[ⓑ{p,I}V1.T] L2. +/2 width=2 by rex_bind/ qed. + +(* Basic_2A1: uses: lleq_flat *) +theorem reqx_flat: ∀I,L1,L2,V,T. + L1 ≛[V] L2 → L1 ≛[T] L2 → L1 ≛[ⓕ{I}V.T] L2. +/2 width=1 by rex_flat/ qed. + +theorem reqx_bind_void: ∀p,I,L1,L2,V,T. + L1 ≛[V] L2 → L1.ⓧ ≛[T] L2.ⓧ → L1 ≛[ⓑ{p,I}V.T] L2. +/2 width=1 by rex_bind_void/ qed. + +(* Basic_2A1: uses: lleq_trans *) +theorem reqx_trans: ∀T. Transitive … (reqx T). +#T #L1 #L * #f1 #Hf1 #HL1 #L2 * #f2 #Hf2 #HL2 +lapply (frees_teqx_conf_reqx … Hf1 T … HL1) // #H0 +lapply (frees_mono … Hf2 … H0) -Hf2 -H0 +/5 width=7 by sex_trans, sex_eq_repl_back, teqx_trans, ext2_trans, ex2_intro/ +qed-. + +(* Basic_2A1: uses: lleq_canc_sn *) +theorem reqx_canc_sn: ∀T. left_cancellable … (reqx T). +/3 width=3 by reqx_trans, reqx_sym/ qed-. + +(* Basic_2A1: uses: lleq_canc_dx *) +theorem reqx_canc_dx: ∀T. right_cancellable … (reqx T). +/3 width=3 by reqx_trans, reqx_sym/ qed-. + +theorem reqx_repl: ∀L1,L2. ∀T:term. L1 ≛[T] L2 → + ∀K1. L1 ≛[T] K1 → ∀K2. L2 ≛[T] K2 → K1 ≛[T] K2. +/3 width=3 by reqx_canc_sn, reqx_trans/ qed-. + +(* Negated properties *******************************************************) + +(* Note: auto works with /4 width=8/ so reqx_canc_sn is preferred **********) +(* Basic_2A1: uses: lleq_nlleq_trans *) +lemma reqx_rneqx_trans: ∀T:term.∀L1,L. L1 ≛[T] L → + ∀L2. (L ≛[T] L2 → ⊥) → (L1 ≛[T] L2 → ⊥). +/3 width=3 by reqx_canc_sn/ qed-. + +(* Basic_2A1: uses: nlleq_lleq_div *) +lemma rneqx_reqx_div: ∀T:term.∀L2,L. L2 ≛[T] L → + ∀L1. (L1 ≛[T] L → ⊥) → (L1 ≛[T] L2 → ⊥). +/3 width=3 by reqx_trans/ qed-. + +theorem rneqx_reqx_canc_dx: ∀L1,L. ∀T:term. (L1 ≛[T] L → ⊥) → + ∀L2. L2 ≛[T] L → L1 ≛[T] L2 → ⊥. +/3 width=3 by reqx_trans/ qed-. + +(* Negated inversion lemmas *************************************************) + +(* Basic_2A1: uses: nlleq_inv_bind nlleq_inv_bind_O *) +lemma rneqx_inv_bind: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → + (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V → ⊥). +/3 width=2 by rnex_inv_bind, teqx_dec/ qed-. + +(* Basic_2A1: uses: nlleq_inv_flat *) +lemma rneqx_inv_flat: ∀I,L1,L2,V,T. (L1 ≛[ⓕ{I}V.T] L2 → ⊥) → + (L1 ≛[V] L2 → ⊥) ∨ (L1 ≛[T] L2 → ⊥). +/3 width=2 by rnex_inv_flat, teqx_dec/ qed-. + +lemma rneqx_inv_bind_void: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → + (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓧ ≛[T] L2.ⓧ → ⊥). +/3 width=3 by rnex_inv_bind_void, teqx_dec/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/sd_d.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/sd_d.ma index 56c80d69e..296322e61 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/sd_d.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/sd_d.ma @@ -12,7 +12,6 @@ (* *) (**************************************************************************) -include "ground_2/pull/pull_2.ma". include "static_2/syntax/sh_props.ma". include "static_2/syntax/sd.ma". diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/sh_lt.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/sh_lt.ma index 494436476..b7e10f851 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/sh_lt.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/sh_lt.ma @@ -36,6 +36,74 @@ lapply (nexts_le … Hh s n) #H @(le_to_lt_to_lt … H) /2 width=1 by next_lt/ qed. -axiom sh_lt_dec (h): sh_lt h → sh_decidable h. +lemma sh_lt_nexts_inv_lt (h): sh_lt h → + ∀s,n1,n2. (next h)^n1 s < (next h)^n2 s → n1 < n2. +#h #Hh +@pull_2 #n1 +elim n1 -n1 +[ #s * + [ #H elim (lt_refl_false … H) + | #n2 // + ] +| #n1 #IH #s * + [ >iter_O #H + elim (lt_refl_false s) + /3 width=3 by nexts_lt, transitive_lt/ + | #n2 >iter_S >iter_S <(iter_n_Sm … (next h)) <(iter_n_Sm … (next h)) #H + /3 width=2 by lt_S_S/ + ] +] +qed-. -axiom sh_lt_acyclic (h): sh_lt h → sh_acyclic h. +lemma sh_lt_acyclic (h): sh_lt h → sh_acyclic h. +#h #Hh +@mk_sh_acyclic +@pull_2 #n1 +elim n1 -n1 +[ #s * [ // ] #n2 >iter_O #H + elim (lt_refl_false s) >H in ⊢ (??%); -H + /2 width=1 by nexts_lt/ +| #n1 #IH #s * + [ >iter_O #H -IH + elim (lt_refl_false s) iter_S >iter_S <(iter_n_Sm … (next h)) <(iter_n_Sm … (next h)) #H + /3 width=2 by eq_f/ + ] +] +qed. + +lemma sh_lt_dec (h): sh_lt h → sh_decidable h. +#h #Hh +@mk_sh_decidable #s1 #s2 +elim (lt_or_ge s2 s1) #Hs +[ @or_intror * #n #H destruct + @(lt_le_false … Hs) /2 width=1 by nexts_le/ (**) (* full auto too slow *) +| @(nat_elim_le_sn … Hs) -s1 -s2 #s1 #s2 #IH #Hs12 + elim (lt_or_eq_or_gt s2 (⫯[h]s1)) #Hs21 destruct + [ elim (le_to_or_lt_eq … Hs12) -Hs12 #Hs12 destruct + [ -IH @or_intror * #n #H destruct + generalize in match Hs21; -Hs21 + <(iter_O … (next h) s1) in ⊢ (??%→?); <(iter_S … (next h)) #H + lapply (sh_lt_nexts_inv_lt … Hh … H) -H #H + <(le_n_O_to_eq n) in Hs12; + /2 width=2 by lt_refl_false, le_S_S_to_le/ + | /3 width=2 by ex_intro, or_introl/ + ] + | -IH @or_introl @(ex_intro … 1) // (**) (* auto fails *) + | lapply (transitive_lt s1 ??? Hs21) [ /2 width=1 by next_lt/ ] -Hs12 #Hs12 + elim (IH (s2-⫯[h]s1)) -IH + [3: /3 width=1 by next_lt, monotonic_lt_minus_r/ ] + >minus_minus_m_m [2,4: /2 width=1 by lt_to_le/ ] -Hs21 + [ * #n #H destruct + @or_introl @(ex_intro … (↑n)) >iter_S >iter_n_Sm // + | #H1 @or_intror * #n #H2 @H1 -H1 destruct + generalize in match Hs12; -Hs12 + <(iter_O … (next h) s1) in ⊢ (?%?→?); #H + lapply (sh_lt_nexts_inv_lt … Hh … H) -H #H + <(S_pred … H) -H + @(ex_intro … (↓n)) >(iter_n_Sm … (next h)) >iter_S // + ] + ] +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq.ma deleted file mode 100644 index 60c1e4d13..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq.ma +++ /dev/null @@ -1,184 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/notation/relations/stareq_2.ma". -include "static_2/syntax/term.ma". - -(* SORT-IRRELEVANT EQUIVALENCE ON TERMS *************************************) - -inductive tdeq: relation term ≝ -| tdeq_sort: ∀s1,s2. tdeq (⋆s1) (⋆s2) -| tdeq_lref: ∀i. tdeq (#i) (#i) -| tdeq_gref: ∀l. tdeq (§l) (§l) -| tdeq_pair: ∀I,V1,V2,T1,T2. tdeq V1 V2 → tdeq T1 T2 → tdeq (②{I}V1.T1) (②{I}V2.T2) -. - -interpretation - "context-free sort-irrelevant equivalence (term)" - 'StarEq T1 T2 = (tdeq T1 T2). - -(* Basic properties *********************************************************) - -lemma tdeq_refl: reflexive … tdeq. -#T elim T -T /2 width=1 by tdeq_pair/ -* /2 width=1 by tdeq_lref, tdeq_gref/ -qed. - -lemma tdeq_sym: symmetric … tdeq. -#T1 #T2 #H elim H -T1 -T2 -/2 width=3 by tdeq_sort, tdeq_lref, tdeq_gref, tdeq_pair/ -qed-. - -(* Basic inversion lemmas ***************************************************) - -fact tdeq_inv_sort1_aux: ∀X,Y. X ≛ Y → ∀s1. X = ⋆s1 → - ∃s2. Y = ⋆s2. -#X #Y * -X -Y -[ #s1 #s2 #s #H destruct /2 width=2 by ex_intro/ -| #i #s #H destruct -| #l #s #H destruct -| #I #V1 #V2 #T1 #T2 #_ #_ #s #H destruct -] -qed-. - -lemma tdeq_inv_sort1: ∀Y,s1. ⋆s1 ≛ Y → - ∃s2. Y = ⋆s2. -/2 width=4 by tdeq_inv_sort1_aux/ qed-. - -fact tdeq_inv_lref1_aux: ∀X,Y. X ≛ Y → ∀i. X = #i → Y = #i. -#X #Y * -X -Y // -[ #s1 #s2 #j #H destruct -| #I #V1 #V2 #T1 #T2 #_ #_ #j #H destruct -] -qed-. - -lemma tdeq_inv_lref1: ∀Y,i. #i ≛ Y → Y = #i. -/2 width=5 by tdeq_inv_lref1_aux/ qed-. - -fact tdeq_inv_gref1_aux: ∀X,Y. X ≛ Y → ∀l. X = §l → Y = §l. -#X #Y * -X -Y // -[ #s1 #s2 #k #H destruct -| #I #V1 #V2 #T1 #T2 #_ #_ #k #H destruct -] -qed-. - -lemma tdeq_inv_gref1: ∀Y,l. §l ≛ Y → Y = §l. -/2 width=5 by tdeq_inv_gref1_aux/ qed-. - -fact tdeq_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②{I}V1.T1 → - ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. -#X #Y * -X -Y -[ #s1 #s2 #J #W1 #U1 #H destruct -| #i #J #W1 #U1 #H destruct -| #l #J #W1 #U1 #H destruct -| #I #V1 #V2 #T1 #T2 #HV #HT #J #W1 #U1 #H destruct /2 width=5 by ex3_2_intro/ -] -qed-. - -lemma tdeq_inv_pair1: ∀I,V1,T1,Y. ②{I}V1.T1 ≛ Y → - ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. -/2 width=3 by tdeq_inv_pair1_aux/ qed-. - -lemma tdeq_inv_sort2: ∀X1,s2. X1 ≛ ⋆s2 → - ∃s1. X1 = ⋆s1. -#X1 #s2 #H -elim (tdeq_inv_sort1 X1 s2) -/2 width=2 by tdeq_sym, ex_intro/ -qed-. - -lemma tdeq_inv_pair2: ∀I,X1,V2,T2. X1 ≛ ②{I}V2.T2 → - ∃∃V1,T1. V1 ≛ V2 & T1 ≛ T2 & X1 = ②{I}V1.T1. -#I #X1 #V2 #T2 #H -elim (tdeq_inv_pair1 I V2 T2 X1) -[ #V1 #T1 #HV #HT #H destruct ] -/3 width=5 by tdeq_sym, ex3_2_intro/ -qed-. - -(* Advanced inversion lemmas ************************************************) - -lemma tdeq_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ≛ ②{I2}V2.T2 → - ∧∧ I1 = I2 & V1 ≛ V2 & T1 ≛ T2. -#I1 #I2 #V1 #V2 #T1 #T2 #H elim (tdeq_inv_pair1 … H) -H -#V0 #T0 #HV #HT #H destruct /2 width=1 by and3_intro/ -qed-. - -lemma tdeq_inv_pair_xy_x: ∀I,V,T. ②{I}V.T ≛ V → ⊥. -#I #V elim V -V -[ #J #T #H elim (tdeq_inv_pair1 … H) -H #X #Y #_ #_ #H destruct -| #J #X #Y #IHX #_ #T #H elim (tdeq_inv_pair … H) -H #H #HY #_ destruct /2 width=2 by/ -] -qed-. - -lemma tdeq_inv_pair_xy_y: ∀I,T,V. ②{I}V.T ≛ T → ⊥. -#I #T elim T -T -[ #J #V #H elim (tdeq_inv_pair1 … H) -H #X #Y #_ #_ #H destruct -| #J #X #Y #_ #IHY #V #H elim (tdeq_inv_pair … H) -H #H #_ #HY destruct /2 width=2 by/ -] -qed-. - -(* Basic forward lemmas *****************************************************) - -lemma tdeq_fwd_atom1: ∀I,Y. ⓪{I} ≛ Y → ∃J. Y = ⓪{J}. -* #x #Y #H [ elim (tdeq_inv_sort1 … H) -H ] -/3 width=4 by tdeq_inv_gref1, tdeq_inv_lref1, ex_intro/ -qed-. - -(* Advanced properties ******************************************************) - -lemma tdeq_dec: ∀T1,T2. Decidable (T1 ≛ T2). -#T1 elim T1 -T1 [ * #s1 | #I1 #V1 #T1 #IHV #IHT ] * [1,3,5,7: * #s2 |*: #I2 #V2 #T2 ] -[ /3 width=1 by tdeq_sort, or_introl/ -|2,3,13: - @or_intror #H - elim (tdeq_inv_sort1 … H) -H #x #H destruct -|4,6,14: - @or_intror #H - lapply (tdeq_inv_lref1 … H) -H #H destruct -|5: - elim (eq_nat_dec s1 s2) #Hs12 destruct /2 width=1 by or_introl/ - @or_intror #H - lapply (tdeq_inv_lref1 … H) -H #H destruct /2 width=1 by/ -|7,8,15: - @or_intror #H - lapply (tdeq_inv_gref1 … H) -H #H destruct -|9: - elim (eq_nat_dec s1 s2) #Hs12 destruct /2 width=1 by or_introl/ - @or_intror #H - lapply (tdeq_inv_gref1 … H) -H #H destruct /2 width=1 by/ -|10,11,12: - @or_intror #H - elim (tdeq_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct -|16: - elim (eq_item2_dec I1 I2) #HI12 destruct - [ elim (IHV V2) -IHV #HV12 - elim (IHT T2) -IHT #HT12 - [ /3 width=1 by tdeq_pair, or_introl/ ] - ] - @or_intror #H - elim (tdeq_inv_pair … H) -H /2 width=1 by/ -] -qed-. - -(* Negated inversion lemmas *************************************************) - -lemma tdneq_inv_pair: ∀I1,I2,V1,V2,T1,T2. - (②{I1}V1.T1 ≛ ②{I2}V2.T2 → ⊥) → - ∨∨ I1 = I2 → ⊥ - | (V1 ≛ V2 → ⊥) - | (T1 ≛ T2 → ⊥). -#I1 #I2 #V1 #V2 #T1 #T2 #H12 -elim (eq_item2_dec I1 I2) /3 width=1 by or3_intro0/ #H destruct -elim (tdeq_dec V1 V2) /3 width=1 by or3_intro1/ -elim (tdeq_dec T1 T2) /4 width=1 by tdeq_pair, or3_intro2/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_ext.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_ext.ma deleted file mode 100644 index 09f7c5a76..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_ext.ma +++ /dev/null @@ -1,40 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/notation/relations/stareq_3.ma". -include "static_2/syntax/cext2.ma". -include "static_2/syntax/tdeq.ma". - -(* EXTENDED SORT-IRRELEVANT EQUIVALENCE *************************************) - -definition tdeq_ext: relation bind ≝ - ext2 tdeq. - -definition cdeq: relation3 lenv term term ≝ - λL. tdeq. - -definition cdeq_ext: relation3 lenv bind bind ≝ - cext2 cdeq. - -interpretation - "context-free sort-irrelevant equivalence (binder)" - 'StarEq I1 I2 = (tdeq_ext I1 I2). - -interpretation - "context-dependent sort-irrelevant equivalence (term)" - 'StarEq L T1 T2 = (cdeq L T1 T2). - -interpretation - "context-dependent sort-irrelevant equivalence (binder)" - 'StarEq L I1 I2 = (cdeq_ext L I1 I2). diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_tdeq.ma deleted file mode 100644 index 3ed01ec19..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_tdeq.ma +++ /dev/null @@ -1,48 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/syntax/tdeq.ma". - -(* SORT-IRRELEVANT EQUIVALENCE ON TERMS *************************************) - -(* Main properties **********************************************************) - -theorem tdeq_trans: Transitive … tdeq. -#T1 #T #H elim H -T1 -T -[ #s1 #s #X #H - elim (tdeq_inv_sort1 … H) -s /2 width=1 by tdeq_sort/ -| #i1 #i #H <(tdeq_inv_lref1 … H) -H // -| #l1 #l #H <(tdeq_inv_gref1 … H) -H // -| #I #V1 #V #T1 #T #_ #_ #IHV #IHT #X #H - elim (tdeq_inv_pair1 … H) -H /3 width=1 by tdeq_pair/ -] -qed-. - -theorem tdeq_canc_sn: left_cancellable … tdeq. -/3 width=3 by tdeq_trans, tdeq_sym/ qed-. - -theorem tdeq_canc_dx: right_cancellable … tdeq. -/3 width=3 by tdeq_trans, tdeq_sym/ qed-. - -theorem tdeq_repl: ∀T1,T2. T1 ≛ T2 → - ∀U1. T1 ≛ U1 → ∀U2. T2 ≛ U2 → U1 ≛ U2. -/3 width=3 by tdeq_canc_sn, tdeq_trans/ qed-. - -(* Negated main properies ***************************************************) - -theorem tdeq_tdneq_trans: ∀T1,T. T1 ≛ T → ∀T2. (T ≛ T2 → ⊥) → T1 ≛ T2 → ⊥. -/3 width=3 by tdeq_canc_sn/ qed-. - -theorem tdneq_tdeq_canc_dx: ∀T1,T. (T1 ≛ T → ⊥) → ∀T2. T2 ≛ T → T1 ≛ T2 → ⊥. -/3 width=3 by tdeq_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_tdeq.ma deleted file mode 100644 index a0a93b9bd..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_tdeq.ma +++ /dev/null @@ -1,24 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/syntax/tdeq.ma". -include "static_2/syntax/teqo.ma". - -(* SORT-IRRELEVANT OUTER EQUIVALENCE FOR TERMS ******************************) - -(* Properties with sort-irrelevant equivalence for terms ********************) - -lemma tdeq_teqo: ∀T1,T2. T1 ≛ T2 → T1 ⩳ T2. -#T1 #T2 * -T1 -T2 /2 width=1 by teqo_sort, teqo_pair/ -qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_teqx.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_teqx.ma new file mode 100644 index 000000000..845725d76 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_teqx.ma @@ -0,0 +1,24 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/syntax/teqx.ma". +include "static_2/syntax/teqo.ma". + +(* SORT-IRRELEVANT OUTER EQUIVALENCE FOR TERMS ******************************) + +(* Properties with sort-irrelevant equivalence for terms ********************) + +lemma teqx_teqo: ∀T1,T2. T1 ≛ T2 → T1 ⩳ T2. +#T1 #T2 * -T1 -T2 /2 width=1 by teqo_sort, teqo_pair/ +qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqx.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx.ma new file mode 100644 index 000000000..6c1ddd17e --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx.ma @@ -0,0 +1,184 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/notation/relations/stareq_2.ma". +include "static_2/syntax/term.ma". + +(* SORT-IRRELEVANT EQUIVALENCE ON TERMS *************************************) + +inductive teqx: relation term ≝ +| teqx_sort: ∀s1,s2. teqx (⋆s1) (⋆s2) +| teqx_lref: ∀i. teqx (#i) (#i) +| teqx_gref: ∀l. teqx (§l) (§l) +| teqx_pair: ∀I,V1,V2,T1,T2. teqx V1 V2 → teqx T1 T2 → teqx (②{I}V1.T1) (②{I}V2.T2) +. + +interpretation + "context-free sort-irrelevant equivalence (term)" + 'StarEq T1 T2 = (teqx T1 T2). + +(* Basic properties *********************************************************) + +lemma teqx_refl: reflexive … teqx. +#T elim T -T /2 width=1 by teqx_pair/ +* /2 width=1 by teqx_lref, teqx_gref/ +qed. + +lemma teqx_sym: symmetric … teqx. +#T1 #T2 #H elim H -T1 -T2 +/2 width=3 by teqx_sort, teqx_lref, teqx_gref, teqx_pair/ +qed-. + +(* Basic inversion lemmas ***************************************************) + +fact teqx_inv_sort1_aux: ∀X,Y. X ≛ Y → ∀s1. X = ⋆s1 → + ∃s2. Y = ⋆s2. +#X #Y * -X -Y +[ #s1 #s2 #s #H destruct /2 width=2 by ex_intro/ +| #i #s #H destruct +| #l #s #H destruct +| #I #V1 #V2 #T1 #T2 #_ #_ #s #H destruct +] +qed-. + +lemma teqx_inv_sort1: ∀Y,s1. ⋆s1 ≛ Y → + ∃s2. Y = ⋆s2. +/2 width=4 by teqx_inv_sort1_aux/ qed-. + +fact teqx_inv_lref1_aux: ∀X,Y. X ≛ Y → ∀i. X = #i → Y = #i. +#X #Y * -X -Y // +[ #s1 #s2 #j #H destruct +| #I #V1 #V2 #T1 #T2 #_ #_ #j #H destruct +] +qed-. + +lemma teqx_inv_lref1: ∀Y,i. #i ≛ Y → Y = #i. +/2 width=5 by teqx_inv_lref1_aux/ qed-. + +fact teqx_inv_gref1_aux: ∀X,Y. X ≛ Y → ∀l. X = §l → Y = §l. +#X #Y * -X -Y // +[ #s1 #s2 #k #H destruct +| #I #V1 #V2 #T1 #T2 #_ #_ #k #H destruct +] +qed-. + +lemma teqx_inv_gref1: ∀Y,l. §l ≛ Y → Y = §l. +/2 width=5 by teqx_inv_gref1_aux/ qed-. + +fact teqx_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②{I}V1.T1 → + ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. +#X #Y * -X -Y +[ #s1 #s2 #J #W1 #U1 #H destruct +| #i #J #W1 #U1 #H destruct +| #l #J #W1 #U1 #H destruct +| #I #V1 #V2 #T1 #T2 #HV #HT #J #W1 #U1 #H destruct /2 width=5 by ex3_2_intro/ +] +qed-. + +lemma teqx_inv_pair1: ∀I,V1,T1,Y. ②{I}V1.T1 ≛ Y → + ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. +/2 width=3 by teqx_inv_pair1_aux/ qed-. + +lemma teqx_inv_sort2: ∀X1,s2. X1 ≛ ⋆s2 → + ∃s1. X1 = ⋆s1. +#X1 #s2 #H +elim (teqx_inv_sort1 X1 s2) +/2 width=2 by teqx_sym, ex_intro/ +qed-. + +lemma teqx_inv_pair2: ∀I,X1,V2,T2. X1 ≛ ②{I}V2.T2 → + ∃∃V1,T1. V1 ≛ V2 & T1 ≛ T2 & X1 = ②{I}V1.T1. +#I #X1 #V2 #T2 #H +elim (teqx_inv_pair1 I V2 T2 X1) +[ #V1 #T1 #HV #HT #H destruct ] +/3 width=5 by teqx_sym, ex3_2_intro/ +qed-. + +(* Advanced inversion lemmas ************************************************) + +lemma teqx_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ≛ ②{I2}V2.T2 → + ∧∧ I1 = I2 & V1 ≛ V2 & T1 ≛ T2. +#I1 #I2 #V1 #V2 #T1 #T2 #H elim (teqx_inv_pair1 … H) -H +#V0 #T0 #HV #HT #H destruct /2 width=1 by and3_intro/ +qed-. + +lemma teqx_inv_pair_xy_x: ∀I,V,T. ②{I}V.T ≛ V → ⊥. +#I #V elim V -V +[ #J #T #H elim (teqx_inv_pair1 … H) -H #X #Y #_ #_ #H destruct +| #J #X #Y #IHX #_ #T #H elim (teqx_inv_pair … H) -H #H #HY #_ destruct /2 width=2 by/ +] +qed-. + +lemma teqx_inv_pair_xy_y: ∀I,T,V. ②{I}V.T ≛ T → ⊥. +#I #T elim T -T +[ #J #V #H elim (teqx_inv_pair1 … H) -H #X #Y #_ #_ #H destruct +| #J #X #Y #_ #IHY #V #H elim (teqx_inv_pair … H) -H #H #_ #HY destruct /2 width=2 by/ +] +qed-. + +(* Basic forward lemmas *****************************************************) + +lemma teqx_fwd_atom1: ∀I,Y. ⓪{I} ≛ Y → ∃J. Y = ⓪{J}. +* #x #Y #H [ elim (teqx_inv_sort1 … H) -H ] +/3 width=4 by teqx_inv_gref1, teqx_inv_lref1, ex_intro/ +qed-. + +(* Advanced properties ******************************************************) + +lemma teqx_dec: ∀T1,T2. Decidable (T1 ≛ T2). +#T1 elim T1 -T1 [ * #s1 | #I1 #V1 #T1 #IHV #IHT ] * [1,3,5,7: * #s2 |*: #I2 #V2 #T2 ] +[ /3 width=1 by teqx_sort, or_introl/ +|2,3,13: + @or_intror #H + elim (teqx_inv_sort1 … H) -H #x #H destruct +|4,6,14: + @or_intror #H + lapply (teqx_inv_lref1 … H) -H #H destruct +|5: + elim (eq_nat_dec s1 s2) #Hs12 destruct /2 width=1 by or_introl/ + @or_intror #H + lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=1 by/ +|7,8,15: + @or_intror #H + lapply (teqx_inv_gref1 … H) -H #H destruct +|9: + elim (eq_nat_dec s1 s2) #Hs12 destruct /2 width=1 by or_introl/ + @or_intror #H + lapply (teqx_inv_gref1 … H) -H #H destruct /2 width=1 by/ +|10,11,12: + @or_intror #H + elim (teqx_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct +|16: + elim (eq_item2_dec I1 I2) #HI12 destruct + [ elim (IHV V2) -IHV #HV12 + elim (IHT T2) -IHT #HT12 + [ /3 width=1 by teqx_pair, or_introl/ ] + ] + @or_intror #H + elim (teqx_inv_pair … H) -H /2 width=1 by/ +] +qed-. + +(* Negated inversion lemmas *************************************************) + +lemma tneqx_inv_pair: ∀I1,I2,V1,V2,T1,T2. + (②{I1}V1.T1 ≛ ②{I2}V2.T2 → ⊥) → + ∨∨ I1 = I2 → ⊥ + | (V1 ≛ V2 → ⊥) + | (T1 ≛ T2 → ⊥). +#I1 #I2 #V1 #V2 #T1 #T2 #H12 +elim (eq_item2_dec I1 I2) /3 width=1 by or3_intro0/ #H destruct +elim (teqx_dec V1 V2) /3 width=1 by or3_intro1/ +elim (teqx_dec T1 T2) /4 width=1 by teqx_pair, or3_intro2/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqx_ext.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx_ext.ma new file mode 100644 index 000000000..bdb3971b8 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx_ext.ma @@ -0,0 +1,40 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/notation/relations/stareq_3.ma". +include "static_2/syntax/cext2.ma". +include "static_2/syntax/teqx.ma". + +(* EXTENDED SORT-IRRELEVANT EQUIVALENCE *************************************) + +definition teqx_ext: relation bind ≝ + ext2 teqx. + +definition cdeq: relation3 lenv term term ≝ + λL. teqx. + +definition cdeq_ext: relation3 lenv bind bind ≝ + cext2 cdeq. + +interpretation + "context-free sort-irrelevant equivalence (binder)" + 'StarEq I1 I2 = (teqx_ext I1 I2). + +interpretation + "context-dependent sort-irrelevant equivalence (term)" + 'StarEq L T1 T2 = (cdeq L T1 T2). + +interpretation + "context-dependent sort-irrelevant equivalence (binder)" + 'StarEq L I1 I2 = (cdeq_ext L I1 I2). diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqx_teqx.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx_teqx.ma new file mode 100644 index 000000000..b7ab7114d --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx_teqx.ma @@ -0,0 +1,48 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/syntax/teqx.ma". + +(* SORT-IRRELEVANT EQUIVALENCE ON TERMS *************************************) + +(* Main properties **********************************************************) + +theorem teqx_trans: Transitive … teqx. +#T1 #T #H elim H -T1 -T +[ #s1 #s #X #H + elim (teqx_inv_sort1 … H) -s /2 width=1 by teqx_sort/ +| #i1 #i #H <(teqx_inv_lref1 … H) -H // +| #l1 #l #H <(teqx_inv_gref1 … H) -H // +| #I #V1 #V #T1 #T #_ #_ #IHV #IHT #X #H + elim (teqx_inv_pair1 … H) -H /3 width=1 by teqx_pair/ +] +qed-. + +theorem teqx_canc_sn: left_cancellable … teqx. +/3 width=3 by teqx_trans, teqx_sym/ qed-. + +theorem teqx_canc_dx: right_cancellable … teqx. +/3 width=3 by teqx_trans, teqx_sym/ qed-. + +theorem teqx_repl: ∀T1,T2. T1 ≛ T2 → + ∀U1. T1 ≛ U1 → ∀U2. T2 ≛ U2 → U1 ≛ U2. +/3 width=3 by teqx_canc_sn, teqx_trans/ qed-. + +(* Negated main properies ***************************************************) + +theorem teqx_tneqx_trans: ∀T1,T. T1 ≛ T → ∀T2. (T ≛ T2 → ⊥) → T1 ≛ T2 → ⊥. +/3 width=3 by teqx_canc_sn/ qed-. + +theorem tneqx_teqx_canc_dx: ∀T1,T. (T1 ≛ T → ⊥) → ∀T2. T2 ≛ T → T1 ≛ T2 → ⊥. +/3 width=3 by teqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_tdeq.ma deleted file mode 100644 index fb8d7e704..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_tdeq.ma +++ /dev/null @@ -1,32 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||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 "static_2/syntax/tdeq.ma". -include "static_2/syntax/tweq.ma". - -(* SORT-IRRELEVANT WHD EQUIVALENCE ON TERMS *********************************) - -(* Properties with sort-irrelevant equivalence for terms ********************) - -lemma tdeq_tweq: ∀T1,T2. T1 ≛ T2 → T1 ≅ T2. -#T1 #T2 #H elim H -T1 -T2 [||| * [ #p ] * #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT ] -[ /1 width=1 by tweq_sort/ -| /1 width=1 by tweq_lref/ -| /1 width=1 by tweq_gref/ -| cases p -p /2 width=1 by tweq_abbr_pos, tweq_abbr_neg/ -| /1 width=1 by tweq_abst/ -| /2 width=1 by tweq_appl/ -| /2 width=1 by tweq_cast/ -] -qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_teqx.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_teqx.ma new file mode 100644 index 000000000..1d29c33aa --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_teqx.ma @@ -0,0 +1,32 @@ +(**************************************************************************) +(* ___ *) +(* ||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 "static_2/syntax/teqx.ma". +include "static_2/syntax/tweq.ma". + +(* SORT-IRRELEVANT WHD EQUIVALENCE ON TERMS *********************************) + +(* Properties with sort-irrelevant equivalence for terms ********************) + +lemma teqx_tweq: ∀T1,T2. T1 ≛ T2 → T1 ≅ T2. +#T1 #T2 #H elim H -T1 -T2 [||| * [ #p ] * #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT ] +[ /1 width=1 by tweq_sort/ +| /1 width=1 by tweq_lref/ +| /1 width=1 by tweq_gref/ +| cases p -p /2 width=1 by tweq_abbr_pos, tweq_abbr_neg/ +| /1 width=1 by tweq_abst/ +| /2 width=1 by tweq_appl/ +| /2 width=1 by tweq_cast/ +] +qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl index 627162218..ac892add2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl @@ -27,12 +27,12 @@ table { ] [ { "atomic arity assignment" * } { [ [ "restricted refinement for lenvs" ] "lsuba" + "( ? ⊢ ? ⫃⁝ ? )" "lsuba_drops" + "lsuba_lsubr" + "lsuba_aaa" + "lsuba_lsuba" * ] - [ [ "for terms" ] "aaa" + "( ⦃?,?⦄ ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_rdeq" + "aaa_fdeq" + "aaa_aaa" + "aaa_dec" * ] + [ [ "for terms" ] "aaa" + "( ⦃?,?⦄ ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqx" + "aaa_feqx" + "aaa_aaa" + "aaa_dec" * ] } ] [ { "degree-based equivalence" * } { - [ [ "for closures on referred entries" ] "fdeq" + "( ⦃?,?,?⦄ ≛ ⦃?,?,?⦄ )" "fdeq_fqup" + "fdeq_fqus" + "fdeq_req" + "fdeq_fdeq" * ] - [ [ "for lenvs on referred entries" ] "rdeq" + "( ? ≛[?] ? )" "rdeq_length" + "rdeq_drops" + "rdeq_fqup" + "rdeq_fqus" + "rdeq_req" + "rdeq_rdeq" * ] + [ [ "for closures on referred entries" ] "feqx" + "( ⦃?,?,?⦄ ≛ ⦃?,?,?⦄ )" "feqx_fqup" + "feqx_fqus" + "feqx_req" + "feqx_feqx" * ] + [ [ "for lenvs on referred entries" ] "reqx" + "( ? ≛[?] ? )" "reqx_length" + "reqx_drops" + "reqx_fqup" + "reqx_fqus" + "reqx_req" + "reqx_reqx" * ] } ] [ { "syntactic equivalence" * } { @@ -68,7 +68,7 @@ table { [ { "s-transition" * } { [ { "structural successor" * } { [ [ "for closures" ] "fquq" + "( ⦃?,?,?⦄ ⬂⸮[?] ⦃?,?,?⦄ )" + "( ⦃?,?,?⦄ ⬂⸮ ⦃?,?,?⦄ )" "fquq_length" + "fquq_weight" * ] - [ [ "proper for closures" ] "fqu" + "( ⦃?,?,?⦄ ⬂[?] ⦃?,?,?⦄ )" + "( ⦃?,?,?⦄ ⬂ ⦃?,?,?⦄ )" "fqu_length" + "fqu_weight" + "fqu_tdeq" * ] + [ [ "proper for closures" ] "fqu" + "( ⦃?,?,?⦄ ⬂[?] ⦃?,?,?⦄ )" + "( ⦃?,?,?⦄ ⬂ ⦃?,?,?⦄ )" "fqu_length" + "fqu_weight" + "fqu_teqx" * ] } ] } @@ -86,7 +86,7 @@ table { [ { "generic and uniform relocation" * } { [ [ "for binders" ] "lifts_bind" + "( ⇧*[?] ? ≘ ? )" "lifts_weight_bind" + "lifts_lifts_bind" * ] [ [ "for term vectors" ] "lifts_vector" + "( ⇧*[?] ? ≘ ? )" "lifts_lifts_vector" * ] - [ [ "for terms" ] "lifts" + "( ⇧*[?] ? ≘ ? )" "lifts_simple" + "lifts_weight" + "lifts_tdeq" + "lifts_tweq" + "lifts_teqo" + "lifts_lifts" * ] + [ [ "for terms" ] "lifts" + "( ⇧*[?] ? ≘ ? )" "lifts_simple" + "lifts_weight" + "lifts_teqx" + "lifts_tweq" + "lifts_teqo" + "lifts_lifts" * ] } ] [ { "syntactic equivalence" * } { @@ -117,16 +117,16 @@ table { } ] [ { "sort-irrelevant outer equivalence" * } { - [ [ "for terms" ] "teqo" + "( ? ⩳ ? )" "teqo_simple" + "teqo_tdeq" + "teqo_teqo" + "teqo_simple_vector" * ] + [ [ "for terms" ] "teqo" + "( ? ⩳ ? )" "teqo_simple" + "teqo_teqx" + "teqo_teqo" + "teqo_simple_vector" * ] } ] [ { "sort-irrelevant whd equivalence" * } { - [ [ "for terms" ] "tweq" + "( ? ≅ ? )" "tweq_simple" + "tweq_tdeq" + "tweq_tueq" * ] + [ [ "for terms" ] "tweq" + "( ? ≅ ? )" "tweq_simple" + "tweq_teqx" + "tweq_tueq" * ] } ] [ { "sort-irrelevant equivalence" * } { - [ [ "" ] "tdeq_ext" + "( ? ≛ ? )" + "( ? ⊢ ? ≛ ? )" * ] - [ [ "" ] "tdeq" + "( ? ≛ ? )" "tdeq_tdeq" * ] + [ [ "" ] "teqx_ext" + "( ? ≛ ? )" + "( ? ⊢ ? ≛ ? )" * ] + [ [ "" ] "teqx" + "( ? ≛ ? )" "teqx_teqx" * ] } ] [ { "closures" * } {