From: Ferruccio Guidi Date: Fri, 26 Jul 2013 18:03:47 +0000 (+0000) Subject: lambdadelta X-Git-Tag: make_still_working~1127 X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=commitdiff_plain;h=65008df95049eb835941ffea1aa682c9253c4c2b lambdadelta - we changed the beta-reductum to make reduction a special case of extended reduction, the lenv refinement for native validity was updated accordingly - we parked restricted reduction, substitution and lenv refinement for static type assignment - active notations are now one per file and are included by nead: this avoids time-wasting recompilations when notations are added, removed, or changed - Makefile: some speed up, uses new version of mac, handles auxiliary xoa files that can be included by need to avoid time-wasting recompilations when xoa objects are added mac - now outputs the pages count probe - minor bug fix: exceptions during file removal where not cought --- diff --git a/matita/components/binaries/mac/lexer.mll b/matita/components/binaries/mac/lexer.mll index 4068879ec..d5d5c90a2 100644 --- a/matita/components/binaries/mac/lexer.mll +++ b/matita/components/binaries/mac/lexer.mll @@ -1,3 +1,14 @@ +(* + ||M|| This file is part of HELM, an Hypertextual, Electronic + ||A|| Library of Mathematics, developed at the Computer Science + ||T|| Department, University of Bologna, Italy. + ||I|| + ||T|| HELM is free software; you can redistribute it and/or + ||A|| modify it under the terms of the GNU General Public License + \ / version 2 or (at your option) any later version. + \ / This software is distributed as is, NO WARRANTY. + V_______________________________________________________________ *) + { module O = Options diff --git a/matita/components/binaries/mac/mac.ml b/matita/components/binaries/mac/mac.ml index d5826e619..18bba1746 100644 --- a/matita/components/binaries/mac/mac.ml +++ b/matita/components/binaries/mac/mac.ml @@ -1,14 +1,26 @@ +(* + ||M|| This file is part of HELM, an Hypertextual, Electronic + ||A|| Library of Mathematics, developed at the Computer Science + ||T|| Department, University of Bologna, Italy. + ||I|| + ||T|| HELM is free software; you can redistribute it and/or + ||A|| modify it under the terms of the GNU General Public License + \ / version 2 or (at your option) any later version. + \ / This software is distributed as is, NO WARRANTY. + V_______________________________________________________________ *) + module A = Arg module P = Printf module O = Options module L = Lexer -let help = "Usage: mac [ -LX ]* [ ]*" +let help = "Usage: mac [ -LXQV | -p ]* [ ]*" let help_L = " Activate lexer debugging" let help_Q = " Read data from standard input" let help_V = " Show version information" let help_X = " Reset options and counters" +let help_p = " Assume characters per page (default: 5120)" let active = ref false @@ -17,7 +29,7 @@ let process_channel ich = L.token lexbuf; active := true let output_version () = - P.printf "mac 0.1.0 M - November 2012\n" + P.printf "mac 0.1.1 M - July 2013\n" let process_stdin () = process_channel stdin @@ -26,8 +38,14 @@ let process_file fname = let ich = open_in fname in process_channel ich; close_in ich +let set_page i = + if i > 0 then O.page := i + let output_count () = - if !active then P.printf "%u\n" !O.count + if !active then + let pages = !O.count / !O.page in + let pages = if !O.count mod !O.page = 0 then pages else succ pages in + P.printf "%u %u\n" !O.count pages let main () = A.parse [ diff --git a/matita/components/binaries/mac/options.ml b/matita/components/binaries/mac/options.ml index 937924671..ad48d2ebb 100644 --- a/matita/components/binaries/mac/options.ml +++ b/matita/components/binaries/mac/options.ml @@ -1,11 +1,27 @@ +(* + ||M|| This file is part of HELM, an Hypertextual, Electronic + ||A|| Library of Mathematics, developed at the Computer Science + ||T|| Department, University of Bologna, Italy. + ||I|| + ||T|| HELM is free software; you can redistribute it and/or + ||A|| modify it under the terms of the GNU General Public License + \ / version 2 or (at your option) any later version. + \ / This software is distributed as is, NO WARRANTY. + V_______________________________________________________________ *) + let debug_lexer_default = false let count_default = 0 +let page_default = 5120 + let debug_lexer = ref debug_lexer_default let count = ref count_default +let page = ref page_default + let clear () = debug_lexer := debug_lexer_default; - count := count_default + count := count_default; + page := page_default diff --git a/matita/components/binaries/mac/options.mli b/matita/components/binaries/mac/options.mli new file mode 100644 index 000000000..1816f3d15 --- /dev/null +++ b/matita/components/binaries/mac/options.mli @@ -0,0 +1,18 @@ +(* + ||M|| This file is part of HELM, an Hypertextual, Electronic + ||A|| Library of Mathematics, developed at the Computer Science + ||T|| Department, University of Bologna, Italy. + ||I|| + ||T|| HELM is free software; you can redistribute it and/or + ||A|| modify it under the terms of the GNU General Public License + \ / version 2 or (at your option) any later version. + \ / This software is distributed as is, NO WARRANTY. + V_______________________________________________________________ *) + +val debug_lexer: bool ref + +val count: int ref + +val page: int ref + +val clear: unit -> unit diff --git a/matita/components/binaries/probe/matitaList.ml b/matita/components/binaries/probe/matitaList.ml index 9f66bb6d6..99f6d193e 100644 --- a/matita/components/binaries/probe/matitaList.ml +++ b/matita/components/binaries/probe/matitaList.ml @@ -21,7 +21,12 @@ module US = U.UriSet module O = Options module E = Engine -let src_exists path = !O.no_devel || Y.file_exists path +let is_obj path = + F.check_suffix path ".con.ng" & + F.check_suffix path ".ind.ng" & + F.check_suffix path ".var.ng" + +let src_exists path = !O.no_devel || Y.file_exists path let mk_file path = if F.check_suffix path "/" then S.sub path 0 (pred (S.length path)) @@ -42,9 +47,7 @@ let add_remove base path = O.remove := F.concat base path :: !O.remove let rec scan_entry base devel path = - if F.check_suffix path ".con.ng" then add_obj path else - if F.check_suffix path ".ind.ng" then add_obj path else - if F.check_suffix path ".var.ng" then add_obj path else + if is_obj path then add_obj path else if F.check_suffix path ".ng" then if src_exists (F.chop_extension devel ^ ".ma") then add_src devel path else add_remove base path diff --git a/matita/components/binaries/probe/matitaRemove.ml b/matita/components/binaries/probe/matitaRemove.ml index 0ad0cd1d4..87be45521 100644 --- a/matita/components/binaries/probe/matitaRemove.ml +++ b/matita/components/binaries/probe/matitaRemove.ml @@ -23,8 +23,8 @@ let remove_dir dir = rmdir (F.dirname dir) in if Y.file_exists dir then begin - A.iter map (Y.readdir dir); - try rmdir dir with U.Unix_error _ -> () + try A.iter map (Y.readdir dir); rmdir dir + with U.Unix_error _ -> () end let objects () = diff --git a/matita/matita/contribs/lambdadelta/Makefile b/matita/matita/contribs/lambdadelta/Makefile index 8493b47c0..a5502a41c 100644 --- a/matita/matita/contribs/lambdadelta/Makefile +++ b/matita/matita/contribs/lambdadelta/Makefile @@ -3,27 +3,32 @@ H := @ TRIM := sed "s/ \\+$$//" -XOA_CONF := ground_2/xoa.conf.xml -XOA_TARGETS := ground_2/xoa_notation.ma ground_2/xoa.ma +XOA_CONF := ground_2/xoa.conf.xml +XOA_TARGETS := ground_2/xoa_notation.ma ground_2/xoa.ma -XOA_DIR := ../../../components/binaries/xoa -XOA := xoa.native -XOA_OPTS := ../../matita.conf.xml $(XOA_CONF) +XOA_DIR := ../../../components/binaries/xoa +XOA := xoa.native +XOA_OPTS := ../../matita.conf.xml $(XOA_CONF) -DEP_DIR := ../../../components/binaries/matitadep -DEP := matitadep.native +XOA2_CONF := ground_2/xoa2.conf.xml +XOA2_TARGETS := ground_2/xoa2_notation.ma ground_2/xoa2.ma +XOA2_OPTS := ../../matita.conf.xml $(XOA2_CONF) -MAC_DIR := ../../../components/binaries/mac -MAC := mac.native +DEP_DIR := ../../../components/binaries/matitadep +DEP := matitadep.native -PRB_DIR := ../../../components/binaries/probe -PRB := probe.native -PRB_OPTS := $(XOA_OPTS) -g +MAC_DIR := ../../../components/binaries/mac +MAC := mac.native +MAC_OPTS := -ORIG := . ./orig.sh -ORIGS := basic_2/basic_1.orig +PRB_DIR := ../../../components/binaries/probe +PRB := probe.native +PRB_OPTS := $(XOA_OPTS) -g -TAGS := all xoa orig deps stats tbls trim +ORIG := . ./orig.sh +ORIGS := basic_2/basic_1.orig + +TAGS := all xoa xoa2 orig elim deps stats tbls trim PACKAGES := ground_2 basic_2 apps_2 @@ -42,6 +47,10 @@ define MAS_TEMPLATE $(1)/$(1)_probe.txt: $$(MAS_$(1)) @echo " PROBE $(1)" $$(H)$$(PRB_DIR)/$$(PRB) $$(PRB_OPTS) $(1) -sn -on -i > $$@ + +$(1)/$(1)_mac.txt: $$(MAS_$(1)) + @echo " MAC $(1)" + $$(H)$$(MAC_DIR)/$$(MAC) $$(MAC_OPTS) $$^ > $$@ endef $(foreach PKG, $(PACKAGES), $(eval $(call MAS_TEMPLATE,$(PKG)))) @@ -54,6 +63,20 @@ $(XOA_TARGETS): $(XOA_CONF) @echo " EXEC $(XOA) $(XOA_CONF)" $(H)MATITA_RT_BASE_DIR=../.. $(XOA_DIR)/$(XOA) $(XOA_OPTS) +# xoa2 ####################################################################### + +xoa2: $(XOA2_TARGETS) + +$(XOA2_TARGETS): $(XOA2_CONF) + @echo " EXEC $(XOA) $(XOA2_CONF)" + $(H)MATITA_RT_BASE_DIR=../.. $(XOA_DIR)/$(XOA) $(XOA2_OPTS) + +# elim ####################################################################### + +elim: + @echo " MATITADEP" + $(H)grep "elim (.*?)" $(MAS) + # orig ####################################################################### orig: $(ORIGS) @@ -73,8 +96,7 @@ define STATS_TEMPLATE STTS += $$(STT_$(1)) $$(STT_$(1)): S0 = $$(shell cat $(1)/$(1)_probe.txt) - $$(STT_$(1)): S1 := $$(shell $$(MAC_DIR)/$$(MAC) $$(MAS_$(1))) - $$(STT_$(1)): S3 = $$(shell echo $$$$(($$(S1) / 5120))) + $$(STT_$(1)): S1 = $$(shell cat $(1)/$(1)_mac.txt) $$(STT_$(1)): S4 = $$(shell ls $$(MAS_$(1)) | wc -l) $$(STT_$(1)): P1 = $$(shell grep "theorem " $$(MAS_$(1)) | wc -l) $$(STT_$(1)): P2 = $$(shell grep "lemma " $$(MAS_$(1)) | wc -l) @@ -86,13 +108,13 @@ 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)/$(1)_probe.txt $(1)/$(1)_mac.txt @printf '\x1B[1;40;37m' @printf '%-15s %-47s' 'Statistics for:' $(1) @printf '\x1B[0m\n' @printf '\x1B[1;40;35m' - @printf '%-8s %6i' Chars $$(S1) - @printf ' %-8s %4i' Pages $$(S3) + @printf '%-8s %6i' Chars $$(word 1, $$(S1)) + @printf ' %-8s %4i' Pages $$(word 2, $$(S1)) @printf ' %-7s %7i' Nodes $$(word 3, $$(S0)) @printf ' %-11s' '' @printf '\x1B[0m\n' @@ -136,7 +158,7 @@ define SUMMARY_TEMPLATE SUMS += $$(SUM_$(1)) $$(SUM_$(1)): S0 = $$(shell cat $(1)/$(1)_probe.txt) - $$(SUM_$(1)): S1 = $$(shell $$(MAC_DIR)/$$(MAC) $$(MAS_$(1))) + $$(SUM_$(1)): S1 = $$(shell cat $(1)/$(1)_mac.txt) $$(SUM_$(1)): S4 = $$(shell ls $$(MAS_$(1)) | wc -l) $$(SUM_$(1)): C1 = $$(shell grep "inductive \|record " $$(MAS_$(1)) | wc -l) $$(SUM_$(1)): C2 = $$(shell grep "definition \|let rec " $$(MAS_$(1)) | wc -l) @@ -145,7 +167,7 @@ define SUMMARY_TEMPLATE $$(SUM_$(1)): P2 = $$(shell grep "lemma " $$(MAS_$(1)) | wc -l) $$(SUM_$(1)): P3 = $$(shell grep "lemma \|theorem " $$(MAS_$(1)) | wc -l) - $$(SUM_$(1)): $$(MAS_$(1)) $(1)/$(1)_probe.txt + $$(SUM_$(1)): $$(MAS_$(1)) $(1)/$(1)_probe.txt $(1)/$(1)_mac.txt @printf ' SUMMARY $(1)\n' @printf 'name "$$(basename $$(@F))"\n\n' > $$@ @printf 'table {\n' >> $$@ @@ -154,7 +176,7 @@ define SUMMARY_TEMPLATE @printf ' ]\n' >> $$@ @printf ' class "cyan" [ "sizes"\n' >> $$@ @printf ' [ "files" "$$(S4)" ]\n' >> $$@ - @printf ' [ "characters" "$$(S1)" ]\n' >> $$@ + @printf ' [ "characters" "$$(word 1, $$(S1))" ]\n' >> $$@ @printf ' [ "nodes" "$$(word 3, $$(S0))" ]\n' >> $$@ @printf ' ]\n' >> $$@ @printf ' class "green" [ "propositions"\n' >> $$@ @@ -171,6 +193,8 @@ define SUMMARY_TEMPLATE @printf 'class "component" { 0 }\n\n' >> $$@ @printf 'class "plane" { 1 } { 3 } { 5 }\n\n' >> $$@ @printf 'class "number" { 2 } { 4 } { 6 }\n' >> $$@ + +.PHONY: $$(SUM_$(1)) endef ifeq ($(MAKECMDGOALS), tbls) diff --git a/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma b/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma index 92c791912..634a7eb4a 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma @@ -63,6 +63,6 @@ qed-. lemma flift_join: ∀e1,e2,T. ⇧[e1, e2] ↑[0, e1] T ≡ ↑[0, e1 + e2] T. #e1 #e2 #T lapply (flift_lift T 0 (e1+e2)) #H -elim (lift_split … H e1 e1 ? ? ?) -H // #U #H +elim (lift_split … H e1 e1) -H // #U #H >(flift_inv_lift … H) -H // qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/acp_cr.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/acp_cr.ma index 9e5059012..3f219ba86 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/acp_cr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/acp_cr.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/ineint_4.ma". include "basic_2/grammar/aarity.ma". include "basic_2/substitution/gr2_gr2.ma". include "basic_2/substitution/lifts_lift_vector.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpds.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds.ma new file mode 100644 index 000000000..981809df8 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds.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 "basic_2/notation/relations/dpredstar_5.ma". +include "basic_2/unfold/sstas.ma". +include "basic_2/computation/cprs.ma". + +(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) + +definition cpds: ∀h. sd h → lenv → relation term ≝ λh,g,L,T1,T2. + ∃∃T. ⦃h, L⦄ ⊢ T1 •*[g] T & L ⊢ T ➡* T2. + +interpretation "decomposed extended parallel computation (term)" + 'DPRedStar h g L T1 T2 = (cpds h g L T1 T2). + +(* Basic properties *********************************************************) + +lemma cpds_refl: ∀h,g,L. reflexive … (cpds h g L). +/2 width=3/ qed. + +lemma sstas_cpds: ∀h,g,L,T1,T2. ⦃h, L⦄ ⊢ T1 •*[g] T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. +/2 width=3/ qed. + +lemma cprs_cpds: ∀h,g,L,T1,T2. L ⊢ T1 ➡* T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. +/2 width=3/ qed. + +lemma cpds_strap1: ∀h,g,L,T1,T,T2. + ⦃h, L⦄ ⊢ T1 •*➡*[g] T → L ⊢ T ➡ T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. +#h #g #L #T1 #T #T2 * /3 width=5/ +qed. + +lemma cpds_strap2: ∀h,g,L,T1,T,T2,l. + ⦃h, L⦄ ⊢ T1 •[g] ⦃l+1, T⦄ → ⦃h, L⦄ ⊢ T •*➡*[g] T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. +#h #g #L #T1 #T #T2 #l #HT1 * /3 width=4/ +qed. + +lemma ssta_cprs_cpds: ∀h,g,L,T1,T,T2,l. ⦃h, L⦄ ⊢ T1 •[g] ⦃l+1, T⦄ → + L ⊢ T ➡* T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. +/3 width=3/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_aaa.ma new file mode 100644 index 000000000..ed3b092fc --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_aaa.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 "basic_2/unfold/sstas_aaa.ma". +include "basic_2/computation/cpxs_aaa.ma". +include "basic_2/computation/cpds.ma". + +(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) + +(* Properties on atomic arity assignment for terms **************************) + +lemma cpds_aaa: ∀h,g,L,T,A. L ⊢ T ⁝ A → ∀U. ⦃h, L⦄ ⊢ T •*➡*[g] U → L ⊢ U ⁝ A. +#h #g #L #T #A #HT #U * /3 width=5 by sstas_aaa, aaa_cprs_conf/ +qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_cpds.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_cpds.ma new file mode 100644 index 000000000..847b8f62a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_cpds.ma @@ -0,0 +1,53 @@ +(**************************************************************************) +(* ___ *) +(* ||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/unfold/sstas_sstas.ma". +include "basic_2/computation/lprs_cprs.ma". +include "basic_2/computation/cpds.ma". + +(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) + +(* Advanced properties ******************************************************) + +lemma cpds_cprs_trans: ∀h,g,L,T1,T,T2. + ⦃h, L⦄ ⊢ T1 •*➡*[g] T → L ⊢ T ➡* T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. +#h #g #L #T1 #T #T2 * #T0 #HT10 #HT0 #HT2 +lapply (cprs_trans … HT0 … HT2) -T /2 width=3/ +qed-. + +lemma sstas_cpds_trans: ∀h,g,L,T1,T,T2. + ⦃h, L⦄ ⊢ T1 •*[g] T → ⦃h, L⦄ ⊢ T •*➡*[g] T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. +#h #g #L #T1 #T #T2 #HT1 * #T0 #HT0 #HT02 +lapply (sstas_trans … HT1 … HT0) -T /2 width=3/ +qed-. + +(* Advanced inversion lemmas ************************************************) + +lemma cpds_inv_abst1: ∀h,g,a,L,V1,T1,U2. ⦃h, L⦄ ⊢ ⓛ{a}V1. T1 •*➡*[g] U2 → + ∃∃V2,T2. L ⊢ V1 ➡* V2 & ⦃h, L.ⓛV1⦄ ⊢ T1 •*➡*[g] T2 & + U2 = ⓛ{a}V2. T2. +#h #g #a #L #V1 #T1 #U2 * #X #H1 #H2 +elim (sstas_inv_bind1 … H1) -H1 #U #HTU1 #H destruct +elim (cprs_inv_abst1 … H2) -H2 #V2 #T2 #HV12 #HUT2 #H destruct /3 width=5/ +qed-. + +lemma cpds_inv_abbr_abst: ∀h,g,a1,a2,L,V1,W2,T1,T2. ⦃h, L⦄ ⊢ ⓓ{a1}V1.T1 •*➡*[g] ⓛ{a2}W2.T2 → + ∃∃T. ⦃h, L.ⓓV1⦄ ⊢ T1 •*➡*[g] T & ⇧[0, 1] ⓛ{a2}W2.T2 ≡ T & a1 = true. +#h #g #a1 #a2 #L #V1 #W2 #T1 #T2 * #X #H1 #H2 +elim (sstas_inv_bind1 … H1) -H1 #U1 #HTU1 #H destruct +elim (cprs_inv_abbr1 … H2) -H2 * +[ #V2 #U2 #HV12 #HU12 #H destruct +| /3 width=3/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_lift.ma new file mode 100644 index 000000000..1dd32f7a0 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpds_lift.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 "basic_2/unfold/sstas_lift.ma". +include "basic_2/computation/cprs_lift.ma". +include "basic_2/computation/cpds.ma". + +(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) + +(* Relocation properties ****************************************************) + +lemma cpds_lift: ∀L,K,d,e. ⇩[d, e] L ≡ K → ∀T1,U1. ⇧[d, e] T1 ≡ U1 → + ∀h,g,T2. ⦃h, K⦄ ⊢ T1 •*➡*[g] T2 → ∀U2. ⇧[d, e] T2 ≡ U2 → + ⦃h, L⦄ ⊢ U1 •*➡*[g] U2. +#L #K #d #e #HLK #T1 #U1 #HTU1 #h #g #T2 * #T +elim (lift_total T d e) /3 width=11/ +qed. + +lemma cpds_inv_lift1: ∀L,K,d,e. ⇩[d, e] L ≡ K → + ∀T1,U1. ⇧[d, e] T1 ≡ U1 → ∀h,g,U2. ⦃h, L⦄ ⊢ U1 •*➡*[g] U2 → + ∃∃T2. ⇧[d, e] T2 ≡ U2 & ⦃h, K⦄ ⊢ T1 •*➡*[g] T2. +#L #K #d #e #HLK #T1 #U1 #HTU1 #h #g #U2 * #U #HU1 #HU2 +elim (sstas_inv_lift1 … HU1 … HLK … HTU1) -U1 #T #HT1 #HTU +elim (cprs_inv_lift1 … HU2 … HLK … HTU) -U -L /3 width=5/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpre.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpre.ma index 1a67e2b46..a31e4023d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpre.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/peval_3.ma". include "basic_2/computation/cprs.ma". include "basic_2/computation/csn.ma". @@ -26,12 +27,10 @@ interpretation "context-sensitive parallel evaluation (term)" (* Basic_properties *********************************************************) (* Basic_1: was just: nf2_sn3 *) -axiom csn_cpre: ∀h,g,L,T1. ⦃h, L⦄ ⊢ ⬊*[g] T1 → ∃T2. L ⊢ T1 ➡* 𝐍⦃T2⦄. -(* +lemma csn_cpre: ∀h,g,L,T1. ⦃h, L⦄ ⊢ ⬊*[g] T1 → ∃T2. L ⊢ T1 ➡* 𝐍⦃T2⦄. #h #g #L #T1 #H @(csn_ind … H) -T1 #T1 #_ #IHT1 elim (cnr_dec L T1) /3 width=3/ * #T #H1T1 #H2T1 elim (IHT1 … H2T1) -IHT1 -H2T1 [2: /2 width=2/ ] #T2 * /4 width=3/ qed. -*) diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma index c0e440d69..d74134167 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/predstar_3.ma". include "basic_2/reduction/cnr.ma". (* CONTEXT-SENSITIVE PARALLEL COMPUTATION ON TERMS **************************) @@ -44,9 +45,6 @@ qed-. lemma cpr_cprs: ∀L,T1,T2. L ⊢ T1 ➡ T2 → L ⊢ T1 ➡* T2. /2 width=1/ qed. -lemma cpss_cprs: ∀L,T1,T2. L ⊢ T1 ▶* T2 → L ⊢ T1 ➡* T2. -/3 width=1/ qed. - (* Basic_1: was: pr3_refl *) lemma cprs_refl: ∀L,T. L ⊢ T ➡* T. /2 width=1/ qed. @@ -60,25 +58,13 @@ lemma cprs_strap2: ∀L,T1,T,T2. L ⊢ T1 ➡ T → L ⊢ T ➡* T2 → L ⊢ T1 ➡* T2. normalize /2 width=3/ qed. -lemma cprs_cpss_trans: ∀L,T1,T. L ⊢ T1 ➡* T → ∀T2. L ⊢ T ▶* T2 → L ⊢ T1 ➡* T2. -/3 width=3/ qed-. - -lemma cpss_cprs_trans: ∀L,T1,T. L ⊢ T1 ▶* T → ∀T2. L ⊢ T ➡* T2 → L ⊢ T1 ➡* T2. -/3 width=3/ qed-. - -lemma cprs_lsubr_trans: lsub_trans … cprs lsubr. -/3 width=5 by cpr_lsubr_trans, TC_lsub_trans/ +lemma lsubx_cprs_trans: lsub_trans … cprs lsubx. +/3 width=5 by lsubx_cpr_trans, TC_lsub_trans/ qed-. (* Basic_1: was: pr3_pr1 *) lemma tprs_cprs: ∀L,T1,T2. ⋆ ⊢ T1 ➡* T2 → L ⊢ T1 ➡* T2. -#L #T1 #T2 #H @(cprs_lsubr_trans … H) -H // -qed. - -lemma cprs_ext_bind_dx: ∀L,V1,V2. L ⊢ V1 ➡ V2 → ∀V,T1,T2. L.ⓛV ⊢ T1 ➡* T2 → - ∀a,I. L ⊢ ⓑ{a,I}V1.T1 ➡* ⓑ{a,I}V2.T2. -#L #V1 #V2 #HV12 #V #T1 #T2 #HT12 #a @(cprs_ind … HT12) -T2 -/3 width=1/ /3 width=6/ +#L #T1 #T2 #H @(lsubx_cprs_trans … H) -H // qed. lemma cprs_bind_dx: ∀L,V1,V2. L ⊢ V1 ➡ V2 → ∀I,T1,T2. L. ⓑ{I}V1 ⊢ T1 ➡* T2 → @@ -111,11 +97,11 @@ lemma cprs_tau: ∀L,T1,T2. L ⊢ T1 ➡* T2 → ∀V. L ⊢ ⓝV.T1 ➡* T2. #L #T1 #T2 #H elim H -T2 /2 width=3/ /3 width=1/ qed. -lemma cprs_beta_dx: ∀a,L,V1,V2,W,T1,T2. - L ⊢ V1 ➡ V2 → L.ⓛW ⊢ T1 ➡* T2 → - L ⊢ ⓐV1.ⓛ{a}W.T1 ➡* ⓓ{a}V2.T2. -#a #L #V1 #V2 #W #T1 #T2 #HV12 * -T2 /3 width=1/ -/4 width=6 by cprs_strap1, cprs_bind_dx, cprs_flat_dx, cpr_beta/ (**) (* auto too slow without trace *) +lemma cprs_beta_dx: ∀a,L,V1,V2,W1,W2,T1,T2. + L ⊢ V1 ➡ V2 → L ⊢ W1 ➡ W2 → L.ⓛW1 ⊢ T1 ➡* T2 → + L ⊢ ⓐV1.ⓛ{a}W1.T1 ➡* ⓓ{a}ⓝW2.V2.T2. +#a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HW12 * -T2 /3 width=1/ +/4 width=7 by cprs_strap1, cprs_bind_dx, cprs_flat_dx, cpr_beta/ (**) (* auto too slow without trace *) qed. lemma cprs_theta_dx: ∀a,L,V1,V,V2,W1,W2,T1,T2. @@ -134,29 +120,6 @@ lemma cprs_inv_sort1: ∀L,U2,k. L ⊢ ⋆k ➡* U2 → U2 = ⋆k. >(cpr_inv_sort1 … HU2) -HU2 // qed-. -(* Basic_1: was pr3_gen_appl *) -lemma cprs_inv_appl1: ∀L,V1,T1,U2. L ⊢ ⓐV1. T1 ➡* U2 → - ∨∨ ∃∃V2,T2. L ⊢ V1 ➡* V2 & L ⊢ T1 ➡* T2 & - U2 = ⓐV2. T2 - | ∃∃a,V2,W,T. L ⊢ V1 ➡* V2 & - L ⊢ T1 ➡* ⓛ{a}W. T & L ⊢ ⓓ{a}V2. T ➡* U2 - | ∃∃a,V0,V2,V,T. L ⊢ V1 ➡* V0 & ⇧[0,1] V0 ≡ V2 & - L ⊢ T1 ➡* ⓓ{a}V. T & L ⊢ ⓓ{a}V. ⓐV2. T ➡* U2. -#L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5/ -#U #U2 #_ #HU2 * * -[ #V0 #T0 #HV10 #HT10 #H destruct - elim (cpr_inv_appl1 … HU2) -HU2 * - [ #V2 #T2 #HV02 #HT02 #H destruct /4 width=5/ - | #a #V2 #W2 #T #T2 #HV02 #HT2 #H1 #H2 destruct - lapply (cprs_strap1 … HV10 … HV02) -V0 /5 width=7/ - | #a #V #V2 #W0 #W2 #T #T2 #HV0 #HV2 #HW02 #HT2 #H1 #H2 destruct - @or3_intro2 @(ex4_5_intro … HV2 HT10) /2 width=3/ /3 width=1/ (**) (* explicit constructor. /5 width=8/ is too slow because TC_transitive gets in the way *) - ] -| /4 width=9/ -| /4 width=11/ -] -qed-. - (* Basic_1: was: pr3_gen_cast *) lemma cprs_inv_cast1: ∀L,W1,T1,U2. L ⊢ ⓝW1.T1 ➡* U2 → L ⊢ T1 ➡* U2 ∨ ∃∃W2,T2. L ⊢ W1 ➡* W2 & L ⊢ T1 ➡* T2 & U2 = ⓝW2.T2. @@ -174,24 +137,6 @@ lemma cprs_inv_cnr1: ∀L,T,U. L ⊢ T ➡* U → L ⊢ 𝐍⦃T⦄ → T = U. lapply (H2T0 … H1T0) -H1T0 #H destruct /2 width=1/ qed-. -(* Basic forward lemmas *****************************************************) - -(* Basic_1: was: pr3_gen_abst *) -lemma cprs_fwd_abst1: ∀a,L,V1,T1,U2. L ⊢ ⓛ{a}V1. T1 ➡* U2 → ∀I,W. - ∃∃V2,T2. L ⊢ V1 ➡* V2 & L. ⓑ{I} W ⊢ T1 ➡* T2 & - U2 = ⓛ{a}V2. T2. -#a #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /2 width=5/ -#U #U2 #_ #HU2 #IHU1 #I #W -elim (IHU1 I W) -IHU1 #V #T #HV1 #HT1 #H destruct -elim (cpr_fwd_abst1 … HU2 I W) -HU2 #V2 #T2 #HV2 #HT2 #H destruct /3 width=5/ -qed-. - -lemma cprs_fwd_abst: ∀a,L,V1,V2,T1,T2. L ⊢ ⓛ{a}V1. T1 ➡* ⓛ{a}V2. T2 → ∀I,W. - L ⊢ V1 ➡* V2 ∧ L. ⓑ{I} W ⊢ T1 ➡* T2. -#a #L #V1 #V2 #T1 #T2 #H #I #W -elim (cprs_fwd_abst1 … H I W) -H #V #T #HV1 #HT1 #H destruct /2 width=1/ -qed-. - (* Basic_1: removed theorems 13: pr1_head_1 pr1_head_2 pr1_comp clear_pr3_trans pr3_cflat pr3_gen_bind diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma index e437136dd..cdd0bc64b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma @@ -29,13 +29,6 @@ theorem cprs_trans: ∀L. Transitive … (cprs L). theorem cprs_conf: ∀L. confluent2 … (cprs L) (cprs L). #L @TC_confluent2 /2 width=3 by cpr_conf/ qed-. (**) (* auto /3 width=3/ does not work because a δ-expansion gets in the way *) -theorem cprs_ext_bind: ∀L,V1,V2. L ⊢ V1 ➡* V2 → ∀V,T1,T2. L.ⓛV ⊢ T1 ➡* T2 → - ∀a,I. L ⊢ ⓑ{a,I}V1. T1 ➡* ⓑ{a,I}V2. T2. -#L #V1 #V2 #H #V #T1 #T2 #HT12 #a #I @(TC_ind_dx … V1 H) -V1 /2 width=3/ -#V1 #V0 #HV10 #_ #IHV02 -@(cprs_trans … IHV02) /2 width=1/ -qed. - theorem cprs_bind: ∀a,I,L,V1,V2,T1,T2. L. ⓑ{I}V1 ⊢ T1 ➡* T2 → L ⊢ V1 ➡* V2 → L ⊢ ⓑ{a,I}V1. T1 ➡* ⓑ{a,I}V2. T2. #a #I #L #V1 #V2 #T1 #T2 #HT12 #H @(cprs_ind … H) -V2 /2 width=1/ @@ -51,12 +44,20 @@ theorem cprs_flat: ∀I,L,V1,V2,T1,T2. L ⊢ T1 ➡* T2 → L ⊢ V1 ➡* V2 → @(cprs_trans … IHV1) -IHV1 /2 width=1/ qed. -theorem cprs_beta: ∀a,L,V1,V2,W,T1,T2. - L.ⓛW ⊢ T1 ➡* T2 → L ⊢ V1 ➡* V2 → - L ⊢ ⓐV1.ⓛ{a}W.T1 ➡* ⓓ{a}V2.T2. -#a #L #V1 #V2 #W #T1 #T2 #HT12 #H @(cprs_ind … H) -V2 /2 width=1/ +theorem cprs_beta_rc: ∀a,L,V1,V2,W1,W2,T1,T2. + L ⊢ V1 ➡ V2 → L.ⓛW1 ⊢ T1 ➡* T2 → L ⊢ W1 ➡* W2 → + L ⊢ ⓐV1.ⓛ{a}W1.T1 ➡* ⓓ{a}ⓝW2.V2.T2. +#a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HT12 #H @(cprs_ind … H) -W2 /2 width=1/ +#W #W2 #_ #HW2 #IHW1 +@(cprs_trans … IHW1) -IHW1 /3 width=1/ +qed. + +theorem cprs_beta: ∀a,L,V1,V2,W1,W2,T1,T2. + L.ⓛW1 ⊢ T1 ➡* T2 → L ⊢ W1 ➡* W2 → L ⊢ V1 ➡* V2 → + L ⊢ ⓐV1.ⓛ{a}W1.T1 ➡* ⓓ{a}ⓝW2.V2.T2. +#a #L #V1 #V2 #W1 #W2 #T1 #T2 #HT12 #HW12 #H @(cprs_ind … H) -V2 /2 width=1/ #V #V2 #_ #HV2 #IHV1 -@(cprs_trans … IHV1) /2 width=1/ +@(cprs_trans … IHV1) -IHV1 /3 width=1/ qed. theorem cprs_theta_rc: ∀a,L,V1,V,V2,W1,W2,T1,T2. @@ -75,6 +76,34 @@ theorem cprs_theta: ∀a,L,V1,V,V2,W1,W2,T1,T2. @(cprs_trans … IHV0) /2 width=1/ qed. +(* Advanced inversion lemmas ************************************************) + +(* Basic_1: was pr3_gen_appl *) +lemma cprs_inv_appl1: ∀L,V1,T1,U2. L ⊢ ⓐV1.T1 ➡* U2 → + ∨∨ ∃∃V2,T2. L ⊢ V1 ➡* V2 & L ⊢ T1 ➡* T2 & + U2 = ⓐV2. T2 + | ∃∃a,W,T. L ⊢ T1 ➡* ⓛ{a}W.T & + L ⊢ ⓓ{a}ⓝW.V1.T ➡* U2 + | ∃∃a,V0,V2,V,T. L ⊢ V1 ➡* V0 & ⇧[0,1] V0 ≡ V2 & + L ⊢ T1 ➡* ⓓ{a}V.T & + L ⊢ ⓓ{a}V.ⓐV2.T ➡* U2. +#L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 [ /3 width=5/ ] +#U #U2 #_ #HU2 * * +[ #V0 #T0 #HV10 #HT10 #H destruct + elim (cpr_inv_appl1 … HU2) -HU2 * + [ #V2 #T2 #HV02 #HT02 #H destruct /4 width=5/ + | #a #V2 #W #W2 #T #T2 #HV02 #HW2 #HT2 #H1 #H2 destruct + lapply (cprs_strap1 … HV10 … HV02) -V0 #HV12 + lapply (lsubx_cpr_trans … HT2 (L.ⓓⓝW.V1) ?) -HT2 /2 width=1/ #HT2 + @or3_intro1 @(ex2_3_intro … HT10) -HT10 /3 width=1/ (**) (* explicit constructor. /5 width=8/ is too slow because TC_transitive gets in the way *) + | #a #V #V2 #W0 #W2 #T #T2 #HV0 #HV2 #HW02 #HT2 #H1 #H2 destruct + @or3_intro2 @(ex4_5_intro … HV2 HT10) /2 width=3/ /3 width=1/ (**) (* explicit constructor. /5 width=8/ is too slow because TC_transitive gets in the way *) + ] +| /4 width=9/ +| /4 width=11/ +] +qed-. + (* Properties concerning sn parallel reduction on local environments ********) (* Basic_1: was just: pr3_pr2_pr2_t *) @@ -92,8 +121,8 @@ lemma lpr_cpr_trans: s_r_trans … cpr lpr. |4,6: /3 width=1/ | #L2 #V2 #T1 #T #T2 #_ #HT2 #IHT1 #L1 #HL12 lapply (IHT1 (L1.ⓓV2) ?) -IHT1 /2 width=1/ /2 width=3/ -| #a #L2 #V1 #V2 #W #T1 #T2 #_ #_ #IHV12 #IHT12 #L1 #HL12 - lapply (IHT12 (L1.ⓛW) ?) -IHT12 /2 width=1/ /3 width=1/ +| #a #L2 #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #L1 #HL12 + lapply (IHT12 (L1.ⓛW1) ?) -IHT12 /2 width=1/ /3 width=1/ | #a #L2 #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #HV2 #_ #_ #IHV1 #IHW12 #IHT12 #L1 #HL12 lapply (IHT12 (L1.ⓓW1) ?) -IHT12 /2 width=1/ /3 width=3/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_lpss.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_lpss.ma deleted file mode 100644 index 9887fa77c..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_lpss.ma +++ /dev/null @@ -1,92 +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/substitution/lpss_lpss.ma". -include "basic_2/reduction/lpr_lpss.ma". -include "basic_2/computation/cprs.ma". - -(* CONTEXT-SENSITIVE PARALLEL COMPUTATION ON TERMS **************************) - -(* Properties on parallel substitution for terms ****************************) - -(* Basic_1: was: pr3_subst1 *) -lemma cprs_cpss_conf: ∀L,T0,T1. L ⊢ T0 ➡* T1 → ∀T2. L ⊢ T0 ▶* T2 → - ∃∃T. L ⊢ T1 ▶* T & L ⊢ T2 ➡* T. -#L @TC_strip1 /2 width=3 by cpr_cpss_conf/ qed-. (**) (* auto /3 width=3/ fails because a δ-expansion gets in the way *) - -(* Properties on sn parallel substitution for local environments ************) - -lemma cprs_lpss_conf_dx: ∀L0,T0,T1. L0 ⊢ T0 ➡* T1 → ∀L1. L0 ⊢ ▶* L1 → - ∃∃T. L1 ⊢ T1 ▶* T & L1 ⊢ T0 ➡* T. -#L0 #T0 #T1 #H elim H -T1 -[ #T1 #HT01 #L1 #HL01 - elim (cpr_lpss_conf_dx … HT01 … HL01) -L0 /3 width=3/ -| #T #T1 #_ #HT1 #IHT0 #L1 #HL01 - elim (IHT0 … HL01) #T2 #HT2 #HT02 - elim (cpr_lpss_conf_dx … HT1 … HL01) -L0 #T3 #HT13 #HT3 - elim (cpr_cpss_conf … HT3 … HT2) -T #T #HT3 #HT2 - lapply (cpss_trans … HT13 … HT3) -T3 - lapply (cprs_strap1 … HT02 … HT2) -T2 /2 width=3/ -] -qed-. - -lemma cprs_lpss_conf_sn: ∀L0,T0,T1. L0 ⊢ T0 ➡* T1 → ∀L1. L0 ⊢ ▶* L1 → - ∃∃T. L0 ⊢ T1 ▶* T & L1 ⊢ T0 ➡* T. -#L0 #T0 #T1 #HT01 #L1 #HL01 -elim (cprs_lpss_conf_dx … HT01 … HL01) -HT01 #T #HT1 -lapply (lpss_cpss_trans … HL01 … HT1) -HT1 /2 width=3/ -qed-. - -lemma cprs_cpss_lpss_conf_sn: ∀L1,T1,U1. L1 ⊢ T1 ➡* U1 → - ∀T2. L1 ⊢ T1 ▶* T2 → ∀L2. L1 ⊢ ▶* L2 → - ∃∃U2. L2 ⊢ T2 ➡* U2 & L1 ⊢ U1 ▶* U2. -#L1 #T1 #U1 #HTU1 #T2 #HT12 #L2 #HL12 -elim (cprs_cpss_conf … HTU1 … HT12) -T1 #U #HU1 #HT2U -elim (cprs_lpss_conf_sn … HT2U … HL12) -HT2U -HL12 #U2 #HU2 #HTU2 -lapply (cpss_trans … HU1 … HU2) -U /2 width=3/ -qed-. - -lemma cprs_cpss_lpss_conf_dx: ∀L1,T1,U1. L1 ⊢ T1 ➡* U1 → - ∀T2. L1 ⊢ T1 ▶* T2 → ∀L2. L1 ⊢ ▶* L2 → - ∃∃U2. L2 ⊢ T2 ➡* U2 & L2 ⊢ U1 ▶* U2. -#L1 #T1 #U1 #HTU1 #T2 #HT12 #L2 #HL12 -elim (cprs_lpss_conf_dx … HTU1 … HL12) -HTU1 #U2 #HU12 #HT1U2 -elim (lpss_cpss_conf_dx … HT12 … HL12) -L1 #T #HT1 #HT2 -elim (cprs_cpss_conf … HT1U2 … HT1) -T1 #U #HU2 #HTU -lapply (cpss_trans … HU12 … HU2) -U2 -lapply (cpss_cprs_trans … HT2 … HTU) -T /2 width=3/ -qed-. - - -lemma cprs_cpss2_lpss_conf_sn: ∀L1,T1,U1. L1 ⊢ T1 ➡* U1 → ∀T2. L1 ⊢ T1 ▶* T2 → - ∀U2. L1 ⊢ U1 ▶* U2 → ∀L2. L1 ⊢ ▶* L2 → - ∃∃U. L2 ⊢ T2 ➡* U & L1 ⊢ U2 ▶* U. -#L1 #T1 #U1 #HTU1 #T2 #HT12 #U2 #HU12 #L2 #HL12 -elim (cprs_cpss_lpss_conf_sn … HTU1 … HT12 … HL12) -T1 #T1 #HT21 #HUT1 -elim (cpss_conf … HU12 … HUT1) -U1 #U1 #HU21 #HTU1 -elim (lpss_cpss_conf_sn … HTU1 … HL12) -HTU1 -HL12 #U2 #HT1U2 #HU12 -lapply (cpss_trans … HU21 … HU12) -U1 -lapply (cprs_cpss_trans … HT21 … HT1U2) -T1 /2 width=3/ -qed-. - -lemma cprs_cpss2_lpss_conf_dx: ∀L1,T1,U1. L1 ⊢ T1 ➡* U1 → ∀T2. L1 ⊢ T1 ▶* T2 → - ∀U2. L1 ⊢ U1 ▶* U2 → ∀L2. L1 ⊢ ▶* L2 → - ∃∃U. L2 ⊢ T2 ➡* U & L2 ⊢ U2 ▶* U. -#L1 #T1 #U1 #HTU1 #T2 #HT12 #U2 #HU12 #L2 #HL12 -elim (cprs_cpss_lpss_conf_dx … HTU1 … HT12 … HL12) -T1 #T1 #HT21 #HUT1 -elim (lpss_cpss_conf_dx … HU12 … HL12) -L1 #U #HU1 #HU2 -elim (cpss_conf … HU1 … HUT1) -U1 #U1 #HU1 #HTU1 -lapply (cpss_trans … HU2 … HU1) -U -lapply (cprs_cpss_trans … HT21 … HTU1) -T1 /2 width=3/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxe.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxe.ma index 51ab24d5e..0a150d198 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxe.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/peval_5.ma". include "basic_2/computation/cpxs.ma". include "basic_2/computation/csn.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma index 028798162..c8f64f148 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/predstar_5.ma". include "basic_2/reduction/cnx.ma". include "basic_2/computation/cprs.ma". @@ -59,11 +60,10 @@ lemma lsubx_cpxs_trans: ∀h,g. lsub_trans … (cpxs h g) lsubx. /3 width=5 by lsubx_cpx_trans, TC_lsub_trans/ qed-. -axiom cprs_cpxs: ∀h,g,L,T1,T2. L ⊢ T1 ➡* T2 → ⦃h, L⦄ ⊢ T1 ➡*[g] T2. -(* +lemma cprs_cpxs: ∀h,g,L,T1,T2. L ⊢ T1 ➡* T2 → ⦃h, L⦄ ⊢ T1 ➡*[g] T2. #h #g #L #T1 #T2 #H @(cprs_ind … H) -T2 // /3 width=3/ qed. -*) + lemma cpxs_bind_dx: ∀h,g,L,V1,V2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 → ∀I,T1,T2. ⦃h, L. ⓑ{I}V1⦄ ⊢ T1 ➡*[g] T2 → ∀a. ⦃h, L⦄ ⊢ ⓑ{a,I}V1.T1 ➡*[g] ⓑ{a,I}V2.T2. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma index da372de97..8017af6bf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma @@ -39,8 +39,8 @@ theorem cpxs_flat: ∀h,g,I,L,V1,V2,T1,T2. ⦃h, L⦄ ⊢ T1 ➡*[g] T2 → qed. theorem cpxs_beta_rc: ∀h,g,a,L,V1,V2,W1,W2,T1,T2. - ⦃h, L⦄ ⊢ V1 ➡[g] V2 → ⦃h, L.ⓛW1⦄ ⊢ T1 ➡*[g] T2 → ⦃h, L⦄ ⊢ W1 ➡*[g] W2 → - ⦃h, L⦄ ⊢ ⓐV1.ⓛ{a}W1.T1 ➡*[g] ⓓ{a}ⓝW2.V2.T2. + ⦃h, L⦄ ⊢ V1 ➡[g] V2 → ⦃h, L.ⓛW1⦄ ⊢ T1 ➡*[g] T2 → ⦃h, L⦄ ⊢ W1 ➡*[g] W2 → + ⦃h, L⦄ ⊢ ⓐV1.ⓛ{a}W1.T1 ➡*[g] ⓓ{a}ⓝW2.V2.T2. #h #g #a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HT12 #H @(cpxs_ind … H) -W2 /2 width=1/ #W #W2 #_ #HW2 #IHW1 @(cpxs_trans … IHW1) -IHW1 /3 width=1/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/csn.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/csn.ma index 08709419c..9aead33d3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/csn.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/csn.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/sn_4.ma". include "basic_2/reduction/cnx.ma". (* CONTEXT-SENSITIVE EXTENDED STRONGLY NORMALIZING TERMS ********************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/csn_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/csn_alt.ma index d300affdf..954cb9c01 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/csn_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/csn_alt.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/snalt_4.ma". include "basic_2/computation/cpxs.ma". include "basic_2/computation/csn.ma". @@ -66,7 +67,7 @@ lemma csna_intro_cpx: ∀h,g,L,T1. ( #h #g #L #T1 #H @csna_intro_aux #T #T2 #H @(cpxs_ind_dx … H) -T [ -H #H destruct #H - elim (H ?) // + elim H // | #T0 #T #HLT1 #HLT2 #IHT #HT10 #HT12 destruct elim (term_eq_dec T0 T) #HT0 [ -HLT1 -HLT2 -H /3 width=1/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs.ma deleted file mode 100644 index 3f2b0fb09..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs.ma +++ /dev/null @@ -1,59 +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/unfold/sstas.ma". -include "basic_2/computation/cprs.ma". - -(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) - -definition dxprs: ∀h. sd h → lenv → relation term ≝ λh,g,L,T1,T2. - ∃∃T. ⦃h, L⦄ ⊢ T1 •*[g] T & L ⊢ T ➡* T2. - -interpretation "decomposed extended parallel computation (term)" - 'DecomposedPRedStar h g L T1 T2 = (dxprs h g L T1 T2). - -(* Basic properties *********************************************************) - -lemma dxprs_refl: ∀h,g,L. reflexive … (dxprs h g L). -/2 width=3/ qed. - -lemma sstas_dxprs: ∀h,g,L,T1,T2. ⦃h, L⦄ ⊢ T1 •*[g] T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. -/2 width=3/ qed. - -lemma cprs_dxprs: ∀h,g,L,T1,T2. L ⊢ T1 ➡* T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. -/2 width=3/ qed. - -lemma dxprs_strap1: ∀h,g,L,T1,T,T2. - ⦃h, L⦄ ⊢ T1 •*➡*[g] T → L ⊢ T ➡ T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. -#h #g #L #T1 #T #T2 * /3 width=5/ -qed. - -lemma dxprs_strap2: ∀h,g,L,T1,T,T2,l. - ⦃h, L⦄ ⊢ T1 •[g] ⦃l+1, T⦄ → ⦃h, L⦄ ⊢ T •*➡*[g] T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. -#h #g #L #T1 #T #T2 #l #HT1 * /3 width=4/ -qed. - -lemma ssta_cprs_dxprs: ∀h,g,L,T1,T,T2,l. ⦃h, L⦄ ⊢ T1 •[g] ⦃l+1, T⦄ → - L ⊢ T ➡* T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. -/3 width=3/ qed. - -(* Basic inversion lemmas ***************************************************) - -lemma dxprs_inv_abst1: ∀h,g,a,L,V1,T1,U2. ⦃h, L⦄ ⊢ ⓛ{a}V1. T1 •*➡*[g] U2 → - ∃∃V2,T2. L ⊢ V1 ➡* V2 & ⦃h, L.ⓛV1⦄ ⊢ T1 •*➡*[g] T2 & - U2 = ⓛ{a}V2. T2. -#h #g #a #L #V1 #T1 #U2 * #X #H1 #H2 -elim (sstas_inv_bind1 … H1) -H1 #U #HTU1 #H destruct -elim (cprs_fwd_abst1 … H2 Abst V1) -H2 #V2 #T2 #HV12 #HUT2 #H destruct /3 width=5/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_aaa.ma deleted file mode 100644 index b2ad6412e..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_aaa.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 "basic_2/unfold/sstas_aaa.ma". -include "basic_2/computation/cpxs_aaa.ma". -include "basic_2/computation/dxprs.ma". - -(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) - -(* Properties on atomic arity assignment for terms **************************) - -lemma dxprs_aaa: ∀h,g,L,T,A. L ⊢ T ⁝ A → ∀U. ⦃h, L⦄ ⊢ T •*➡*[g] U → L ⊢ U ⁝ A. -#h #g #L #T #A #HT #U * /3 width=5 by sstas_aaa, aaa_cprs_conf/ -qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_dxprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_dxprs.ma deleted file mode 100644 index f46e256c6..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_dxprs.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/unfold/sstas_sstas.ma". -include "basic_2/computation/lprs_cprs.ma". -include "basic_2/computation/dxprs.ma". - -(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) - -(* Advanced properties ******************************************************) - -lemma dxprs_cprs_trans: ∀h,g,L,T1,T,T2. - ⦃h, L⦄ ⊢ T1 •*➡*[g] T → L ⊢ T ➡* T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. -#h #g #L #T1 #T #T2 * #T0 #HT10 #HT0 #HT2 -lapply (cprs_trans … HT0 … HT2) -T /2 width=3/ -qed-. - -lemma sstas_dxprs_trans: ∀h,g,L,T1,T,T2. - ⦃h, L⦄ ⊢ T1 •*[g] T → ⦃h, L⦄ ⊢ T •*➡*[g] T2 → ⦃h, L⦄ ⊢ T1 •*➡*[g] T2. -#h #g #L #T1 #T #T2 #HT1 * #T0 #HT0 #HT02 -lapply (sstas_trans … HT1 … HT0) -T /2 width=3/ -qed-. - -(* Advanced inversion lemmas ************************************************) - -lemma dxprs_inv_abbr_abst: ∀h,g,a1,a2,L,V1,W2,T1,T2. ⦃h, L⦄ ⊢ ⓓ{a1}V1.T1 •*➡*[g] ⓛ{a2}W2.T2 → - ∃∃T. ⦃h, L.ⓓV1⦄ ⊢ T1 •*➡*[g] T & ⇧[0, 1] ⓛ{a2}W2.T2 ≡ T & a1 = true. -#h #g #a1 #a2 #L #V1 #W2 #T1 #T2 * #X #H1 #H2 -elim (sstas_inv_bind1 … H1) -H1 #U1 #HTU1 #H destruct -elim (cprs_inv_abbr1 … H2) -H2 * -[ #V2 #U2 #HV12 #HU12 #H destruct -| /3 width=3/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_lift.ma deleted file mode 100644 index d9c8b5785..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_lift.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 "basic_2/unfold/sstas_lift.ma". -include "basic_2/computation/cprs_lift.ma". -include "basic_2/computation/dxprs.ma". - -(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) - -(* Relocation properties ****************************************************) - -lemma dxprs_lift: ∀L,K,d,e. ⇩[d, e] L ≡ K → ∀T1,U1. ⇧[d, e] T1 ≡ U1 → - ∀h,g,T2. ⦃h, K⦄ ⊢ T1 •*➡*[g] T2 → ∀U2. ⇧[d, e] T2 ≡ U2 → - ⦃h, L⦄ ⊢ U1 •*➡*[g] U2. -#L #K #d #e #HLK #T1 #U1 #HTU1 #h #g #T2 * #T -elim (lift_total T d e) /3 width=11/ -qed. - -lemma dxprs_inv_lift1: ∀L,K,d,e. ⇩[d, e] L ≡ K → - ∀T1,U1. ⇧[d, e] T1 ≡ U1 → ∀h,g,U2. ⦃h, L⦄ ⊢ U1 •*➡*[g] U2 → - ∃∃T2. ⇧[d, e] T2 ≡ U2 & ⦃h, K⦄ ⊢ T1 •*➡*[g] T2. -#L #K #d #e #HLK #T1 #U1 #HTU1 #h #g #U2 * #U #HU1 #HU2 -elim (sstas_inv_lift1 … HU1 … HLK … HTU1) -U1 #T #HT1 #HTU -elim (cprs_inv_lift1 … HU2 … HLK … HTU) -U -L /3 width=5/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_lpss.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_lpss.ma deleted file mode 100644 index a14c5518b..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/dxprs_lpss.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 "basic_2/unfold/sstas_lpss.ma". -include "basic_2/computation/cprs_lpss.ma". -include "basic_2/computation/dxprs.ma". - -(* DECOMPOSED EXTENDED PARALLEL COMPUTATION ON TERMS ************************) - -(* Properties about sn parallel substitution for local environments *********) - -lemma dxprs_lpss_conf: ∀h,g,L1,T,U1. ⦃h, L1⦄ ⊢ T •*➡*[g] U1 → ∀L2. L1 ⊢ ▶* L2 → - ∃∃U2. ⦃h, L2⦄ ⊢ T •*➡*[g] U2 & L1 ⊢ U1 ▶* U2. -#h #g #L1 #T #U1 * #U #HTU #HU1 #L2 #HL12 -elim (sstas_lpss_conf … HTU … HL12) -HTU #U0 #HTU0 #HU0 -elim (cprs_cpss_conf … HU1 … HU0) -U #U #HU1 #HU0 -elim (cprs_lpss_conf_sn … HU0 … HL12) -HU0 -HL12 #U2 #HU2 #HU02 -lapply (cpss_trans … HU1 … HU2) -U /3 width=3/ -qed-. - -lemma dxprs_cpss_conf: ∀h,g,L,T1,U1. ⦃h, L⦄ ⊢ T1 •*➡*[g] U1 → ∀T2. L ⊢ T1 ▶* T2 → - ∃∃U2. ⦃h, L⦄ ⊢ T2 •*➡*[g] U2 & L ⊢ U1 ▶* U2. -#h #g #L #T1 #U1 * #W1 #HTW1 #HWU1 #T2 #HT12 -elim (sstas_cpss_conf … HTW1 … HT12) -T1 #W2 #HTW2 #HW12 -elim (cprs_cpss_conf … HWU1 … HW12) -W1 /3 width=3/ -qed-. - -lemma dxprs_cpss_lpss_conf: ∀h,g,L1,T1,U1. ⦃h, L1⦄ ⊢ T1 •*➡*[g] U1 → - ∀T2. L1 ⊢ T1 ▶* T2 → ∀L2. L1 ⊢ ▶* L2 → - ∃∃U2. ⦃h, L2⦄ ⊢ T2 •*➡*[g] U2 & L1 ⊢ U1 ▶* U2. -#h #g #L1 #T1 #U1 #HTU1 #T2 #HT12 #L2 #HL12 -elim (dxprs_cpss_conf … HTU1 … HT12) -T1 #U2 #HTU2 #HU12 -elim (dxprs_lpss_conf … HTU2 … HL12) -HTU2 -HL12 #U #HT2U #HU2 -lapply (cpss_trans … HU12 … HU2) -U2 /2 width=3/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs.ma index dd290b483..2916145ee 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/predsnstar_2.ma". include "basic_2/grammar/lpx_sn_tc.ma". include "basic_2/reduction/lpr.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_alt.ma index 508b306d3..753504dc8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_alt.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/predsnstaralt_2.ma". include "basic_2/computation/cprs_cprs.ma". include "basic_2/computation/lprs.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma index 4608d1b73..cc52394c4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma @@ -20,7 +20,7 @@ include "basic_2/computation/lprs.ma". (* Advanced properties ******************************************************) lemma lprs_pair: ∀I,L1,L2. L1 ⊢ ➡* L2 → ∀V1,V2. L1 ⊢ V1 ➡* V2 → - L1. ⓑ{I} V1 ⊢ ➡* L2. ⓑ{I} V2. + L1. ⓑ{I} V1 ⊢ ➡* L2.ⓑ{I} V2. /2 width=1 by TC_lpx_sn_pair/ qed. (* Advanced inversion lemmas ************************************************) @@ -79,6 +79,24 @@ qed. (* Inversion lemmas on context-sensitive parallel computation for terms *****) +(* Basic_1: was: pr3_gen_abst *) +lemma cprs_inv_abst1: ∀a,L,W1,T1,U2. L ⊢ ⓛ{a}W1.T1 ➡* U2 → + ∃∃W2,T2. L ⊢ W1 ➡* W2 & L.ⓛW1 ⊢ T1 ➡* T2 & + U2 = ⓛ{a}W2.T2. +#a #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /2 width=5/ +#U0 #U2 #_ #HU02 * #V0 #T0 #HV10 #HT10 #H destruct +elim (cpr_inv_abst1 … HU02) -HU02 #V2 #T2 #HV02 #HT02 #H destruct +lapply (lprs_cpr_trans … HT02 (L.ⓛV1) ?) /2 width=1/ -HT02 #HT02 +lapply (cprs_strap1 … HV10 … HV02) -V0 +lapply (cprs_trans … HT10 … HT02) -T0 /2 width=5/ +qed-. + +lemma cprs_inv_abst: ∀a,L,W1,W2,T1,T2. L ⊢ ⓛ{a}W1.T1 ➡* ⓛ{a}W2.T2 → + L ⊢ W1 ➡* W2 ∧ L.ⓛW1 ⊢ T1 ➡* T2. +#a #L #W1 #W2 #T1 #T2 #H +elim (cprs_inv_abst1 … H) -H #W #T #HW1 #HT1 #H destruct /2 width=1/ +qed-. + (* Basic_1: was pr3_gen_abbr *) lemma cprs_inv_abbr1: ∀a,L,V1,T1,U2. L ⊢ ⓓ{a}V1.T1 ➡* U2 → ( ∃∃V2,T2. L ⊢ V1 ➡* V2 & L. ⓓV1 ⊢ T1 ➡* T2 & diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_lpss.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_lpss.ma deleted file mode 100644 index ed9e7d061..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_lpss.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 "basic_2/reduction/lpr_lpss.ma". -include "basic_2/computation/lprs.ma". - -(* SN PARALLEL COMPUTATION ON LOCAL ENVIRONMENTS ****************************) - -(* Properties on sn parallel substitution on local environments *************) - -lemma lprs_lpss_conf: confluent2 … lprs lpss. -/3 width=3 by TC_strip1, lpr_lpss_conf/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs.ma index 83f2459e8..4cf6a28b4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/predsnstar_4.ma". include "basic_2/reduction/lpx.ma". include "basic_2/computation/lprs.ma". @@ -40,10 +41,9 @@ qed-. (* Basic properties *********************************************************) -axiom lprs_lpxs: ∀h,g,L1,L2. L1 ⊢ ➡* L2 → ⦃h, L1⦄ ⊢ ➡*[g] L2. -(* +lemma lprs_lpxs: ∀h,g,L1,L2. L1 ⊢ ➡* L2 → ⦃h, L1⦄ ⊢ ➡*[g] L2. /3 width=3/ qed. -*) + lemma lpx_lpxs: ∀h,g,L1,L2. ⦃h, L1⦄ ⊢ ➡[g] L2 → ⦃h, L1⦄ ⊢ ➡*[g] L2. /2 width=1/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_alt.ma index e93c88d5c..7a77b4b30 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_alt.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/predsnstaralt_4.ma". include "basic_2/computation/cpxs_cpxs.ma". include "basic_2/computation/lpxs.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc.ma index a3cc36b24..ee9d5df16 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/crsubeq_3.ma". include "basic_2/static/aaa.ma". include "basic_2/computation/acp_cr.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma b/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma index ab76bac16..9b78b55c9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/pconv_3.ma". include "basic_2/reduction/cpr.ma". (* CONTEXT-SENSITIVE PARALLEL CONVERSION ON TERMS ***************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma index d203f0da4..537a97d1e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/equivalence/lsubss.ma". +include "basic_2/notation/relations/crsubeqv_4.ma". include "basic_2/dynamic/snv.ma". (* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED NATIVE VALIDITY **************) @@ -21,10 +21,10 @@ include "basic_2/dynamic/snv.ma". inductive lsubsv (h:sh) (g:sd h): relation lenv ≝ | lsubsv_atom: lsubsv h g (⋆) (⋆) | lsubsv_pair: ∀I,L1,L2,V. lsubsv h g L1 L2 → - lsubsv h g (L1. ⓑ{I} V) (L2. ⓑ{I} V) -| lsubsv_abbr: ∀L1,L2,V1,V2,W1,W2,l. ⦃h, L1⦄ ⊢ V1 ¡[g] → ⦃h, L1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ → - L1 ⊢ W1 ⬌* W2 → ⦃h, L2⦄ ⊢ W2 ¡[g] → ⦃h, L2⦄ ⊢ W2 •[g] ⦃l, V2⦄ → - lsubsv h g L1 L2 → lsubsv h g (L1. ⓓV1) (L2. ⓛW2) + lsubsv h g (L1.ⓑ{I}V) (L2.ⓑ{I}V) +| lsubsv_abbr: ∀L1,L2,W,V,W1,V2,l. ⦃h, L1⦄ ⊢ ⓝW.V ¡[g] → ⦃h, L2⦄ ⊢ W ¡[g] → + ⦃h, L1⦄ ⊢ V •[g] ⦃l+1, W1⦄ → ⦃h, L2⦄ ⊢ W •[g] ⦃l, V2⦄ → + lsubsv h g L1 L2 → lsubsv h g (L1.ⓓⓝW.V) (L2.ⓛW) . interpretation @@ -37,7 +37,7 @@ fact lsubsv_inv_atom1_aux: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → L1 = ⋆ → L #h #g #L1 #L2 * -L1 -L2 [ // | #I #L1 #L2 #V #_ #H destruct -| #L1 #L2 #V1 #V2 #W1 #W2 #l #_ #_ #_ #_ #_ #_ #H destruct +| #L1 #L2 #W #V #V1 #V2 #l #_ #_ #_ #_ #_ #H destruct ] qed-. @@ -45,30 +45,32 @@ lemma lsubsv_inv_atom1: ∀h,g,L2. h ⊢ ⋆ ¡⊑[g] L2 → L2 = ⋆. /2 width=5 by lsubsv_inv_atom1_aux/ qed-. fact lsubsv_inv_pair1_aux: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → - ∀I,K1,V1. L1 = K1. ⓑ{I} V1 → - (∃∃K2. h ⊢ K1 ¡⊑[g] K2 & L2 = K2. ⓑ{I} V1) ∨ - ∃∃K2,V2,W1,W2,l. ⦃h, K1⦄ ⊢ V1 ¡[g] & ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & - K1 ⊢ W1 ⬌* W2 & ⦃h, K2⦄ ⊢ W2 ¡[g] & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - h ⊢ K1 ¡⊑[g] K2 & L2 = K2. ⓛW2 & I = Abbr. + ∀I,K1,X. L1 = K1.ⓑ{I}X → + (∃∃K2. h ⊢ K1 ¡⊑[g] K2 & L2 = K2.ⓑ{I}X) ∨ + ∃∃K2,W,V,W1,V2,l. ⦃h, K1⦄ ⊢ X ¡[g] & ⦃h, K2⦄ ⊢ W ¡[g] & + ⦃h, K1⦄ ⊢ V •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W •[g] ⦃l, V2⦄ & + h ⊢ K1 ¡⊑[g] K2 & + I = Abbr & L2 = K2.ⓛW & X = ⓝW.V. #h #g #L1 #L2 * -L1 -L2 -[ #J #K1 #U1 #H destruct -| #I #L1 #L2 #V #HL12 #J #K1 #U1 #H destruct /3 width=3/ -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HV1 #HVW1 #HW12 #HW2 #HWV2 #HL12 #J #K1 #U1 #H destruct /3 width=11/ +[ #J #K1 #X #H destruct +| #I #L1 #L2 #V #HL12 #J #K1 #X #H destruct /3 width=3/ +| #L1 #L2 #W #V #W1 #V2 #l #HV #HW #HW1 #HV2 #HL12 #J #K1 #X #H destruct /3 width=12/ ] qed-. -lemma lsubsv_inv_pair1: ∀h,g,I,K1,L2,V1. h ⊢ K1. ⓑ{I} V1 ¡⊑[g] L2 → - (∃∃K2. h ⊢ K1 ¡⊑[g] K2 & L2 = K2. ⓑ{I} V1) ∨ - ∃∃K2,V2,W1,W2,l. ⦃h, K1⦄ ⊢ V1 ¡[g] & ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & - K1 ⊢ W1 ⬌* W2 & ⦃h, K2⦄ ⊢ W2 ¡[g] & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - h ⊢ K1 ¡⊑[g] K2 & L2 = K2. ⓛW2 & I = Abbr. +lemma lsubsv_inv_pair1: ∀h,g,I,K1,L2,X. h ⊢ K1.ⓑ{I}X ¡⊑[g] L2 → + (∃∃K2. h ⊢ K1 ¡⊑[g] K2 & L2 = K2.ⓑ{I}X) ∨ + ∃∃K2,W,V,W1,V2,l. ⦃h, K1⦄ ⊢ X ¡[g] & ⦃h, K2⦄ ⊢ W ¡[g] & + ⦃h, K1⦄ ⊢ V •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W •[g] ⦃l, V2⦄ & + h ⊢ K1 ¡⊑[g] K2 & + I = Abbr & L2 = K2.ⓛW & X = ⓝW.V. /2 width=3 by lsubsv_inv_pair1_aux/ qed-. fact lsubsv_inv_atom2_aux: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → L2 = ⋆ → L1 = ⋆. #h #g #L1 #L2 * -L1 -L2 [ // | #I #L1 #L2 #V #_ #H destruct -| #L1 #L2 #V1 #V2 #W1 #W2 #l #_ #_ #_ #_ #_ #_ #H destruct +| #L1 #L2 #W #V #V1 #V2 #l #_ #_ #_ #_ #_ #H destruct ] qed-. @@ -76,37 +78,29 @@ lemma lsubsv_inv_atom2: ∀h,g,L1. h ⊢ L1 ¡⊑[g] ⋆ → L1 = ⋆. /2 width=5 by lsubsv_inv_atom2_aux/ qed-. fact lsubsv_inv_pair2_aux: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → - ∀I,K2,W2. L2 = K2. ⓑ{I} W2 → - (∃∃K1. h ⊢ K1 ¡⊑[g] K2 & L1 = K1. ⓑ{I} W2) ∨ - ∃∃K1,W1,V1,V2,l. ⦃h, K1⦄ ⊢ V1 ¡[g] & ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & - K1 ⊢ W1 ⬌* W2 & ⦃h, K2⦄ ⊢ W2 ¡[g] & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - h ⊢ K1 ¡⊑[g] K2 & L1 = K1. ⓓV1 & I = Abst. + ∀I,K2,W. L2 = K2.ⓑ{I}W → + (∃∃K1. h ⊢ K1 ¡⊑[g] K2 & L1 = K1.ⓑ{I}W) ∨ + ∃∃K1,V,W1,V2,l. ⦃h, K1⦄ ⊢ ⓝW.V ¡[g] & ⦃h, K2⦄ ⊢ W ¡[g] & + ⦃h, K1⦄ ⊢ V •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W •[g] ⦃l, V2⦄ & + h ⊢ K1 ¡⊑[g] K2 & I = Abst & L1 = K1. ⓓⓝW.V. #h #g #L1 #L2 * -L1 -L2 -[ #J #K2 #U2 #H destruct -| #I #L1 #L2 #V #HL12 #J #K2 #U2 #H destruct /3 width=3/ -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HV #HVW1 #HW12 #HW2 #HWV2 #HL12 #J #K2 #U2 #H destruct /3 width=11/ +[ #J #K2 #U #H destruct +| #I #L1 #L2 #V #HL12 #J #K2 #U #H destruct /3 width=3/ +| #L1 #L2 #W #V #W1 #V2 #l #HV #HW #HW1 #HV2 #HL12 #J #K2 #U #H destruct /3 width=10/ ] qed-. -lemma lsubsv_inv_pair2: ∀h,g,I,L1,K2,W2. h ⊢ L1 ¡⊑[g] K2. ⓑ{I} W2 → - (∃∃K1. h ⊢ K1 ¡⊑[g] K2 & L1 = K1. ⓑ{I} W2) ∨ - ∃∃K1,W1,V1,V2,l. ⦃h, K1⦄ ⊢ V1 ¡[g] & ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & - K1 ⊢ W1 ⬌* W2 & ⦃h, K2⦄ ⊢ W2 ¡[g] & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - h ⊢ K1 ¡⊑[g] K2 & L1 = K1. ⓓV1 & I = Abst. +lemma lsubsv_inv_pair2: ∀h,g,I,L1,K2,W. h ⊢ L1 ¡⊑[g] K2.ⓑ{I}W → + (∃∃K1. h ⊢ K1 ¡⊑[g] K2 & L1 = K1.ⓑ{I}W) ∨ + ∃∃K1,V,W1,V2,l. ⦃h, K1⦄ ⊢ ⓝW.V ¡[g] & ⦃h, K2⦄ ⊢ W ¡[g] & + ⦃h, K1⦄ ⊢ V •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W •[g] ⦃l, V2⦄ & + h ⊢ K1 ¡⊑[g] K2 & I = Abst & L1 = K1. ⓓⓝW.V. /2 width=3 by lsubsv_inv_pair2_aux/ qed-. (* Basic_forward lemmas *****************************************************) -lemma lsubsv_fwd_lsubss: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → h ⊢ L1 •⊑[g] L2. -#h #g #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ /2 width=6/ -qed-. - -lemma lsubsv_fwd_lsubr1: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → L1 ⊑ L2. -/3 width=3 by lsubsv_fwd_lsubss, lsubss_fwd_lsubr1/ -qed-. - -lemma lsubsv_fwd_lsubr2: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → L1 ⊑ L2. -/3 width=3 by lsubsv_fwd_lsubss, lsubss_fwd_lsubr2/ +lemma lsubsv_fwd_lsubx: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → L1 ⓝ⊑ L2. +#h #g #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ qed-. (* Basic properties *********************************************************) @@ -117,5 +111,5 @@ qed. lemma lsubsv_cprs_trans: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → ∀T1,T2. L2 ⊢ T1 ➡* T2 → L1 ⊢ T1 ➡* T2. -/3 width=5 by lsubsv_fwd_lsubss, lsubss_cprs_trans/ +/3 width=5 by lsubsv_fwd_lsubx, lsubx_cprs_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_cpcs.ma index 750c71fdc..ec6c1e343 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_cpcs.ma @@ -21,5 +21,5 @@ include "basic_2/dynamic/lsubsv.ma". lemma lsubsv_cpcs_trans: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → ∀T1,T2. L2 ⊢ T1 ⬌* T2 → L1 ⊢ T1 ⬌* T2. -/3 width=5 by lsubsv_fwd_lsubr2, cpcs_lsubr_trans/ +/3 width=5 by lsubsv_fwd_lsubx, lsubx_cpcs_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_cpds.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_cpds.ma new file mode 100644 index 000000000..4ffc91f95 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_cpds.ma @@ -0,0 +1,56 @@ +(**************************************************************************) +(* ___ *) +(* ||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/snv_cpcs.ma". +include "basic_2/dynamic/lsubsv_ssta.ma". + +(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED NATIVE VALIDITY **************) + +(* Properties for the preservation results **********************************) + +fact lsubsv_sstas_aux: ∀h,g,L0,T0. + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_ssta h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_lsubsv h g L1 T1) → + ∀L2,T. h ⊢ ⦃L0, T0⦄ >[g] ⦃L2, T⦄ → ⦃h, L2⦄ ⊢ T ¡[g] → + ∀L1. h ⊢ L1 ¡⊑[g] L2 → ∀U2. ⦃h, L2⦄ ⊢ T •*[g] U2 → + ∃∃U1. ⦃h, L1⦄ ⊢ T •*[g] U1 & L1 ⊢ U1 ⬌* U2. +#h #g #L0 #T0 #IH4 #IH3 #IH2 #IH1 #L2 #T #HLT0 #HT #L1 #HL12 #U2 #H @(sstas_ind … H) -U2 [ /2 width=3/ ] +#U2 #W #l #HTU2 #HU2W * #U1 #HTU1 #HU12 +lapply (IH1 … HT … HL12) // #H +lapply (snv_sstas_aux … IH2 … HTU1) // /3 width=4 by ygt_yprs_trans, lsubsv_yprs/ -H #HU1 +lapply (snv_sstas_aux … IH2 … HTU2) // #H +lapply (IH1 … H … HL12) [ /3 width=4 by ygt_yprs_trans, sstas_yprs/ ] -H #HU2 +elim (snv_fwd_ssta … HU1) #l1 #W1 #HUW1 +elim (lsubsv_ssta_trans … HU2W … HL12) -HU2W #W2 #HUW2 #HW2 +elim (ssta_cpcs_lpr_aux … IH4 IH3 … HU1 HU2 … HUW1 … HUW2 … HU12 L1) -HU1 -HU2 -HUW2 -HU12 // +[2,3: /4 width=4 by ygt_yprs_trans, sstas_yprs, lsubsv_yprs/ ] -L2 -L0 -T0 -U2 #H #HW12 destruct +lapply (cpcs_trans … HW12 … HW2) -W2 /3 width=4/ +qed-. + +fact lsubsv_cpds_aux: ∀h,g,L0,T0. + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_ssta h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_lsubsv h g L1 T1) → + ∀L2,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L2, T1⦄ → ⦃h, L2⦄ ⊢ T1 ¡[g] → + ∀L1. h ⊢ L1 ¡⊑[g] L2 → ∀T2. ⦃h, L2⦄ ⊢ T1 •*➡*[g] T2 → + ∃∃T. ⦃h, L1⦄ ⊢ T1 •*➡*[g] T & L1 ⊢ T2 ➡* T. +#h #g #L0 #T0 #IH4 #IH3 #IH2 #IH1 #L2 #T1 #HLT0 #HT1 #L1 #HL12 #T2 * #T #HT1T #HTT2 +lapply (lsubsv_cprs_trans … HL12 … HTT2) -HTT2 #HTT2 +elim (lsubsv_sstas_aux … IH4 IH3 IH2 IH1 … HLT0 … HL12 … HT1T) // -L2 -L0 -T0 #T0 #HT10 #HT0 +lapply (cpcs_cprs_strap1 … HT0 … HTT2) -T #HT02 +elim (cpcs_inv_cprs … HT02) -HT02 /3 width=3/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_dxprs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_dxprs.ma deleted file mode 100644 index 04af871fe..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_dxprs.ma +++ /dev/null @@ -1,56 +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/snv_cpcs.ma". -include "basic_2/dynamic/lsubsv_ssta.ma". - -(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED NATIVE VALIDITY **************) - -(* Properties for the preservation results **********************************) - -fact lsubsv_sstas_aux: ∀h,g,L0,T0. - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_ssta h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_lsubsv h g L1 T1) → - ∀L2,T. h ⊢ ⦃L0, T0⦄ >[g] ⦃L2, T⦄ → ⦃h, L2⦄ ⊢ T ¡[g] → - ∀L1. h ⊢ L1 ¡⊑[g] L2 → ∀U2. ⦃h, L2⦄ ⊢ T •*[g] U2 → - ∃∃U1. ⦃h, L1⦄ ⊢ T •*[g] U1 & L1 ⊢ U1 ⬌* U2. -#h #g #L0 #T0 #IH4 #IH3 #IH2 #IH1 #L2 #T #HLT0 #HT #L1 #HL12 #U2 #H @(sstas_ind … H) -U2 [ /2 width=3/ ] -#U2 #W #l #HTU2 #HU2W * #U1 #HTU1 #HU12 -lapply (IH1 … HT … HL12) // #H -lapply (snv_sstas_aux … IH2 … HTU1) // /3 width=4 by ygt_yprs_trans, lsubsv_yprs/ -H #HU1 -lapply (snv_sstas_aux … IH2 … HTU2) // #H -lapply (IH1 … H … HL12) [ /3 width=4 by ygt_yprs_trans, sstas_yprs/ ] -H #HU2 -elim (snv_fwd_ssta … HU1) #l1 #W1 #HUW1 -elim (lsubsv_ssta_trans … HU2W … HL12) -HU2W #W2 #HUW2 #HW2 -elim (ssta_cpcs_lpr_aux … IH4 IH3 … HU1 HU2 … HUW1 … HUW2 … HU12 L1) -HU1 -HU2 -HUW2 -HU12 // -[2,3: /4 width=4 by ygt_yprs_trans, sstas_yprs, lsubsv_yprs/ ] -L2 -L0 -T0 -U2 #H #HW12 destruct -lapply (cpcs_trans … HW12 … HW2) -W2 /3 width=4/ -qed-. - -fact lsubsv_dxprs_aux: ∀h,g,L0,T0. - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_ssta h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_lsubsv h g L1 T1) → - ∀L2,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L2, T1⦄ → ⦃h, L2⦄ ⊢ T1 ¡[g] → - ∀L1. h ⊢ L1 ¡⊑[g] L2 → ∀T2. ⦃h, L2⦄ ⊢ T1 •*➡*[g] T2 → - ∃∃T. ⦃h, L1⦄ ⊢ T1 •*➡*[g] T & L1 ⊢ T2 ➡* T. -#h #g #L0 #T0 #IH4 #IH3 #IH2 #IH1 #L2 #T1 #HLT0 #HT1 #L1 #HL12 #T2 * #T #HT1T #HTT2 -lapply (lsubsv_cprs_trans … HL12 … HTT2) -HTT2 #HTT2 -elim (lsubsv_sstas_aux … IH4 IH3 IH2 IH1 … HLT0 … HL12 … HT1T) // -L2 -L0 -T0 #T0 #HT10 #HT0 -lapply (cpcs_cprs_strap1 … HT0 … HTT2) -T #HT02 -elim (cpcs_inv_cprs … HT02) -HT02 /3 width=3/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ldrop.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ldrop.ma index bd46208b8..f8caa3aee 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ldrop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ldrop.ma @@ -27,19 +27,19 @@ lemma lsubsv_ldrop_O1_conf: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → | #I #L1 #L2 #V #_ #IHL12 #K1 #e #H elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK1 [ destruct - elim (IHL12 L1 0 ?) -IHL12 // #X #HL12 #H + elim (IHL12 L1 0) -IHL12 // #X #HL12 #H <(ldrop_inv_O2 … H) in HL12; -H /3 width=3/ | elim (IHL12 … HLK1) -L1 /3 width=3/ ] -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HV1 #HVW1 #HW12 #HW2 #HWV2 #_ #IHL12 #K1 #e #H +| #L1 #L2 #W #V #W1 #V2 #l #HV #HW #HW1 #HV2 #_ #IHL12 #K1 #e #H elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK1 [ destruct - elim (IHL12 L1 0 ?) -IHL12 // #X #HL12 #H + elim (IHL12 L1 0) -IHL12 // #X #HL12 #H <(ldrop_inv_O2 … H) in HL12; -H /3 width=6/ | elim (IHL12 … HLK1) -L1 /3 width=3/ ] ] -qed. +qed-. (* Note: the constant 0 cannot be generalized *) lemma lsubsv_ldrop_O1_trans: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → @@ -50,16 +50,16 @@ lemma lsubsv_ldrop_O1_trans: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → | #I #L1 #L2 #V #_ #IHL12 #K2 #e #H elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK2 [ destruct - elim (IHL12 L2 0 ?) -IHL12 // #X #HL12 #H + elim (IHL12 L2 0) -IHL12 // #X #HL12 #H <(ldrop_inv_O2 … H) in HL12; -H /3 width=3/ | elim (IHL12 … HLK2) -L2 /3 width=3/ ] -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HV1 #HVW1 #HW12 #HW2 #HWV2 #_ #IHL12 #K2 #e #H +| #L1 #L2 #W #V #W1 #V2 #l #HV #HW #HW1 #HV2 #_ #IHL12 #K2 #e #H elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK2 [ destruct - elim (IHL12 L2 0 ?) -IHL12 // #X #HL12 #H + elim (IHL12 L2 0) -IHL12 // #X #HL12 #H <(ldrop_inv_O2 … H) in HL12; -H /3 width=6/ | elim (IHL12 … HLK2) -L2 /3 width=3/ ] ] -qed. +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_lsuba.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_lsuba.ma index d19d320e4..d542b686b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_lsuba.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_lsuba.ma @@ -18,8 +18,8 @@ include "basic_2/dynamic/lsubsv.ma". (* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED NATIVE VALIDITY **************) (* Properties on local environment refinement for atomic arity assignment ***) - -lemma lsubsv_fwd_lsuba: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → L1 ⁝⊑ L2. +(* +lamma lsubsv_fwd_lsuba: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → L1 ⁝⊑ L2. #h #g #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ #L1 #L2 #V1 #V2 #W1 #W2 #l #HV1 #HVW1 #HW12 #HW2 #_ #_ #HL12 elim (snv_fwd_aaa … HV1) -HV1 #A #HV1 @@ -28,3 +28,4 @@ lapply (ssta_aaa … HV1 … HVW1) -HVW1 #H1 lapply (lsuba_aaa_trans … HW2 … HL12) #H2 lapply (aaa_cpcs_mono … HW12 … H1 … H2) -W1 -H2 #H destruct /2 width=3/ qed-. +*) diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_snv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_snv.ma index eed454bae..078b8fa89 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_snv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_snv.ma @@ -12,9 +12,8 @@ (* *) (**************************************************************************) -include "basic_2/computation/dxprs_dxprs.ma". -include "basic_2/dynamic/lsubsv_ldrop.ma". -include "basic_2/dynamic/lsubsv_dxprs.ma". +include "basic_2/computation/cpds_cpds.ma". +include "basic_2/dynamic/lsubsv_cpds.ma". include "basic_2/dynamic/lsubsv_cpcs.ma". (* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED NATIVE VALIDITY **************) @@ -34,7 +33,7 @@ fact snv_lsubsv_aux: ∀h,g,L0,T0. elim (lsubsv_inv_pair2 … H) -H * #K1 [ #HK12 #H destruct /5 width=8 by snv_lref, fsupp_ygt, fsupp_lref/ (**) (* auto too slow without trace *) - | #W1 #V1 #V2 #l #HV1 #_ #_ #_ #_ #_ #H #_ destruct /2 width=5/ + | #V #W1 #V2 #l #HV #_ #_ #_ #_ #_ #H destruct /2 width=5/ ] | #p #HL0 #HT0 #H #L1 #HL12 destruct -IH4 -IH3 -IH2 -IH1 elim (snv_inv_gref … H) @@ -45,11 +44,11 @@ fact snv_lsubsv_aux: ∀h,g,L0,T0. lapply (lsubsv_cprs_trans … HL12 … HW0) -HW0 #HW0 elim (lsubsv_ssta_trans … HVW … HL12) -HVW #W1 #HVW1 #HW1 lapply (cpcs_cprs_strap1 … HW1 … HW0) -W #HW10 - elim (lsubsv_dxprs_aux … IH4 IH3 IH2 IH1 … HL12 … HTU) -IH4 -IH3 -IH2 -HTU // /2 width=1/ #X #HTU #H - elim (cprs_fwd_abst1 … H Abst W0) -H #W #U2 #HW0 #HU2 #H destruct + elim (lsubsv_cpds_aux … IH4 IH3 IH2 IH1 … HL12 … HTU) -IH4 -IH3 -IH2 -HTU // /2 width=1/ #X #HTU #H + elim (cprs_inv_abst1 … H) -H #W #U2 #HW0 #HU2 #H destruct lapply (cpcs_cprs_strap1 … HW10 … HW0) -W0 #H elim (cpcs_inv_cprs … H) -H #W0 #HW10 #HW0 - lapply (dxprs_cprs_trans … (ⓛ{a}W0.U2) HTU ?) [ /2 width=1/ ] -HTU -HW0 + lapply (cpds_cprs_trans … (ⓛ{a}W0.U2) HTU ?) [ /2 width=1/ ] -HTU -HW0 /4 width=8 by snv_appl, fsupp_ygt/ (**) (* auto too slow without trace *) | #W #T #HL0 #HT0 #H #L1 #HL12 destruct -IH4 -IH3 -IH2 elim (snv_inv_cast … H) -H #U #l #HW #HT #HTU #HUW diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ssta.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ssta.ma index 594c72662..b372dca9c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ssta.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv_ssta.ma @@ -12,8 +12,9 @@ (* *) (**************************************************************************) -include "basic_2/equivalence/lsubss_ssta.ma". -include "basic_2/dynamic/lsubsv.ma". +include "basic_2/static/ssta_ssta.ma". +include "basic_2/equivalence/cpcs_cpcs.ma". +include "basic_2/dynamic/lsubsv_ldrop.ma". (* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED NATIVE VALIDITY **************) @@ -22,5 +23,35 @@ include "basic_2/dynamic/lsubsv.ma". lemma lsubsv_ssta_trans: ∀h,g,L2,T,U2,l. ⦃h, L2⦄ ⊢ T •[g] ⦃l, U2⦄ → ∀L1. h ⊢ L1 ¡⊑[g] L2 → ∃∃U1. ⦃h, L1⦄ ⊢ T •[g] ⦃l, U1⦄ & L1 ⊢ U1 ⬌* U2. -/3 width=3 by lsubsv_fwd_lsubss, lsubss_ssta_trans/ +#h #g #L2 #T #U #l #H elim H -L2 -T -U -l +[ /3 width=3/ +| #L2 #K2 #X #Y #U #i #l #HLK2 #_ #HYU #IHXY #L1 #HL12 + elim (lsubsv_ldrop_O1_trans … HL12 … HLK2) -L2 #X #H #HLK1 + elim (lsubsv_inv_pair2 … H) -H * #K1 [ | -HYU -IHXY -HLK1 ] + [ #HK12 #H destruct + elim (IHXY … HK12) -K2 #T #HXT #HTY + lapply (ldrop_fwd_ldrop2 … HLK1) #H + elim (lift_total T 0 (i+1)) /3 width=11/ + | #V #W1 #V2 #l0 #_ #_ #_ #_ #_ #H destruct + ] +| #L2 #K2 #Y #X #U #i #l #HLK2 #HYX #HYU #IHYX #L1 #HL12 + elim (lsubsv_ldrop_O1_trans … HL12 … HLK2) -L2 #X #H #HLK1 + elim (lsubsv_inv_pair2 … H) -H * #K1 [ -HYX | -IHYX ] + [ #HK12 #H destruct + elim (IHYX … HK12) -K2 /3 width=6/ + | #V #W1 #V2 #l0 #HYV #_ #HV #HY #_ #_ #H destruct + elim (snv_inv_cast … HYV) -HYV #W #l1 #_ #_ #HVW #HWY + elim (ssta_mono … HVW … HV) -HV #Hl10 #_ + elim (ssta_mono … HYX … HY) -HYX -HY #H #_ destruct + lapply (ldrop_fwd_ldrop2 … HLK1) #H + elim (lift_total W 0 (i+1)) + /4 width=11 by cpcs_lift, ex2_intro, ssta_ldef, ssta_cast/ + ] +| #a #I #L2 #V2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 + elim (IHTU2 (L1.ⓑ{I}V2) …) [2: /2 width=1/ ] -L2 /3 width=3/ +| #L2 #V2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 + elim (IHTU2 … HL12) -L2 /3 width=5/ +| #L2 #W2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 + elim (IHTU2 … HL12) -L2 /3 width=3/ +] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma index 69906c437..d4e3beda1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma @@ -12,7 +12,8 @@ (* *) (**************************************************************************) -include "basic_2/computation/dxprs.ma". +include "basic_2/notation/relations/nativevalid_4.ma". +include "basic_2/computation/cpds.ma". include "basic_2/equivalence/cpcs.ma". (* STRATIFIED NATIVE VALIDITY FOR TERMS *************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_aaa.ma index 47a2b015c..32807a499 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_aaa.ma @@ -13,7 +13,7 @@ (**************************************************************************) include "basic_2/computation/csn_aaa.ma". -include "basic_2/computation/dxprs_aaa.ma". +include "basic_2/computation/cpds_aaa.ma". include "basic_2/equivalence/cpcs_aaa.ma". include "basic_2/dynamic/snv.ma". @@ -27,8 +27,8 @@ lemma snv_fwd_aaa: ∀h,g,L,T. ⦃h, L⦄ ⊢ T ¡[g] → ∃A. L ⊢ T ⁝ A. | #I #L #K #V #i #HLK #_ * /3 width=6/ | #a * #L #V #T #_ #_ * #B #HV * #A #HA /3 width=2/ | #a #L #V #W #W0 #T #U #l #_ #_ #HVW #HW0 #HTU * #B #HV * #X #HT - lapply (dxprs_aaa h g … HV W0 ?) [ -HTU /3 width=4/ ] -W #HW0 (**) (* auto fail without -HTU *) - lapply (dxprs_aaa … HT … HTU) -HTU #H + lapply (cpds_aaa h g … HV W0 ?) [ -HTU /3 width=4/ ] -W #HW0 (**) (* auto fail without -HTU *) + lapply (cpds_aaa … HT … HTU) -HTU #H elim (aaa_inv_abst … H) -H #B0 #A #H1 #HU #H2 destruct lapply (aaa_mono … H1 … HW0) -W0 #H destruct /3 width=4/ | #L #W #T #U #l #_ #_ #HTU #HUW * #B #HW * #A #HT diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_cpcs.ma index f00ae1832..707994c62 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_cpcs.ma @@ -65,7 +65,7 @@ elim (IH1 … HTU … HTT2 … HL12) -IH1 -HTU -HTT2 [2: /3 width=9 by snv_cprs_lpr_aux/ |3: /5 width=6 by ygt_yprs_trans, cprs_yprs/ ] -L0 -T0 -T1 -T #U2 #HTU2 #HU2 -lapply (cpcs_lpr_conf … HL12 … HU1) -L1 #HU1 +lapply (lpr_cpcs_conf … HL12 … HU1) -L1 #HU1 lapply (cpcs_trans … HU1 … HU2) -U /2 width=3/ qed-. @@ -110,7 +110,7 @@ fact sstas_cprs_lpr_aux: ∀h,g,L0,T0. ∀U1. ⦃h, L1⦄ ⊢ T1 •*[g] U1 → ∀T2. L1 ⊢ T1 ➡* T2 → ∀L2. L1 ⊢ ➡ L2 → ∃∃U2. ⦃h, L2⦄ ⊢ T2 •*[g] U2 & L2 ⊢ U1 ⬌* U2. #h #g #L0 #T0 #IH3 #IH2 #IH1 #L1 #T1 #H01 #HT1 #U1 #H -@(sstas_ind … H) -U1 [ /3 width=5 by cprs_lpr_conf, ex2_intro/ ] +@(sstas_ind … H) -U1 [ /3 width=5 by lpr_cprs_conf, ex2_intro/ ] #U1 #W1 #l1 #HTU1 #HUW1 #IHTU1 #T2 #HT12 #L2 #HL12 elim (IHTU1 … HT12 … HL12) -IHTU1 #U2 #HTU2 #HU12 lapply (snv_cprs_lpr_aux … IH2 … HT1 … HT12 … HL12) // #HT2 @@ -127,27 +127,27 @@ elim (ssta_cpcs_lpr_aux … IH2 IH1 … HU1W … HUW2 … HU12 L2) // -IH1 -HU1W lapply (cpcs_trans … HW1 … HW12) -W /3 width=4/ qed-. -fact dxprs_cprs_lpr_aux: ∀h,g,L0,T0. - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_ssta h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → - ∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → ⦃h, L1⦄ ⊢ T1 ¡[g] → - ∀U1. ⦃h, L1⦄ ⊢ T1 •*➡*[g] U1 → - ∀T2. L1 ⊢ T1 ➡* T2 → ∀L2. L1 ⊢ ➡ L2 → - ∃∃U2. ⦃h, L2⦄ ⊢ T2 •*➡*[g] U2 & L2 ⊢ U1 ➡* U2. +fact cpds_cprs_lpr_aux: ∀h,g,L0,T0. + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_ssta h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → + ∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → ⦃h, L1⦄ ⊢ T1 ¡[g] → + ∀U1. ⦃h, L1⦄ ⊢ T1 •*➡*[g] U1 → + ∀T2. L1 ⊢ T1 ➡* T2 → ∀L2. L1 ⊢ ➡ L2 → + ∃∃U2. ⦃h, L2⦄ ⊢ T2 •*➡*[g] U2 & L2 ⊢ U1 ➡* U2. #h #g #L0 #T0 #IH3 #IH2 #IH1 #L1 #T1 #H01 #HT1 #U1 * #W1 #HTW1 #HWU1 #T2 #HT12 #L2 #HL12 elim (sstas_cprs_lpr_aux … IH3 IH2 IH1 … H01 … HTW1 … HT12 … HL12) // -L0 -T0 -T1 #W2 #HTW2 #HW12 -lapply (cprs_lpr_conf … HL12 … HWU1) -L1 #HWU1 +lapply (lpr_cprs_conf … HL12 … HWU1) -L1 #HWU1 lapply (cpcs_canc_sn … HW12 HWU1) -W1 #H elim (cpcs_inv_cprs … H) -H /3 width=3/ qed-. -fact ssta_dxprs_aux: ∀h,g,L0,T0. - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → - (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → - ∀L,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L, T1⦄ → ⦃h, L⦄ ⊢ T1 ¡[g] → - ∀l,U1. ⦃h, L⦄ ⊢ T1 •[g] ⦃l+1, U1⦄ → ∀T2. ⦃h, L⦄ ⊢ T1 •*➡*[g] T2 → - ∃∃U,U2. ⦃h, L⦄ ⊢ U1 •*[g] U & ⦃h, L⦄ ⊢ T2 •*[g] U2 & L ⊢ U ⬌* U2. +fact ssta_cpds_aux: ∀h,g,L0,T0. + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_snv_cpr_lpr h g L1 T1) → + (∀L1,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L1, T1⦄ → IH_ssta_cpr_lpr h g L1 T1) → + ∀L,T1. h ⊢ ⦃L0, T0⦄ >[g] ⦃L, T1⦄ → ⦃h, L⦄ ⊢ T1 ¡[g] → + ∀l,U1. ⦃h, L⦄ ⊢ T1 •[g] ⦃l+1, U1⦄ → ∀T2. ⦃h, L⦄ ⊢ T1 •*➡*[g] T2 → + ∃∃U,U2. ⦃h, L⦄ ⊢ U1 •*[g] U & ⦃h, L⦄ ⊢ T2 •*[g] U2 & L ⊢ U ⬌* U2. #h #g #L0 #T0 #IH2 #IH1 #L #T1 #H01 #HT1 #l #U1 #HTU1 #T2 * #T #HT1T #HTT2 elim (sstas_strip … HT1T … HTU1) #HU1T destruct [ -HT1T | -L0 -T0 -T1 ] [ elim (ssta_cprs_lpr_aux … IH2 IH1 … HTU1 … HTT2 L) // -L0 -T0 -T /3 width=5/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma index 8b68e242c..eb698c599 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/computation/dxprs_lift.ma". +include "basic_2/computation/cpds_lift.ma". include "basic_2/equivalence/cpcs_cpcs.ma". include "basic_2/dynamic/snv.ma". @@ -27,8 +27,8 @@ lemma snv_lift: ∀h,g,K,T. ⦃h, K⦄ ⊢ T ¡[g] → ∀L,d,e. ⇩[d, e] L ≡ >(lift_inv_sort1 … H) -X -K -d -e // | #I #K #K0 #V #i #HK0 #_ #IHV #L #d #e #HLK #X #H elim (lift_inv_lref1 … H) * #Hid #H destruct - [ elim (ldrop_trans_le … HLK … HK0 ?) -K /2 width=2/ #X #HL0 #H - elim (ldrop_inv_skip2 … H ?) -H /2 width=1/ -Hid #L0 #W #HLK0 #HVW #H destruct + [ elim (ldrop_trans_le … HLK … HK0) -K /2 width=2/ #X #HL0 #H + elim (ldrop_inv_skip2 … H) -H /2 width=1/ -Hid #L0 #W #HLK0 #HVW #H destruct /3 width=8/ | lapply (ldrop_trans_ge … HLK … HK0 ?) -K // -Hid /3 width=8/ ] @@ -42,7 +42,7 @@ lemma snv_lift: ∀h,g,K,T. ⦃h, K⦄ ⊢ T ¡[g] → ∀L,d,e. ⇩[d, e] L ≡ elim (lift_total T1 (d+1) e) #U1 #HTU1 @(snv_appl … a … W0 … W1 … U1 l) [ /2 width=4/ | /2 width=4/ | /2 width=9/ | /2 width=9/ ] - @(dxprs_lift … HLK … HTU … HT1) /2 width=1/ + @(cpds_lift … HLK … HTU … HT1) /2 width=1/ | #K #V0 #T #V #l #_ #_ #HTV #HV0 #IHV0 #IHT #L #d #e #HLK #X #H elim (lift_inv_flat1 … H) -H #W0 #U #HVW0 #HTU #H destruct elim (lift_total V d e) #W #HVW @@ -57,8 +57,8 @@ lemma snv_inv_lift: ∀h,g,L,U. ⦃h, L⦄ ⊢ U ¡[g] → ∀K,d,e. ⇩[d, e] L >(lift_inv_sort2 … H) -X -L -d -e // | #I #L #L0 #W #i #HL0 #_ #IHW #K #d #e #HLK #X #H elim (lift_inv_lref2 … H) * #Hid #H destruct - [ elim (ldrop_conf_le … HLK … HL0 ?) -L /2 width=2/ #X #HK0 #H - elim (ldrop_inv_skip1 … H ?) -H /2 width=1/ -Hid #K0 #V #HLK0 #HVW #H destruct + [ elim (ldrop_conf_le … HLK … HL0) -L /2 width=2/ #X #HK0 #H + elim (ldrop_inv_skip1 … H) -H /2 width=1/ -Hid #K0 #V #HLK0 #HVW #H destruct /3 width=8/ | lapply (ldrop_conf_ge … HLK … HL0 ?) -L // -Hid /3 width=8/ ] @@ -68,7 +68,7 @@ lemma snv_inv_lift: ∀h,g,L,U. ⦃h, L⦄ ⊢ U ¡[g] → ∀K,d,e. ⇩[d, e] L elim (lift_inv_flat2 … H) -H #V #T #HVW #HTU #H destruct elim (ssta_inv_lift1 … HW0 … HLK … HVW) -HW0 #V0 #HV0 #HVW0 elim (cprs_inv_lift1 … HW01 … HLK … HVW0) -W0 #V1 #HVW1 #HV01 - elim (dxprs_inv_lift1 … HLK … HTU … HU1) -HU1 #X #H #HTU + elim (cpds_inv_lift1 … HLK … HTU … HU1) -HU1 #X #H #HTU elim (lift_inv_bind2 … H) -H #Y #T1 #HY #HTU1 #H destruct lapply (lift_inj … HY … HVW1) -HY #H destruct /3 width=8/ | #L #W0 #U #W #l #_ #_ #HUW #HW0 #IHW0 #IHU #K #d #e #HLK #X #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lpr.ma index db1058f75..39a60a97a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lpr.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/computation/dxprs_dxprs.ma". +include "basic_2/computation/cpds_cpds.ma". include "basic_2/dynamic/snv_lift.ma". include "basic_2/dynamic/snv_cpcs.ma". @@ -61,33 +61,34 @@ fact snv_cpr_lpr_aux: ∀h,g,L0,T0. lapply (IH1 … HV1 … HV12 … HL12) [ /2 width=1/ ] #HV2 lapply (IH1 … HT1 … HT12 … HL12) [ /2 width=1/ ] #HT2 elim (IH3 … HVW1 … HV12 … HL12) -HVW1 -HV12 // -HV1 [2: /2 width=1/ ] #W2 #HVW2 #HW12 - elim (dxprs_cprs_lpr_aux … IH2 IH1 IH3 … HTU1 … T2 … HL12) // [2,3: /2 width=1/ ] -IH2 -IH1 -IH3 -HT1 -HT12 -HTU1 #X #HTU2 #H - elim (cprs_fwd_abst1 … H Abst W1) -H #W20 #U2 #HW120 #_ #H destruct - lapply (cprs_lpr_conf … HL12 … HW10) -L1 #HW10 + elim (cpds_cprs_lpr_aux … IH2 IH1 IH3 … HTU1 … T2 … HL12) // [2,3: /2 width=1/ ] -IH2 -IH1 -IH3 -HT1 -HT12 -HTU1 #X #HTU2 #H + elim (cprs_inv_abst1 … H) -H #W20 #U2 #HW120 #_ #H destruct + lapply (lpr_cprs_conf … HL12 … HW10) -L1 #HW10 lapply (cpcs_cprs_strap1 … HW10 … HW120) -W1 #HW120 lapply (cpcs_canc_sn … HW12 HW120) -W10 #HW20 elim (cpcs_inv_cprs … HW20) -HW20 #W0 #HW20 #HW200 - lapply (dxprs_cprs_trans … (ⓛ{a}W0.U2) HTU2 ?) [ /2 width=1/ ] -HW200 -HTU2 /2 width=8/ - | #b #V2 #W20 #T20 #T2 #HV12 #HT202 #H1 #H2 destruct + lapply (cpds_cprs_trans … (ⓛ{a}W0.U2) HTU2 ?) [ /2 width=1/ ] -HW200 -HTU2 /2 width=8/ + | #b #V2 #W20 #W2 #T20 #T2 #HV12 #HW202 #HT202 #H1 #H2 destruct elim (snv_inv_bind … HT1) -HT1 #HW20 #HT20 - elim (dxprs_inv_abst1 … HTU1) -HTU1 #W30 #T30 #HW230 #_ #H destruct -T30 + elim (cpds_inv_abst1 … HTU1) -HTU1 #W30 #T30 #HW230 #_ #H destruct -T30 lapply (cprs_div … HW10 … HW230) -W30 #HW120 - lapply (cpcs_lpr_conf … HL12 … HW120) -HW120 #HW120 - elim (IH3 … HVW1 … HV12 … HL12) // [2: /2 width=1/ ] -HVW1 #W2 #HVW2 #HW102 - lapply (cpcs_canc_sn … HW102 … HW120) -W10 #HW220 - lapply (IH1 … HV12 … HL12) // [ /2 width=1/ ] #HV2 -HV1 - lapply (IH1 … HW20 … W20 … HL12) // [ /2 width=1/ ] -HW20 #HW20 - lapply (IH1 … HT20 … HT202 … (L2.ⓛW20) ?) [1,2: /2 width=1/ ] -HT20 #HT2 - lapply (IH2 … HVW2) // + lapply (cpcs_cpr_strap1 … HW120 … HW202) -HW120 #HW102 + lapply (lpr_cpcs_conf … HL12 … HW102) -HW102 #HW102 + elim (IH3 … HVW1 … HV12 … HL12) // [2: /2 width=1/ ] -HVW1 #W3 #HV2W3 #HW103 + lapply (cpcs_canc_sn … HW103 … HW102) -W10 #HW32 + lapply (IH1 … HV12 … HL12) // [ /2 width=1/ ] -HV1 #HV2 + lapply (IH1 … HW202 … HL12) // [ /2 width=1/ ] -HW20 #HW2 + lapply (IH1 … HT20 … HT202 … (L2.ⓛW2) ?) [1,2: /2 width=1/ ] -HT20 #HT2 + lapply (IH2 … HV2W3) // [ @(ygt_yprs_trans … L1 L1 … V1) (**) (* auto /4 width=5/ is a bit slow even with trace *) [ /2 width=1 by fsupp_ygt/ | /3 width=1 by cprs_lpr_yprs, cpr_cprs/ ] - ] #HW2 - elim (snv_fwd_ssta … HW20) #l0 #U20 #HWU20 - elim (ssta_fwd_correct … HVW2) (cpss_inv_sort1 … H) -X // -| #I #L1 #K1 #V1 #i #HLK1 #_ #IHV1 #W2 #H #L2 #HL12 - elim (cpss_inv_lref1 … H) -H - [ #H destruct - elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #X #H #HLK2 - elim (lpss_inv_pair1 … H) -H #K2 #V2 #HK12 #HV12 #H destruct - lapply (IHV1 … HV12 … HK12) -IHV1 -HV12 -HK12 /2 width=5/ - | * #K0 #V0 #V2 #HLK0 #HV12 #HVW2 - lapply (ldrop_mono … HLK0 … HLK1) -HLK0 #H destruct - elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #X #H #HLK2 - elim (lpss_inv_pair1 … H) -H #K2 #V #HK12 #_ #H destruct - lapply (ldrop_fwd_ldrop2 … HLK2) -V #HLK2 - lapply (IHV1 … HV12 … HK12) -IHV1 -HV12 -HK12 /2 width=7/ - ] -| #a #I #L1 #V1 #T1 #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 - elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct - lapply (IHV1 … HV12 … HL12) -IHV1 #HV2 - lapply (IHT1 … HT12 (L2.ⓑ{I}V2) ?) -IHT1 -HT12 /2 width=1/ -| #a #L1 #V1 #W1 #W0 #T1 #U1 #l #_ #_ #HVW1 #HW10 #HTU1 #IHV1 #IHT1 #X #H #L2 #HL12 - elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct - lapply (IHV1 … HV12 … HL12) -IHV1 #HV2 - lapply (IHT1 … HT12 … HL12) -IHT1 #HT2 - elim (ssta_cpss_lpss_conf … HVW1 … HV12 … HL12) -V1 #W2 #HVW2 #HW12 - elim (dxprs_cpss_lpss_conf … HTU1 … HT12 … HL12) -T1 #X #HTU2 #H - elim (cpss_inv_bind1 … H) -H #W #U2 #HW0 #_ #H -U1 destruct - elim (cprs_cpss2_lpss_conf_dx … HW10 … HW12 … HW0 … HL12) -L1 -W1 -W0 #W0 #HW20 #HW0 - lapply (dxprs_strap1 … (ⓛ{a}W0.U2) HTU2 ?) -HTU2 /3 width=3/ -HW0 /2 width=8/ -| #L1 #W1 #T1 #U1 #l #_ #_ #HTU1 #HUW1 #IHW1 #IHT1 #X #H #L2 #HL12 - elim (cpss_inv_flat1 … H) -H #W2 #T2 #HW12 #HT12 #H destruct - lapply (IHW1 … HW12 … HL12) -IHW1 #HW2 - lapply (IHT1 … HT12 … HL12) -IHT1 #HT2 - elim (ssta_cpss_lpss_conf … HTU1 … HT12 … HL12) -T1 #U2 #HTU2 #HU12 - lapply (cpcs_cpss2_lpss_conf … HUW1 … HU12 … HW12 … HL12) -L1 -W1 -U1 /2 width=4/ -] -qed-. - -lemma snv_lpss_conf: ∀h,g,L1,T. ⦃h, L1⦄ ⊢ T ¡[g] → - ∀L2. L1 ⊢ ▶* L2 → ⦃h, L2⦄ ⊢ T ¡[g]. -#h #g #L1 #T #HT #L2 #HL12 -@(snv_cpss_lpss_conf … HT … HL12) // -qed-. - -lemma snv_cpss_conf: ∀h,g,L,T1. ⦃h, L⦄ ⊢ T1 ¡[g] → - ∀T2. L ⊢ T1 ▶* T2 → ⦃h, L⦄ ⊢ T2 ¡[g]. -#h #g #L #T1 #HT1 #T2 #HT12 -@(snv_cpss_lpss_conf … HT1 … HT12) // -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta.ma index 68ca47869..766e88393 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta.ma @@ -42,10 +42,10 @@ fact snv_ssta_aux: ∀h,g,L0,T0. elim (snv_inv_appl … H1) -H1 #a #W1 #W0 #T0 #l0 #HV1 #HT1 #HVW1 #HW10 #HT10 elim (ssta_inv_appl1 … H2) -H2 #U1 #HTU1 #H destruct lapply (IH1 … HT1 … HTU1) -IH1 /2 width=1/ #HU1 - elim (ssta_dxprs_aux … IH3 IH2 … HTU1 … HT10) -IH3 -IH2 // /2 width=2/ -T1 #U #X #HU1U #H #HU0 + elim (ssta_cpds_aux … IH3 IH2 … HTU1 … HT10) -IH3 -IH2 // /2 width=2/ -T1 #U #X #HU1U #H #HU0 elim (sstas_inv_bind1 … H) -H #U0 #HTU0 #H destruct elim (cpcs_inv_abst2 … HU0) -HU0 #W2 #U2 #HU2 #HU02 - elim (cprs_fwd_abst … HU02 Abst W0) -HU02 #HW02 #_ + elim (cprs_inv_abst … HU02) -HU02 #HW02 #_ lapply (cprs_trans … HW10 … HW02) -W0 /3 width=10 by snv_appl, ex2_intro/ (**) (* auto is too slow without trace *) | #W1 #T1 #HL0 #HT0 #H1 #X #l #H2 destruct -IH3 -IH2 elim (snv_inv_cast … H1) -H1 #U1 #l0 #HW1 #HT1 #HTU1 #HUW1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta_lpr.ma index 2eee503a6..6c5e0f6a5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_ssta_lpr.ma @@ -12,8 +12,9 @@ (* *) (**************************************************************************) -include "basic_2/equivalence/lsubss_ssta.ma". +include "basic_2/computation/cpds_cpds.ma". include "basic_2/dynamic/snv_cpcs.ma". +include "basic_2/dynamic/lsubsv_ssta.ma". (* STRATIFIED NATIVE VALIDITY FOR TERMS *************************************) @@ -76,31 +77,35 @@ fact ssta_cpr_lpr_aux: ∀h,g,L0,T0. [ #V2 #T2 #HV12 #HT12 #H destruct -a -l0 -W1 -W10 -U10 -HV1 -IH3 -IH2 elim (IH1 … HTU1 … HT12 … HL12) -IH1 -HTU1 // [2: /2 width=1/ ] -T1 #U2 #HTU2 #HU12 lapply (lpr_cpr_conf … HL12 … HV12) -L1 /3 width=5/ - | #b #V2 #W #T2 #T20 #HV12 #HT20 #H1 #H2 destruct - elim (snv_inv_bind … HT1) -HT1 #HW #HT2 + | #b #V2 #W2 #W20 #T2 #T20 #HV12 #HW20 #HT20 #H1 #H2 destruct + elim (snv_inv_bind … HT1) -HT1 #HW2 #HT2 elim (ssta_inv_bind1 … HTU1) -HTU1 #U2 #HTU2 #H destruct - elim (dxprs_inv_abst1 … HTU10) -HTU10 #W0 #U0 #HW0 #_ #H destruct - lapply (cprs_div … HW10 … HW0) -W0 #HW1W + elim (cpds_inv_abst1 … HTU10) -HTU10 #W0 #U0 #HW0 #_ #H destruct + lapply (cprs_div … HW10 … HW0) -W0 #HW12 elim (ssta_fwd_correct … HVW1) (cprs_inv_sort1 … H1) -X #H2 -elim (cprs_fwd_abst1 … H2 Abst W) -H2 #W0 #T0 #_ #_ #H destruct -qed-. - -(* Basic_1: was: pc3_gen_abst *) -lemma cpcs_inv_abst: ∀a1,a2,L,W1,W2,T1,T2. L ⊢ ⓛ{a1}W1.T1 ⬌* ⓛ{a2}W2.T2 → ∀I,V. - ∧∧ L ⊢ W1 ⬌* W2 & L. ②{I}V ⊢ T1 ⬌* T2 & a1 = a2. -#a1 #a2 #L #W1 #W2 #T1 #T2 #H #I #V -elim (cpcs_inv_cprs … H) -H #T #H1 #H2 -elim (cprs_fwd_abst1 … H1 I V) -H1 #W0 #T0 #HW10 #HT10 #H destruct -elim (cprs_fwd_abst1… H2 I V) -H2 #W #T #HW2 #HT2 #H destruct /3 width=3/ -qed-. - -(* Basic_1: was: pc3_gen_abst_shift *) -lemma cpcs_inv_abst_shift: ∀a1,a2,L,W1,W2,T1,T2. L ⊢ ⓛ{a1}W1.T1 ⬌* ⓛ{a2}W2.T2 → ∀W. - ∧∧ L ⊢ W1 ⬌* W2 & L. ⓛW ⊢ T1 ⬌* T2 & a1 = a2. -#a1 #a2 #L #W1 #W2 #T1 #T2 #H #W -lapply (cpcs_inv_abst … H Abst W) -H // -qed. - lemma cpcs_inv_abst1: ∀a,L,W1,T1,T. L ⊢ ⓛ{a}W1.T1 ⬌* T → ∃∃W2,T2. L ⊢ T ➡* ⓛ{a}W2.T2 & L ⊢ ⓛ{a}W1.T1 ➡* ⓛ{a}W2.T2. #a #L #W1 #T1 #T #H elim (cpcs_inv_cprs … H) -H #X #H1 #H2 -elim (cprs_fwd_abst1 … H1 Abst W1) -H1 #W2 #T2 #HW12 #HT12 #H destruct +elim (cprs_inv_abst1 … H1) -H1 #W2 #T2 #HW12 #HT12 #H destruct @(ex2_2_intro … H2) -H2 /2 width=2/ (**) (* explicit constructor, /3 width=6/ is slow *) qed-. @@ -76,6 +52,14 @@ lemma cpcs_inv_abst2: ∀a,L,W1,T1,T. L ⊢ T ⬌* ⓛ{a}W1.T1 → ∃∃W2,T2. L ⊢ T ➡* ⓛ{a}W2.T2 & L ⊢ ⓛ{a}W1.T1 ➡* ⓛ{a}W2.T2. /3 width=1 by cpcs_inv_abst1, cpcs_sym/ qed-. +(* Basic_1: was: pc3_gen_sort_abst *) +lemma cpcs_inv_sort_abst: ∀a,L,W,T,k. L ⊢ ⋆k ⬌* ⓛ{a}W.T → ⊥. +#a #L #W #T #k #H +elim (cpcs_inv_cprs … H) -H #X #H1 +>(cprs_inv_sort1 … H1) -X #H2 +elim (cprs_inv_abst1 … H2) -H2 #W0 #T0 #_ #_ #H destruct +qed-. + (* Basic_1: was: pc3_gen_lift *) lemma cpcs_inv_lift: ∀L,K,d,e. ⇩[d, e] L ≡ K → ∀T1,U1. ⇧[d, e] T1 ≡ U1 → ∀T2,U2. ⇧[d, e] T2 ≡ U2 → @@ -96,6 +80,13 @@ lapply (lpr_cprs_trans … HT1 … HL12) -HT1 lapply (lpr_cprs_trans … HT2 … HL12) -L2 /2 width=3/ qed-. +lemma lprs_cpcs_trans: ∀L1,L2. L1 ⊢ ➡* L2 → ∀T1,T2. L2 ⊢ T1 ⬌* T2 → L1 ⊢ T1 ⬌* T2. +#L1 #L2 #HL12 #T1 #T2 #H +elim (cpcs_inv_cprs … H) -H #T #HT1 #HT2 +lapply (lprs_cprs_trans … HT1 … HL12) -HT1 +lapply (lprs_cprs_trans … HT2 … HL12) -L2 /2 width=3/ +qed-. + lemma cpr_cprs_conf_cpcs: ∀L,T,T1,T2. L ⊢ T ➡* T1 → L ⊢ T ➡ T2 → L ⊢ T1 ⬌* T2. #L #T #T1 #T2 #HT1 #HT2 elim (cprs_strip … HT1 … HT2) /2 width=3 by cpr_cprs_div/ @@ -111,12 +102,20 @@ lemma cprs_conf_cpcs: ∀L,T,T1,T2. L ⊢ T ➡* T1 → L ⊢ T ➡* T2 → L elim (cprs_conf … HT1 … HT2) /2 width=3/ qed-. +lemma lprs_cprs_conf: ∀L1,L2. L1 ⊢ ➡* L2 → ∀T1,T2. L1 ⊢ T1 ➡* T2 → L2 ⊢ T1 ⬌* T2. +#L1 #L2 #HL12 #T1 #T2 #HT12 +elim (lprs_cprs_conf_dx … HT12 … HL12) -L1 /2 width=3/ +qed-. + +(* Basic_1: was: pc3_wcpr0_t *) +(* Basic_1: note: pc3_wcpr0_t should be renamed *) +lemma lpr_cprs_conf: ∀L1,L2. L1 ⊢ ➡ L2 → ∀T1,T2. L1 ⊢ T1 ➡* T2 → L2 ⊢ T1 ⬌* T2. +/3 width=5 by lprs_cprs_conf, lpr_lprs/ qed-. + (* Basic_1: was only: pc3_pr0_pr2_t *) (* Basic_1: note: pc3_pr0_pr2_t should be renamed *) lemma lpr_cpr_conf: ∀L1,L2. L1 ⊢ ➡ L2 → ∀T1,T2. L1 ⊢ T1 ➡ T2 → L2 ⊢ T1 ⬌* T2. -#L1 #L2 #HL12 #T1 #T2 #HT12 -elim (lpr_cpr_conf_dx … HT12 … HL12) -L1 /3 width=3/ -qed-. +/3 width=5 by lpr_cprs_conf, cpr_cprs/ qed-. (* Basic_1: was only: pc3_thin_dx *) lemma cpcs_flat: ∀L,V1,V2. L ⊢ V1 ⬌* V2 → ∀T1,T2. L ⊢ T1 ⬌* T2 → @@ -130,14 +129,6 @@ lemma cpcs_flat_dx_cpr_rev: ∀L,V1,V2. L ⊢ V2 ➡ V1 → ∀T1,T2. L ⊢ T1 ∀I. L ⊢ ⓕ{I}V1. T1 ⬌* ⓕ{I}V2. T2. /3 width=1/ qed. -lemma cpcs_ext_bind: ∀L,V1,V2. L ⊢ V1 ⬌* V2 → ∀V,T1,T2. L.ⓛV ⊢ T1 ⬌* T2 → - ∀a,I. L ⊢ ⓑ{a,I}V1.T1 ⬌* ⓑ{a,I}V2.T2. -#L #V1 #V2 #HV12 #V #T1 #T2 #HT12 #a #I -elim (cpcs_inv_cprs … HV12) -HV12 -elim (cpcs_inv_cprs … HT12) -HT12 -/3 width=6 by cprs_div, cprs_ext_bind/ (**) (* /3 width=6/ is a bit slow *) -qed. - lemma cpcs_bind_dx: ∀a,I,L,V,T1,T2. L.ⓑ{I}V ⊢ T1 ⬌* T2 → L ⊢ ⓑ{a,I}V. T1 ⬌* ⓑ{a,I}V. T2. #a #I #L #V #T1 #T2 #HT12 @@ -149,25 +140,11 @@ lemma cpcs_bind_sn: ∀a,I,L,V1,V2,T. L ⊢ V1 ⬌* V2 → L ⊢ ⓑ{a,I}V1. T elim (cpcs_inv_cprs … HV12) -HV12 /3 width=5 by cprs_div, cprs_bind/ (**) (* /3 width=5/ is a bit slow *) qed. -lemma cpcs_beta_dx_cpr: ∀a,L,V1,V2,W,T1,T2. - L ⊢ V1 ➡ V2 → L.ⓛW ⊢ T1 ⬌* T2 → L ⊢ ⓐV1.ⓛ{a}W.T1 ⬌* ⓓ{a}V2.T2. -#a #L #V1 #V2 #W #T1 #T2 #HV12 #HT12 -elim (cpcs_inv_cprs … HT12) -HT12 #T #HT1 #HT2 -lapply (cprs_beta_dx a … HV12 HT1) -HV12 -HT1 #HT1 -lapply (cprs_lsubr_trans … HT2 (L.ⓓV2) ?) -HT2 /2 width=1/ #HT2 -@(cprs_div … HT1) /2 width=1/ -qed. - -lemma cpcs_beta_dx_rev_cpr: ∀a,L,V1,V2,W,T1,T2. - L ⊢ V1 ➡ V2 → L.ⓛW ⊢ T2 ⬌* T1 → - L ⊢ ⓓ{a}V2.T2 ⬌* ⓐV1.ⓛ{a}W.T1. -/4 width=1/ qed. - -lemma cpcs_lsubr_trans: ∀L1,T1,T2. L1 ⊢ T1 ⬌* T2 → - ∀L2. L2 ⊑ L1 → L2 ⊢ T1 ⬌* T2. +lemma lsubx_cpcs_trans: ∀L1,T1,T2. L1 ⊢ T1 ⬌* T2 → + ∀L2. L2 ⓝ⊑ L1 → L2 ⊢ T1 ⬌* T2. #L1 #T1 #T2 #HT12 elim (cpcs_inv_cprs … HT12) -HT12 -/3 width=5 by cprs_div, cprs_lsubr_trans/ (**) (* /3 width=5/ is a bit slow *) +/3 width=5 by cprs_div, lsubx_cprs_trans/ (**) (* /3 width=5/ is a bit slow *) qed-. (* Basic_1: was: pc3_lift *) @@ -185,6 +162,26 @@ lemma cpcs_strip: ∀L,T1,T. L ⊢ T ⬌* T1 → ∀T2. L ⊢ T ⬌ T2 → ∃∃T0. L ⊢ T1 ⬌ T0 & L ⊢ T2 ⬌* T0. #L #T1 #T @TC_strip1 /2 width=3/ qed-. +(* More inversion lemmas ****************************************************) + +lemma cpcs_inv_abst_sn: ∀a1,a2,L,W1,W2,T1,T2. L ⊢ ⓛ{a1}W1.T1 ⬌* ⓛ{a2}W2.T2 → + ∧∧ L ⊢ W1 ⬌* W2 & L.ⓛW1 ⊢ T1 ⬌* T2 & a1 = a2. +#a1 #a2 #L #W1 #W2 #T1 #T2 #H +elim (cpcs_inv_cprs … H) -H #T #H1 #H2 +elim (cprs_inv_abst1 … H1) -H1 #W0 #T0 #HW10 #HT10 #H destruct +elim (cprs_inv_abst1 … H2) -H2 #W #T #HW2 #HT2 #H destruct +lapply (lprs_cprs_conf … (L.ⓛW) … HT2) /2 width=1/ -HT2 #HT2 +lapply (lprs_cpcs_trans … (L.ⓛW1) … HT2) /2 width=1/ -HT2 #HT2 +/4 width=3 by and3_intro, cprs_div, cpcs_cprs_div, cpcs_sym/ +qed-. + +lemma cpcs_inv_abst_dx: ∀a1,a2,L,W1,W2,T1,T2. L ⊢ ⓛ{a1}W1.T1 ⬌* ⓛ{a2}W2.T2 → + ∧∧ L ⊢ W1 ⬌* W2 & L. ⓛW2 ⊢ T1 ⬌* T2 & a1 = a2. +#a1 #a2 #L #W1 #W2 #T1 #T2 #HT12 +lapply (cpcs_sym … HT12) -HT12 #HT12 +elim (cpcs_inv_abst_sn … HT12) -HT12 /3 width=1/ +qed-. + (* Main properties **********************************************************) (* Basic_1: was pc3_t *) @@ -209,15 +206,23 @@ lemma cpcs_bind2: ∀a,I,L,V1,V2. L ⊢ V1 ⬌* V2 → ∀T1,T2. L.ⓑ{I}V2 ⊢ @(cpcs_trans … (ⓑ{a,I}V2.T1)) /2 width=1/ qed. -(* Basic_1: was: pc3_wcpr0_t *) -(* Basic_1: note: pc3_wcpr0_t should be renamed *) -lemma cprs_lpr_conf: ∀L1,L2. L1 ⊢ ➡ L2 → ∀T1,T2. L1 ⊢ T1 ➡* T2 → L2 ⊢ T1 ⬌* T2. -#L1 #L2 #HL12 #T1 #T2 #H @(cprs_ind … H) -T2 // -/3 width=5 by cpcs_trans, lpr_cpr_conf/ -qed-. +lemma cpcs_beta_dx: ∀a,L,V1,V2,W1,W2,T1,T2. + L ⊢ V1 ⬌* V2 → L ⊢ W1 ⬌* W2 → L.ⓛW2 ⊢ T1 ⬌* T2 → + L ⊢ ⓐV1.ⓛ{a}W1.T1 ⬌* ⓓ{a}ⓝW2.V2.T2. +#a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HW12 #HT12 +@(cpcs_cpr_strap1 … (ⓐV2.ⓛ{a}W2.T2)) /2 width=1/ /3 width=1/ +qed. + +lemma cpcs_beta_sn: ∀a,L,V1,V2,W1,W2,T1,T2. + L ⊢ V1 ⬌* V2 → L ⊢ W1 ⬌* W2 → L.ⓛW1 ⊢ T1 ⬌* T2 → + L ⊢ ⓐV1.ⓛ{a}W1.T1 ⬌* ⓓ{a}ⓝW2.V2.T2. +#a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HW12 #HT12 +lapply (lsubx_cpcs_trans … HT12 (L.ⓓⓝW1.V1) ?) /2 width=1/ #H2T12 +@(cpcs_cpr_strap2 … (ⓓ{a}ⓝW1.V1.T1)) /2 width=1/ -HT12 /3 width=1/ +qed. (* Basic_1: was: pc3_wcpr0 *) -lemma cpcs_lpr_conf: ∀L1,L2. L1 ⊢ ➡ L2 → ∀T1,T2. L1 ⊢ T1 ⬌* T2 → L2 ⊢ T1 ⬌* T2. +lemma lpr_cpcs_conf: ∀L1,L2. L1 ⊢ ➡ L2 → ∀T1,T2. L1 ⊢ T1 ⬌* T2 → L2 ⊢ T1 ⬌* T2. #L1 #L2 #HL12 #T1 #T2 #H -elim (cpcs_inv_cprs … H) -H /3 width=5 by cpcs_canc_dx, cprs_lpr_conf/ +elim (cpcs_inv_cprs … H) -H /3 width=5 by cpcs_canc_dx, lpr_cprs_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_lpss.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_lpss.ma deleted file mode 100644 index 09d29754f..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_lpss.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 "basic_2/computation/cprs_lpss.ma". -include "basic_2/equivalence/cpcs_cpcs.ma". - -(* CONTEXT-SENSITIVE PARALLEL EQUIVALENCE ON TERMS **************************) - -(* Properties on sn parallel substitution for local environments ************) - -lemma cpcs_lpss_conf: ∀L1,T1,T2. L1 ⊢ T1 ⬌* T2 → - ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T1 ⬌* T2. -#L1 #T1 #T2 #H #L2 #HL12 -elim (cpcs_inv_cprs … H) -H #T #HT1 #HT2 -elim (cprs_lpss_conf_dx … HT1 … HL12) -HT1 #U1 #H1 #HTU1 -elim (cprs_lpss_conf_dx … HT2 … HL12) -L1 #U2 #H2 #HTU2 -elim (cpss_conf … H1 … H2) -T #U #HU1 #HU2 -lapply (cprs_cpss_trans … HTU1 … HU1) -U1 -lapply (cprs_cpss_trans … HTU2 … HU2) -U2 /2 width=3/ -qed-. - -lemma cpcs_cpss_lpss_conf: ∀L1,T,T2. L1 ⊢ T ⬌* T2 → ∀T1. L1 ⊢ T ▶* T1 → - ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T1 ⬌* T2. -#L1 #T #T2 #HT2 #T1 #HT1 #L2 #HL12 -lapply (cpcs_lpss_conf … HT2 … HL12) -HT2 #HT2 -elim (lpss_cpss_conf_dx … HT1 … HL12) -L1 #T0 #HT0 #HT10 -lapply (cpcs_cpss_conf … HT0 … HT2) -T #HT02 -lapply (cpcs_cpss_strap2 … HT10 … HT02) -T0 // -qed-. - -lemma cpcs_cpss2_lpss_conf: ∀L1,T1,T2. L1 ⊢ T1 ⬌* T2 → - ∀T3. L1 ⊢ T1 ▶* T3 → ∀T4. L1 ⊢ T2 ▶* T4 → - ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T3 ⬌* T4. -#L1 #T1 #T2 #HT12 #T3 #HT13 #T4 #HT24 #L2 #HL12 -lapply (cpcs_cpss_lpss_conf … HT12 … HT13 … HL12) -T1 #HT32 -elim (lpss_cpss_conf_dx … HT24 … HL12) -L1 #T #HT2 #HT4 -lapply (cpcs_cpss_strap1 … HT32 … HT2) -T2 #HT3 -lapply (cpcs_cpss_div … HT3 … HT4) -T // -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss.ma deleted file mode 100644 index db3d75f52..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss.ma +++ /dev/null @@ -1,114 +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/static/ssta.ma". -include "basic_2/computation/cprs.ma". -include "basic_2/equivalence/cpcs.ma". - -(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) - -(* Note: this is not transitive *) -inductive lsubss (h:sh) (g:sd h): relation lenv ≝ -| lsubss_atom: lsubss h g (⋆) (⋆) -| lsubss_pair: ∀I,L1,L2,V. lsubss h g L1 L2 → - lsubss h g (L1. ⓑ{I} V) (L2. ⓑ{I} V) -| lsubss_abbr: ∀L1,L2,V1,V2,W1,W2,l. L1 ⊢ W1 ⬌* W2 → - ⦃h, L1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ → ⦃h, L2⦄ ⊢ W2 •[g] ⦃l, V2⦄ → - lsubss h g L1 L2 → lsubss h g (L1. ⓓV1) (L2. ⓛW2) -. - -interpretation - "local environment refinement (stratified static type assigment)" - 'CrSubEqS h g L1 L2 = (lsubss h g L1 L2). - -(* Basic inversion lemmas ***************************************************) - -fact lsubss_inv_atom1_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → L1 = ⋆ → L2 = ⋆. -#h #g #L1 #L2 * -L1 -L2 -[ // -| #I #L1 #L2 #V #_ #H destruct -| #L1 #L2 #V1 #V2 #W1 #W2 #l #_ #_ #_ #_ #H destruct -] -qed-. - -lemma lsubss_inv_atom1: ∀h,g,L2. h ⊢ ⋆ •⊑[g] L2 → L2 = ⋆. -/2 width=5 by lsubss_inv_atom1_aux/ qed-. - -fact lsubss_inv_pair1_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → - ∀I,K1,V1. L1 = K1. ⓑ{I} V1 → - (∃∃K2. h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓑ{I} V1) ∨ - ∃∃K2,W1,W2,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓛW2 & I = Abbr. -#h #g #L1 #L2 * -L1 -L2 -[ #J #K1 #U1 #H destruct -| #I #L1 #L2 #V #HL12 #J #K1 #U1 #H destruct /3 width=3/ -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #HL12 #J #K1 #U1 #H destruct /3 width=10/ -] -qed-. - -lemma lsubss_inv_pair1: ∀h,g,I,K1,L2,V1. h ⊢ K1. ⓑ{I} V1 •⊑[g] L2 → - (∃∃K2. h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓑ{I} V1) ∨ - ∃∃K2,W1,W2,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓛW2 & I = Abbr. -/2 width=3 by lsubss_inv_pair1_aux/ qed-. - -fact lsubss_inv_atom2_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → L2 = ⋆ → L1 = ⋆. -#h #g #L1 #L2 * -L1 -L2 -[ // -| #I #L1 #L2 #V #_ #H destruct -| #L1 #L2 #V1 #V2 #W1 #W2 #l #_ #_ #_ #_ #H destruct -] -qed-. - -lemma lsubss_inv_atom2: ∀h,g,L1. h ⊢ L1 •⊑[g] ⋆ → L1 = ⋆. -/2 width=5 by lsubss_inv_atom2_aux/ qed-. - -fact lsubss_inv_pair2_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → - ∀I,K2,W2. L2 = K2. ⓑ{I} W2 → - (∃∃K1. h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓑ{I} W2) ∨ - ∃∃K1,W1,V1,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓓV1 & I = Abst. -#h #g #L1 #L2 * -L1 -L2 -[ #J #K2 #U2 #H destruct -| #I #L1 #L2 #V #HL12 #J #K2 #U2 #H destruct /3 width=3/ -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #HL12 #J #K2 #U2 #H destruct /3 width=10/ -] -qed-. - -lemma lsubss_inv_pair2: ∀h,g,I,L1,K2,W2. h ⊢ L1 •⊑[g] K2. ⓑ{I} W2 → - (∃∃K1. h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓑ{I} W2) ∨ - ∃∃K1,W1,V1,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & - K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓓV1 & I = Abst. -/2 width=3 by lsubss_inv_pair2_aux/ qed-. - -(* Basic_forward lemmas *****************************************************) - -lemma lsubss_fwd_lsubr1: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → L1 ⊑ L2. -#h #g #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ -qed-. - -lemma lsubss_fwd_lsubr2: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → L1 ⊑ L2. -#h #g #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ -qed-. - -(* Basic properties *********************************************************) - -lemma lsubss_refl: ∀h,g,L. h ⊢ L •⊑[g] L. -#h #g #L elim L -L // /2 width=1/ -qed. - -lemma lsubss_cprs_trans: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → - ∀T1,T2. L2 ⊢ T1 ➡* T2 → L1 ⊢ T1 ➡* T2. -/3 width=5 by lsubss_fwd_lsubr2, cprs_lsubr_trans/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_cpcs.ma deleted file mode 100644 index cbddc65e9..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_cpcs.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 "basic_2/equivalence/cpcs_cpcs.ma". -include "basic_2/equivalence/lsubss.ma". - -(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) - -(* Properties on context-sensitive parallel equivalence for terms ***********) - -lemma lsubss_cpcs_trans: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → - ∀T1,T2. L2 ⊢ T1 ⬌* T2 → L1 ⊢ T1 ⬌* T2. -/3 width=5 by lsubss_fwd_lsubr2, cpcs_lsubr_trans/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_ldrop.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_ldrop.ma deleted file mode 100644 index 1f19a066e..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_ldrop.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/equivalence/lsubss.ma". - -(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) - -(* Properties concerning basic local environment slicing ********************) - -(* Note: the constant 0 cannot be generalized *) -lemma lsubss_ldrop_O1_conf: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → - ∀K1,e. ⇩[0, e] L1 ≡ K1 → - ∃∃K2. h ⊢ K1 •⊑[g] K2 & ⇩[0, e] L2 ≡ K2. -#h #g #L1 #L2 #H elim H -L1 -L2 -[ /2 width=3/ -| #I #L1 #L2 #V #_ #IHL12 #K1 #e #H - elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK1 - [ destruct - elim (IHL12 L1 0 ?) -IHL12 // #X #HL12 #H - <(ldrop_inv_O2 … H) in HL12; -H /3 width=3/ - | elim (IHL12 … HLK1) -L1 /3 width=3/ - ] -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #_ #IHL12 #K1 #e #H - elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK1 - [ destruct - elim (IHL12 L1 0 ?) -IHL12 // #X #HL12 #H - <(ldrop_inv_O2 … H) in HL12; -H /3 width=6/ - | elim (IHL12 … HLK1) -L1 /3 width=3/ - ] -] -qed-. - -(* Note: the constant 0 cannot be generalized *) -lemma lsubss_ldrop_O1_trans: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → - ∀K2,e. ⇩[0, e] L2 ≡ K2 → - ∃∃K1. h ⊢ K1 •⊑[g] K2 & ⇩[0, e] L1 ≡ K1. -#h #g #L1 #L2 #H elim H -L1 -L2 -[ /2 width=3/ -| #I #L1 #L2 #V #_ #IHL12 #K2 #e #H - elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK2 - [ destruct - elim (IHL12 L2 0 ?) -IHL12 // #X #HL12 #H - <(ldrop_inv_O2 … H) in HL12; -H /3 width=3/ - | elim (IHL12 … HLK2) -L2 /3 width=3/ - ] -| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #_ #IHL12 #K2 #e #H - elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK2 - [ destruct - elim (IHL12 L2 0 ?) -IHL12 // #X #HL12 #H - <(ldrop_inv_O2 … H) in HL12; -H /3 width=6/ - | elim (IHL12 … HLK2) -L2 /3 width=3/ - ] -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_ssta.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_ssta.ma deleted file mode 100644 index 0fe035dbb..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/lsubss_ssta.ma +++ /dev/null @@ -1,54 +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/static/ssta_ssta.ma". -include "basic_2/equivalence/cpcs_cpcs.ma". -include "basic_2/equivalence/lsubss_ldrop.ma". - -(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) - -(* Properties on stratified native type assignment **************************) - -lemma lsubss_ssta_trans: ∀h,g,L2,T,U2,l. ⦃h, L2⦄ ⊢ T •[g] ⦃l, U2⦄ → - ∀L1. h ⊢ L1 •⊑[g] L2 → - ∃∃U1. ⦃h, L1⦄ ⊢ T •[g] ⦃l, U1⦄ & L1 ⊢ U1 ⬌* U2. -#h #g #L2 #T #U #l #H elim H -L2 -T -U -l -[ /3 width=3/ -| #L2 #K2 #V2 #W2 #U2 #i #l #HLK2 #_ #HWU2 #IHVW2 #L1 #HL12 - elim (lsubss_ldrop_O1_trans … HL12 … HLK2) -L2 #X #H #HLK1 - elim (lsubss_inv_pair2 … H) -H * #K1 [ | -HWU2 -IHVW2 -HLK1 ] - [ #HK12 #H destruct - elim (IHVW2 … HK12) -K2 #T2 #HVT2 #HTW2 - lapply (ldrop_fwd_ldrop2 … HLK1) #H - elim (lift_total T2 0 (i+1)) /3 width=11/ - | #W1 #V1 #W2 #l0 #_ #_ #_ #_ #_ #H destruct - ] -| #L2 #K2 #W2 #V2 #U2 #i #l #HLK2 #HWV2 #HWU2 #IHWV2 #L1 #HL12 - elim (lsubss_ldrop_O1_trans … HL12 … HLK2) -L2 #X #H #HLK1 - elim (lsubss_inv_pair2 … H) -H * #K1 [ -HWV2 | -IHWV2 ] - [ #HK12 #H destruct - elim (IHWV2 … HK12) -K2 /3 width=6/ - | #W1 #V1 #T2 #l0 #HVW1 #HWT2 #HW12 #_ #H #_ destruct - elim (ssta_mono … HWV2 … HWT2) -HWV2 -HWT2 #H1 #H2 destruct - lapply (ldrop_fwd_ldrop2 … HLK1) #H - elim (lift_total W1 0 (i+1)) /3 width=11/ - ] -| #a #I #L2 #V2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 - elim (IHTU2 (L1.ⓑ{I}V2) …) [2: /2 width=1/ ] -L2 /3 width=3/ -| #L2 #V2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 - elim (IHTU2 … HL12) -L2 /3 width=5/ -| #L2 #W2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 - elim (IHTU2 … HL12) -L2 /3 width=3/ -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/cpr/aaa_ltpss_dx.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/cpr/aaa_ltpss_dx.etc index 2f2d07360..9319cc40e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/etc/cpr/aaa_ltpss_dx.etc +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/cpr/aaa_ltpss_dx.etc @@ -20,7 +20,6 @@ include "basic_2/static/aaa_lift.ma". (* Properties about dx parallel unfold **************************************) -(* Note: lemma 500 *) lemma aaa_ltpss_dx_tpss_conf: ∀L1,T1,A. L1 ⊢ T1 ⁝ A → ∀L2,d,e. L1 ▶* [d, e] L2 → ∀T2. L2 ⊢ T1 ▶* [d, e] T2 → L2 ⊢ T2 ⁝ A. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/aaa_lpss.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/aaa_lpss.etc new file mode 100644 index 000000000..e930823ad --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/aaa_lpss.etc @@ -0,0 +1,54 @@ +(**************************************************************************) +(* ___ *) +(* ||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/substitution/lpss_ldrop.ma". +include "basic_2/static/aaa_lift.ma". + +(* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) + +(* Properties about sn parallel substitution ********************************) + +(* Note: lemma 500 *) +lemma aaa_cpss_lpss_conf: ∀L1,T1,A. L1 ⊢ T1 ⁝ A → ∀T2. L1 ⊢ T1 ▶* T2 → + ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T2 ⁝ A. +#L1 #T1 #A #H elim H -L1 -T1 -A +[ #L1 #k #X #H + >(cpss_inv_sort1 … H) -H // +| #I #L1 #K1 #V1 #B #i #HLK1 #_ #IHV1 #X #H #L2 #HL12 + elim (cpss_inv_lref1 … H) -H + [ #H destruct + elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #X #H #HLK2 + elim (lpss_inv_pair1 … H) -H #K2 #V2 #HK12 #HV12 #H destruct /3 width=6/ + | * #Y #Z #V2 #H #HV12 #HV2 + lapply (ldrop_mono … H … HLK1) -H #H destruct + elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #Z #H #HLK2 + elim (lpss_inv_pair1 … H) -H #K2 #V0 #HK12 #_ #H destruct + lapply (ldrop_fwd_ldrop2 … HLK2) -V0 /3 width=7/ + ] +| #a #L1 #V1 #T1 #B #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 + elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /4 width=2/ +| #a #L1 #V1 #T1 #B #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 + elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /4 width=1/ +| #L1 #V1 #T1 #B #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 + elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /3 width=3/ +| #L1 #V1 #T1 #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 + elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /3 width=1/ +] +qed-. + +lemma aaa_cpss_conf: ∀L,T1,A. L ⊢ T1 ⁝ A → ∀T2. L ⊢ T1 ▶* T2 → L ⊢ T2 ⁝ A. +/2 width=5 by aaa_cpss_lpss_conf/ qed-. + +lemma aaa_lpss_conf: ∀L1,T,A. L1 ⊢ T ⁝ A → ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T ⁝ A. +/2 width=5 by aaa_cpss_lpss_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpcs_lpss.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpcs_lpss.etc new file mode 100644 index 000000000..09d29754f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpcs_lpss.etc @@ -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 "basic_2/computation/cprs_lpss.ma". +include "basic_2/equivalence/cpcs_cpcs.ma". + +(* CONTEXT-SENSITIVE PARALLEL EQUIVALENCE ON TERMS **************************) + +(* Properties on sn parallel substitution for local environments ************) + +lemma cpcs_lpss_conf: ∀L1,T1,T2. L1 ⊢ T1 ⬌* T2 → + ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T1 ⬌* T2. +#L1 #T1 #T2 #H #L2 #HL12 +elim (cpcs_inv_cprs … H) -H #T #HT1 #HT2 +elim (cprs_lpss_conf_dx … HT1 … HL12) -HT1 #U1 #H1 #HTU1 +elim (cprs_lpss_conf_dx … HT2 … HL12) -L1 #U2 #H2 #HTU2 +elim (cpss_conf … H1 … H2) -T #U #HU1 #HU2 +lapply (cprs_cpss_trans … HTU1 … HU1) -U1 +lapply (cprs_cpss_trans … HTU2 … HU2) -U2 /2 width=3/ +qed-. + +lemma cpcs_cpss_lpss_conf: ∀L1,T,T2. L1 ⊢ T ⬌* T2 → ∀T1. L1 ⊢ T ▶* T1 → + ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T1 ⬌* T2. +#L1 #T #T2 #HT2 #T1 #HT1 #L2 #HL12 +lapply (cpcs_lpss_conf … HT2 … HL12) -HT2 #HT2 +elim (lpss_cpss_conf_dx … HT1 … HL12) -L1 #T0 #HT0 #HT10 +lapply (cpcs_cpss_conf … HT0 … HT2) -T #HT02 +lapply (cpcs_cpss_strap2 … HT10 … HT02) -T0 // +qed-. + +lemma cpcs_cpss2_lpss_conf: ∀L1,T1,T2. L1 ⊢ T1 ⬌* T2 → + ∀T3. L1 ⊢ T1 ▶* T3 → ∀T4. L1 ⊢ T2 ▶* T4 → + ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T3 ⬌* T4. +#L1 #T1 #T2 #HT12 #T3 #HT13 #T4 #HT24 #L2 #HL12 +lapply (cpcs_cpss_lpss_conf … HT12 … HT13 … HL12) -T1 #HT32 +elim (lpss_cpss_conf_dx … HT24 … HL12) -L1 #T #HT2 #HT4 +lapply (cpcs_cpss_strap1 … HT32 … HT2) -T2 #HT3 +lapply (cpcs_cpss_div … HT3 … HT4) -T // +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpqs.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpqs.etc new file mode 100644 index 000000000..41120361a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpqs.etc @@ -0,0 +1,227 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +notation "hvbox( L ⊢ break term 46 T1 ➤ * break term 46 T2 )" + non associative with precedence 45 + for @{ 'PRestStar $L $T1 $T2 }. + +include "basic_2/substitution/cpss.ma". + +(* CONTEXT-SENSITIVE RESTRICTED PARALLEL COMPUTATION FOR TERMS **************) + +inductive cpqs: lenv → relation term ≝ +| cpqs_atom : ∀I,L. cpqs L (⓪{I}) (⓪{I}) +| cpqs_delta: ∀L,K,V,V2,W2,i. + ⇩[0, i] L ≡ K. ⓓV → cpqs K V V2 → + ⇧[0, i + 1] V2 ≡ W2 → cpqs L (#i) W2 +| cpqs_bind : ∀a,I,L,V1,V2,T1,T2. + cpqs L V1 V2 → cpqs (L. ⓑ{I} V1) T1 T2 → + cpqs L (ⓑ{a,I} V1. T1) (ⓑ{a,I} V2. T2) +| cpqs_flat : ∀I,L,V1,V2,T1,T2. + cpqs L V1 V2 → cpqs L T1 T2 → + cpqs L (ⓕ{I} V1. T1) (ⓕ{I} V2. T2) +| cpqs_zeta : ∀L,V,T1,T,T2. cpqs (L.ⓓV) T1 T → + ⇧[0, 1] T2 ≡ T → cpqs L (+ⓓV. T1) T2 +| cpqs_tau : ∀L,V,T1,T2. cpqs L T1 T2 → cpqs L (ⓝV. T1) T2 +. + +interpretation "context-sensitive restricted parallel computation (term)" + 'PRestStar L T1 T2 = (cpqs L T1 T2). + +(* Basic properties *********************************************************) + +lemma cpqs_lsubr_trans: lsub_trans … cpqs lsubr. +#L1 #T1 #T2 #H elim H -L1 -T1 -T2 +[ // +| #L1 #K1 #V1 #V2 #W2 #i #HLK1 #_ #HVW2 #IHV12 #L2 #HL12 + elim (lsubr_fwd_ldrop2_abbr … HL12 … HLK1) -HL12 -HLK1 /3 width=6/ +| /4 width=1/ +|4,6: /3 width=1/ +| /4 width=3/ +] +qed-. + +lemma cpss_cpqs: ∀L,T1,T2. L ⊢ T1 ▶* T2 → L ⊢ T1 ➤* T2. +#L #T1 #T2 #H elim H -L -T1 -T2 // /2 width=1/ /2 width=6/ +qed. + +lemma cpqs_refl: ∀T,L. L ⊢ T ➤* T. +/2 width=1/ qed. + +lemma cpqs_delift: ∀L,K,V,T1,d. ⇩[0, d] L ≡ (K. ⓓV) → + ∃∃T2,T. L ⊢ T1 ➤* T2 & ⇧[d, 1] T ≡ T2. +#L #K #V #T1 #d #HLK +elim (cpss_delift … T1 … HLK) -HLK /3 width=4/ +qed-. + +lemma cpqs_append: l_appendable_sn … cpqs. +#K #T1 #T2 #H elim H -K -T1 -T2 // /2 width=1/ /2 width=3/ +#K #K0 #V1 #V2 #W2 #i #HK0 #_ #HVW2 #IHV12 #L +lapply (ldrop_fwd_length_lt2 … HK0) #H +@(cpqs_delta … (L@@K0) V1 … HVW2) // +@(ldrop_O1_append_sn_le … HK0) /2 width=2/ (**) (* /3/ does not work *) +qed. + +(* Basic inversion lemmas ***************************************************) + +fact cpqs_inv_atom1_aux: ∀L,T1,T2. L ⊢ T1 ➤* T2 → ∀I. T1 = ⓪{I} → + T2 = ⓪{I} ∨ + ∃∃K,V,V2,i. ⇩[O, i] L ≡ K. ⓓV & + K ⊢ V ➤* V2 & + ⇧[O, i + 1] V2 ≡ T2 & + I = LRef i. +#L #T1 #T2 * -L -T1 -T2 +[ #I #L #J #H destruct /2 width=1/ +| #L #K #V #V2 #T2 #i #HLK #HV2 #HVT2 #J #H destruct /3 width=8/ +| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #H destruct +| #I #L #V1 #V2 #T1 #T2 #_ #_ #J #H destruct +| #L #V #T1 #T #T2 #_ #_ #J #H destruct +| #L #V #T1 #T2 #_ #J #H destruct +] +qed-. + +lemma cpqs_inv_atom1: ∀I,L,T2. L ⊢ ⓪{I} ➤* T2 → + T2 = ⓪{I} ∨ + ∃∃K,V,V2,i. ⇩[O, i] L ≡ K. ⓓV & + K ⊢ V ➤* V2 & + ⇧[O, i + 1] V2 ≡ T2 & + I = LRef i. +/2 width=3 by cpqs_inv_atom1_aux/ qed-. + +lemma cpqs_inv_sort1: ∀L,T2,k. L ⊢ ⋆k ➤* T2 → T2 = ⋆k. +#L #T2 #k #H +elim (cpqs_inv_atom1 … H) -H // +* #K #V #V2 #i #_ #_ #_ #H destruct +qed-. + +lemma cpqs_inv_lref1: ∀L,T2,i. L ⊢ #i ➤* T2 → + T2 = #i ∨ + ∃∃K,V,V2. ⇩[O, i] L ≡ K. ⓓV & + K ⊢ V ➤* V2 & + ⇧[O, i + 1] V2 ≡ T2. +#L #T2 #i #H +elim (cpqs_inv_atom1 … H) -H /2 width=1/ +* #K #V #V2 #j #HLK #HV2 #HVT2 #H destruct /3 width=6/ +qed-. + +lemma cpqs_inv_gref1: ∀L,T2,p. L ⊢ §p ➤* T2 → T2 = §p. +#L #T2 #p #H +elim (cpqs_inv_atom1 … H) -H // +* #K #V #V2 #i #_ #_ #_ #H destruct +qed-. + +fact cpqs_inv_bind1_aux: ∀L,U1,U2. L ⊢ U1 ➤* U2 → + ∀a,I,V1,T1. U1 = ⓑ{a,I} V1. T1 → ( + ∃∃V2,T2. L ⊢ V1 ➤* V2 & + L. ⓑ{I} V1 ⊢ T1 ➤* T2 & + U2 = ⓑ{a,I} V2. T2 + ) ∨ + ∃∃T. L.ⓓV1 ⊢ T1 ➤* T & ⇧[0, 1] U2 ≡ T & a = true & I = Abbr. +#L #U1 #U2 * -L -U1 -U2 +[ #I #L #b #J #W1 #U1 #H destruct +| #L #K #V #V2 #W2 #i #_ #_ #_ #b #J #W1 #U1 #H destruct +| #a #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #b #J #W1 #U1 #H destruct /3 width=5/ +| #I #L #V1 #V2 #T1 #T2 #_ #_ #b #J #W1 #U1 #H destruct +| #L #V #T1 #T #T2 #HT1 #HT2 #b #J #W1 #U1 #H destruct /3 width=3/ +| #L #V #T1 #T2 #_ #b #J #W1 #U1 #H destruct +] +qed-. + +lemma cpqs_inv_bind1: ∀a,I,L,V1,T1,U2. L ⊢ ⓑ{a,I} V1. T1 ➤* U2 → ( + ∃∃V2,T2. L ⊢ V1 ➤* V2 & + L. ⓑ{I} V1 ⊢ T1 ➤* T2 & + U2 = ⓑ{a,I} V2. T2 + ) ∨ + ∃∃T. L.ⓓV1 ⊢ T1 ➤* T & ⇧[0, 1] U2 ≡ T & a = true & I = Abbr. +/2 width=3 by cpqs_inv_bind1_aux/ qed-. + +lemma cpqs_inv_abbr1: ∀a,L,V1,T1,U2. L ⊢ ⓓ{a} V1. T1 ➤* U2 → ( + ∃∃V2,T2. L ⊢ V1 ➤* V2 & + L. ⓓ V1 ⊢ T1 ➤* T2 & + U2 = ⓓ{a} V2. T2 + ) ∨ + ∃∃T. L.ⓓV1 ⊢ T1 ➤* T & ⇧[0, 1] U2 ≡ T & a = true. +#a #L #V1 #T1 #U2 #H +elim (cpqs_inv_bind1 … H) -H * /3 width=3/ /3 width=5/ +qed-. + +lemma cpqs_inv_abst1: ∀a,L,V1,T1,U2. L ⊢ ⓛ{a} V1. T1 ➤* U2 → + ∃∃V2,T2. L ⊢ V1 ➤* V2 & + L. ⓛ V1 ⊢ T1 ➤* T2 & + U2 = ⓛ{a} V2. T2. +#a #L #V1 #T1 #U2 #H +elim (cpqs_inv_bind1 … H) -H * +[ /3 width=5/ +| #T #_ #_ #_ #H destruct +] +qed-. + +fact cpqs_inv_flat1_aux: ∀L,U1,U2. L ⊢ U1 ➤* U2 → + ∀I,V1,T1. U1 = ⓕ{I} V1. T1 → ( + ∃∃V2,T2. L ⊢ V1 ➤* V2 & L ⊢ T1 ➤* T2 & + U2 = ⓕ{I} V2. T2 + ) ∨ + (L ⊢ T1 ➤* U2 ∧ I = Cast). +#L #U1 #U2 * -L -U1 -U2 +[ #I #L #J #W1 #U1 #H destruct +| #L #K #V #V2 #W2 #i #_ #_ #_ #J #W1 #U1 #H destruct +| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #W1 #U1 #H destruct +| #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #J #W1 #U1 #H destruct /3 width=5/ +| #L #V #T1 #T #T2 #_ #_ #J #W1 #U1 #H destruct +| #L #V #T1 #T2 #HT12 #J #W1 #U1 #H destruct /3 width=1/ +] +qed-. + +lemma cpqs_inv_flat1: ∀I,L,V1,T1,U2. L ⊢ ⓕ{I} V1. T1 ➤* U2 → ( + ∃∃V2,T2. L ⊢ V1 ➤* V2 & L ⊢ T1 ➤* T2 & + U2 = ⓕ{I} V2. T2 + ) ∨ + (L ⊢ T1 ➤* U2 ∧ I = Cast). +/2 width=3 by cpqs_inv_flat1_aux/ qed-. + +lemma cpqs_inv_appl1: ∀L,V1,T1,U2. L ⊢ ⓐ V1. T1 ➤* U2 → + ∃∃V2,T2. L ⊢ V1 ➤* V2 & L ⊢ T1 ➤* T2 & + U2 = ⓐ V2. T2. +#L #V1 #T1 #U2 #H elim (cpqs_inv_flat1 … H) -H * +[ /3 width=5/ +| #_ #H destruct +] +qed-. + +lemma cpqs_inv_cast1: ∀L,V1,T1,U2. L ⊢ ⓝ V1. T1 ➤* U2 → ( + ∃∃V2,T2. L ⊢ V1 ➤* V2 & L ⊢ T1 ➤* T2 & + U2 = ⓝ V2. T2 + ) ∨ + L ⊢ T1 ➤* U2. +#L #V1 #T1 #U2 #H elim (cpqs_inv_flat1 … H) -H * /2 width=1/ /3 width=5/ +qed-. + +(* Basic forward lemmas *****************************************************) + +lemma cpqs_fwd_shift1: ∀L1,L,T1,T. L ⊢ L1 @@ T1 ➤* T → + ∃∃L2,T2. |L1| = |L2| & T = L2 @@ T2. +#L1 @(lenv_ind_dx … L1) -L1 normalize +[ #L #T1 #T #HT1 + @(ex2_2_intro … (⋆)) // (**) (* explicit constructor *) +| #I #L1 #V1 #IH #L #T1 #X + >shift_append_assoc normalize #H + elim (cpqs_inv_bind1 … H) -H * + [ #V0 #T0 #_ #HT10 #H destruct + elim (IH … HT10) -IH -HT10 #L2 #T2 #HL12 #H destruct + >append_length >HL12 -HL12 + @(ex2_2_intro … (⋆.ⓑ{I}V0@@L2) T2) [ >append_length ] // /2 width=3/ (**) (* explicit constructor *) + | #T #_ #_ #H destruct + ] +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpqs_lift.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpqs_lift.etc new file mode 100644 index 000000000..78529b6b1 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpqs_lift.etc @@ -0,0 +1,81 @@ +(**************************************************************************) +(* ___ *) +(* ||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/relocation/ldrop_ldrop.ma". +include "basic_2/unfold/cpqs.ma". + +(* CONTEXT-SENSITIVE RESTRICTED PARALLEL COMPUTATION FOR TERMS **************) + +(* Relocation properties ****************************************************) + +lemma cpqs_lift: l_liftable cpqs. +#K #T1 #T2 #H elim H -K -T1 -T2 +[ #I #K #L #d #e #_ #U1 #H1 #U2 #H2 + >(lift_mono … H1 … H2) -H1 -H2 // +| #K #KV #V #V2 #W2 #i #HKV #HV2 #HVW2 #IHV2 #L #d #e #HLK #U1 #H #U2 #HWU2 + elim (lift_inv_lref1 … H) * #Hid #H destruct + [ elim (lift_trans_ge … HVW2 … HWU2) -W2 // plus_plus_comm_23 #HVU2 + lapply (ldrop_trans_ge_comm … HLK … HKV ?) -K // -Hid /3 width=6/ + ] +| #a #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 + elim (lift_inv_bind1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct + elim (lift_inv_bind1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /4 width=5/ +| #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 + elim (lift_inv_flat1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct + elim (lift_inv_flat1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /3 width=6/ +| #K #V #T1 #T #T2 #_ #HT2 #IHT1 #L #d #e #HLK #U1 #H #U2 #HTU2 + elim (lift_inv_bind1 … H) -H #VV1 #TT1 #HVV1 #HTT1 #H destruct + elim (lift_conf_O1 … HTU2 … HT2) -T2 /4 width=5/ +| #K #V #T1 #T2 #_ #IHT12 #L #d #e #HLK #U1 #H #U2 #HTU2 + elim (lift_inv_flat1 … H) -H #VV1 #TT1 #HVV1 #HTT1 #H destruct /3 width=5/ +] +qed. + +lemma cpqs_inv_lift1: l_deliftable_sn cpqs. +#L #U1 #U2 #H elim H -L -U1 -U2 +[ * #L #i #K #d #e #_ #T1 #H + [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3/ + | elim (lift_inv_lref2 … H) -H * #Hid #H destruct /3 width=3/ + | lapply (lift_inv_gref2 … H) -H #H destruct /2 width=3/ + ] +| #L #LV #V #V2 #W2 #i #HLV #HV2 #HVW2 #IHV2 #K #d #e #HLK #T1 #H + elim (lift_inv_lref2 … H) -H * #Hid #H destruct + [ elim (ldrop_conf_lt … HLK … HLV) -L // #L #U #HKL #HLV #HUV + elim (IHV2 … HLV … HUV) -V #U2 #HUV2 #HU2 + elim (lift_trans_le … HUV2 … HVW2) -V2 // >minus_plus plus_minus // shift_append_assoc normalize #H + elim (cpss_inv_bind1 … H) -H + #V0 #T0 #_ #HT10 #H destruct + elim (IH … HT10) -IH -HT10 #L2 #T2 #HL12 #H destruct + >append_length >HL12 -HL12 + @(ex2_2_intro … (⋆.ⓑ{I}V0@@L2) T2) [ >append_length ] // /2 width=3/ (**) (* explicit constructor *) +] +qed-. + +(* Basic_1: removed theorems 27: + subst0_gen_sort subst0_gen_lref subst0_gen_head subst0_gen_lift_lt + subst0_gen_lift_false subst0_gen_lift_ge subst0_refl subst0_trans + subst0_lift_lt subst0_lift_ge subst0_lift_ge_S subst0_lift_ge_s + subst0_subst0 subst0_subst0_back subst0_weight_le subst0_weight_lt + subst0_confluence_neq subst0_confluence_eq subst0_tlt_head + subst0_confluence_lift subst0_tlt + subst1_head subst1_gen_head subst1_lift_S subst1_confluence_lift + subst1_gen_lift_eq subst1_confluence_neq +*) diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpss_lift.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpss_lift.etc new file mode 100644 index 000000000..9745b6cde --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/cpss_lift.etc @@ -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/relocation/ldrop_ldrop.ma". +include "basic_2/substitution/cpss.ma". + +(* CONTEXT-SENSITIVE PARALLEL SUBSTITUTION FOR TERMS ************************) + +(* Relocation properties ****************************************************) + +(* Basic_1: was only: subst1_lift_lt subst1_lift_ge *) +lemma cpss_lift: l_liftable cpss. +#K #T1 #T2 #H elim H -K -T1 -T2 +[ #I #K #L #d #e #_ #U1 #H1 #U2 #H2 + >(lift_mono … H1 … H2) -H1 -H2 // +| #K #KV #V #V2 #W2 #i #HKV #HV2 #HVW2 #IHV2 #L #d #e #HLK #U1 #H #U2 #HWU2 + elim (lift_inv_lref1 … H) * #Hid #H destruct + [ elim (lift_trans_ge … HVW2 … HWU2) -W2 // plus_plus_comm_23 #HVU2 + lapply (ldrop_trans_ge_comm … HLK … HKV ?) -K // -Hid /3 width=6/ + ] +| #a #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 + elim (lift_inv_bind1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct + elim (lift_inv_bind1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /4 width=5/ +| #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 + elim (lift_inv_flat1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct + elim (lift_inv_flat1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /3 width=6/ +] +qed. + +(* Basic_1: was only: subst1_gen_lift_lt subst1_gen_lift_ge *) +lemma cpss_inv_lift1: l_deliftable_sn cpss. +#L #U1 #U2 #H elim H -L -U1 -U2 +[ * #L #i #K #d #e #_ #T1 #H + [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3/ + | elim (lift_inv_lref2 … H) -H * #Hid #H destruct /3 width=3/ + | lapply (lift_inv_gref2 … H) -H #H destruct /2 width=3/ + ] +| #L #LV #V #V2 #W2 #i #HLV #HV2 #HVW2 #IHV2 #K #d #e #HLK #T1 #H + elim (lift_inv_lref2 … H) -H * #Hid #H destruct + [ elim (ldrop_conf_lt … HLK … HLV) -L // #L #U #HKL #HLV #HUV + elim (IHV2 … HLV … HUV) -V #U2 #HUV2 #HU2 + elim (lift_trans_le … HUV2 … HVW2) -V2 // >minus_plus plus_minus // shift_append_assoc #H shift_append_assoc #H (cpss_inv_sort1 … H) -X // +| #I #L1 #K1 #V1 #i #HLK1 #_ #IHV1 #W2 #H #L2 #HL12 + elim (cpss_inv_lref1 … H) -H + [ #H destruct + elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #X #H #HLK2 + elim (lpss_inv_pair1 … H) -H #K2 #V2 #HK12 #HV12 #H destruct + lapply (IHV1 … HV12 … HK12) -IHV1 -HV12 -HK12 /2 width=5/ + | * #K0 #V0 #V2 #HLK0 #HV12 #HVW2 + lapply (ldrop_mono … HLK0 … HLK1) -HLK0 #H destruct + elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #X #H #HLK2 + elim (lpss_inv_pair1 … H) -H #K2 #V #HK12 #_ #H destruct + lapply (ldrop_fwd_ldrop2 … HLK2) -V #HLK2 + lapply (IHV1 … HV12 … HK12) -IHV1 -HV12 -HK12 /2 width=7/ + ] +| #a #I #L1 #V1 #T1 #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 + elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct + lapply (IHV1 … HV12 … HL12) -IHV1 #HV2 + lapply (IHT1 … HT12 (L2.ⓑ{I}V2) ?) -IHT1 -HT12 /2 width=1/ +| #a #L1 #V1 #W1 #W0 #T1 #U1 #l #_ #_ #HVW1 #HW10 #HTU1 #IHV1 #IHT1 #X #H #L2 #HL12 + elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct + lapply (IHV1 … HV12 … HL12) -IHV1 #HV2 + lapply (IHT1 … HT12 … HL12) -IHT1 #HT2 + elim (ssta_cpss_lpss_conf … HVW1 … HV12 … HL12) -V1 #W2 #HVW2 #HW12 + elim (dxprs_cpss_lpss_conf … HTU1 … HT12 … HL12) -T1 #X #HTU2 #H + elim (cpss_inv_bind1 … H) -H #W #U2 #HW0 #_ #H -U1 destruct + elim (cprs_cpss2_lpss_conf_dx … HW10 … HW12 … HW0 … HL12) -L1 -W1 -W0 #W0 #HW20 #HW0 + lapply (dxprs_strap1 … (ⓛ{a}W0.U2) HTU2 ?) -HTU2 /3 width=3/ -HW0 /2 width=8/ +| #L1 #W1 #T1 #U1 #l #_ #_ #HTU1 #HUW1 #IHW1 #IHT1 #X #H #L2 #HL12 + elim (cpss_inv_flat1 … H) -H #W2 #T2 #HW12 #HT12 #H destruct + lapply (IHW1 … HW12 … HL12) -IHW1 #HW2 + lapply (IHT1 … HT12 … HL12) -IHT1 #HT2 + elim (ssta_cpss_lpss_conf … HTU1 … HT12 … HL12) -T1 #U2 #HTU2 #HU12 + lapply (cpcs_cpss2_lpss_conf … HUW1 … HU12 … HW12 … HL12) -L1 -W1 -U1 /2 width=4/ +] +qed-. + +lemma snv_lpss_conf: ∀h,g,L1,T. ⦃h, L1⦄ ⊢ T ¡[g] → + ∀L2. L1 ⊢ ▶* L2 → ⦃h, L2⦄ ⊢ T ¡[g]. +#h #g #L1 #T #HT #L2 #HL12 +@(snv_cpss_lpss_conf … HT … HL12) // +qed-. + +lemma snv_cpss_conf: ∀h,g,L,T1. ⦃h, L⦄ ⊢ T1 ¡[g] → + ∀T2. L ⊢ T1 ▶* T2 → ⦃h, L⦄ ⊢ T2 ¡[g]. +#h #g #L #T1 #HT1 #T2 #HT12 +@(snv_cpss_lpss_conf … HT1 … HT12) // +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/ssta_lpss.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/ssta_lpss.etc new file mode 100644 index 000000000..7471b2304 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/ssta_lpss.etc @@ -0,0 +1,81 @@ +(**************************************************************************) +(* ___ *) +(* ||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/substitution/lpss_ldrop.ma". +include "basic_2/static/ssta_lift.ma". + +(* STRATIFIED STATIC TYPE ASSIGNMENT ON TERMS *******************************) + +(* Properties about sn parallel substitution ********************************) + +(* Note: apparently this was missing in basic_1 *) +lemma ssta_cpss_lpss_conf: ∀h,g,L1,T1,U1,l. ⦃h, L1⦄ ⊢ T1 •[g] ⦃l, U1⦄ → + ∀T2. L1 ⊢ T1 ▶* T2 → ∀L2. L1 ⊢ ▶* L2 → + ∃∃U2. ⦃h, L2⦄ ⊢ T2 •[g] ⦃l, U2⦄ & L1 ⊢ U1 ▶* U2. +#h #g #L1 #T1 #U1 #l #H elim H -L1 -T1 -U1 -l +[ #L1 #k1 #l1 #Hkl1 #X #H + >(cpss_inv_sort1 … H) -H /3 width=3/ +| #L1 #K1 #V1 #W1 #U1 #i #l #HLK1 #_ #HWU1 #IHVW1 #X #H #L2 #HL12 + elim (cpss_inv_lref1 … H) -H + [ #H destruct + elim (lpss_ldrop_conf … HLK1 … HL12) -HL12 #X #H #HLK2 + elim (lpss_inv_pair1 … H) -H #K2 #V2 #HK12 #HV12 #H destruct + lapply (ldrop_fwd_ldrop2 … HLK1) -HLK1 #HLK1 + elim (IHVW1 … HV12 … HK12) -IHVW1 -HV12 -HK12 #W2 #HVW2 #HW12 + elim (lift_total W2 0 (i+1)) #U2 #HWU2 + lapply (cpss_lift … HW12 … HLK1 … HWU1 … HWU2) -HW12 -HLK1 -HWU1 /3 width=6/ + | * #Y #Z #V2 #H #HV12 #HV2 + lapply (ldrop_mono … H … HLK1) -H #H destruct + elim (lpss_ldrop_conf … HLK1 … HL12) -HL12 #Z #H #HLK2 + elim (lpss_inv_pair1 … H) -H #K2 #V0 #HK12 #_ #H destruct + lapply (ldrop_fwd_ldrop2 … HLK2) -V0 #HLK2 + lapply (ldrop_fwd_ldrop2 … HLK1) -HLK1 #HLK1 + elim (IHVW1 … HV12 … HK12) -IHVW1 -HK12 -HV12 #W2 #HVW2 #HW12 + elim (lift_total W2 0 (i+1)) #U2 #HWU2 + lapply (ssta_lift … HVW2 … HLK2 … HV2 … HWU2) -HVW2 -HLK2 -HV2 + lapply (cpss_lift … HW12 … HLK1 … HWU1 … HWU2) -HW12 -HLK1 -HWU1 -HWU2 /3 width=3/ + ] +| #L1 #K1 #W1 #V1 #U1 #i #l #HLK1 #_ #HWU1 #IHWV1 #X #H #L2 #HL12 + elim (cpss_inv_lref1 … H) -H [ | -IHWV1 -HWU1 -HL12 ] + [ #H destruct + elim (lpss_ldrop_conf … HLK1 … HL12) -HL12 #X #H #HLK2 + elim (lpss_inv_pair1 … H) -H #K2 #W2 #HK12 #HW12 #H destruct + lapply (ldrop_fwd_ldrop2 … HLK1) -HLK1 #HLK1 + elim (IHWV1 … HW12 … HK12) -IHWV1 -HK12 #V2 #HWV2 #_ + elim (lift_total W2 0 (i+1)) #U2 #HWU2 + lapply (cpss_lift … HW12 … HLK1 … HWU1 … HWU2) -HW12 -HLK1 -HWU1 /3 width=6/ + | * #K2 #V2 #W2 #HLK2 #_ #_ + lapply (ldrop_mono … HLK2 … HLK1) -HLK1 -HLK2 #H destruct + ] +| #a #I #L1 #V1 #T1 #U1 #l #_ #IHTU1 #X #H #L2 #HL12 + elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct + elim (IHTU1 … HT12 (L2.ⓑ{I}V2)) -IHTU1 -HT12 /2 width=1/ -HL12 /3 width=5/ +| #L1 #V1 #T1 #U1 #l #_ #IHTU1 #X #H #L2 #HL12 + elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct + elim (IHTU1 … HT12 … HL12) -IHTU1 -HT12 -HL12 /3 width=5/ +| #L1 #W1 #T1 #U1 #l #_ #IHTU1 #X #H #L2 #HL12 + elim (cpss_inv_flat1 … H) -H #W2 #T2 #HW12 #HT12 #H destruct + elim (IHTU1 … HT12 … HL12) -IHTU1 -HT12 -HL12 /3 width=3/ +] +qed-. + +lemma ssta_cpss_conf: ∀h,g,L,T1,U1,l. ⦃h, L⦄ ⊢ T1 •[g] ⦃l, U1⦄ → + ∀T2. L ⊢ T1 ▶* T2 → + ∃∃U2. ⦃h, L⦄ ⊢ T2 •[g] ⦃l, U2⦄ & L ⊢ U1 ▶* U2. +/2 width=3 by ssta_cpss_lpss_conf/ qed-. + +lemma ssta_lpss_conf: ∀h,g,L1,T,U1,l. ⦃h, L1⦄ ⊢ T •[g] ⦃l, U1⦄ → + ∀L2. L1 ⊢ ▶* L2 → + ∃∃U2. ⦃h, L2⦄ ⊢ T •[g] ⦃l, U2⦄ & L1 ⊢ U1 ▶* U2. +/2 width=3 by ssta_cpss_lpss_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/sstas_lpss.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/sstas_lpss.etc new file mode 100644 index 000000000..3ecbc2256 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubr/sstas_lpss.etc @@ -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/static/ssta_lpss.ma". +include "basic_2/unfold/sstas.ma". + +(* ITERATED STRATIFIED STATIC TYPE ASSIGNMENT FOR TERMS *********************) + +(* Properties about sn parallel substitution for local environments *********) + +lemma sstas_cpss_lpss_conf: ∀h,g,L1,T1,U1. ⦃h, L1⦄ ⊢ T1 •*[g] U1 → + ∀T2. L1 ⊢ T1 ▶* T2 → ∀L2. L1 ⊢ ▶* L2 → + ∃∃U2. ⦃h, L2⦄ ⊢ T2 •*[g] U2 & L1 ⊢ U1 ▶* U2. +#h #g #L1 #T1 #U1 #H @(sstas_ind_dx … H) -T1 /2 width=3/ +#T0 #U0 #l0 #HTU0 #_ #IHU01 #T #HT0 #L2 #HL12 +elim (ssta_cpss_lpss_conf … HTU0 … HT0 … HL12) -HTU0 -HT0 #U #HTU #HU0 +elim (IHU01 … HU0 … HL12) -IHU01 -U0 -HL12 /3 width=4/ +qed-. + +lemma sstas_cpss_conf: ∀h,g,L,T1,U1. ⦃h, L⦄ ⊢ T1 •*[g] U1 → + ∀T2. L ⊢ T1 ▶* T2 → + ∃∃U2. ⦃h, L⦄ ⊢ T2 •*[g] U2 & L ⊢ U1 ▶* U2. +/2 width=3 by sstas_cpss_lpss_conf/ qed-. + +lemma sstas_lpss_conf: ∀h,g,L1,T,U1. ⦃h, L1⦄ ⊢ T •*[g] U1 → + ∀L2. L1 ⊢ ▶* L2 → + ∃∃U2. ⦃h, L2⦄ ⊢ T •*[g] U2 & L1 ⊢ U1 ▶* U2. +/2 width=3 by sstas_cpss_lpss_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss.etc new file mode 100644 index 000000000..8ca46b68a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss.etc @@ -0,0 +1,115 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +notation "hvbox( h ⊢ break term 46 L1 • ⊑ break [ term 46 g ] break term 46 L2 )" + non associative with precedence 45 + for @{ 'CrSubEqS $h $g $L1 $L2 }. + +include "basic_2/static/ssta.ma". +include "basic_2/computation/cprs.ma". +include "basic_2/equivalence/cpcs.ma". + +(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) + +(* Note: this is not transitive *) +inductive lsubss (h:sh) (g:sd h): relation lenv ≝ +| lsubss_atom: lsubss h g (⋆) (⋆) +| lsubss_pair: ∀I,L1,L2,V. lsubss h g L1 L2 → + lsubss h g (L1. ⓑ{I} V) (L2. ⓑ{I} V) +| lsubss_abbr: ∀L1,L2,V1,V2,W1,W2,l. L1 ⊢ W1 ⬌* W2 → + ⦃h, L1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ → ⦃h, L2⦄ ⊢ W2 •[g] ⦃l, V2⦄ → + lsubss h g L1 L2 → lsubss h g (L1. ⓓV1) (L2. ⓛW2) +. + +interpretation + "local environment refinement (stratified static type assigment)" + 'CrSubEqS h g L1 L2 = (lsubss h g L1 L2). + +(* Basic inversion lemmas ***************************************************) + +fact lsubss_inv_atom1_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → L1 = ⋆ → L2 = ⋆. +#h #g #L1 #L2 * -L1 -L2 +[ // +| #I #L1 #L2 #V #_ #H destruct +| #L1 #L2 #V1 #V2 #W1 #W2 #l #_ #_ #_ #_ #H destruct +] +qed-. + +lemma lsubss_inv_atom1: ∀h,g,L2. h ⊢ ⋆ •⊑[g] L2 → L2 = ⋆. +/2 width=5 by lsubss_inv_atom1_aux/ qed-. + +fact lsubss_inv_pair1_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → + ∀I,K1,V1. L1 = K1. ⓑ{I} V1 → + (∃∃K2. h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓑ{I} V1) ∨ + ∃∃K2,W1,W2,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & + K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓛW2 & I = Abbr. +#h #g #L1 #L2 * -L1 -L2 +[ #J #K1 #U1 #H destruct +| #I #L1 #L2 #V #HL12 #J #K1 #U1 #H destruct /3 width=3/ +| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #HL12 #J #K1 #U1 #H destruct /3 width=10/ +] +qed-. + +lemma lsubss_inv_pair1: ∀h,g,I,K1,L2,V1. h ⊢ K1. ⓑ{I} V1 •⊑[g] L2 → + (∃∃K2. h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓑ{I} V1) ∨ + ∃∃K2,W1,W2,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & + K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L2 = K2. ⓛW2 & I = Abbr. +/2 width=3 by lsubss_inv_pair1_aux/ qed-. + +fact lsubss_inv_atom2_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → L2 = ⋆ → L1 = ⋆. +#h #g #L1 #L2 * -L1 -L2 +[ // +| #I #L1 #L2 #V #_ #H destruct +| #L1 #L2 #V1 #V2 #W1 #W2 #l #_ #_ #_ #_ #H destruct +] +qed-. + +lemma lsubss_inv_atom2: ∀h,g,L1. h ⊢ L1 •⊑[g] ⋆ → L1 = ⋆. +/2 width=5 by lsubss_inv_atom2_aux/ qed-. + +fact lsubss_inv_pair2_aux: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → + ∀I,K2,W2. L2 = K2. ⓑ{I} W2 → + (∃∃K1. h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓑ{I} W2) ∨ + ∃∃K1,W1,V1,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & + K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓓV1 & I = Abst. +#h #g #L1 #L2 * -L1 -L2 +[ #J #K2 #U2 #H destruct +| #I #L1 #L2 #V #HL12 #J #K2 #U2 #H destruct /3 width=3/ +| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #HL12 #J #K2 #U2 #H destruct /3 width=10/ +] +qed-. + +lemma lsubss_inv_pair2: ∀h,g,I,L1,K2,W2. h ⊢ L1 •⊑[g] K2. ⓑ{I} W2 → + (∃∃K1. h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓑ{I} W2) ∨ + ∃∃K1,W1,V1,V2,l. ⦃h, K1⦄ ⊢ V1 •[g] ⦃l+1, W1⦄ & ⦃h, K2⦄ ⊢ W2 •[g] ⦃l, V2⦄ & + K1 ⊢ W1 ⬌* W2 & h ⊢ K1 •⊑[g] K2 & L1 = K1. ⓓV1 & I = Abst. +/2 width=3 by lsubss_inv_pair2_aux/ qed-. + +(* Basic_forward lemmas *****************************************************) + +axiom lsubss_fwd_lsubx: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → L1 ⓝ⊑ L2. +(* +#h #g #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ +qed-. +*) +(* Basic properties *********************************************************) + +lemma lsubss_refl: ∀h,g,L. h ⊢ L •⊑[g] L. +#h #g #L elim L -L // /2 width=1/ +qed. + +lemma lsubss_cprs_trans: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → + ∀T1,T2. L2 ⊢ T1 ➡* T2 → L1 ⊢ T1 ➡* T2. +/3 width=5 by lsubss_fwd_lsubx, lsubx_cprs_trans/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_cpcs.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_cpcs.etc new file mode 100644 index 000000000..797a1b272 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_cpcs.etc @@ -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 "basic_2/equivalence/cpcs_cpcs.ma". +include "basic_2/equivalence/lsubss.ma". + +(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) + +(* Properties on context-sensitive parallel equivalence for terms ***********) + +lemma lsubss_cpcs_trans: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → + ∀T1,T2. L2 ⊢ T1 ⬌* T2 → L1 ⊢ T1 ⬌* T2. +/3 width=5 by lsubss_fwd_lsubx, lsubx_cpcs_trans/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_etc.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_etc.etc new file mode 100644 index 000000000..a30f3558c --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_etc.etc @@ -0,0 +1,3 @@ +lemma lsubsv_fwd_lsubss: ∀h,g,L1,L2. h ⊢ L1 ¡⊑[g] L2 → h ⊢ L1 •⊑[g] L2. +#h #g #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ /2 width=6/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_ldrop.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_ldrop.etc new file mode 100644 index 000000000..8876f8593 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_ldrop.etc @@ -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/equivalence/lsubss.ma". + +(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) + +(* Properties concerning basic local environment slicing ********************) + +(* Note: the constant 0 cannot be generalized *) +lemma lsubss_ldrop_O1_conf: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → + ∀K1,e. ⇩[0, e] L1 ≡ K1 → + ∃∃K2. h ⊢ K1 •⊑[g] K2 & ⇩[0, e] L2 ≡ K2. +#h #g #L1 #L2 #H elim H -L1 -L2 +[ /2 width=3/ +| #I #L1 #L2 #V #_ #IHL12 #K1 #e #H + elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK1 + [ destruct + elim (IHL12 L1 0) -IHL12 // #X #HL12 #H + <(ldrop_inv_O2 … H) in HL12; -H /3 width=3/ + | elim (IHL12 … HLK1) -L1 /3 width=3/ + ] +| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #_ #IHL12 #K1 #e #H + elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK1 + [ destruct + elim (IHL12 L1 0) -IHL12 // #X #HL12 #H + <(ldrop_inv_O2 … H) in HL12; -H /3 width=6/ + | elim (IHL12 … HLK1) -L1 /3 width=3/ + ] +] +qed-. + +(* Note: the constant 0 cannot be generalized *) +lemma lsubss_ldrop_O1_trans: ∀h,g,L1,L2. h ⊢ L1 •⊑[g] L2 → + ∀K2,e. ⇩[0, e] L2 ≡ K2 → + ∃∃K1. h ⊢ K1 •⊑[g] K2 & ⇩[0, e] L1 ≡ K1. +#h #g #L1 #L2 #H elim H -L1 -L2 +[ /2 width=3/ +| #I #L1 #L2 #V #_ #IHL12 #K2 #e #H + elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK2 + [ destruct + elim (IHL12 L2 0) -IHL12 // #X #HL12 #H + <(ldrop_inv_O2 … H) in HL12; -H /3 width=3/ + | elim (IHL12 … HLK2) -L2 /3 width=3/ + ] +| #L1 #L2 #V1 #V2 #W1 #W2 #l #HW12 #HVW1 #HWV2 #_ #IHL12 #K2 #e #H + elim (ldrop_inv_O1_pair1 … H) -H * #He #HLK2 + [ destruct + elim (IHL12 L2 0) -IHL12 // #X #HL12 #H + <(ldrop_inv_O2 … H) in HL12; -H /3 width=6/ + | elim (IHL12 … HLK2) -L2 /3 width=3/ + ] +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_ssta.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_ssta.etc new file mode 100644 index 000000000..0fe035dbb --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lsubss/lsubss_ssta.etc @@ -0,0 +1,54 @@ +(**************************************************************************) +(* ___ *) +(* ||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/static/ssta_ssta.ma". +include "basic_2/equivalence/cpcs_cpcs.ma". +include "basic_2/equivalence/lsubss_ldrop.ma". + +(* LOCAL ENVIRONMENT REFINEMENT FOR STRATIFIED STATIC TYPE ASSIGNMENT *******) + +(* Properties on stratified native type assignment **************************) + +lemma lsubss_ssta_trans: ∀h,g,L2,T,U2,l. ⦃h, L2⦄ ⊢ T •[g] ⦃l, U2⦄ → + ∀L1. h ⊢ L1 •⊑[g] L2 → + ∃∃U1. ⦃h, L1⦄ ⊢ T •[g] ⦃l, U1⦄ & L1 ⊢ U1 ⬌* U2. +#h #g #L2 #T #U #l #H elim H -L2 -T -U -l +[ /3 width=3/ +| #L2 #K2 #V2 #W2 #U2 #i #l #HLK2 #_ #HWU2 #IHVW2 #L1 #HL12 + elim (lsubss_ldrop_O1_trans … HL12 … HLK2) -L2 #X #H #HLK1 + elim (lsubss_inv_pair2 … H) -H * #K1 [ | -HWU2 -IHVW2 -HLK1 ] + [ #HK12 #H destruct + elim (IHVW2 … HK12) -K2 #T2 #HVT2 #HTW2 + lapply (ldrop_fwd_ldrop2 … HLK1) #H + elim (lift_total T2 0 (i+1)) /3 width=11/ + | #W1 #V1 #W2 #l0 #_ #_ #_ #_ #_ #H destruct + ] +| #L2 #K2 #W2 #V2 #U2 #i #l #HLK2 #HWV2 #HWU2 #IHWV2 #L1 #HL12 + elim (lsubss_ldrop_O1_trans … HL12 … HLK2) -L2 #X #H #HLK1 + elim (lsubss_inv_pair2 … H) -H * #K1 [ -HWV2 | -IHWV2 ] + [ #HK12 #H destruct + elim (IHWV2 … HK12) -K2 /3 width=6/ + | #W1 #V1 #T2 #l0 #HVW1 #HWT2 #HW12 #_ #H #_ destruct + elim (ssta_mono … HWV2 … HWT2) -HWV2 -HWT2 #H1 #H2 destruct + lapply (ldrop_fwd_ldrop2 … HLK1) #H + elim (lift_total W1 0 (i+1)) /3 width=11/ + ] +| #a #I #L2 #V2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 + elim (IHTU2 (L1.ⓑ{I}V2) …) [2: /2 width=1/ ] -L2 /3 width=3/ +| #L2 #V2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 + elim (IHTU2 … HL12) -L2 /3 width=5/ +| #L2 #W2 #T2 #U2 #l #_ #IHTU2 #L1 #HL12 + elim (IHTU2 … HL12) -L2 /3 width=3/ +] +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/aarity.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/aarity.ma index 1c4dcdd04..6f0a4d7c2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/aarity.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/aarity.ma @@ -17,7 +17,8 @@ *) include "ground_2/star.ma". -include "basic_2/notation.ma". +include "basic_2/notation/constructors/item0_0.ma". +include "basic_2/notation/constructors/snitem2_2.ma". (* ATOMIC ARITY *************************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/cl_weight.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/cl_weight.ma index 1f79433bd..66c8d0fb7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/cl_weight.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/cl_weight.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/functions/weight_2.ma". include "basic_2/grammar/lenv_weight.ma". include "basic_2/grammar/cl_shift.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/genv.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/genv.ma index 30b5dfd2a..2cf0f6d3d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/genv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/genv.ma @@ -13,6 +13,10 @@ (**************************************************************************) include "ground_2/list.ma". +include "basic_2/notation/constructors/star_0.ma". +include "basic_2/notation/constructors/dxbind2_3.ma". +include "basic_2/notation/constructors/dxabbr_2.ma". +include "basic_2/notation/constructors/dxabst_2.ma". include "basic_2/grammar/term.ma". (* GLOBAL ENVIRONMENTS ******************************************************) @@ -23,9 +27,6 @@ definition genv ≝ list2 bind2 term. interpretation "sort (global environment)" 'Star = (nil2 bind2 term). -interpretation "environment construction (binary)" - 'DxItem2 L I T = (cons2 bind2 term I T L). - interpretation "environment binding construction (binary)" 'DxBind2 L I T = (cons2 bind2 term I T L). diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/item.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/item.ma index 323f22f88..bc0b447c4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/item.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/item.ma @@ -13,7 +13,6 @@ (**************************************************************************) include "ground_2/arith.ma". -include "basic_2/notation.ma". (* ITEMS ********************************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/lenv.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/lenv.ma index 58a82cd25..a15c5309b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/lenv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/lenv.ma @@ -12,6 +12,10 @@ (* *) (**************************************************************************) +include "basic_2/notation/constructors/star_0.ma". +include "basic_2/notation/constructors/dxbind2_3.ma". +include "basic_2/notation/constructors/dxabbr_2.ma". +include "basic_2/notation/constructors/dxabst_2.ma". include "basic_2/grammar/term.ma". (* LOCAL ENVIRONMENTS *******************************************************) @@ -25,9 +29,6 @@ inductive lenv: Type[0] ≝ interpretation "sort (local environment)" 'Star = LAtom. -interpretation "environment construction (binary)" - 'DxItem2 L I T = (LPair L I T). - interpretation "environment binding construction (binary)" 'DxBind2 L I T = (LPair L I T). diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/term.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/term.ma index 9e7d860b4..e22681c4a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/term.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/term.ma @@ -12,6 +12,23 @@ (* *) (**************************************************************************) +include "basic_2/notation/constructors/item0_1.ma". +include "basic_2/notation/constructors/snitem2_3.ma". +include "basic_2/notation/constructors/snbind2_4.ma". +include "basic_2/notation/constructors/snbind2pos_3.ma". +include "basic_2/notation/constructors/snbind2neg_3.ma". +include "basic_2/notation/constructors/snflat2_3.ma". +include "basic_2/notation/constructors/star_1.ma". +include "basic_2/notation/constructors/lref_1.ma". +include "basic_2/notation/constructors/gref_1.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 "basic_2/notation/constructors/snabst_3.ma". +include "basic_2/notation/constructors/snabstpos_2.ma". +include "basic_2/notation/constructors/snabstneg_2.ma". +include "basic_2/notation/constructors/snappl_2.ma". +include "basic_2/notation/constructors/sncast_2.ma". include "basic_2/grammar/item.ma". (* TERMS ********************************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/term_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/term_simple.ma index cbb1ed010..fba6617b4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/term_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/term_simple.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/simple_1.ma". include "basic_2/grammar/term.ma". (* SIMPLE (NEUTRAL) TERMS ***************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/term_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/term_vector.ma index 7169d1af4..1ff586359 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/term_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/term_vector.ma @@ -13,6 +13,7 @@ (**************************************************************************) include "ground_2/list.ma". +include "basic_2/notation/functions/snapplv_2.ma". include "basic_2/grammar/term_simple.ma". (* TERMS ********************************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/term_weight.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/term_weight.ma index 2e3f96bc7..3787abe93 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/term_weight.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/term_weight.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/functions/weight_1.ma". include "basic_2/grammar/term.ma". (* WEIGHT OF A TERM *********************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/grammar/tstc.ma b/matita/matita/contribs/lambdadelta/basic_2/grammar/tstc.ma index 78a9b4987..f3ef6187e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/grammar/tstc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/grammar/tstc.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/iso_2.ma". include "basic_2/grammar/term_simple.ma". (* SAME TOP TERM CONSTRUCTOR ************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation.ma b/matita/matita/contribs/lambdadelta/basic_2/notation.ma deleted file mode 100644 index 140086abb..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation.ma +++ /dev/null @@ -1,405 +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 *) -(* *) -(**************************************************************************) - -(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) - -(* Grammar ******************************************************************) - -notation "⓪" - non associative with precedence 55 - for @{ 'Item0 }. - -notation "hvbox( ⓪ { term 46 I } )" - non associative with precedence 55 - for @{ 'Item0 $I }. - -notation "⋆" - non associative with precedence 46 - for @{ 'Star }. - -notation "hvbox( ⋆ term 90 k )" - non associative with precedence 55 - for @{ 'Star $k }. - -notation "hvbox( # term 90 i )" - non associative with precedence 55 - for @{ 'LRef $i }. - -notation "hvbox( § term 90 p )" - non associative with precedence 55 - for @{ 'GRef $p }. - -notation "hvbox( ② term 55 T1 . break term 55 T )" - non associative with precedence 55 - for @{ 'SnItem2 $T1 $T }. - -notation "hvbox( ② { term 46 I } break term 55 T1 . break term 55 T )" - non associative with precedence 55 - for @{ 'SnItem2 $I $T1 $T }. - -notation "hvbox( ⓑ { term 46 a , break term 46 I } break term 55 T1 . break term 55 T )" - non associative with precedence 55 - for @{ 'SnBind2 $a $I $T1 $T }. - -notation "hvbox( + ⓑ { term 46 I } break term 55 T1 . break term 55 T )" - non associative with precedence 55 - for @{ 'SnBind2Pos $I $T1 $T }. - -notation "hvbox( - ⓑ { term 46 I } break term 55 T1 . break term 55 T )" - non associative with precedence 55 - for @{ 'SnBind2Neg $I $T1 $T }. - -notation "hvbox( ⓕ { term 46 I } break term 55 T1 . break term 55 T )" - non associative with precedence 55 - for @{ 'SnFlat2 $I $T1 $T }. - -notation "hvbox( ⓓ { term 46 a } break term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnAbbr $a $T1 $T2 }. - -notation "hvbox( + ⓓ term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnAbbrPos $T1 $T2 }. - -notation "hvbox( - ⓓ term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnAbbrNeg $T1 $T2 }. - -notation "hvbox( ⓛ { term 46 a } break term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnAbst $a $T1 $T2 }. - -notation "hvbox( + ⓛ term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnAbstPos $T1 $T2 }. - -notation "hvbox( - ⓛ term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnAbstNeg $T1 $T2 }. - -notation "hvbox( ⓐ term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnAppl $T1 $T2 }. - -notation "hvbox( ⓝ term 55 T1 . break term 55 T2 )" - non associative with precedence 55 - for @{ 'SnCast $T1 $T2 }. - -notation "hvbox( Ⓐ term 55 T1 . break term 55 T )" - non associative with precedence 55 - for @{ 'SnApplV $T1 $T }. - -notation > "hvbox( T . break ②{ term 46 I } break term 47 T1 )" - non associative with precedence 46 - for @{ 'DxBind2 $T $I $T1 }. - -notation "hvbox( T . break ⓑ { term 46 I } break term 48 T1 )" - non associative with precedence 47 - for @{ 'DxBind2 $T $I $T1 }. - -notation "hvbox( T1 . break ⓓ T2 )" - left associative with precedence 48 - for @{ 'DxAbbr $T1 $T2 }. - -notation "hvbox( T1 . break ⓛ T2 )" - left associative with precedence 49 - for @{ 'DxAbst $T1 $T2 }. - -notation "hvbox( ♯ { term 46 x } )" - non associative with precedence 90 - for @{ 'Weight $x }. - -notation "hvbox( ♯ { term 46 x , break term 46 y } )" - non associative with precedence 90 - for @{ 'Weight $x $y }. - -notation "hvbox( 𝐒 ⦃ term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'Simple $T }. - -notation "hvbox( T1 ≃ break term 46 T2 )" - non associative with precedence 45 - for @{ 'Iso $T1 $T2 }. - -(* Relocation ***************************************************************) - -notation "hvbox( ⇧ [ term 46 d , break term 46 e ] break term 46 T1 ≡ break term 46 T2 )" - non associative with precedence 45 - for @{ 'RLift $d $e $T1 $T2 }. - -notation "hvbox( ⇩ [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" - non associative with precedence 45 - for @{ 'RDrop $e $L1 $L2 }. - -notation "hvbox( ⇩ [ term 46 d , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" - non associative with precedence 45 - for @{ 'RDrop $d $e $L1 $L2 }. - -notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃ break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'SupTerm $L1 $T1 $L2 $T2 }. - -notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃⸮ break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'SupTermOpt $L1 $T1 $L2 $T2 }. - -notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃⊃⸮ break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'SupTermOptAlt $L1 $T1 $L2 $T2 }. - -notation "hvbox( L ⊢ break ⌘ ⦃ term 46 T ⦄ ≡ break term 46 k )" - non associative with precedence 45 - for @{ 'ICM $L $T $k }. - -(* Substitution *************************************************************) - -notation "hvbox( @ ⦃ term 46 T1 , break term 46 f ⦄ ≡ break term 46 T2 )" - non associative with precedence 45 - for @{ 'RAt $T1 $f $T2 }. - -notation "hvbox( T1 ▭ break term 46 T2 ≡ break term 46 T )" - non associative with precedence 45 - for @{ 'RMinus $T1 $T2 $T }. - -notation "hvbox( ⇧ * [ term 46 e ] break term 46 T1 ≡ break term 46 T2 )" - non associative with precedence 45 - for @{ 'RLiftStar $e $T1 $T2 }. - -notation "hvbox( ⇩ * [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" - non associative with precedence 45 - for @{ 'RDropStar $e $L1 $L2 }. - -notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃ + break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'SupTermPlus $L1 $T1 $L2 $T2 }. - -notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃ * break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'SupTermStar $L1 $T1 $L2 $T2 }. - -notation "hvbox( L1 ⊑ break term 46 L2 )" - non associative with precedence 45 - for @{ 'CrSubEq $L1 $L2 }. - -notation "hvbox( L ⊢ break term 46 T1 ▶* break term 46 T2 )" - non associative with precedence 45 - for @{ 'PSubstStar $L $T1 $T2 }. - -notation "hvbox( T1 ⊢ ▶ * break term 46 T2 )" - non associative with precedence 45 - for @{ 'PSubstStarSn $T1 $T2 }. - -(* Static typing ************************************************************) - -notation "hvbox( L ⊢ break term 46 T ⁝ break term 46 A )" - non associative with precedence 45 - for @{ 'AtomicArity $L $T $A }. - -notation "hvbox( T1 ⁝ ⊑ break term 46 T2 )" - non associative with precedence 45 - for @{ 'CrSubEqA $T1 $T2 }. - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T ÷ break term 46 A )" - non associative with precedence 45 - for @{ 'BinaryArity $h $L $T $A }. - -notation "hvbox( h ⊢ break term 46 L1 ÷ ⊑ break term 46 L2 )" - non associative with precedence 45 - for @{ 'CrSubEqB $h $L1 $L2 }. - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 • break [ term 46 g ] break ⦃ term 46 l , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'StaticType $h $g $L $T1 $T2 $l }. - -(* Unfold *******************************************************************) - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 •* break [ term 46 g ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'StaticTypeStar $h $g $L $T1 $T2 }. - -notation "hvbox( L1 ⊢ ⧫ * break term 46 T ≡ break term 46 L2 )" - non associative with precedence 45 - for @{ 'Unfold $L1 $T $L2 }. - -notation "hvbox( L ⊢ break term 46 T1 ➤ * break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRestStar $L $T1 $T2 }. - -notation "hvbox( T1 ⊢ ➤ * break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRestStarSn $T1 $T2 }. - -(* Reduction ****************************************************************) - -notation "hvbox( L ⊢ 𝐑 break ⦃ term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'Reducible $L $T }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ 𝐑 break [ term 46 g ] break ⦃ term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'Reducible $h $g $L $T }. - -notation "hvbox( L ⊢ 𝐈 break ⦃ term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'NotReducible $L $T }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ 𝐈 break [ term 46 g ] break ⦃ term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'NotReducible $h $g $L $T }. - -notation "hvbox( L ⊢ 𝐍 break ⦃ term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'Normal $L $T }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ 𝐍 break [ term 46 g ] break ⦃ term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'Normal $h $g $L $T }. - -notation "hvbox( L ⊢ break term 46 T1 ➡ break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRed $L $T1 $T2 }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ break term 46 T1 ➡ break [ term 46 g ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRed $h $g $L $T1 $T2 }. - -notation "hvbox( L1 ⊢ ➡ break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedSn $L1 $L2 }. - -notation "hvbox( ⦃ term 46 h, break term 46 L1 ⦄ ⊢ ➡ break [ term 46 g ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedSn $h $g $L1 $L2 }. - -(* Computation **************************************************************) - -notation "hvbox( ⦃ term 46 L, break term 46 T ⦄ ϵ break [ term 46 R ] break 〚term 46 A 〛 )" - non associative with precedence 45 - for @{ 'InEInt $R $L $T $A }. - -notation "hvbox( T1 ⊑ break [ term 46 R ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'CrSubEq $T1 $R $T2 }. - -notation "hvbox( L1 ⓝ ⊑ break term 46 L2 )" - non associative with precedence 45 - for @{ 'CrSubEqT $L1 $L2 }. - -notation "hvbox( L ⊢ break term 46 T1 ➡ * break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRedStar $L $T1 $T2 }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ break term 46 T1 ➡ * break [ term 46 g ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRedStar $h $g $L $T1 $T2 }. - -notation "hvbox( L1 ⊢ ➡* break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedSnStar $L1 $L2 }. - -notation "hvbox( ⦃ term 46 h, break term 46 L1 ⦄ ⊢ ➡ * break [ term 46 g ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedSnStar $h $g $L1 $L2 }. - -notation "hvbox( L1 ⊢ ➡ ➡ * break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedSnStarAlt $L1 $L2 }. - -notation "hvbox( ⦃ term 46 h, break term 46 L1 ⦄ ⊢ ➡ ➡ * break [ term 46 g ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedSnStarAlt $h $g $L1 $L2 }. - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 • * ➡ * break [ term 46 g ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'DecomposedPRedStar $h $g $L $T1 $T2 }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ ⬊ * break [ term 46 g ] break term 46 T )" - non associative with precedence 45 - for @{ 'SN $h $g $L $T }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ ⬊ ⬊ * break [ term 46 g ] break term 46 T )" - non associative with precedence 45 - for @{ 'SNAlt $h $g $L $T }. - -notation "hvbox( L ⊢ break term 46 T1 ➡ * break 𝐍 ⦃ term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'PEval $L $T1 $T2 }. - -notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ break term 46 T1 ➡ * break [ term 46 g ] break 𝐍 ⦃ term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'PEval $h $g $L $T1 $T2 }. - -(* Conversion ***************************************************************) - -notation "hvbox( L ⊢ break term 46 T1 ⬌ break term 46 T2 )" - non associative with precedence 45 - for @{ 'PConv $L $T1 $T2 }. - -notation "hvbox( L1 ⊢ ⬌ break term 46 L2 )" - non associative with precedence 45 - for @{ 'PConvSn $L1 $L2 }. - -(* Equivalence **************************************************************) - -notation "hvbox( L ⊢ break term 46 T1 ⬌* break term 46 T2 )" - non associative with precedence 45 - for @{ 'PConvStar $L $T1 $T2 }. - -notation "hvbox( h ⊢ break term 46 L1 • ⊑ break [ term 46 g ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'CrSubEqS $h $g $L1 $L2 }. - -notation "hvbox( L1 ⊢ ⬌* break term 46 L2 )" - non associative with precedence 45 - for @{ 'PConvSnStar $L1 $L2 }. - -(* Dynamic typing ***********************************************************) - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T ¡ break [ term 46 g ] )" - non associative with precedence 45 - for @{ 'NativeValid $h $g $L $T }. - -notation "hvbox( h ⊢ break term 46 L1 ¡ ⊑ break [ term 46 g ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'CrSubEqV $h $g $L1 $L2 }. - -notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ ≽ break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'BTPRed $h $g $L1 $T1 $L2 $T2 }. - -notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ ≻ break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'BTPRedProper $h $g $L1 $T1 $L2 $T2 }. - -notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ ≥ break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'BTPRedStar $h $g $L1 $T1 $L2 $T2 }. - -notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ > break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'BTPRedStarProper $h $g $L1 $T1 $L2 $T2 }. - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 : break term 46 T2 )" - non associative with precedence 45 - for @{ 'NativeType $h $L $T1 $T2 }. - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 : : break term 46 T2 )" - non associative with precedence 45 - for @{ 'NativeTypeAlt $h $L $T1 $T2 }. - -(* Higher order dynamic typing **********************************************) - -notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 : * break term 46 T2 )" - non associative with precedence 45 - for @{ 'NativeTypeStar $h $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxabbr_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxabbr_2.ma new file mode 100644 index 000000000..afd2f1892 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxabbr_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( T1 . break ⓓ T2 )" + left associative with precedence 48 + for @{ 'DxAbbr $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxabst_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxabst_2.ma new file mode 100644 index 000000000..43e324eae --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxabst_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( T1 . break ⓛ T2 )" + left associative with precedence 49 + for @{ 'DxAbst $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxbind2_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxbind2_3.ma new file mode 100644 index 000000000..bbded1eab --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/dxbind2_3.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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation > "hvbox( T . break ②{ term 46 I } break term 47 T1 )" + non associative with precedence 46 + for @{ 'DxBind2 $T $I $T1 }. + +notation "hvbox( T . break ⓑ { term 46 I } break term 48 T1 )" + non associative with precedence 47 + for @{ 'DxBind2 $T $I $T1 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/gref_1.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/gref_1.ma new file mode 100644 index 000000000..d22748809 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/gref_1.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( § term 90 p )" + non associative with precedence 55 + for @{ 'GRef $p }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/item0_0.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/item0_0.ma new file mode 100644 index 000000000..b6e471d3d --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/item0_0.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "⓪" + non associative with precedence 55 + for @{ 'Item0 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/item0_1.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/item0_1.ma new file mode 100644 index 000000000..2c9e41aef --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/item0_1.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⓪ { term 46 I } )" + non associative with precedence 55 + for @{ 'Item0 $I }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/lref_1.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/lref_1.ma new file mode 100644 index 000000000..ebab03c01 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/lref_1.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( # term 90 i )" + non associative with precedence 55 + for @{ 'LRef $i }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbr_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbr_3.ma new file mode 100644 index 000000000..44116053b --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbr_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⓓ { term 46 a } break term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnAbbr $a $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbrneg_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbrneg_2.ma new file mode 100644 index 000000000..13786d9bc --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbrneg_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( - ⓓ term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnAbbrNeg $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbrpos_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbrpos_2.ma new file mode 100644 index 000000000..ae76f1958 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabbrpos_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( + ⓓ term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnAbbrPos $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabst_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabst_3.ma new file mode 100644 index 000000000..8ba34495d --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabst_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⓛ { term 46 a } break term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnAbst $a $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabstneg_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabstneg_2.ma new file mode 100644 index 000000000..277b58b11 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabstneg_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( - ⓛ term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnAbstNeg $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabstpos_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabstpos_2.ma new file mode 100644 index 000000000..9e22bc7ac --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snabstpos_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( + ⓛ term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnAbstPos $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snappl_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snappl_2.ma new file mode 100644 index 000000000..c1acadba2 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snappl_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⓐ term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnAppl $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2_4.ma new file mode 100644 index 000000000..ceae73562 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⓑ { term 46 a , break term 46 I } break term 55 T1 . break term 55 T )" + non associative with precedence 55 + for @{ 'SnBind2 $a $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2neg_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2neg_3.ma new file mode 100644 index 000000000..428fe734d --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2neg_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( - ⓑ { term 46 I } break term 55 T1 . break term 55 T )" + non associative with precedence 55 + for @{ 'SnBind2Neg $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2pos_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2pos_3.ma new file mode 100644 index 000000000..b89b95822 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snbind2pos_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( + ⓑ { term 46 I } break term 55 T1 . break term 55 T )" + non associative with precedence 55 + for @{ 'SnBind2Pos $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/sncast_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/sncast_2.ma new file mode 100644 index 000000000..55565d099 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/sncast_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⓝ term 55 T1 . break term 55 T2 )" + non associative with precedence 55 + for @{ 'SnCast $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snflat2_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snflat2_3.ma new file mode 100644 index 000000000..ef0bdb8cb --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snflat2_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⓕ { term 46 I } break term 55 T1 . break term 55 T )" + non associative with precedence 55 + for @{ 'SnFlat2 $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snitem2_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snitem2_2.ma new file mode 100644 index 000000000..82044eae6 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snitem2_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ② term 55 T1 . break term 55 T )" + non associative with precedence 55 + for @{ 'SnItem2 $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snitem2_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snitem2_3.ma new file mode 100644 index 000000000..9fdf70bf2 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/snitem2_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ② { term 46 I } break term 55 T1 . break term 55 T )" + non associative with precedence 55 + for @{ 'SnItem2 $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/star_0.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/star_0.ma new file mode 100644 index 000000000..8cf6da569 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/star_0.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "⋆" + non associative with precedence 46 + for @{ 'Star }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/star_1.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/star_1.ma new file mode 100644 index 000000000..6307ed9e9 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/constructors/star_1.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⋆ term 90 k )" + non associative with precedence 55 + for @{ 'Star $k }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/functions/snapplv_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/functions/snapplv_2.ma new file mode 100644 index 000000000..9d721e298 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/functions/snapplv_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( Ⓐ term 55 T1 . break term 55 T )" + non associative with precedence 55 + for @{ 'SnApplV $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/functions/weight_1.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/functions/weight_1.ma new file mode 100644 index 000000000..31b4fe655 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/functions/weight_1.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ♯ { term 46 x } )" + non associative with precedence 90 + for @{ 'Weight $x }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/functions/weight_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/functions/weight_2.ma new file mode 100644 index 000000000..161b66bd0 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/functions/weight_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ♯ { term 46 x , break term 46 y } )" + non associative with precedence 90 + for @{ 'Weight $x $y }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/notation.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/notation.ma new file mode 100644 index 000000000..e7b98b07e --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/notation.ma @@ -0,0 +1,47 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ break ⌘ ⦃ term 46 T ⦄ ≡ break term 46 k )" + non associative with precedence 45 + for @{ 'ICM $L $T $k }. + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T ÷ break term 46 A )" + non associative with precedence 45 + for @{ 'BinaryArity $h $L $T $A }. + +notation "hvbox( h ⊢ break term 46 L1 ÷ ⊑ break term 46 L2 )" + non associative with precedence 45 + for @{ 'CrSubEqB $h $L1 $L2 }. + +notation "hvbox( L1 ⊢ ⬌ break term 46 L2 )" + non associative with precedence 45 + for @{ 'PConvSn $L1 $L2 }. + +notation "hvbox( L1 ⊢ ⬌* break term 46 L2 )" + non associative with precedence 45 + for @{ 'PConvSnStar $L1 $L2 }. + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 : break term 46 T2 )" + non associative with precedence 45 + for @{ 'NativeType $h $L $T1 $T2 }. + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 : : break term 46 T2 )" + non associative with precedence 45 + for @{ 'NativeTypeAlt $h $L $T1 $T2 }. + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 : * break term 46 T2 )" + non associative with precedence 45 + for @{ 'NativeTypeStar $h $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/atomicarity_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/atomicarity_3.ma new file mode 100644 index 000000000..b92527537 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/atomicarity_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ break term 46 T ⁝ break term 46 A )" + non associative with precedence 45 + for @{ 'AtomicArity $L $T $A }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpred_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpred_6.ma new file mode 100644 index 000000000..cfc3ae926 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpred_6.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ ≽ break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'BTPRed $h $g $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredproper_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredproper_6.ma new file mode 100644 index 000000000..eaf9a0a79 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredproper_6.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ ≻ break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'BTPRedProper $h $g $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredstar_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredstar_6.ma new file mode 100644 index 000000000..60cc3ef50 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredstar_6.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ ≥ break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'BTPRedStar $h $g $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredstarproper_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredstarproper_6.ma new file mode 100644 index 000000000..b76e2a5d3 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/btpredstarproper_6.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( h ⊢ break ⦃ term 46 L1, break term 46 T1 ⦄ > break [ term 46 g ] break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'BTPRedStarProper $h $g $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeq_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeq_3.ma new file mode 100644 index 000000000..4af339681 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeq_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( T1 ⊑ break [ term 46 R ] break term 46 T2 )" + non associative with precedence 45 + for @{ 'CrSubEq $T1 $R $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqa_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqa_2.ma new file mode 100644 index 000000000..157579006 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqa_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( T1 ⁝ ⊑ break term 46 T2 )" + non associative with precedence 45 + for @{ 'CrSubEqA $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqt_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqt_2.ma new file mode 100644 index 000000000..4b40069ad --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqt_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L1 ⓝ ⊑ break term 46 L2 )" + non associative with precedence 45 + for @{ 'CrSubEqT $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqv_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqv_4.ma new file mode 100644 index 000000000..2e5f4b473 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/crsubeqv_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( h ⊢ break term 46 L1 ¡ ⊑ break [ term 46 g ] break term 46 L2 )" + non associative with precedence 45 + for @{ 'CrSubEqV $h $g $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/dpredstar_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/dpredstar_5.ma new file mode 100644 index 000000000..005905709 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/dpredstar_5.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 • * ➡ * break [ term 46 g ] break term 46 T2 )" + non associative with precedence 45 + for @{ 'DPRedStar $h $g $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ineint_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ineint_4.ma new file mode 100644 index 000000000..f48a71c2f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ineint_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 L, break term 46 T ⦄ ϵ break [ term 46 R ] break 〚term 46 A 〛 )" + non associative with precedence 45 + for @{ 'InEInt $R $L $T $A }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/iso_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/iso_2.ma new file mode 100644 index 000000000..872a06ac3 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/iso_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( T1 ≃ break term 46 T2 )" + non associative with precedence 45 + for @{ 'Iso $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/nativevalid_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/nativevalid_4.ma new file mode 100644 index 000000000..5704d8ef9 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/nativevalid_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T ¡ break [ term 46 g ] )" + non associative with precedence 45 + for @{ 'NativeValid $h $g $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/normal_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/normal_2.ma new file mode 100644 index 000000000..519b5a9d2 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/normal_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ 𝐍 break ⦃ term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'Normal $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/normal_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/normal_4.ma new file mode 100644 index 000000000..255531770 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/normal_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ 𝐍 break [ term 46 g ] break ⦃ term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'Normal $h $g $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/notreducible_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/notreducible_2.ma new file mode 100644 index 000000000..2048df022 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/notreducible_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ 𝐈 break ⦃ term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'NotReducible $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/notreducible_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/notreducible_4.ma new file mode 100644 index 000000000..5401a62a0 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/notreducible_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ 𝐈 break [ term 46 g ] break ⦃ term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'NotReducible $h $g $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_3.ma new file mode 100644 index 000000000..374586eb2 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ break term 46 T1 ⬌ break term 46 T2 )" + non associative with precedence 45 + for @{ 'PConv $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_3.ma new file mode 100644 index 000000000..8e604fa53 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ break term 46 T1 ⬌* break term 46 T2 )" + non associative with precedence 45 + for @{ 'PConvStar $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/peval_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/peval_3.ma new file mode 100644 index 000000000..6740f7c03 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/peval_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ break term 46 T1 ➡ * break 𝐍 ⦃ term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'PEval $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/peval_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/peval_5.ma new file mode 100644 index 000000000..19841c352 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/peval_5.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ break term 46 T1 ➡ * break [ term 46 g ] break 𝐍 ⦃ term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'PEval $h $g $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pred_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pred_3.ma new file mode 100644 index 000000000..969791be8 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pred_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ break term 46 T1 ➡ break term 46 T2 )" + non associative with precedence 45 + for @{ 'PRed $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pred_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pred_5.ma new file mode 100644 index 000000000..c4094a5ff --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pred_5.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ break term 46 T1 ➡ break [ term 46 g ] break term 46 T2 )" + non associative with precedence 45 + for @{ 'PRed $h $g $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsn_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsn_2.ma new file mode 100644 index 000000000..500d84a02 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsn_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L1 ⊢ ➡ break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedSn $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsn_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsn_4.ma new file mode 100644 index 000000000..85c72d454 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsn_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L1 ⦄ ⊢ ➡ break [ term 46 g ] break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedSn $h $g $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstar_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstar_2.ma new file mode 100644 index 000000000..85aee77f4 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstar_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L1 ⊢ ➡* break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedSnStar $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstar_4.ma new file mode 100644 index 000000000..c8e17752a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstar_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L1 ⦄ ⊢ ➡ * break [ term 46 g ] break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedSnStar $h $g $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstaralt_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstaralt_2.ma new file mode 100644 index 000000000..6f7bd6f5a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstaralt_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L1 ⊢ ➡ ➡ * break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedSnStarAlt $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstaralt_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstaralt_4.ma new file mode 100644 index 000000000..566a397f6 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsnstaralt_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L1 ⦄ ⊢ ➡ ➡ * break [ term 46 g ] break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedSnStarAlt $h $g $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predstar_3.ma new file mode 100644 index 000000000..d6c5062f8 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predstar_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ break term 46 T1 ➡ * break term 46 T2 )" + non associative with precedence 45 + for @{ 'PRedStar $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predstar_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predstar_5.ma new file mode 100644 index 000000000..121681242 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predstar_5.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ break term 46 T1 ➡ * break [ term 46 g ] break term 46 T2 )" + non associative with precedence 45 + for @{ 'PRedStar $h $g $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rat_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rat_3.ma new file mode 100644 index 000000000..a63dc95f2 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rat_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( @ ⦃ term 46 T1 , break term 46 f ⦄ ≡ break term 46 T2 )" + non associative with precedence 45 + for @{ 'RAt $T1 $f $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_3.ma new file mode 100644 index 000000000..d66063b2a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⇩ [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" + non associative with precedence 45 + for @{ 'RDrop $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_4.ma new file mode 100644 index 000000000..0b4a36676 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⇩ [ term 46 d , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" + non associative with precedence 45 + for @{ 'RDrop $d $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma new file mode 100644 index 000000000..14803b14f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⇩ * [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" + non associative with precedence 45 + for @{ 'RDropStar $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/reducible_2.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/reducible_2.ma new file mode 100644 index 000000000..e6844a99f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/reducible_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L ⊢ 𝐑 break ⦃ term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'Reducible $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/reducible_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/reducible_4.ma new file mode 100644 index 000000000..8c84faf31 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/reducible_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ 𝐑 break [ term 46 g ] break ⦃ term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'Reducible $h $g $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rlift_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rlift_4.ma new file mode 100644 index 000000000..c875be4ae --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rlift_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⇧ [ term 46 d , break term 46 e ] break term 46 T1 ≡ break term 46 T2 )" + non associative with precedence 45 + for @{ 'RLift $d $e $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma new file mode 100644 index 000000000..a75a097c7 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⇧ * [ term 46 e ] break term 46 T1 ≡ break term 46 T2 )" + non associative with precedence 45 + for @{ 'RLiftStar $e $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rminus_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rminus_3.ma new file mode 100644 index 000000000..c896a982f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rminus_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( T1 ▭ break term 46 T2 ≡ break term 46 T )" + non associative with precedence 45 + for @{ 'RMinus $T1 $T2 $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/simple_1.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/simple_1.ma new file mode 100644 index 000000000..0acfb4ef7 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/simple_1.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( 𝐒 ⦃ term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'Simple $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/sn_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/sn_4.ma new file mode 100644 index 000000000..d56967207 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/sn_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ ⬊ * break [ term 46 g ] break term 46 T )" + non associative with precedence 45 + for @{ 'SN $h $g $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/snalt_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/snalt_4.ma new file mode 100644 index 000000000..8ed7592a9 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/snalt_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h, break term 46 L ⦄ ⊢ ⬊ ⬊ * break [ term 46 g ] break term 46 T )" + non associative with precedence 45 + for @{ 'SNAlt $h $g $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/statictype_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/statictype_6.ma new file mode 100644 index 000000000..c389e2d17 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/statictype_6.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 • break [ term 46 g ] break ⦃ term 46 l , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'StaticType $h $g $L $T1 $T2 $l }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/statictypestar_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/statictypestar_5.ma new file mode 100644 index 000000000..425babd90 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/statictypestar_5.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 h , break term 46 L ⦄ ⊢ break term 46 T1 •* break [ term 46 g ] break term 46 T2 )" + non associative with precedence 45 + for @{ 'StaticTypeStar $h $g $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/supterm_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/supterm_4.ma new file mode 100644 index 000000000..b2114a050 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/supterm_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃ break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'SupTerm $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermopt_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermopt_4.ma new file mode 100644 index 000000000..3e55a3143 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermopt_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃⸮ break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'SupTermOpt $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermoptalt_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermoptalt_4.ma new file mode 100644 index 000000000..1035ce49a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermoptalt_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃⊃⸮ break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'SupTermOptAlt $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermplus_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermplus_4.ma new file mode 100644 index 000000000..020d64ba3 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermplus_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃ + break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'SupTermPlus $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermstar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermstar_4.ma new file mode 100644 index 000000000..53b3bce5e --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/suptermstar_4.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊃ * break ⦃ term 46 L2 , break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'SupTermStar $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/unfold_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/unfold_3.ma new file mode 100644 index 000000000..935cd2a0b --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/unfold_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||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 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( L1 ⊢ ⧫ * break term 46 T ≡ break term 46 L2 )" + non associative with precedence 45 + for @{ 'Unfold $L1 $T $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma index 49ef68156..0aa31fe72 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/notreducible_2.ma". include "basic_2/reduction/crr.ma". (* CONTEXT-SENSITIVE IRREDUCIBLE TERMS **************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma index fb49b0de7..eec73fb8e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/notreducible_4.ma". include "basic_2/reduction/cir.ma". include "basic_2/reduction/crx.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma index 7bd1ad6d1..821d74c7a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/normal_2.ma". include "basic_2/reduction/cpr.ma". (* CONTEXT-SENSITIVE NORMAL TERMS *******************************************) @@ -51,7 +52,7 @@ lemma cnr_inv_zeta: ∀L,V,T. L ⊢ 𝐍⦃+ⓓV.T⦄ → ⊥. lapply (H U ?) -H /2 width=3/ #H destruct elim (lift_inv_pair_xy_y … HTU) | #HT - elim (cpss_delift (⋆) V T (⋆. ⓓV) 0 ?) // #T2 #T1 #HT2 #HT12 + elim (cpr_delift (⋆) V T (⋆. ⓓV) 0) // #T2 #T1 #HT2 #HT12 lapply (H (+ⓓV.T2) ?) -H /4 width=1/ -HT2 #H destruct /3 width=2/ ] qed-. @@ -63,7 +64,7 @@ lemma cnr_inv_appl: ∀L,V,T. L ⊢ 𝐍⦃ⓐV.T⦄ → ∧∧ L ⊢ 𝐍⦃V | generalize in match HVT1; -HVT1 elim T1 -T1 * // #a * #W1 #U1 #_ #_ #H [ elim (lift_total V1 0 1) #V2 #HV12 lapply (H (ⓓ{a}W1.ⓐV2.U1) ?) -H /3 width=3/ -HV12 #H destruct - | lapply (H (ⓓ{a}V1.U1) ?) -H /3 width=1/ #H destruct + | lapply (H (ⓓ{a}ⓝW1.V1.U1) ?) -H /3 width=1/ #H destruct ] qed-. @@ -81,16 +82,16 @@ lemma cnr_sort: ∀L,k. L ⊢ 𝐍⦃⋆k⦄. qed. (* Basic_1: was: nf2_abst *) -lemma cnr_abst: ∀a,I,L,V,W,T. L ⊢ 𝐍⦃W⦄ → L. ⓑ{I} V ⊢ 𝐍⦃T⦄ → L ⊢ 𝐍⦃ⓛ{a}W.T⦄. -#a #I #L #V #W #T #HW #HT #X #H -elim (cpr_fwd_abst1 … H I V) -H #W0 #T0 #HW0 #HT0 #H destruct +lemma cnr_abst: ∀a,L,W,T. L ⊢ 𝐍⦃W⦄ → L.ⓛW ⊢ 𝐍⦃T⦄ → L ⊢ 𝐍⦃ⓛ{a}W.T⦄. +#a #L #W #T #HW #HT #X #H +elim (cpr_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct >(HW … HW0) -W0 >(HT … HT0) -T0 // qed. (* Basic_1: was only: nf2_appl_lref *) lemma cnr_appl_simple: ∀L,V,T. L ⊢ 𝐍⦃V⦄ → L ⊢ 𝐍⦃T⦄ → 𝐒⦃T⦄ → L ⊢ 𝐍⦃ⓐV.T⦄. #L #V #T #HV #HT #HS #X #H -elim (cpr_inv_appl1_simple … H ?) -H // #V0 #T0 #HV0 #HT0 #H destruct +elim (cpr_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct >(HV … HV0) -V0 >(HT … HT0) -T0 // qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma index 2ed0e8957..8e6dd66ba 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/normal_4.ma". include "basic_2/reduction/cnr.ma". include "basic_2/reduction/cpx.ma". @@ -56,18 +57,17 @@ lemma cnx_inv_abbr: ∀h,g,L,V,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃-ⓓV.T⦄ → ] qed-. -axiom cnx_inv_zeta: ∀h,g,L,V,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃+ⓓV.T⦄ → ⊥. -(* +lemma cnx_inv_zeta: ∀h,g,L,V,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃+ⓓV.T⦄ → ⊥. #h #g #L #V #T #H elim (is_lift_dec T 0 1) [ * #U #HTU lapply (H U ?) -H /2 width=3/ #H destruct elim (lift_inv_pair_xy_y … HTU) | #HT - elim (cpss_delift (⋆) V T (⋆. ⓓV) 0 ?) // #T2 #T1 #HT2 #HT12 + elim (cpr_delift (⋆) V T (⋆.ⓓV) 0) // #T2 #T1 #HT2 #HT12 lapply (H (+ⓓV.T2) ?) -H /5 width=1/ -HT2 #H destruct /3 width=2/ ] qed-. -*) + lemma cnx_inv_appl: ∀h,g,L,V,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃ⓐV.T⦄ → ∧∧ ⦃h, L⦄ ⊢ 𝐍[g]⦃V⦄ & ⦃h, L⦄ ⊢ 𝐍[g]⦃T⦄ & 𝐒⦃T⦄. #h #g #L #V1 #T1 #HVT1 @and3_intro @@ -86,12 +86,12 @@ lemma cnx_inv_tau: ∀h,g,L,V,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃ⓝV.T⦄ → ⊥. qed-. (* Basic forward lemmas *****************************************************) -(* -lamma cnx_fwd_cnr: ∀h,g,L,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃T⦄ → L ⊢ 𝐍⦃T⦄. + +lemma cnx_fwd_cnr: ∀h,g,L,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃T⦄ → L ⊢ 𝐍⦃T⦄. #h #g #L #T #H #U #HTU @H /2 width=1/ (**) (* auto fails because a δ-expansion gets in the way *) qed-. -*) + (* Basic properties *********************************************************) lemma cnx_sort: ∀h,g,L,k. deg h g k 0 → ⦃h, L⦄ ⊢ 𝐍[g]⦃⋆k⦄. @@ -114,7 +114,7 @@ qed. lemma cnx_appl_simple: ∀h,g,L,V,T. ⦃h, L⦄ ⊢ 𝐍[g]⦃V⦄ → ⦃h, L⦄ ⊢ 𝐍[g]⦃T⦄ → 𝐒⦃T⦄ → ⦃h, L⦄ ⊢ 𝐍[g]⦃ⓐ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 +elim (cpx_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct >(HV … HV0) -V0 >(HT … HT0) -T0 // qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma index e1d4af93c..a8fe7b1c3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma @@ -12,7 +12,10 @@ (* *) (**************************************************************************) -include "basic_2/unfold/cpqs.ma". +include "basic_2/notation/relations/pred_3.ma". +include "basic_2/grammar/cl_shift.ma". +include "basic_2/relocation/ldrop_append.ma". +include "basic_2/reduction/lsubx.ma". (* CONTEXT-SENSITIVE PARALLEL REDUCTION FOR TERMS ***************************) @@ -24,20 +27,20 @@ inductive cpr: lenv → relation term ≝ ⇩[0, i] L ≡ K. ⓓV → cpr K V V2 → ⇧[0, i + 1] V2 ≡ W2 → cpr L (#i) W2 | cpr_bind : ∀a,I,L,V1,V2,T1,T2. - cpr L V1 V2 → cpr (L. ⓑ{I} V1) T1 T2 → - cpr L (ⓑ{a,I} V1. T1) (ⓑ{a,I} V2. T2) + cpr L V1 V2 → cpr (L.ⓑ{I}V1) T1 T2 → + cpr L (ⓑ{a,I}V1.T1) (ⓑ{a,I}V2.T2) | cpr_flat : ∀I,L,V1,V2,T1,T2. cpr L V1 V2 → cpr L T1 T2 → - cpr L (ⓕ{I} V1. T1) (ⓕ{I} V2. T2) + cpr L (ⓕ{I} V1. T1) (ⓕ{I}V2.T2) | cpr_zeta : ∀L,V,T1,T,T2. cpr (L.ⓓV) T1 T → - ⇧[0, 1] T2 ≡ T → cpr L (+ⓓV. T1) T2 -| cpr_tau : ∀L,V,T1,T2. cpr L T1 T2 → cpr L (ⓝV. T1) T2 -| cpr_beta : ∀a,L,V1,V2,W,T1,T2. - cpr L V1 V2 → cpr (L.ⓛW) T1 T2 → - cpr L (ⓐV1. ⓛ{a}W. T1) (ⓓ{a}V2. T2) + ⇧[0, 1] T2 ≡ T → cpr L (+ⓓV.T1) T2 +| cpr_tau : ∀L,V,T1,T2. cpr L T1 T2 → cpr L (ⓝV.T1) T2 +| cpr_beta : ∀a,L,V1,V2,W1,W2,T1,T2. + cpr L V1 V2 → cpr L W1 W2 → cpr (L.ⓛW1) T1 T2 → + cpr L (ⓐV1.ⓛ{a}W1.T1) (ⓓ{a}ⓝW2.V2.T2) | cpr_theta: ∀a,L,V1,V,V2,W1,W2,T1,T2. cpr L V1 V → ⇧[0, 1] V ≡ V2 → cpr L W1 W2 → cpr (L.ⓓW1) T1 T2 → - cpr L (ⓐV1. ⓓ{a}W1. T1) (ⓓ{a}W2. ⓐV2. T2) + cpr L (ⓐV1.ⓓ{a}W1.T1) (ⓓ{a}W2.ⓐV2.T2) . interpretation "context-sensitive parallel reduction (term)" @@ -45,11 +48,11 @@ interpretation "context-sensitive parallel reduction (term)" (* Basic properties *********************************************************) -lemma cpr_lsubr_trans: lsub_trans … cpr lsubr. +lemma lsubx_cpr_trans: lsub_trans … cpr lsubx. #L1 #T1 #T2 #H elim H -L1 -T1 -T2 [ // | #L1 #K1 #V1 #V2 #W2 #i #HLK1 #_ #HVW2 #IHV12 #L2 #HL12 - elim (lsubr_fwd_ldrop2_abbr … HL12 … HLK1) -HL12 -HLK1 /3 width=6/ + elim (lsubx_fwd_ldrop2_abbr … HL12 … HLK1) -L1 * /3 width=6/ |3,7: /4 width=1/ |4,6: /3 width=1/ |5,8: /4 width=3/ @@ -59,29 +62,33 @@ qed-. (* Basic_1: was by definition: pr2_free *) lemma tpr_cpr: ∀T1,T2. ⋆ ⊢ T1 ➡ T2 → ∀L. L ⊢ T1 ➡ T2. #T1 #T2 #HT12 #L -lapply (cpr_lsubr_trans … HT12 L ?) // +lapply (lsubx_cpr_trans … HT12 L ?) // qed. -lemma cpqs_cpr: ∀L,T1,T2. L ⊢ T1 ➤* T2 → L ⊢ T1 ➡ T2. -#L #T1 #T2 #H elim H -L -T1 -T2 // /2 width=1/ /2 width=6/ -qed. - -lemma cpss_cpr: ∀L,T1,T2. L ⊢ T1 ▶* T2 → L ⊢ T1 ➡ T2. -/3 width=1/ qed. - (* Basic_1: includes by definition: pr0_refl *) lemma cpr_refl: ∀T,L. L ⊢ T ➡ T. -/2 width=1/ qed. +#T elim T -T // * /2 width=1/ +qed. (* Basic_1: was: pr2_head_1 *) lemma cpr_pair_sn: ∀I,L,V1,V2. L ⊢ V1 ➡ V2 → ∀T. L ⊢ ②{I}V1.T ➡ ②{I}V2.T. * /2 width=1/ qed. -lemma cpr_delift: ∀L,K,V,T1,d. ⇩[0, d] L ≡ (K. ⓓV) → +lemma cpr_delift: ∀K,V,T1,L,d. ⇩[0, d] L ≡ (K.ⓓV) → ∃∃T2,T. L ⊢ T1 ➡ T2 & ⇧[d, 1] T ≡ T2. -#L #K #V #T1 #d #HLK -elim (cpqs_delift … T1 … HLK) -HLK /3 width=4/ +#K #V #T1 elim T1 -T1 +[ * #i #L #d #HLK /2 width=4/ + elim (lt_or_eq_or_gt i d) #Hid [1,3: /3 width=4/ ] + destruct + elim (lift_total V 0 (i+1)) #W #HVW + elim (lift_split … HVW i i) // /3 width=6/ +| * [ #a ] #I #W1 #U1 #IHW1 #IHU1 #L #d #HLK + elim (IHW1 … HLK) -IHW1 #W2 #W #HW12 #HW2 + [ elim (IHU1 (L. ⓑ{I}W1) (d+1)) -IHU1 /2 width=1/ -HLK /3 width=9/ + | elim (IHU1 … HLK) -IHU1 -HLK /3 width=8/ + ] +] qed-. lemma cpr_append: l_appendable_sn … cpr. @@ -92,12 +99,6 @@ lapply (ldrop_fwd_length_lt2 … HK0) #H @(ldrop_O1_append_sn_le … HK0) /2 width=2/ (**) (* /3/ does not work *) qed. -lemma cpr_ext_bind: ∀L,V1,V2. L ⊢ V1 ➡ V2 → ∀V,T1,T2. L.ⓛV ⊢ T1 ➡ T2 → - ∀a,I. L ⊢ ⓑ{a,I}V1. T1 ➡ ⓑ{a,I}V2. T2. -#L #V1 #V2 #HV12 #V #T1 #T2 #HT12 #a #I -lapply (cpr_lsubr_trans … HT12 (L.ⓑ{I}V1) ?) -HT12 /2 width=1/ -qed. - (* Basic inversion lemmas ***************************************************) fact cpr_inv_atom1_aux: ∀L,T1,T2. L ⊢ T1 ➡ T2 → ∀I. T1 = ⓪{I} → @@ -113,7 +114,7 @@ fact cpr_inv_atom1_aux: ∀L,T1,T2. L ⊢ T1 ➡ T2 → ∀I. T1 = ⓪{I} → | #I #L #V1 #V2 #T1 #T2 #_ #_ #J #H destruct | #L #V #T1 #T #T2 #_ #_ #J #H destruct | #L #V #T1 #T2 #_ #J #H destruct -| #a #L #V1 #V2 #W #T1 #T2 #_ #_ #J #H destruct +| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #J #H destruct | #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #J #H destruct ] qed-. @@ -151,37 +152,37 @@ elim (cpr_inv_atom1 … H) -H // qed-. fact cpr_inv_bind1_aux: ∀L,U1,U2. L ⊢ U1 ➡ U2 → - ∀a,I,V1,T1. U1 = ⓑ{a,I} V1. T1 → ( + ∀a,I,V1,T1. U1 = ⓑ{a,I}V1. T1 → ( ∃∃V2,T2. L ⊢ V1 ➡ V2 & - L. ⓑ{I} V1 ⊢ T1 ➡ T2 & - U2 = ⓑ{a,I} V2. T2 + L. ⓑ{I}V1 ⊢ T1 ➡ T2 & + U2 = ⓑ{a,I}V2.T2 ) ∨ ∃∃T. L.ⓓV1 ⊢ T1 ➡ T & ⇧[0, 1] U2 ≡ T & a = true & I = Abbr. #L #U1 #U2 * -L -U1 -U2 [ #I #L #b #J #W1 #U1 #H destruct -| #L #K #V #V2 #W2 #i #_ #_ #_ #b #J #W1 #U1 #H destruct -| #a #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #b #J #W1 #U1 #H destruct /3 width=5/ -| #I #L #V1 #V2 #T1 #T2 #_ #_ #b #J #W1 #U1 #H destruct -| #L #V #T1 #T #T2 #HT1 #HT2 #b #J #W1 #U1 #H destruct /3 width=3/ -| #L #V #T1 #T2 #_ #b #J #W1 #U1 #H destruct -| #a #L #V1 #V2 #W #T1 #T2 #_ #_ #b #J #W1 #U1 #H destruct -| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #b #J #W1 #U1 #H destruct +| #L #K #V #V2 #W2 #i #_ #_ #_ #b #J #W #U1 #H destruct +| #a #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #b #J #W #U1 #H destruct /3 width=5/ +| #I #L #V1 #V2 #T1 #T2 #_ #_ #b #J #W #U1 #H destruct +| #L #V #T1 #T #T2 #HT1 #HT2 #b #J #W #U1 #H destruct /3 width=3/ +| #L #V #T1 #T2 #_ #b #J #W #U1 #H destruct +| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #b #J #W #U1 #H destruct +| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #b #J #W #U1 #H destruct ] qed-. -lemma cpr_inv_bind1: ∀a,I,L,V1,T1,U2. L ⊢ ⓑ{a,I} V1. T1 ➡ U2 → ( +lemma cpr_inv_bind1: ∀a,I,L,V1,T1,U2. L ⊢ ⓑ{a,I}V1.T1 ➡ U2 → ( ∃∃V2,T2. L ⊢ V1 ➡ V2 & - L. ⓑ{I} V1 ⊢ T1 ➡ T2 & - U2 = ⓑ{a,I} V2. T2 + L. ⓑ{I}V1 ⊢ T1 ➡ T2 & + U2 = ⓑ{a,I}V2.T2 ) ∨ ∃∃T. L.ⓓV1 ⊢ T1 ➡ T & ⇧[0, 1] U2 ≡ T & a = true & I = Abbr. /2 width=3 by cpr_inv_bind1_aux/ qed-. (* Basic_1: includes: pr0_gen_abbr pr2_gen_abbr *) -lemma cpr_inv_abbr1: ∀a,L,V1,T1,U2. L ⊢ ⓓ{a} V1. T1 ➡ U2 → ( +lemma cpr_inv_abbr1: ∀a,L,V1,T1,U2. L ⊢ ⓓ{a}V1.T1 ➡ U2 → ( ∃∃V2,T2. L ⊢ V1 ➡ V2 & - L. ⓓ V1 ⊢ T1 ➡ T2 & - U2 = ⓓ{a} V2. T2 + L. ⓓV1 ⊢ T1 ➡ T2 & + U2 = ⓓ{a}V2.T2 ) ∨ ∃∃T. L.ⓓV1 ⊢ T1 ➡ T & ⇧[0, 1] U2 ≡ T & a = true. #a #L #V1 #T1 #U2 #H @@ -189,9 +190,9 @@ elim (cpr_inv_bind1 … H) -H * /3 width=3/ /3 width=5/ qed-. (* Basic_1: includes: pr0_gen_abst pr2_gen_abst *) -lemma cpr_inv_abst1: ∀a,L,V1,T1,U2. L ⊢ ⓛ{a} V1. T1 ➡ U2 → - ∃∃V2,T2. L ⊢ V1 ➡ V2 & L. ⓛ V1 ⊢ T1 ➡ T2 & - U2 = ⓛ{a} V2. T2. +lemma cpr_inv_abst1: ∀a,L,V1,T1,U2. L ⊢ ⓛ{a}V1.T1 ➡ U2 → + ∃∃V2,T2. L ⊢ V1 ➡ V2 & L.ⓛV1 ⊢ T1 ➡ T2 & + U2 = ⓛ{a}V2.T2. #a #L #V1 #T1 #U2 #H elim (cpr_inv_bind1 … H) -H * [ /3 width=5/ @@ -200,55 +201,56 @@ elim (cpr_inv_bind1 … H) -H * qed-. fact cpr_inv_flat1_aux: ∀L,U,U2. L ⊢ U ➡ U2 → - ∀I,V1,U1. U = ⓕ{I} V1. U1 → + ∀I,V1,U1. U = ⓕ{I}V1.U1 → ∨∨ ∃∃V2,T2. L ⊢ V1 ➡ V2 & L ⊢ U1 ➡ T2 & U2 = ⓕ{I} V2. T2 | (L ⊢ U1 ➡ U2 ∧ I = Cast) - | ∃∃a,V2,W,T1,T2. L ⊢ V1 ➡ V2 & L.ⓛW ⊢ T1 ➡ T2 & - U1 = ⓛ{a}W. T1 & - U2 = ⓓ{a}V2. T2 & I = Appl + | ∃∃a,V2,W1,W2,T1,T2. L ⊢ V1 ➡ V2 & L ⊢ W1 ➡ W2 & + L.ⓛW1 ⊢ T1 ➡ T2 & U1 = ⓛ{a}W1.T1 & + U2 = ⓓ{a}ⓝW2.V2.T2 & I = Appl | ∃∃a,V,V2,W1,W2,T1,T2. L ⊢ V1 ➡ V & ⇧[0,1] V ≡ V2 & L ⊢ W1 ➡ W2 & L.ⓓW1 ⊢ T1 ➡ T2 & - U1 = ⓓ{a}W1. T1 & - U2 = ⓓ{a}W2. ⓐV2. T2 & I = Appl. + U1 = ⓓ{a}W1.T1 & + U2 = ⓓ{a}W2.ⓐV2.T2 & I = Appl. #L #U #U2 * -L -U -U2 [ #I #L #J #W1 #U1 #H destruct -| #L #K #V #V2 #W2 #i #_ #_ #_ #J #W1 #U1 #H destruct -| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #W1 #U1 #H destruct -| #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #J #W1 #U1 #H destruct /3 width=5/ -| #L #V #T1 #T #T2 #_ #_ #J #W1 #U1 #H destruct -| #L #V #T1 #T2 #HT12 #J #W1 #U1 #H destruct /3 width=1/ -| #a #L #V1 #V2 #W #T1 #T2 #HV12 #HT12 #J #W1 #U1 #H destruct /3 width=9/ -| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HW12 #HT12 #J #W1 #U1 #H destruct /3 width=13/ +| #L #K #V #V2 #W2 #i #_ #_ #_ #J #W #U1 #H destruct +| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #W #U1 #H destruct +| #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #J #W #U1 #H destruct /3 width=5/ +| #L #V #T1 #T #T2 #_ #_ #J #W #U1 #H destruct +| #L #V #T1 #T2 #HT12 #J #W #U1 #H destruct /3 width=1/ +| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HW12 #HT12 #J #W #U1 #H destruct /3 width=11/ +| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HW12 #HT12 #J #W #U1 #H destruct /3 width=13/ ] qed-. -lemma cpr_inv_flat1: ∀I,L,V1,U1,U2. L ⊢ ⓕ{I} V1. U1 ➡ U2 → +lemma cpr_inv_flat1: ∀I,L,V1,U1,U2. L ⊢ ⓕ{I}V1.U1 ➡ U2 → ∨∨ ∃∃V2,T2. L ⊢ V1 ➡ V2 & L ⊢ U1 ➡ T2 & - U2 = ⓕ{I} V2. T2 + U2 = ⓕ{I}V2.T2 | (L ⊢ U1 ➡ U2 ∧ I = Cast) - | ∃∃a,V2,W,T1,T2. L ⊢ V1 ➡ V2 & L.ⓛW ⊢ T1 ➡ T2 & - U1 = ⓛ{a}W. T1 & - U2 = ⓓ{a}V2. T2 & I = Appl + | ∃∃a,V2,W1,W2,T1,T2. L ⊢ V1 ➡ V2 & L ⊢ W1 ➡ W2 & + L.ⓛW1 ⊢ T1 ➡ T2 & U1 = ⓛ{a}W1.T1 & + U2 = ⓓ{a}ⓝW2.V2.T2 & I = Appl | ∃∃a,V,V2,W1,W2,T1,T2. L ⊢ V1 ➡ V & ⇧[0,1] V ≡ V2 & L ⊢ W1 ➡ W2 & L.ⓓW1 ⊢ T1 ➡ T2 & - U1 = ⓓ{a}W1. T1 & - U2 = ⓓ{a}W2. ⓐV2. T2 & I = Appl. + U1 = ⓓ{a}W1.T1 & + U2 = ⓓ{a}W2.ⓐV2.T2 & I = Appl. /2 width=3 by cpr_inv_flat1_aux/ qed-. (* Basic_1: includes: pr0_gen_appl pr2_gen_appl *) -lemma cpr_inv_appl1: ∀L,V1,U1,U2. L ⊢ ⓐ V1. U1 ➡ U2 → +lemma cpr_inv_appl1: ∀L,V1,U1,U2. L ⊢ ⓐV1.U1 ➡ U2 → ∨∨ ∃∃V2,T2. L ⊢ V1 ➡ V2 & L ⊢ U1 ➡ T2 & - U2 = ⓐ V2. T2 - | ∃∃a,V2,W,T1,T2. L ⊢ V1 ➡ V2 & L.ⓛW ⊢ T1 ➡ T2 & - U1 = ⓛ{a}W. T1 & U2 = ⓓ{a}V2. T2 + U2 = ⓐV2.T2 + | ∃∃a,V2,W1,W2,T1,T2. L ⊢ V1 ➡ V2 & L ⊢ W1 ➡ W2 & + L.ⓛW1 ⊢ T1 ➡ T2 & + U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 | ∃∃a,V,V2,W1,W2,T1,T2. L ⊢ V1 ➡ V & ⇧[0,1] V ≡ V2 & L ⊢ W1 ➡ W2 & L.ⓓW1 ⊢ T1 ➡ T2 & - U1 = ⓓ{a}W1. T1 & U2 = ⓓ{a}W2. ⓐV2. T2. + U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2.ⓐV2.T2. #L #V1 #U1 #U2 #H elim (cpr_inv_flat1 … H) -H * [ /3 width=5/ | #_ #H destruct -| /3 width=9/ +| /3 width=11/ | /3 width=13/ ] qed-. @@ -260,7 +262,7 @@ lemma cpr_inv_appl1_simple: ∀L,V1,T1,U. L ⊢ ⓐV1. T1 ➡ U → 𝐒⦃T1⦄ #L #V1 #T1 #U #H #HT1 elim (cpr_inv_appl1 … H) -H * [ /2 width=5/ -| #a #V2 #W #U1 #U2 #_ #_ #H #_ destruct +| #a #V2 #W1 #W2 #U1 #U2 #_ #_ #_ #H #_ destruct elim (simple_inv_bind … HT1) | #a #V #V2 #W1 #W2 #U1 #U2 #_ #_ #_ #_ #H #_ destruct elim (simple_inv_bind … HT1) @@ -276,29 +278,13 @@ lemma cpr_inv_cast1: ∀L,V1,U1,U2. L ⊢ ⓝ V1. U1 ➡ U2 → ( #L #V1 #U1 #U2 #H elim (cpr_inv_flat1 … H) -H * [ /3 width=5/ | /2 width=1/ -| #a #V2 #W #T1 #T2 #_ #_ #_ #_ #H destruct +| #a #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #H destruct | #a #V #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #H destruct ] qed-. (* Basic forward lemmas *****************************************************) -lemma cpr_fwd_abst1: ∀a,L,V1,T1,U2. L ⊢ ⓛ{a}V1.T1 ➡ U2 → ∀I,W. - ∃∃V2,T2. L ⊢ V1 ➡ V2 & L. ⓑ{I} W ⊢ T1 ➡ T2 & - U2 = ⓛ{a} V2. T2. -#a #L #V1 #T1 #U2 #H #I #W -elim (cpr_inv_abst1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct -lapply (cpr_lsubr_trans … HT12 (L.ⓑ{I}W) ?) -HT12 /2 width=1/ /2 width=5/ -qed-. - - -lemma cpr_fwd_ext_abst1: ∀a,L,V1,T1,U2. L ⊢ ⓛ{a}V1.T1 ➡ U2 → ∀b,I,W. - ∃∃V2,T2. L ⊢ V1 ➡ V2 & L ⊢ ⓑ{b,I}W.T1 ➡ ⓑ{b,I}W.T2 & - U2 = ⓛ{a}V2.T2. -#a #L #V1 #T1 #U2 #H #b #I #W -elim (cpr_fwd_abst1 … H I W) -H /3 width=5/ -qed-. - lemma cpr_fwd_bind1_minus: ∀I,L,V1,T1,T. L ⊢ -ⓑ{I}V1.T1 ➡ T → ∀b. ∃∃V2,T2. L ⊢ ⓑ{b,I}V1.T1 ➡ ⓑ{b,I}V2.T2 & T = -ⓑ{I}V2.T2. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_cir.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_cir.ma index 0a9b0a6db..ee49679b7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_cir.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_cir.ma @@ -39,7 +39,7 @@ lemma cpr_fwd_cir: ∀L,T1,T2. L ⊢ T1 ➡ T2 → L ⊢ 𝐈⦃T1⦄ → T2 = T elim (cir_inv_ri2 … H) /2 width=1/ | #L #V1 #T1 #T2 #_ #_ #H elim (cir_inv_ri2 … H) /2 width=1/ -| #a #L #V1 #V2 #W #T1 #T2 #_ #_ #_ #_ #H +| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #H elim (cir_inv_appl … H) -H #_ #_ #H elim (simple_inv_bind … H) | #a #L #V #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #_ #H @@ -47,6 +47,3 @@ lemma cpr_fwd_cir: ∀L,T1,T2. L ⊢ T1 ➡ T2 → L ⊢ 𝐈⦃T1⦄ → T2 = T elim (simple_inv_bind … H) ] qed-. - -lemma cpss_fwd_cir_eq: ∀L,T1,T2. L ⊢ T1 ▶* T2 → L ⊢ 𝐈⦃T1⦄ → T2 = T1. -/3 width=3 by cpr_fwd_cir, cpss_cpr/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_lift.ma index 8c3d56e31..41c77dc3f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr_lift.ma @@ -43,16 +43,17 @@ lemma cpr_lift: l_liftable cpr. elim (lift_conf_O1 … HTU2 … HT2) -T2 /4 width=5/ | #K #V #T1 #T2 #_ #IHT12 #L #d #e #HLK #U1 #H #U2 #HTU2 elim (lift_inv_flat1 … H) -H #VV1 #TT1 #HVV1 #HTT1 #H destruct /3 width=5/ -| #a #K #V1 #V2 #W #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #X1 #HX1 #X2 #HX2 +| #a #K #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #L #d #e #HLK #X1 #HX1 #X2 #HX2 elim (lift_inv_flat1 … HX1) -HX1 #V0 #X #HV10 #HX #HX1 destruct elim (lift_inv_bind1 … HX) -HX #W0 #T0 #HW0 #HT10 #HX destruct - elim (lift_inv_bind1 … HX2) -HX2 #V3 #T3 #HV23 #HT23 #HX2 destruct /4 width=5/ + elim (lift_inv_bind1 … HX2) -HX2 #X #T3 #HX #HT23 #HX2 destruct + elim (lift_inv_flat1 … HX) -HX #W3 #V3 #HW23 #HV23 #HX destruct /4 width=5/ | #a #K #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #HV2 #_ #_ #IHV1 #IHW12 #IHT12 #L #d #e #HLK #X1 #HX1 #X2 #HX2 elim (lift_inv_flat1 … HX1) -HX1 #V0 #X #HV10 #HX #HX1 destruct elim (lift_inv_bind1 … HX) -HX #W0 #T0 #HW0 #HT10 #HX destruct elim (lift_inv_bind1 … HX2) -HX2 #W3 #X #HW23 #HX #HX2 destruct elim (lift_inv_flat1 … HX) -HX #V3 #T3 #HV3 #HT23 #HX destruct - elim (lift_trans_ge … HV2 … HV3 ?) -V2 // /4 width=5/ + elim (lift_trans_ge … HV2 … HV3) -V2 // /4 width=5/ ] qed. @@ -89,18 +90,20 @@ lemma cpr_inv_lift1: l_deliftable_sn cpr. | #L #V #U1 #U2 #_ #IHU12 #K #d #e #HLK #X #H elim (lift_inv_flat2 … H) -H #W1 #T1 #HWV1 #HTU1 #H destruct elim (IHU12 … HLK … HTU1) -L -U1 /3 width=3/ -| #a #L #V1 #V2 #W #T1 #T2 #_ #_ #IHV12 #IHT12 #K #d #e #HLK #X #HX +| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #IHV12 #IHW12 #IHT12 #K #d #e #HLK #X #HX elim (lift_inv_flat2 … HX) -HX #V0 #Y #HV01 #HY #HX destruct elim (lift_inv_bind2 … HY) -HY #W0 #T0 #HW01 #HT01 #HY destruct - elim (IHV12 … HLK … HV01) -V1 - elim (IHT12 (K.ⓛW0) … HT01) -T1 /2 width=1/ /3 width=5/ + elim (IHV12 … HLK … HV01) -V1 #V3 #HV32 #HV03 + elim (IHT12 (K.ⓛW0) … HT01) -T1 /2 width=1/ #T3 #HT32 #HT03 + elim (IHW12 … HLK … HW01) -W1 #W3 #HW32 #HW03 + @ex2_intro [2: /3 width=2/ | skip |3: /2 width=1/ ] (**) (* /4 width=6/ is slow *) | #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #HV2 #_ #_ #IHV1 #IHW12 #IHT12 #K #d #e #HLK #X #HX elim (lift_inv_flat2 … HX) -HX #V0 #Y #HV01 #HY #HX destruct elim (lift_inv_bind2 … HY) -HY #W0 #T0 #HW01 #HT01 #HY destruct elim (IHV1 … HLK … HV01) -V1 #V3 #HV3 #HV03 elim (IHT12 (K.ⓓW0) … HT01) -T1 /2 width=1/ #T3 #HT32 #HT03 elim (IHW12 … HLK … HW01) -W1 #W3 #HW32 #HW03 - elim (lift_trans_le … HV3 … HV2 ?) -V // #V #HV3 #HV2 + elim (lift_trans_le … HV3 … HV2) -V // #V #HV3 #HV2 @ex2_intro [2: /3 width=2/ | skip |3: /2 width=3/ ] (**) (* /4 width=5/ is slow *) ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma index 35d4819f4..3d116e292 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma @@ -12,9 +12,9 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/pred_5.ma". include "basic_2/static/ssta.ma". include "basic_2/reduction/cpr.ma". -include "basic_2/reduction/lsubx.ma". (* CONTEXT-SENSITIVE EXTENDED PARALLEL REDUCTION FOR TERMS ******************) @@ -66,11 +66,11 @@ qed-. lemma cpx_refl: ∀h,g,T,L. ⦃h, L⦄ ⊢ T ➡[g] T. #h #g #T elim T -T // * /2 width=1/ qed. -(* -lamma cpr_cpx: ∀h,g,L,T1,T2. L ⊢ T1 ➡ T2 → ⦃h, L⦄ ⊢ T1 ➡[g] T2. + +lemma cpr_cpx: ∀h,g,L,T1,T2. L ⊢ T1 ➡ T2 → ⦃h, L⦄ ⊢ T1 ➡[g] T2. #h #g #L #T1 #T2 #H elim H -L -T1 -T2 // /2 width=1/ /2 width=3/ /2 width=7/ qed. -*) + fact ssta_cpx_aux: ∀h,g,L,T1,T2,l0. ⦃h, L⦄ ⊢ T1 •[g] ⦃l0, T2⦄ → ∀l. l0 = l+1 → ⦃h, L⦄ ⊢ T1 ➡[g] T2. #h #g #L #T1 #T2 #l0 #H elim H -L -T1 -T2 -l0 /2 width=2/ /2 width=7/ /3 width=2/ /3 width=7/ @@ -164,23 +164,23 @@ elim (cpx_inv_atom1 … H) -H // * qed-. fact cpx_inv_bind1_aux: ∀h,g,L,U1,U2. ⦃h, L⦄ ⊢ U1 ➡[g] U2 → - ∀a,J,V1,T1. U1 = ⓑ{a,J} V1. T1 → ( + ∀a,J,V1,T1. U1 = ⓑ{a,J}V1.T1 → ( ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L.ⓑ{J}V1⦄ ⊢ T1 ➡[g] T2 & - U2 = ⓑ{a,J} V2. T2 + U2 = ⓑ{a,J}V2.T2 ) ∨ ∃∃T. ⦃h, L.ⓓV1⦄ ⊢ T1 ➡[g] T & ⇧[0, 1] U2 ≡ T & a = true & J = Abbr. #h #g #L #U1 #U2 * -L -U1 -U2 -[ #I #L #b #J #W1 #U1 #H destruct -| #L #k #l #_ #b #J #W1 #U1 #H destruct -| #I #L #K #V #V2 #W2 #i #_ #_ #_ #b #J #W1 #U1 #H destruct -| #a #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #b #J #W1 #U1 #H destruct /3 width=5/ -| #I #L #V1 #V2 #T1 #T2 #_ #_ #b #J #W1 #U1 #H destruct -| #L #V #T1 #T #T2 #HT1 #HT2 #b #J #W1 #U1 #H destruct /3 width=3/ -| #L #V #T1 #T2 #_ #b #J #W1 #U1 #H destruct -| #L #V1 #V2 #T #_ #b #J #W1 #U1 #H destruct -| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #b #J #W1 #U1 #H destruct -| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #b #J #W1 #U1 #H destruct +[ #I #L #b #J #W #U1 #H destruct +| #L #k #l #_ #b #J #W #U1 #H destruct +| #I #L #K #V #V2 #W2 #i #_ #_ #_ #b #J #W #U1 #H destruct +| #a #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #b #J #W #U1 #H destruct /3 width=5/ +| #I #L #V1 #V2 #T1 #T2 #_ #_ #b #J #W #U1 #H destruct +| #L #V #T1 #T #T2 #HT1 #HT2 #b #J #W #U1 #H destruct /3 width=3/ +| #L #V #T1 #T2 #_ #b #J #W #U1 #H destruct +| #L #V1 #V2 #T #_ #b #J #W #U1 #H destruct +| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #b #J #W #U1 #H destruct +| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #b #J #W #U1 #H destruct ] qed-. @@ -193,7 +193,7 @@ lemma cpx_inv_bind1: ∀h,g,a,I,L,V1,T1,U2. ⦃h, L⦄ ⊢ ⓑ{a,I}V1.T1 ➡[g] /2 width=3 by cpx_inv_bind1_aux/ qed-. lemma cpx_inv_abbr1: ∀h,g,a,L,V1,T1,U2. ⦃h, L⦄ ⊢ ⓓ{a}V1.T1 ➡[g] U2 → ( - ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L.ⓓ V1⦄ ⊢ T1 ➡[g] T2 & + ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L.ⓓV1⦄ ⊢ T1 ➡[g] T2 & U2 = ⓓ{a} V2. T2 ) ∨ ∃∃T. ⦃h, L.ⓓV1⦄ ⊢ T1 ➡[g] T & ⇧[0, 1] U2 ≡ T & a = true. @@ -202,7 +202,7 @@ elim (cpx_inv_bind1 … H) -H * /3 width=3/ /3 width=5/ qed-. lemma cpx_inv_abst1: ∀h,g,a,L,V1,T1,U2. ⦃h, L⦄ ⊢ ⓛ{a}V1.T1 ➡[g] U2 → - ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L.ⓛ V1⦄ ⊢ T1 ➡[g] T2 & + ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L.ⓛV1⦄ ⊢ T1 ➡[g] T2 & U2 = ⓛ{a} V2. T2. #h #g #a #L #V1 #T1 #U2 #H elim (cpx_inv_bind1 … H) -H * @@ -212,9 +212,9 @@ elim (cpx_inv_bind1 … H) -H * qed-. fact cpx_inv_flat1_aux: ∀h,g,L,U,U2. ⦃h, L⦄ ⊢ U ➡[g] U2 → - ∀J,V1,U1. U = ⓕ{J} V1. U1 → + ∀J,V1,U1. U = ⓕ{J}V1.U1 → ∨∨ ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L⦄ ⊢ U1 ➡[g] T2 & - U2 = ⓕ{J} V2.T2 + U2 = ⓕ{J}V2.T2 | (⦃h, L⦄ ⊢ U1 ➡[g] U2 ∧ J = Cast) | (⦃h, L⦄ ⊢ V1 ➡[g] U2 ∧ J = Cast) | ∃∃a,V2,W1,W2,T1,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L⦄ ⊢ W1 ➡[g] W2 & @@ -223,19 +223,19 @@ fact cpx_inv_flat1_aux: ∀h,g,L,U,U2. ⦃h, L⦄ ⊢ U ➡[g] U2 → U2 = ⓓ{a}ⓝW2.V2.T2 & J = Appl | ∃∃a,V,V2,W1,W2,T1,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V & ⇧[0,1] V ≡ V2 & ⦃h, L⦄ ⊢ W1 ➡[g] W2 & ⦃h, L.ⓓW1⦄ ⊢ T1 ➡[g] T2 & - U1 = ⓓ{a}W1. T1 & - U2 = ⓓ{a}W2. ⓐV2. T2 & J = Appl. + U1 = ⓓ{a}W1.T1 & + U2 = ⓓ{a}W2.ⓐV2.T2 & J = Appl. #h #g #L #U #U2 * -L -U -U2 -[ #I #L #J #W1 #U1 #H destruct -| #L #k #l #_ #J #W1 #U1 #H destruct -| #I #L #K #V #V2 #W2 #i #_ #_ #_ #J #W1 #U1 #H destruct -| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #W1 #U1 #H destruct -| #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #J #W1 #U1 #H destruct /3 width=5/ -| #L #V #T1 #T #T2 #_ #_ #J #W1 #U1 #H destruct -| #L #V #T1 #T2 #HT12 #J #W1 #U1 #H destruct /3 width=1/ -| #L #V1 #V2 #T #HV12 #J #W1 #U1 #H destruct /3 width=1/ -| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HW12 #HT12 #J #W1 #U1 #H destruct /3 width=11/ -| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HW12 #HT12 #J #W1 #U1 #H destruct /3 width=13/ +[ #I #L #J #W #U1 #H destruct +| #L #k #l #_ #J #W #U1 #H destruct +| #I #L #K #V #V2 #W2 #i #_ #_ #_ #J #W #U1 #H destruct +| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #W #U1 #H destruct +| #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #J #W #U1 #H destruct /3 width=5/ +| #L #V #T1 #T #T2 #_ #_ #J #W #U1 #H destruct +| #L #V #T1 #T2 #HT12 #J #W #U1 #H destruct /3 width=1/ +| #L #V1 #V2 #T #HV12 #J #W #U1 #H destruct /3 width=1/ +| #a #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HW12 #HT12 #J #W #U1 #H destruct /3 width=11/ +| #a #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HW12 #HT12 #J #W #U1 #H destruct /3 width=13/ ] qed-. @@ -250,8 +250,8 @@ lemma cpx_inv_flat1: ∀h,g,I,L,V1,U1,U2. ⦃h, L⦄ ⊢ ⓕ{I}V1.U1 ➡[g] U2 U2 = ⓓ{a}ⓝW2.V2.T2 & I = Appl | ∃∃a,V,V2,W1,W2,T1,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V & ⇧[0,1] V ≡ V2 & ⦃h, L⦄ ⊢ W1 ➡[g] W2 & ⦃h, L.ⓓW1⦄ ⊢ T1 ➡[g] T2 & - U1 = ⓓ{a}W1. T1 & - U2 = ⓓ{a}W2. ⓐV2. T2 & I = Appl. + U1 = ⓓ{a}W1.T1 & + U2 = ⓓ{a}W2.ⓐV2.T2 & I = Appl. /2 width=3 by cpx_inv_flat1_aux/ qed-. lemma cpx_inv_appl1: ∀h,g,L,V1,U1,U2. ⦃h, L⦄ ⊢ ⓐ V1.U1 ➡[g] U2 → @@ -262,7 +262,7 @@ lemma cpx_inv_appl1: ∀h,g,L,V1,U1,U2. ⦃h, L⦄ ⊢ ⓐ V1.U1 ➡[g] U2 → U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 | ∃∃a,V,V2,W1,W2,T1,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V & ⇧[0,1] V ≡ V2 & ⦃h, L⦄ ⊢ W1 ➡[g] W2 & ⦃h, L.ⓓW1⦄ ⊢ T1 ➡[g] T2 & - U1 = ⓓ{a}W1. T1 & U2 = ⓓ{a}W2. ⓐV2. T2. + U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2. ⓐV2. T2. #h #g #L #V1 #U1 #U2 #H elim (cpx_inv_flat1 … H) -H * [ /3 width=5/ |2,3: #_ #H destruct @@ -274,7 +274,7 @@ qed-. (* Note: the main property of simple terms *) lemma cpx_inv_appl1_simple: ∀h,g,L,V1,T1,U. ⦃h, L⦄ ⊢ ⓐV1.T1 ➡[g] U → 𝐒⦃T1⦄ → ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L⦄ ⊢ T1 ➡[g] T2 & - U = ⓐV2. T2. + U = ⓐV2.T2. #h #g #L #V1 #T1 #U #H #HT1 elim (cpx_inv_appl1 … H) -H * [ /2 width=5/ @@ -285,7 +285,7 @@ elim (cpx_inv_appl1 … H) -H * ] qed-. -lemma cpx_inv_cast1: ∀h,g,L,V1,U1,U2. ⦃h, L⦄ ⊢ ⓝ V1.U1 ➡[g] U2 → +lemma cpx_inv_cast1: ∀h,g,L,V1,U1,U2. ⦃h, L⦄ ⊢ ⓝV1.U1 ➡[g] U2 → ∨∨ ∃∃V2,T2. ⦃h, L⦄ ⊢ V1 ➡[g] V2 & ⦃h, L⦄ ⊢ U1 ➡[g] T2 & U2 = ⓝ V2. T2 | ⦃h, L⦄ ⊢ U1 ➡[g] U2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx_lift.ma index 01ee35766..30eef6262 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx_lift.ma @@ -58,7 +58,7 @@ lemma cpx_lift: ∀h,g. l_liftable (cpx h g). elim (lift_inv_bind1 … HX) -HX #W0 #T0 #HW0 #HT10 #HX destruct elim (lift_inv_bind1 … HX2) -HX2 #W3 #X #HW23 #HX #HX2 destruct elim (lift_inv_flat1 … HX) -HX #V3 #T3 #HV3 #HT23 #HX destruct - elim (lift_trans_ge … HV2 … HV3 ?) -V2 // /4 width=5/ + elim (lift_trans_ge … HV2 … HV3) -V2 // /4 width=5/ ] qed. @@ -112,7 +112,7 @@ lemma cpx_inv_lift1: ∀h,g. l_deliftable_sn (cpx h g). elim (IHV1 … HLK … HV01) -V1 #V3 #HV3 #HV03 elim (IHT12 (K.ⓓW0) … HT01) -T1 /2 width=1/ #T3 #HT32 #HT03 elim (IHW12 … HLK … HW01) -W1 #W3 #HW32 #HW03 - elim (lift_trans_le … HV3 … HV2 ?) -V // #V #HV3 #HV2 + elim (lift_trans_le … HV3 … HV2) -V // #V #HV3 #HV2 @ex2_intro [2: /3 width=2/ | skip |3: /2 width=3/ ] (**) (* /4 width=5/ is slow *) ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma index e90a15581..b9a51d862 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/reducible_2.ma". include "basic_2/relocation/ldrop.ma". (* CONTEXT-SENSITIVE REDUCIBLE TERMS ****************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_append.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_append.ma index 174a14f75..fdb29e2af 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_append.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_append.ma @@ -38,7 +38,7 @@ fact crr_inv_labst_last_aux: ∀L1,T,W. L1 ⊢ 𝐑⦃T⦄ → [ #L1 #K1 #V1 #i #HLK1 #L2 #H destruct lapply (ldrop_fwd_length_lt2 … HLK1) >append_length >commutative_plus normalize in ⊢ (??% → ?); #H - elim (le_to_or_lt_eq i (|L2|) ?) /2 width=1/ -H #Hi destruct + elim (le_to_or_lt_eq i (|L2|)) /2 width=1/ -H #Hi destruct [ elim (ldrop_O1_lt … Hi) #I2 #K2 #V2 #HLK2 lapply (ldrop_O1_inv_append1_le … HLK1 … HLK2) -HLK1 /2 width=2/ -Hi normalize #H destruct /2 width=3/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma index 7e7f74763..059e62151 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/reducible_4.ma". include "basic_2/static/sd.ma". include "basic_2/reduction/crr.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr.ma index 04d5d1a29..afab7f20f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr.ma @@ -12,7 +12,8 @@ (* *) (**************************************************************************) -include "basic_2/unfold/lpqs.ma". +include "basic_2/notation/relations/predsn_2.ma". +include "basic_2/grammar/lpx_sn.ma". include "basic_2/reduction/cpr.ma". (* SN PARALLEL REDUCTION FOR LOCAL ENVIRONMENTS *****************************) @@ -54,13 +55,6 @@ lemma lpr_append: ∀K1,K2. K1 ⊢ ➡ K2 → ∀L1,L2. L1 ⊢ ➡ L2 → L1 @@ K1 ⊢ ➡ L2 @@ K2. /3 width=1 by lpx_sn_append, cpr_append/ qed. -lemma lpqs_lpr: ∀L1,L2. L1 ⊢ ➤* L2 → L1 ⊢ ➡ L2. -#L1 #L2 #H elim H -L1 -L2 // /3 width=1/ -qed. - -lemma lpss_lpr: ∀L1,L2. L1 ⊢ ▶* L2 → L1 ⊢ ➡ L2. -/3 width=1/ qed. - (* Basic forward lemmas *****************************************************) lemma lpr_fwd_length: ∀L1,L2. L1 ⊢ ➡ L2 → |L1| = |L2|. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma index fc3b65c60..ab7ac0d18 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma @@ -185,15 +185,17 @@ fact cpr_conf_lpr_flat_beta: ∃∃T0. L1 ⊢ T1 ➡ T0 & L2 ⊢ T2 ➡ T0 ) → ∀V1. L0 ⊢ V0 ➡ V1 → ∀T1. L0 ⊢ ⓛ{a}W0.T0 ➡ T1 → - ∀V2. L0 ⊢ V0 ➡ V2 → ∀T2. L0.ⓛW0 ⊢ T0 ➡ T2 → + ∀V2. L0 ⊢ V0 ➡ V2 → ∀W2. L0 ⊢ W0 ➡ W2 → ∀T2. L0.ⓛW0 ⊢ T0 ➡ T2 → ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ➡ L2 → - ∃∃T. L1 ⊢ ⓐV1.T1 ➡ T & L2 ⊢ ⓓ{a}V2.T2 ➡ T. + ∃∃T. L1 ⊢ ⓐV1.T1 ➡ T & L2 ⊢ ⓓ{a}ⓝW2.V2.T2 ➡ T. #a #L0 #V0 #W0 #T0 #IH #V1 #HV01 #X #H -#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02 +#V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cpr_inv_abst1 … H) -H #W1 #T1 #HW01 #HT01 #H destruct elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1/ #V #HV1 #HV2 -elim (IH … HT01 … HT02 (L1.ⓛW1) … (L2.ⓛW1)) /2 width=1/ -L0 -V0 -W0 -T0 #T #HT1 #HT2 -lapply (cpr_lsubr_trans … HT2 (L2.ⓓV2) ?) -HT2 /2 width=1/ /3 width=5/ +elim (IH … HW01 … HW02 … HL01 … HL02) /2 width=1/ #W #HW1 #HW2 +elim (IH … HT01 … HT02 (L1.ⓛW1) … (L2.ⓛW2)) /2 width=1/ -L0 -V0 -W0 -T0 #T #HT1 #HT2 +lapply (lsubx_cpr_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 /2 width=1/ +/4 width=5 by cpr_bind, cpr_flat, cpr_beta, ex2_intro/ (**) (* auto too slow without trace *) qed-. (* Basic-1: includes: @@ -236,16 +238,18 @@ fact cpr_conf_lpr_beta_beta: ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ➡ L2 → ∃∃T0. L1 ⊢ T1 ➡ T0 & L2 ⊢ T2 ➡ T0 ) → - ∀V1. L0 ⊢ V0 ➡ V1 → ∀T1. L0.ⓛW0 ⊢ T0 ➡ T1 → - ∀V2. L0 ⊢ V0 ➡ V2 → ∀T2. L0.ⓛW0 ⊢ T0 ➡ T2 → + ∀V1. L0 ⊢ V0 ➡ V1 → ∀W1. L0 ⊢ W0 ➡ W1 → ∀T1. L0.ⓛW0 ⊢ T0 ➡ T1 → + ∀V2. L0 ⊢ V0 ➡ V2 → ∀W2. L0 ⊢ W0 ➡ W2 → ∀T2. L0.ⓛW0 ⊢ T0 ➡ T2 → ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ➡ L2 → - ∃∃T. L1 ⊢ ⓓ{a}V1.T1 ➡ T & L2 ⊢ ⓓ{a}V2.T2 ➡ T. -#a #L0 #V0 #W0 #T0 #IH #V1 #HV01 #T1 #HT01 -#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02 + ∃∃T. L1 ⊢ ⓓ{a}ⓝW1.V1.T1 ➡ T & L2 ⊢ ⓓ{a}ⓝW2.V2.T2 ➡ T. +#a #L0 #V0 #W0 #T0 #IH #V1 #HV01 #W1 #HW01 #T1 #HT01 +#V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1/ #V #HV1 #HV2 -elim (IH … HT01 … HT02 (L1.ⓛW0) … (L2.ⓛW0)) /2 width=1/ -L0 -V0 -T0 #T #HT1 #HT2 -lapply (cpr_lsubr_trans … HT1 (L1.ⓓV1) ?) -HT1 /2 width=1/ -lapply (cpr_lsubr_trans … HT2 (L2.ⓓV2) ?) -HT2 /2 width=1/ /3 width=5/ +elim (IH … HW01 … HW02 … HL01 … HL02) /2 width=1/ #W #HW1 #HW2 +elim (IH … HT01 … HT02 (L1.ⓛW1) … (L2.ⓛW2)) /2 width=1/ -L0 -V0 -W0 -T0 #T #HT1 #HT2 +lapply (lsubx_cpr_trans … HT1 (L1.ⓓⓝW1.V1) ?) -HT1 /2 width=1/ +lapply (lsubx_cpr_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 /2 width=1/ +/4 width=5 by cpr_bind, cpr_flat, ex2_intro/ qed-. (* Basic_1: was: pr0_upsilon_upsilon *) @@ -306,23 +310,23 @@ theorem cpr_conf_lpr: lpx_sn_confluent cpr cpr. elim (cpr_inv_flat1 … H1) -H1 * [ #V1 #T1 #HV01 #HT01 #H1 | #HX1 #H1 - | #a1 #V1 #Y1 #Z1 #T1 #HV01 #HZT1 #H11 #H12 #H13 + | #a1 #V1 #Y1 #W1 #Z1 #T1 #HV01 #HYW1 #HZT1 #H11 #H12 #H13 | #a1 #V1 #U1 #Y1 #W1 #Z1 #T1 #HV01 #HVU1 #HYW1 #HZT1 #H11 #H12 #H13 ] elim (cpr_inv_flat1 … H2) -H2 * [1,5,9,13: #V2 #T2 #HV02 #HT02 #H2 |2,6,10,14: #HX2 #H2 - |3,7,11,15: #a2 #V2 #Y2 #Z2 #T2 #HV02 #HZT2 #H21 #H22 #H23 + |3,7,11,15: #a2 #V2 #Y2 #W2 #Z2 #T2 #HV02 #HYW2 #HZT2 #H21 #H22 #H23 |4,8,12,16: #a2 #V2 #U2 #Y2 #W2 #Z2 #T2 #HV02 #HVU2 #HYW2 #HZT2 #H21 #H22 #H23 ] destruct [ /3 width=10 by cpr_conf_lpr_flat_flat/ | /4 width=8 by ex2_commute, cpr_conf_lpr_flat_tau/ - | /4 width=11 by ex2_commute, cpr_conf_lpr_flat_beta/ + | /4 width=12 by ex2_commute, cpr_conf_lpr_flat_beta/ | /4 width=14 by ex2_commute, cpr_conf_lpr_flat_theta/ | /3 width=8 by cpr_conf_lpr_flat_tau/ | /3 width=7 by cpr_conf_lpr_tau_tau/ - | /3 width=11 by cpr_conf_lpr_flat_beta/ - | /3 width=11 by cpr_conf_lpr_beta_beta/ + | /3 width=12 by cpr_conf_lpr_flat_beta/ + | /3 width=13 by cpr_conf_lpr_beta_beta/ | /3 width=14 by cpr_conf_lpr_flat_theta/ | /3 width=17 by cpr_conf_lpr_theta_theta/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpss.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpss.ma deleted file mode 100644 index 9ce690f68..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpss.ma +++ /dev/null @@ -1,279 +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/grammar/lpx_sn_lpx_sn.ma". -include "basic_2/substitution/fsupp.ma". -include "basic_2/substitution/lpss_ldrop.ma". -include "basic_2/reduction/lpr_ldrop.ma". - -(* SN PARALLEL REDUCTION FOR LOCAL ENVIRONMENTS *****************************) - -(* Properties on context-sensitive parallel substitution for terms **********) - -fact cpr_cpss_conf_lpr_lpss_atom_atom: - ∀I,L1,L2. ∃∃T. L1 ⊢ ⓪{I} ▶* T & L2 ⊢ ⓪{I} ➡ T. -/2 width=3/ qed-. - -fact cpr_cpss_conf_lpr_lpss_atom_delta: - ∀L0,i. ( - ∀L,T. ⦃L0, #i⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀K0,V0. ⇩[O, i] L0 ≡ K0.ⓓV0 → - ∀V2. K0 ⊢ V0 ▶* V2 → ∀T2. ⇧[O, i + 1] V2 ≡ T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ #i ▶* T & L2 ⊢ T2 ➡ T. -#L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02 -elim (lpr_ldrop_conf … HLK0 … HL01) -HL01 #X1 #H1 #HLK1 -elim (lpr_inv_pair1 … H1) -H1 #K1 #V1 #HK01 #HV01 #H destruct -elim (lpss_ldrop_conf … HLK0 … HL02) -HL02 #X2 #H2 #HLK2 -elim (lpss_inv_pair1 … H2) -H2 #K2 #W2 #HK02 #_ #H destruct -lapply (ldrop_fwd_ldrop2 … HLK2) -W2 #HLK2 -lapply (fsupp_lref … HLK0) -HLK0 #HLK0 -elim (IH … HLK0 … HV01 … HV02 … HK01 … HK02) -L0 -K0 -V0 #V #HV1 #HV2 -elim (lift_total V 0 (i+1)) #T #HVT -lapply (cpr_lift … HV2 … HLK2 … HVT2 … HVT) -K2 -V2 /3 width=6/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_delta_atom: - ∀L0,i. ( - ∀L,T.⦃L0, #i⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀K0,V0. ⇩[O, i] L0 ≡ K0.ⓓV0 → - ∀V1. K0 ⊢ V0 ➡ V1 → ∀T1. ⇧[O, i + 1] V1 ≡ T1 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ T1 ▶* T & L2 ⊢ #i ➡ T. -#L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1 #L1 #HL01 #L2 #HL02 -elim (lpss_ldrop_conf … HLK0 … HL02) -HL02 #X2 #H2 #HLK2 -elim (lpss_inv_pair1 … H2) -H2 #K2 #V2 #HK02 #HV02 #H destruct -elim (lpr_ldrop_conf … HLK0 … HL01) -HL01 #X1 #H1 #HLK1 -elim (lpr_inv_pair1 … H1) -H1 #K1 #W1 #HK01 #_ #H destruct -lapply (ldrop_fwd_ldrop2 … HLK1) -W1 #HLK1 -lapply (fsupp_lref … HLK0) -HLK0 #HLK0 -elim (IH … HLK0 … HV01 … HV02 … HK01 … HK02) -L0 -K0 -V0 #V #HV1 #HV2 -elim (lift_total V 0 (i+1)) #T #HVT -lapply (cpss_lift … HV1 … HLK1 … HVT1 … HVT) -K1 -V1 /3 width=9/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_delta_delta: - ∀L0,i. ( - ∀L,T. ⦃L0, #i⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀K0,V0. ⇩[O, i] L0 ≡ K0.ⓓV0 → - ∀V1. K0 ⊢ V0 ➡ V1 → ∀T1. ⇧[O, i + 1] V1 ≡ T1 → - ∀KX,VX. ⇩[O, i] L0 ≡ KX.ⓓVX → - ∀V2. KX ⊢ VX ▶* V2 → ∀T2. ⇧[O, i + 1] V2 ≡ T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ T1 ▶* T & L2 ⊢ T2 ➡ T. -#L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1 -#KX #VX #H #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02 -lapply (ldrop_mono … H … HLK0) -H #H destruct -elim (lpr_ldrop_conf … HLK0 … HL01) -HL01 #X1 #H1 #HLK1 -elim (lpr_inv_pair1 … H1) -H1 #K1 #W1 #HK01 #_ #H destruct -lapply (ldrop_fwd_ldrop2 … HLK1) -W1 #HLK1 -elim (lpss_ldrop_conf … HLK0 … HL02) -HL02 #X2 #H2 #HLK2 -elim (lpss_inv_pair1 … H2) -H2 #K2 #W2 #HK02 #_ #H destruct -lapply (ldrop_fwd_ldrop2 … HLK2) -W2 #HLK2 -lapply (fsupp_lref … HLK0) -HLK0 #HLK0 -elim (IH … HLK0 … HV01 … HV02 … HK01 … HK02) -L0 -K0 -V0 #V #HV1 #HV2 -elim (lift_total V 0 (i+1)) #T #HVT -lapply (cpss_lift … HV1 … HLK1 … HVT1 … HVT) -K1 -V1 -lapply (cpr_lift … HV2 … HLK2 … HVT2 … HVT) -K2 -V2 -V /2 width=3/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_bind_bind: - ∀a,I,L0,V0,T0. ( - ∀L,T. ⦃L0,ⓑ{a,I}V0.T0⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀V1. L0 ⊢ V0 ➡ V1 → ∀T1. L0.ⓑ{I}V0 ⊢ T0 ➡ T1 → - ∀V2. L0 ⊢ V0 ▶* V2 → ∀T2. L0.ⓑ{I}V0 ⊢ T0 ▶* T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ ⓑ{a,I}V1.T1 ▶* T & L2 ⊢ ⓑ{a,I}V2.T2 ➡ T. -#a #I #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01 -#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02 -elim (IH … HV01 … HV02 … HL01 … HL02) // -elim (IH … HT01 … HT02 (L1.ⓑ{I}V1) … (L2.ⓑ{I}V2)) -IH // /2 width=1/ /3 width=5/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_bind_zeta: - ∀L0,V0,T0. ( - ∀L,T. ⦃L0,+ⓓV0.T0⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀T1. L0.ⓓV0 ⊢ T0 ➡ T1 → ∀X1. ⇧[O, 1] X1 ≡ T1 → - ∀V2. L0 ⊢ V0 ▶* V2 → ∀T2. L0.ⓓV0 ⊢ T0 ▶* T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ X1 ▶* T & L2 ⊢ +ⓓV2.T2 ➡ T. -#L0 #V0 #T0 #IH #T1 #HT01 #X1 #HXT1 -#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02 -elim (IH … HT01 … HT02 (L1.ⓓV2) … (L2.ⓓV2)) -IH -HT01 -HT02 // /2 width=1/ /3 width=1/ -L0 -V0 -T0 #T #HT1 #HT2 -elim (cpss_inv_lift1 … HT1 L1 … HXT1) -T1 /2 width=1/ /3 width=9/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_flat_flat: - ∀I,L0,V0,T0. ( - ∀L,T. ⦃L0,ⓕ{I}V0.T0⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀V1. L0 ⊢ V0 ➡ V1 → ∀T1. L0 ⊢ T0 ➡ T1 → - ∀V2. L0 ⊢ V0 ▶* V2 → ∀T2. L0 ⊢ T0 ▶* T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ ⓕ{I}V1.T1 ▶* T & L2 ⊢ ⓕ{I}V2.T2 ➡ T. -#I #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01 -#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02 -elim (IH … HV01 … HV02 … HL01 … HL02) // -elim (IH … HT01 … HT02 … HL01 … HL02) // /3 width=5/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_flat_tau: - ∀L0,V0,T0. ( - ∀L,T. ⦃L0,ⓝV0.T0⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀T1. L0 ⊢ T0 ➡ T1 → ∀V2,T2. L0 ⊢ T0 ▶* T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ T1 ▶* T & L2 ⊢ ⓝV2.T2 ➡ T. -#L0 #V0 #T0 #IH #T1 #HT01 -#V2 #T2 #HT02 #L1 #HL01 #L2 #HL02 -elim (IH … HT01 … HT02 … HL01 … HL02) // -L0 -V0 -T0 /3 width=3/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_flat_beta: - ∀a,L0,V0,W0,T0. ( - ∀L,T. ⦃L0,ⓐV0.ⓛ{a}W0.T0⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀V1. L0 ⊢ V0 ➡ V1 → ∀T1. L0.ⓛW0 ⊢ T0 ➡ T1 → - ∀V2. L0 ⊢ V0 ▶* V2 → ∀T2. L0 ⊢ ⓛ{a}W0.T0 ▶* T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ ⓓ{a}V1.T1 ▶* T & L2 ⊢ ⓐV2.T2 ➡ T. -#a #L0 #V0 #W0 #T0 #IH #V1 #HV01 #T1 #HT01 -#V2 #HV02 #X #H #L1 #HL01 #L2 #HL02 -elim (cpss_inv_bind1 … H) -H #W2 #T2 #HW02 #HT02 #H destruct -elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1/ #V #HV1 #HV2 -elim (IH … HT01 … HT02 (L1.ⓛW2) … (L2.ⓛW2)) /2 width=1/ /3 width=1/ -L0 -V0 -W0 -T0 #T #HT1 #HT2 -lapply (cpss_lsubr_trans … HT1 (L1.ⓓV1) ?) -HT1 /2 width=1/ /3 width=5/ -qed-. - -fact cpr_cpss_conf_lpr_lpss_flat_theta: - ∀a,L0,V0,W0,T0. ( - ∀L,T. ⦃L0,ⓐV0.ⓓ{a}W0.T0⦄ ⊃+ ⦃L, T⦄ → - ∀T1. L ⊢ T ➡ T1 → ∀T2. L ⊢ T ▶* T2 → - ∀L1. L ⊢ ➡ L1 → ∀L2. L ⊢ ▶* L2 → - ∃∃T0. L1 ⊢ T1 ▶* T0 & L2 ⊢ T2 ➡ T0 - ) → - ∀V1. L0 ⊢ V0 ➡ V1 → ∀U1. ⇧[O, 1] V1 ≡ U1 → - ∀W1. L0 ⊢ W0 ➡ W1 → ∀T1. L0.ⓓW0 ⊢ T0 ➡ T1 → - ∀V2. L0 ⊢ V0 ▶* V2 → ∀T2. L0 ⊢ ⓓ{a}W0.T0 ▶* T2 → - ∀L1. L0 ⊢ ➡ L1 → ∀L2. L0 ⊢ ▶* L2 → - ∃∃T. L1 ⊢ ⓓ{a}W1.ⓐU1.T1 ▶* T & L2 ⊢ ⓐV2.T2 ➡ T. -#a #L0 #V0 #W0 #T0 #IH #V1 #HV01 #U1 #HVU1 #W1 #HW01 #T1 #HT01 -#V2 #HV02 #X #H #L1 #HL01 #L2 #HL02 -elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1/ #V #HV1 #HV2 -elim (lift_total V 0 1) #U #HVU -lapply (cpss_lift … HV1 (L1.ⓓW1) … HVU1 … HVU) -HVU1 /2 width=1/ #HU1 -elim (cpss_inv_bind1 … H) -H #W2 #T2 #HW02 #HT02 #H destruct -elim (IH … HW01 … HW02 … HL01 … HL02) /2 width=1/ -elim (IH … HT01 … HT02 (L1.ⓓW1) … (L2.ⓓW2)) /2 width=1/ -L0 -V0 -W0 -T0 -/4 width=9 by ex2_intro, cpr_theta, cpss_bind, cpss_flat/ (**) (* auto too slow without trace *) -qed-. - -lemma cpr_cpss_conf_lpr_lpss: lpx_sn_confluent cpr cpss. -#L0 #T0 @(fsupp_wf_ind … L0 T0) -L0 -T0 #L #T #IH #L0 * [|*] -[ #I0 #HL #HT #T1 #H1 #T2 #H2 #L1 #HL01 #L2 #HL02 destruct - elim (cpr_inv_atom1 … H1) -H1 - elim (cpss_inv_atom1 … H2) -H2 - [ #H2 #H1 destruct - /2 width=1 by cpr_cpss_conf_lpr_lpss_atom_atom/ - | * #K0 #V0 #V2 #i2 #HLK0 #HV02 #HVT2 #H2 #H1 destruct - /3 width=10 by cpr_cpss_conf_lpr_lpss_atom_delta/ - | #H2 * #K0 #V0 #V1 #i1 #HLK0 #HV01 #HVT1 #H1 destruct - /3 width=10 by cpr_cpss_conf_lpr_lpss_delta_atom/ - | * #X #Y #V2 #z #H #HV02 #HVT2 #H2 - * #K0 #V0 #V1 #i #HLK0 #HV01 #HVT1 #H1 destruct - /3 width=17 by cpr_cpss_conf_lpr_lpss_delta_delta/ - ] -| #a #I #V0 #T0 #HL #HT #X1 #H1 #X2 #H2 #L1 #HL01 #L2 #HL02 destruct - elim (cpss_inv_bind1 … H2) -H2 #V2 #T2 #HV02 #HT02 #H2 - elim (cpr_inv_bind1 … H1) -H1 * - [ #V1 #T1 #HV01 #HT01 #H1 - | #T1 #HT01 #HXT1 #H11 #H12 - ] destruct - [ /3 width=10 by cpr_cpss_conf_lpr_lpss_bind_bind/ - | /3 width=11 by cpr_cpss_conf_lpr_lpss_bind_zeta/ - ] -| #I #V0 #T0 #HL #HT #X1 #H1 #X2 #H2 #L1 #HL01 #L2 #HL02 destruct - elim (cpss_inv_flat1 … H2) -H2 #V2 #T2 #HV02 #HT02 #H2 - elim (cpr_inv_flat1 … H1) -H1 * - [ #V1 #T1 #HV01 #HT01 #H1 - | #HX1 #H1 - | #a1 #V1 #Y1 #Z1 #T1 #HV01 #HZT1 #H11 #H12 #H13 - | #a1 #V1 #U1 #Y1 #W1 #Z1 #T1 #HV01 #HVU1 #HYW1 #HZT1 #H11 #H12 #H13 - ] destruct - [ /3 width=10 by cpr_cpss_conf_lpr_lpss_flat_flat/ - | /3 width=8 by cpr_cpss_conf_lpr_lpss_flat_tau/ - | /3 width=11 by cpr_cpss_conf_lpr_lpss_flat_beta/ - | /3 width=14 by cpr_cpss_conf_lpr_lpss_flat_theta/ - ] -] -qed-. - -(* Basic_1: includes: pr0_subst1 *) -(* Basic_1: was: pr2_subst1 *) -lemma cpr_cpss_conf: ∀L. confluent2 … (cpr L) (cpss L). -/2 width=6 by cpr_cpss_conf_lpr_lpss/ qed-. - -lemma cpr_lpss_conf_dx: ∀L0,T0,T1. L0 ⊢ T0 ➡ T1 → ∀L1. L0 ⊢ ▶* L1 → - ∃∃T. L1 ⊢ T1 ▶* T & L1 ⊢ T0 ➡ T. -#L0 #T0 #T1 #HT01 #L1 #HL01 -elim (cpr_cpss_conf_lpr_lpss … HT01 T0 … L1 … HL01) // /2 width=1/ -L0 /2 width=3/ -qed-. - -lemma cpr_lpss_conf_sn: ∀L0,T0,T1. L0 ⊢ T0 ➡ T1 → ∀L1. L0 ⊢ ▶* L1 → - ∃∃T. L0 ⊢ T1 ▶* T & L1 ⊢ T0 ➡ T. -#L0 #T0 #T1 #HT01 #L1 #HL01 -elim (cpr_cpss_conf_lpr_lpss … HT01 T0 … L0 … HL01) // -HT01 -HL01 /2 width=3/ -qed-. - -(* Basic_1: includes: pr0_subst1_fwd *) -lemma lpr_cpss_conf: ∀L0,T0,T1. L0 ⊢ T0 ▶* T1 → ∀L1. L0 ⊢ ➡ L1 → - ∃∃T. L1 ⊢ T0 ▶* T & L0 ⊢ T1 ➡ T. -#L0 #T0 #T1 #HT01 #L1 #HL01 -elim (cpr_cpss_conf_lpr_lpss ?? T0 … HT01 … HL01 L0) // -HT01 -HL01 /2 width=3/ -qed-. - -(* Properties on sn parallel substitution on local environments *************) - -lemma lpr_lpss_conf: confluent2 … lpr lpss. -/3 width=6 by lpx_sn_conf, cpr_cpss_conf_lpr_lpss/ -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx.ma index 683accf54..d34212910 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/predsn_4.ma". include "basic_2/reduction/lpr.ma". include "basic_2/reduction/cpx.ma". @@ -52,11 +53,11 @@ lemma lpx_pair: ∀h,g,I,K1,K2,V1,V2. ⦃h, K1⦄ ⊢ ➡[g] K2 → ⦃h, K1⦄ lemma lpx_append: ∀h,g,K1,K2. ⦃h, K1⦄ ⊢ ➡[g] K2 → ∀L1,L2. ⦃h, L1⦄ ⊢ ➡[g] L2 → ⦃h, L1 @@ K1⦄ ⊢ ➡[g] L2 @@ K2. /3 width=1 by lpx_sn_append, cpx_append/ qed. -(* -lamma lpr_lpx: ∀h,g,L1,L2. L1 ⊢ ➡ L2 → ⦃h, L1⦄ ⊢ ➡[g] L2. + +lemma lpr_lpx: ∀h,g,L1,L2. L1 ⊢ ➡ L2 → ⦃h, L1⦄ ⊢ ➡[g] L2. #h #g #L1 #L2 #H elim H -L1 -L2 // /3 width=1/ qed. -*) + (* Basic forward lemmas *****************************************************) lemma lpx_fwd_length: ∀h,g,L1,L2. ⦃h, L1⦄ ⊢ ➡[g] L2 → |L1| = |L2|. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx_aaa.ma index 4d9d55261..6fa24124f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpx_aaa.ma @@ -20,6 +20,7 @@ include "basic_2/reduction/lpx_ldrop.ma". (* Properties on atomic arity assignment for terms **************************) +(* Note: lemma 500 *) lemma aaa_cpx_lpx_conf: ∀h,g,L1,T1,A. L1 ⊢ T1 ⁝ A → ∀T2. ⦃h, L1⦄ ⊢ T1 ➡[g] T2 → ∀L2. ⦃h, L1⦄ ⊢ ➡[g] L2 → L2 ⊢ T2 ⁝ A. #h #g #L1 #T1 #A #H elim H -L1 -T1 -A @@ -71,10 +72,9 @@ lemma aaa_cpx_conf: ∀h,g,L,T1,A. L ⊢ T1 ⁝ A → ∀T2. ⦃h, L⦄ ⊢ T1 lemma aaa_lpx_conf: ∀h,g,L1,T,A. L1 ⊢ T ⁝ A → ∀L2. ⦃h, L1⦄ ⊢ ➡[g] L2 → L2 ⊢ T ⁝ A. /2 width=7 by aaa_cpx_lpx_conf/ qed-. -(* -lamma aaa_cpr_conf: ∀L,T1,A. L ⊢ T1 ⁝ A → ∀T2. L ⊢ T1 ➡ T2 → L ⊢ T2 ⁝ A. + +lemma aaa_cpr_conf: ∀L,T1,A. L ⊢ T1 ⁝ A → ∀T2. L ⊢ T1 ➡ T2 → L ⊢ T2 ⁝ A. /3 width=5 by aaa_cpx_conf, cpr_cpx/ qed-. -lamma aaa_lpr_conf: ∀L1,T,A. L1 ⊢ T ⁝ A → ∀L2. L1 ⊢ ➡ L2 → L2 ⊢ T ⁝ A. +lemma aaa_lpr_conf: ∀L1,T,A. L1 ⊢ T ⁝ A → ∀L2. L1 ⊢ ➡ L2 → L2 ⊢ T ⁝ A. /3 width=5 by aaa_lpx_conf, lpr_lpx/ qed-. -*) \ No newline at end of file diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/lsubx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/lsubx.ma index 3034016f9..3b3d7953d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/lsubx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/lsubx.ma @@ -12,7 +12,8 @@ (* *) (**************************************************************************) -include "basic_2/substitution/lsubr.ma". +include "basic_2/notation/relations/crsubeqt_2.ma". +include "basic_2/relocation/ldrop.ma". (* LOCAL ENVIRONMENT REFINEMENT FOR EXTENDED REDUCTION **********************) @@ -23,7 +24,7 @@ inductive lsubx: relation lenv ≝ . interpretation - "local environment refinement (extended reduction)" + "local environment refinement (reduction)" 'CrSubEqT L1 L2 = (lsubx L1 L2). (* Basic properties *********************************************************) @@ -76,14 +77,10 @@ lemma lsubx_fwd_length: ∀L1,L2. L1 ⓝ⊑ L2 → |L2| ≤ |L1|. #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ qed-. -lemma lsubx_fwd_lsubr: ∀L1,L2. L1 ⓝ⊑ L2 → L1 ⊑ L2. -#L1 #L2 #H elim H -L1 -L2 // /2 width=1/ -qed-. - lemma lsubx_fwd_ldrop2_bind: ∀L1,L2. L1 ⓝ⊑ L2 → ∀I,K2,W,i. ⇩[0, i] L2 ≡ K2.ⓑ{I}W → (∃∃K1. K1 ⓝ⊑ K2 & ⇩[0, i] L1 ≡ K1.ⓑ{I}W) ∨ - ∃∃K1,V. K1 ⓝ⊑ K2 & ⇩[0, i] L1 ≡ K1.ⓓⓝW.V. + ∃∃K1,V. K1 ⓝ⊑ K2 & ⇩[0, i] L1 ≡ K1.ⓓⓝW.V & I = Abst. #L1 #L2 #H elim H -L1 -L2 [ #L #I #K2 #W #i #H elim (ldrop_inv_atom1 … H) -H #H destruct @@ -99,3 +96,10 @@ lemma lsubx_fwd_ldrop2_bind: ∀L1,L2. L1 ⓝ⊑ L2 → ] ] qed-. + +lemma lsubx_fwd_ldrop2_abbr: ∀L1,L2. L1 ⓝ⊑ L2 → + ∀K2,V,i. ⇩[0, i] L2 ≡ K2.ⓓV → + ∃∃K1. K1 ⓝ⊑ K2 & ⇩[0, i] L1 ≡ K1.ⓓV. +#L1 #L2 #HL12 #K2 #V #i #HLK2 elim (lsubx_fwd_ldrop2_bind … HL12 … HLK2) -L2 // * +#K1 #W #_ #_ #H destruct +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/fsup.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/fsup.ma index 20951d3dc..53f7b5584 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/fsup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/fsup.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/supterm_4.ma". include "basic_2/grammar/cl_weight.ma". include "basic_2/relocation/ldrop.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq.ma index cd33d8e99..4c40afe09 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/suptermopt_4.ma". include "basic_2/relocation/fsup.ma". (* OPTIONAL SUPCLOSURE ******************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq_alt.ma index 2d5b24b35..360972607 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/fsupq_alt.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/suptermoptalt_4.ma". include "basic_2/relocation/fsupq.ma". (* OPTIONAL SUPCLOSURE ******************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/gdrop.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/gdrop.ma index ba2be29cc..277e464b7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/gdrop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/gdrop.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/rdrop_3.ma". include "basic_2/grammar/genv.ma". (* GLOBAL ENVIRONMENT SLICING ***********************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/ldrop.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/ldrop.ma index cf7c7ab88..d209bd4b0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/ldrop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/ldrop.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/rdrop_4.ma". include "basic_2/grammar/lenv_length.ma". include "basic_2/grammar/lenv_weight.ma". include "basic_2/relocation/lift.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lift.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lift.ma index e72288dff..e48d22e20 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lift.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/rlift_4.ma". include "basic_2/grammar/term_weight.ma". include "basic_2/grammar/term_simple.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma index c834d095e..63584de4a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/atomicarity_3.ma". include "basic_2/grammar/aarity.ma". include "basic_2/relocation/ldrop.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lpss.ma b/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lpss.ma deleted file mode 100644 index e930823ad..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lpss.ma +++ /dev/null @@ -1,54 +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/substitution/lpss_ldrop.ma". -include "basic_2/static/aaa_lift.ma". - -(* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) - -(* Properties about sn parallel substitution ********************************) - -(* Note: lemma 500 *) -lemma aaa_cpss_lpss_conf: ∀L1,T1,A. L1 ⊢ T1 ⁝ A → ∀T2. L1 ⊢ T1 ▶* T2 → - ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T2 ⁝ A. -#L1 #T1 #A #H elim H -L1 -T1 -A -[ #L1 #k #X #H - >(cpss_inv_sort1 … H) -H // -| #I #L1 #K1 #V1 #B #i #HLK1 #_ #IHV1 #X #H #L2 #HL12 - elim (cpss_inv_lref1 … H) -H - [ #H destruct - elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #X #H #HLK2 - elim (lpss_inv_pair1 … H) -H #K2 #V2 #HK12 #HV12 #H destruct /3 width=6/ - | * #Y #Z #V2 #H #HV12 #HV2 - lapply (ldrop_mono … H … HLK1) -H #H destruct - elim (lpss_ldrop_conf … HLK1 … HL12) -L1 #Z #H #HLK2 - elim (lpss_inv_pair1 … H) -H #K2 #V0 #HK12 #_ #H destruct - lapply (ldrop_fwd_ldrop2 … HLK2) -V0 /3 width=7/ - ] -| #a #L1 #V1 #T1 #B #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 - elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /4 width=2/ -| #a #L1 #V1 #T1 #B #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 - elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /4 width=1/ -| #L1 #V1 #T1 #B #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 - elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /3 width=3/ -| #L1 #V1 #T1 #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 - elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct /3 width=1/ -] -qed-. - -lemma aaa_cpss_conf: ∀L,T1,A. L ⊢ T1 ⁝ A → ∀T2. L ⊢ T1 ▶* T2 → L ⊢ T2 ⁝ A. -/2 width=5 by aaa_cpss_lpss_conf/ qed-. - -lemma aaa_lpss_conf: ∀L1,T,A. L1 ⊢ T ⁝ A → ∀L2. L1 ⊢ ▶* L2 → L2 ⊢ T ⁝ A. -/2 width=5 by aaa_cpss_lpss_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma index aa4800fd5..eeeb35651 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/crsubeqa_2.ma". include "basic_2/static/aaa.ma". (* LOCAL ENVIRONMENT REFINEMENT FOR ATOMIC ARITY ASSIGNMENT *****************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/sh.ma b/matita/matita/contribs/lambdadelta/basic_2/static/sh.ma index f95af348b..f43b9b31d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/sh.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/sh.ma @@ -42,4 +42,3 @@ qed. axiom nexts_dec: ∀h,k1,k2. Decidable (∃l. (next h)^l k1 = k2). axiom nexts_inj: ∀h,k,l1,l2. (next h)^l1 k = (next h)^l2 k → l1 = l2. - diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/ssta.ma b/matita/matita/contribs/lambdadelta/basic_2/static/ssta.ma index 7f86bf0af..6f4f40872 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/ssta.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/ssta.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/notation/relations/statictype_6.ma". include "basic_2/relocation/ldrop.ma". include "basic_2/static/sd.ma". diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/ssta_lpss.ma b/matita/matita/contribs/lambdadelta/basic_2/static/ssta_lpss.ma deleted file mode 100644 index 7471b2304..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/static/ssta_lpss.ma +++ /dev/null @@ -1,81 +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/substitution/lpss_ldrop.ma". -include "basic_2/static/ssta_lift.ma". - -(* STRATIFIED STATIC TYPE ASSIGNMENT ON TERMS *******************************) - -(* Properties about sn parallel substitution ********************************) - -(* Note: apparently this was missing in basic_1 *) -lemma ssta_cpss_lpss_conf: ∀h,g,L1,T1,U1,l. ⦃h, L1⦄ ⊢ T1 •[g] ⦃l, U1⦄ → - ∀T2. L1 ⊢ T1 ▶* T2 → ∀L2. L1 ⊢ ▶* L2 → - ∃∃U2. ⦃h, L2⦄ ⊢ T2 •[g] ⦃l, U2⦄ & L1 ⊢ U1 ▶* U2. -#h #g #L1 #T1 #U1 #l #H elim H -L1 -T1 -U1 -l -[ #L1 #k1 #l1 #Hkl1 #X #H - >(cpss_inv_sort1 … H) -H /3 width=3/ -| #L1 #K1 #V1 #W1 #U1 #i #l #HLK1 #_ #HWU1 #IHVW1 #X #H #L2 #HL12 - elim (cpss_inv_lref1 … H) -H - [ #H destruct - elim (lpss_ldrop_conf … HLK1 … HL12) -HL12 #X #H #HLK2 - elim (lpss_inv_pair1 … H) -H #K2 #V2 #HK12 #HV12 #H destruct - lapply (ldrop_fwd_ldrop2 … HLK1) -HLK1 #HLK1 - elim (IHVW1 … HV12 … HK12) -IHVW1 -HV12 -HK12 #W2 #HVW2 #HW12 - elim (lift_total W2 0 (i+1)) #U2 #HWU2 - lapply (cpss_lift … HW12 … HLK1 … HWU1 … HWU2) -HW12 -HLK1 -HWU1 /3 width=6/ - | * #Y #Z #V2 #H #HV12 #HV2 - lapply (ldrop_mono … H … HLK1) -H #H destruct - elim (lpss_ldrop_conf … HLK1 … HL12) -HL12 #Z #H #HLK2 - elim (lpss_inv_pair1 … H) -H #K2 #V0 #HK12 #_ #H destruct - lapply (ldrop_fwd_ldrop2 … HLK2) -V0 #HLK2 - lapply (ldrop_fwd_ldrop2 … HLK1) -HLK1 #HLK1 - elim (IHVW1 … HV12 … HK12) -IHVW1 -HK12 -HV12 #W2 #HVW2 #HW12 - elim (lift_total W2 0 (i+1)) #U2 #HWU2 - lapply (ssta_lift … HVW2 … HLK2 … HV2 … HWU2) -HVW2 -HLK2 -HV2 - lapply (cpss_lift … HW12 … HLK1 … HWU1 … HWU2) -HW12 -HLK1 -HWU1 -HWU2 /3 width=3/ - ] -| #L1 #K1 #W1 #V1 #U1 #i #l #HLK1 #_ #HWU1 #IHWV1 #X #H #L2 #HL12 - elim (cpss_inv_lref1 … H) -H [ | -IHWV1 -HWU1 -HL12 ] - [ #H destruct - elim (lpss_ldrop_conf … HLK1 … HL12) -HL12 #X #H #HLK2 - elim (lpss_inv_pair1 … H) -H #K2 #W2 #HK12 #HW12 #H destruct - lapply (ldrop_fwd_ldrop2 … HLK1) -HLK1 #HLK1 - elim (IHWV1 … HW12 … HK12) -IHWV1 -HK12 #V2 #HWV2 #_ - elim (lift_total W2 0 (i+1)) #U2 #HWU2 - lapply (cpss_lift … HW12 … HLK1 … HWU1 … HWU2) -HW12 -HLK1 -HWU1 /3 width=6/ - | * #K2 #V2 #W2 #HLK2 #_ #_ - lapply (ldrop_mono … HLK2 … HLK1) -HLK1 -HLK2 #H destruct - ] -| #a #I #L1 #V1 #T1 #U1 #l #_ #IHTU1 #X #H #L2 #HL12 - elim (cpss_inv_bind1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct - elim (IHTU1 … HT12 (L2.ⓑ{I}V2)) -IHTU1 -HT12 /2 width=1/ -HL12 /3 width=5/ -| #L1 #V1 #T1 #U1 #l #_ #IHTU1 #X #H #L2 #HL12 - elim (cpss_inv_flat1 … H) -H #V2 #T2 #HV12 #HT12 #H destruct - elim (IHTU1 … HT12 … HL12) -IHTU1 -HT12 -HL12 /3 width=5/ -| #L1 #W1 #T1 #U1 #l #_ #IHTU1 #X #H #L2 #HL12 - elim (cpss_inv_flat1 … H) -H #W2 #T2 #HW12 #HT12 #H destruct - elim (IHTU1 … HT12 … HL12) -IHTU1 -HT12 -HL12 /3 width=3/ -] -qed-. - -lemma ssta_cpss_conf: ∀h,g,L,T1,U1,l. ⦃h, L⦄ ⊢ T1 •[g] ⦃l, U1⦄ → - ∀T2. L ⊢ T1 ▶* T2 → - ∃∃U2. ⦃h, L⦄ ⊢ T2 •[g] ⦃l, U2⦄ & L ⊢ U1 ▶* U2. -/2 width=3 by ssta_cpss_lpss_conf/ qed-. - -lemma ssta_lpss_conf: ∀h,g,L1,T,U1,l. ⦃h, L1⦄ ⊢ T •[g] ⦃l, U1⦄ → - ∀L2. L1 ⊢ ▶* L2 → - ∃∃U2. ⦃h, L2⦄ ⊢ T •[g] ⦃l, U2⦄ & L1 ⊢ U1 ▶* U2. -/2 width=3 by ssta_cpss_lpss_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpss.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpss.ma deleted file mode 100644 index 9789ea7ba..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpss.ma +++ /dev/null @@ -1,195 +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/grammar/cl_shift.ma". -include "basic_2/relocation/ldrop_append.ma". -include "basic_2/substitution/lsubr.ma". - -(* CONTEXT-SENSITIVE PARALLEL SUBSTITUTION FOR TERMS ************************) - -inductive cpss: lenv → relation term ≝ -| cpss_atom : ∀I,L. cpss L (⓪{I}) (⓪{I}) -| cpss_delta: ∀L,K,V,V2,W2,i. - ⇩[0, i] L ≡ K. ⓓV → cpss K V V2 → - ⇧[0, i + 1] V2 ≡ W2 → cpss L (#i) W2 -| cpss_bind : ∀a,I,L,V1,V2,T1,T2. - cpss L V1 V2 → cpss (L. ⓑ{I} V1) T1 T2 → - cpss L (ⓑ{a,I} V1. T1) (ⓑ{a,I} V2. T2) -| cpss_flat : ∀I,L,V1,V2,T1,T2. - cpss L V1 V2 → cpss L T1 T2 → - cpss L (ⓕ{I} V1. T1) (ⓕ{I} V2. T2) -. - -interpretation "context-sensitive parallel substitution (term)" - 'PSubstStar L T1 T2 = (cpss L T1 T2). - -(* Basic properties *********************************************************) - -lemma cpss_lsubr_trans: lsub_trans … cpss lsubr. -#L1 #T1 #T2 #H elim H -L1 -T1 -T2 -[ // -| #L1 #K1 #V1 #V2 #W2 #i #HLK1 #_ #HVW2 #IHV12 #L2 #HL12 - elim (lsubr_fwd_ldrop2_abbr … HL12 … HLK1) -HL12 -HLK1 /3 width=6/ -| /4 width=1/ -| /3 width=1/ -] -qed-. - -(* Basic_1: was by definition: subst1_refl *) -lemma cpss_refl: ∀T,L. L ⊢ T ▶* T. -#T elim T -T // -#I elim I -I /2 width=1/ -qed. - -(* Basic_1: was only: subst1_ex *) -lemma cpss_delift: ∀K,V,T1,L,d. ⇩[0, d] L ≡ (K. ⓓV) → - ∃∃T2,T. L ⊢ T1 ▶* T2 & ⇧[d, 1] T ≡ T2. -#K #V #T1 elim T1 -T1 -[ * #i #L #d #HLK /2 width=4/ - elim (lt_or_eq_or_gt i d) #Hid /3 width=4/ - destruct - elim (lift_total V 0 (i+1)) #W #HVW - elim (lift_split … HVW i i) // /3 width=6/ -| * [ #a ] #I #W1 #U1 #IHW1 #IHU1 #L #d #HLK - elim (IHW1 … HLK) -IHW1 #W2 #W #HW12 #HW2 - [ elim (IHU1 (L. ⓑ{I} W1) (d+1)) -IHU1 /2 width=1/ -HLK /3 width=9/ - | elim (IHU1 … HLK) -IHU1 -HLK /3 width=8/ - ] -] -qed-. - -lemma cpss_append: l_appendable_sn … cpss. -#K #T1 #T2 #H elim H -K -T1 -T2 // /2 width=1/ -#K #K0 #V1 #V2 #W2 #i #HK0 #_ #HVW2 #IHV12 #L -lapply (ldrop_fwd_length_lt2 … HK0) #H -@(cpss_delta … (L@@K0) V1 … HVW2) // -@(ldrop_O1_append_sn_le … HK0) /2 width=2/ (**) (* /3/ does not work *) -qed. - -(* Basic inversion lemmas ***************************************************) - -fact cpss_inv_atom1_aux: ∀L,T1,T2. L ⊢ T1 ▶* T2 → ∀I. T1 = ⓪{I} → - T2 = ⓪{I} ∨ - ∃∃K,V,V2,i. ⇩[O, i] L ≡ K. ⓓV & - K ⊢ V ▶* V2 & - ⇧[O, i + 1] V2 ≡ T2 & - I = LRef i. -#L #T1 #T2 * -L -T1 -T2 -[ #I #L #J #H destruct /2 width=1/ -| #L #K #V #V2 #T2 #i #HLK #HV2 #HVT2 #I #H destruct /3 width=8/ -| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #H destruct -| #I #L #V1 #V2 #T1 #T2 #_ #_ #J #H destruct -] -qed-. - -lemma cpss_inv_atom1: ∀I,L,T2. L ⊢ ⓪{I} ▶* T2 → - T2 = ⓪{I} ∨ - ∃∃K,V,V2,i. ⇩[O, i] L ≡ K. ⓓV & - K ⊢ V ▶* V2 & - ⇧[O, i + 1] V2 ≡ T2 & - I = LRef i. -/2 width=3 by cpss_inv_atom1_aux/ qed-. - -(* Basic_1: was only: subst1_gen_sort *) -lemma cpss_inv_sort1: ∀L,T2,k. L ⊢ ⋆k ▶* T2 → T2 = ⋆k. -#L #T2 #k #H -elim (cpss_inv_atom1 … H) -H // -* #K #V #V2 #i #_ #_ #_ #H destruct -qed-. - -(* Basic_1: was only: subst1_gen_lref *) -lemma cpss_inv_lref1: ∀L,T2,i. L ⊢ #i ▶* T2 → - T2 = #i ∨ - ∃∃K,V,V2. ⇩[O, i] L ≡ K. ⓓV & - K ⊢ V ▶* V2 & - ⇧[O, i + 1] V2 ≡ T2. -#L #T2 #i #H -elim (cpss_inv_atom1 … H) -H /2 width=1/ -* #K #V #V2 #j #HLK #HV2 #HVT2 #H destruct /3 width=6/ -qed-. - -lemma cpss_inv_gref1: ∀L,T2,p. L ⊢ §p ▶* T2 → T2 = §p. -#L #T2 #p #H -elim (cpss_inv_atom1 … H) -H // -* #K #V #V2 #i #_ #_ #_ #H destruct -qed-. - -fact cpss_inv_bind1_aux: ∀L,U1,U2. L ⊢ U1 ▶* U2 → - ∀a,I,V1,T1. U1 = ⓑ{a,I} V1. T1 → - ∃∃V2,T2. L ⊢ V1 ▶* V2 & - L. ⓑ{I} V1 ⊢ T1 ▶* T2 & - U2 = ⓑ{a,I} V2. T2. -#L #U1 #U2 * -L -U1 -U2 -[ #I #L #b #J #W1 #U1 #H destruct -| #L #K #V #V2 #W2 #i #_ #_ #_ #b #J #W1 #U1 #H destruct -| #a #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #b #J #W1 #U1 #H destruct /2 width=5/ -| #I #L #V1 #V2 #T1 #T2 #_ #_ #b #J #W1 #U1 #H destruct -] -qed-. - -lemma cpss_inv_bind1: ∀a,I,L,V1,T1,U2. L ⊢ ⓑ{a,I} V1. T1 ▶* U2 → - ∃∃V2,T2. L ⊢ V1 ▶* V2 & - L. ⓑ{I} V1 ⊢ T1 ▶* T2 & - U2 = ⓑ{a,I} V2. T2. -/2 width=3 by cpss_inv_bind1_aux/ qed-. - -fact cpss_inv_flat1_aux: ∀L,U1,U2. L ⊢ U1 ▶* U2 → - ∀I,V1,T1. U1 = ⓕ{I} V1. T1 → - ∃∃V2,T2. L ⊢ V1 ▶* V2 & L ⊢ T1 ▶* T2 & - U2 = ⓕ{I} V2. T2. -#L #U1 #U2 * -L -U1 -U2 -[ #I #L #J #W1 #U1 #H destruct -| #L #K #V #V2 #W2 #i #_ #_ #_ #J #W1 #U1 #H destruct -| #a #I #L #V1 #V2 #T1 #T2 #_ #_ #J #W1 #U1 #H destruct -| #I #L #V1 #V2 #T1 #T2 #HV12 #HT12 #J #W1 #U1 #H destruct /2 width=5/ -] -qed-. - -lemma cpss_inv_flat1: ∀I,L,V1,T1,U2. L ⊢ ⓕ{I} V1. T1 ▶* U2 → - ∃∃V2,T2. L ⊢ V1 ▶* V2 & L ⊢ T1 ▶* T2 & - U2 = ⓕ{I} V2. T2. -/2 width=3 by cpss_inv_flat1_aux/ qed-. - -(* Basic forward lemmas *****************************************************) - -lemma cpss_fwd_tw: ∀L,T1,T2. L ⊢ T1 ▶* T2 → ♯{T1} ≤ ♯{T2}. -#L #T1 #T2 #H elim H -L -T1 -T2 normalize -/3 width=1 by monotonic_le_plus_l, le_plus/ (**) (* auto is too slow without trace *) -qed-. - -lemma cpss_fwd_shift1: ∀L1,L,T1,T. L ⊢ L1 @@ T1 ▶* T → - ∃∃L2,T2. |L1| = |L2| & T = L2 @@ T2. -#L1 @(lenv_ind_dx … L1) -L1 normalize -[ #L #T1 #T #HT1 - @(ex2_2_intro … (⋆)) // (**) (* explicit constructor *) -| #I #L1 #V1 #IH #L #T1 #X - >shift_append_assoc normalize #H - elim (cpss_inv_bind1 … H) -H - #V0 #T0 #_ #HT10 #H destruct - elim (IH … HT10) -IH -HT10 #L2 #T2 #HL12 #H destruct - >append_length >HL12 -HL12 - @(ex2_2_intro … (⋆.ⓑ{I}V0@@L2) T2) [ >append_length ] // /2 width=3/ (**) (* explicit constructor *) -] -qed-. - -(* Basic_1: removed theorems 27: - subst0_gen_sort subst0_gen_lref subst0_gen_head subst0_gen_lift_lt - subst0_gen_lift_false subst0_gen_lift_ge subst0_refl subst0_trans - subst0_lift_lt subst0_lift_ge subst0_lift_ge_S subst0_lift_ge_s - subst0_subst0 subst0_subst0_back subst0_weight_le subst0_weight_lt - subst0_confluence_neq subst0_confluence_eq subst0_tlt_head - subst0_confluence_lift subst0_tlt - subst1_head subst1_gen_head subst1_lift_S subst1_confluence_lift - subst1_gen_lift_eq subst1_confluence_neq -*) diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpss_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpss_lift.ma deleted file mode 100644 index 9745b6cde..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpss_lift.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/relocation/ldrop_ldrop.ma". -include "basic_2/substitution/cpss.ma". - -(* CONTEXT-SENSITIVE PARALLEL SUBSTITUTION FOR TERMS ************************) - -(* Relocation properties ****************************************************) - -(* Basic_1: was only: subst1_lift_lt subst1_lift_ge *) -lemma cpss_lift: l_liftable cpss. -#K #T1 #T2 #H elim H -K -T1 -T2 -[ #I #K #L #d #e #_ #U1 #H1 #U2 #H2 - >(lift_mono … H1 … H2) -H1 -H2 // -| #K #KV #V #V2 #W2 #i #HKV #HV2 #HVW2 #IHV2 #L #d #e #HLK #U1 #H #U2 #HWU2 - elim (lift_inv_lref1 … H) * #Hid #H destruct - [ elim (lift_trans_ge … HVW2 … HWU2) -W2 // plus_plus_comm_23 #HVU2 - lapply (ldrop_trans_ge_comm … HLK … HKV ?) -K // -Hid /3 width=6/ - ] -| #a #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 - elim (lift_inv_bind1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct - elim (lift_inv_bind1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /4 width=5/ -| #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 - elim (lift_inv_flat1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct - elim (lift_inv_flat1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /3 width=6/ -] -qed. - -(* Basic_1: was only: subst1_gen_lift_lt subst1_gen_lift_ge *) -lemma cpss_inv_lift1: l_deliftable_sn cpss. -#L #U1 #U2 #H elim H -L -U1 -U2 -[ * #L #i #K #d #e #_ #T1 #H - [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3/ - | elim (lift_inv_lref2 … H) -H * #Hid #H destruct /3 width=3/ - | lapply (lift_inv_gref2 … H) -H #H destruct /2 width=3/ - ] -| #L #LV #V #V2 #W2 #i #HLV #HV2 #HVW2 #IHV2 #K #d #e #HLK #T1 #H - elim (lift_inv_lref2 … H) -H * #Hid #H destruct - [ elim (ldrop_conf_lt … HLK … HLV) -L // #L #U #HKL #HLV #HUV - elim (IHV2 … HLV … HUV) -V #U2 #HUV2 #HU2 - elim (lift_trans_le … HUV2 … HVW2) -V2 // >minus_plus plus_minus // shift_append_assoc #H shift_append_assoc normalize #H - elim (cpqs_inv_bind1 … H) -H * - [ #V0 #T0 #_ #HT10 #H destruct - elim (IH … HT10) -IH -HT10 #L2 #T2 #HL12 #H destruct - >append_length >HL12 -HL12 - @(ex2_2_intro … (⋆.ⓑ{I}V0@@L2) T2) [ >append_length ] // /2 width=3/ (**) (* explicit constructor *) - | #T #_ #_ #H destruct - ] -] -qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/unfold/cpqs_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/unfold/cpqs_lift.ma deleted file mode 100644 index 78529b6b1..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/unfold/cpqs_lift.ma +++ /dev/null @@ -1,81 +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/relocation/ldrop_ldrop.ma". -include "basic_2/unfold/cpqs.ma". - -(* CONTEXT-SENSITIVE RESTRICTED PARALLEL COMPUTATION FOR TERMS **************) - -(* Relocation properties ****************************************************) - -lemma cpqs_lift: l_liftable cpqs. -#K #T1 #T2 #H elim H -K -T1 -T2 -[ #I #K #L #d #e #_ #U1 #H1 #U2 #H2 - >(lift_mono … H1 … H2) -H1 -H2 // -| #K #KV #V #V2 #W2 #i #HKV #HV2 #HVW2 #IHV2 #L #d #e #HLK #U1 #H #U2 #HWU2 - elim (lift_inv_lref1 … H) * #Hid #H destruct - [ elim (lift_trans_ge … HVW2 … HWU2) -W2 // plus_plus_comm_23 #HVU2 - lapply (ldrop_trans_ge_comm … HLK … HKV ?) -K // -Hid /3 width=6/ - ] -| #a #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 - elim (lift_inv_bind1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct - elim (lift_inv_bind1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /4 width=5/ -| #I #K #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #L #d #e #HLK #U1 #H1 #U2 #H2 - elim (lift_inv_flat1 … H1) -H1 #VV1 #TT1 #HVV1 #HTT1 #H1 destruct - elim (lift_inv_flat1 … H2) -H2 #VV2 #TT2 #HVV2 #HTT2 #H2 destruct /3 width=6/ -| #K #V #T1 #T #T2 #_ #HT2 #IHT1 #L #d #e #HLK #U1 #H #U2 #HTU2 - elim (lift_inv_bind1 … H) -H #VV1 #TT1 #HVV1 #HTT1 #H destruct - elim (lift_conf_O1 … HTU2 … HT2) -T2 /4 width=5/ -| #K #V #T1 #T2 #_ #IHT12 #L #d #e #HLK #U1 #H #U2 #HTU2 - elim (lift_inv_flat1 … H) -H #VV1 #TT1 #HVV1 #HTT1 #H destruct /3 width=5/ -] -qed. - -lemma cpqs_inv_lift1: l_deliftable_sn cpqs. -#L #U1 #U2 #H elim H -L -U1 -U2 -[ * #L #i #K #d #e #_ #T1 #H - [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3/ - | elim (lift_inv_lref2 … H) -H * #Hid #H destruct /3 width=3/ - | lapply (lift_inv_gref2 … H) -H #H destruct /2 width=3/ - ] -| #L #LV #V #V2 #W2 #i #HLV #HV2 #HVW2 #IHV2 #K #d #e #HLK #T1 #H - elim (lift_inv_lref2 … H) -H * #Hid #H destruct - [ elim (ldrop_conf_lt … HLK … HLV) -L // #L #U #HKL #HLV #HUV - elim (IHV2 … HLV … HUV) -V #U2 #HUV2 #HU2 - elim (lift_trans_le … HUV2 … HVW2) -V2 // >minus_plus plus_minus // shift_append_assoc #H 6 6 6 7 7 4 + 7 5 7 7 8 5 + 8 6 3 4 5 diff --git a/matita/matita/contribs/lambdadelta/ground_2/xoa.ma b/matita/matita/contribs/lambdadelta/ground_2/xoa.ma index 4fca831e8..1af5875d8 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/xoa.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/xoa.ma @@ -208,6 +208,14 @@ inductive ex7_4 (A0,A1,A2,A3:Type[0]) (P0,P1,P2,P3,P4,P5,P6:A0→A1→A2→A3→ interpretation "multiple existental quantifier (7, 4)" 'Ex P0 P1 P2 P3 P4 P5 P6 = (ex7_4 ? ? ? ? P0 P1 P2 P3 P4 P5 P6). +(* multiple existental quantifier (7, 5) *) + +inductive ex7_5 (A0,A1,A2,A3,A4:Type[0]) (P0,P1,P2,P3,P4,P5,P6:A0→A1→A2→A3→A4→Prop) : Prop ≝ + | ex7_5_intro: ∀x0,x1,x2,x3,x4. P0 x0 x1 x2 x3 x4 → P1 x0 x1 x2 x3 x4 → P2 x0 x1 x2 x3 x4 → P3 x0 x1 x2 x3 x4 → P4 x0 x1 x2 x3 x4 → P5 x0 x1 x2 x3 x4 → P6 x0 x1 x2 x3 x4 → ex7_5 ? ? ? ? ? ? ? ? ? ? ? ? +. + +interpretation "multiple existental quantifier (7, 5)" 'Ex P0 P1 P2 P3 P4 P5 P6 = (ex7_5 ? ? ? ? ? P0 P1 P2 P3 P4 P5 P6). + (* multiple existental quantifier (7, 7) *) inductive ex7_7 (A0,A1,A2,A3,A4,A5,A6:Type[0]) (P0,P1,P2,P3,P4,P5,P6:A0→A1→A2→A3→A4→A5→A6→Prop) : Prop ≝ @@ -224,6 +232,14 @@ inductive ex8_5 (A0,A1,A2,A3,A4:Type[0]) (P0,P1,P2,P3,P4,P5,P6,P7:A0→A1→A2 interpretation "multiple existental quantifier (8, 5)" 'Ex P0 P1 P2 P3 P4 P5 P6 P7 = (ex8_5 ? ? ? ? ? P0 P1 P2 P3 P4 P5 P6 P7). +(* multiple existental quantifier (8, 6) *) + +inductive ex8_6 (A0,A1,A2,A3,A4,A5:Type[0]) (P0,P1,P2,P3,P4,P5,P6,P7:A0→A1→A2→A3→A4→A5→Prop) : Prop ≝ + | ex8_6_intro: ∀x0,x1,x2,x3,x4,x5. P0 x0 x1 x2 x3 x4 x5 → P1 x0 x1 x2 x3 x4 x5 → P2 x0 x1 x2 x3 x4 x5 → P3 x0 x1 x2 x3 x4 x5 → P4 x0 x1 x2 x3 x4 x5 → P5 x0 x1 x2 x3 x4 x5 → P6 x0 x1 x2 x3 x4 x5 → P7 x0 x1 x2 x3 x4 x5 → ex8_6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? +. + +interpretation "multiple existental quantifier (8, 6)" 'Ex P0 P1 P2 P3 P4 P5 P6 P7 = (ex8_6 ? ? ? ? ? ? P0 P1 P2 P3 P4 P5 P6 P7). + (* multiple disjunction connective (3) *) inductive or3 (P0,P1,P2:Prop) : Prop ≝ diff --git a/matita/matita/contribs/lambdadelta/ground_2/xoa_notation.ma b/matita/matita/contribs/lambdadelta/ground_2/xoa_notation.ma index ee01b1071..6344c871a 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/xoa_notation.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/xoa_notation.ma @@ -254,6 +254,16 @@ notation < "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 break . term non associative with precedence 20 for @{ 'Ex (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.$P0) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.$P1) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.$P2) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.$P3) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.$P4) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.$P5) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.$P6) }. +(* multiple existental quantifier (7, 5) *) + +notation > "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 break . term 19 P0 break & term 19 P1 break & term 19 P2 break & term 19 P3 break & term 19 P4 break & term 19 P5 break & term 19 P6)" + non associative with precedence 20 + for @{ 'Ex (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.$P0) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.$P1) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.$P2) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.$P3) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.$P4) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.$P5) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.$P6) }. + +notation < "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 break . term 19 P0 break & term 19 P1 break & term 19 P2 break & term 19 P3 break & term 19 P4 break & term 19 P5 break & term 19 P6)" + non associative with precedence 20 + for @{ 'Ex (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P0) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P1) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P2) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P3) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P4) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P5) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P6) }. + (* multiple existental quantifier (7, 7) *) notation > "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 , ident x5 , ident x6 break . term 19 P0 break & term 19 P1 break & term 19 P2 break & term 19 P3 break & term 19 P4 break & term 19 P5 break & term 19 P6)" @@ -274,6 +284,16 @@ notation < "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 br non associative with precedence 20 for @{ 'Ex (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P0) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P1) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P2) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P3) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P4) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P5) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P6) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.$P7) }. +(* multiple existental quantifier (8, 6) *) + +notation > "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 , ident x5 break . term 19 P0 break & term 19 P1 break & term 19 P2 break & term 19 P3 break & term 19 P4 break & term 19 P5 break & term 19 P6 break & term 19 P7)" + non associative with precedence 20 + for @{ 'Ex (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P0) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P1) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P2) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P3) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P4) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P5) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P6) (λ${ident x0}.λ${ident x1}.λ${ident x2}.λ${ident x3}.λ${ident x4}.λ${ident x5}.$P7) }. + +notation < "hvbox(∃∃ ident x0 , ident x1 , ident x2 , ident x3 , ident x4 , ident x5 break . term 19 P0 break & term 19 P1 break & term 19 P2 break & term 19 P3 break & term 19 P4 break & term 19 P5 break & term 19 P6 break & term 19 P7)" + non associative with precedence 20 + for @{ 'Ex (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P0) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P1) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P2) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P3) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P4) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P5) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P6) (λ${ident x0}:$T0.λ${ident x1}:$T1.λ${ident x2}:$T2.λ${ident x3}:$T3.λ${ident x4}:$T4.λ${ident x5}:$T5.$P7) }. + (* multiple disjunction connective (3) *) notation "hvbox(∨∨ term 29 P0 break | term 29 P1 break | term 29 P2)"