From: Ferruccio Guidi Date: Mon, 25 Mar 2019 16:32:22 +0000 (+0100) Subject: milestone in basic_2 X-Git-Tag: make_still_working~254 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=4173283e148199871d787c53c0301891deb90713;p=helm.git milestone in basic_2 preservation of validity for rt-computation does not need the sort degree parameter (i.e. no induction on the degree). --- diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma index 257015d95..6ee55d8d0 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma @@ -53,5 +53,5 @@ lemma fqup_ApplOmega_41 (G) (L) (s0) (s): ⦃G,L,ApplOmega4 s0 s⦄ ⊐+ ⦃G,L, (* Main properties **********************************************************) -theorem fpbg_refl (h) (o) (G) (L) (s0) (s): ⦃G,L,ApplOmega1 s0 s⦄ >[h,o] ⦃G,L,ApplOmega1 s0 s⦄. +theorem fpbg_refl (h) (G) (L) (s0) (s): ⦃G,L,ApplOmega1 s0 s⦄ >[h] ⦃G,L,ApplOmega1 s0 s⦄. /3 width=5 by fpbs_fpbg_trans, fqup_fpbg, cpxs_fpbs/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma index b9b6e4bf8..3e6527a02 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma @@ -31,15 +31,15 @@ fact cnv_cpm_conf_lpr_atom_ess_aux (h) (G) (L1) (L2) (s): ∃∃T. ⦃G,L1⦄ ⊢ ⋆s ➡*[1,h] T & ⦃G,L2⦄ ⊢ ⋆(next h s) ➡*[h] T. /3 width=3 by cpm_cpms, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_atom_delta_aux (a) (h) (o) (G) (L) (i): - (∀G0,L0,T0. ⦃G,L,#i⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_atom_delta_aux (a) (h) (G) (L) (i): + (∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄⊢#i![a,h] → ∀K,V. ⬇*[i]L ≘ K.ⓓV → ∀n,XV. ⦃G,K⦄ ⊢ V ➡[n,h] XV → ∀X. ⬆*[↑i]XV ≘ X → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ #i ➡*[n,h] T & ⦃G,L2⦄ ⊢ X ➡*[h] T. -#a #h #o #G #L #i #IH #HT #K #V #HLK #n #XV #HVX #X #HXV #L1 #HL1 #L2 #HL2 +#a #h #G #L #i #IH #HT #K #V #HLK #n #XV #HVX #X #HXV #L1 #HL1 #L2 #HL2 lapply (cnv_lref_fwd_drops … HT … HLK) -HT #HV elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1 elim (lpr_inv_pair_sn … H1) -H1 #K1 #V1 #HK1 #HV1 #H destruct @@ -53,15 +53,15 @@ elim (cpms_lifts_sn … HVX … HLK2 … HXV) -XV -HLK2 #XV #HVX #HXV /3 width=6 by cpms_delta_drops, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_atom_ell_aux (a) (h) (o) (G) (L) (i): - (∀G0,L0,T0. ⦃G,L,#i⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_atom_ell_aux (a) (h) (G) (L) (i): + (∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄⊢#i![a,h] → ∀K,W. ⬇*[i]L ≘ K.ⓛW → ∀n,XW. ⦃G,K⦄ ⊢ W ➡[n,h] XW → ∀X. ⬆*[↑i]XW ≘ X → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ #i ➡*[↑n,h] T & ⦃G,L2⦄ ⊢ X ➡*[h] T. -#a #h #o #G #L #i #IH #HT #K #W #HLK #n #XW #HWX #X #HXW #L1 #HL1 #L2 #HL2 +#a #h #G #L #i #IH #HT #K #W #HLK #n #XW #HWX #X #HXW #L1 #HL1 #L2 #HL2 lapply (cnv_lref_fwd_drops … HT … HLK) -HT #HW elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1 elim (lpr_inv_pair_sn … H1) -H1 #K1 #W1 #HK1 #HW1 #H destruct @@ -75,15 +75,15 @@ elim (cpms_lifts_sn … HWX … HLK2 … HXW) -XW -HLK2 #XW #HWX #HXW /3 width=6 by cpms_ell_drops, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_delta_delta_aux (a) (h) (o) (I) (G) (L) (i): - (∀G0,L0,T0. ⦃G,L,#i⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_delta_delta_aux (a) (h) (I) (G) (L) (i): + (∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄⊢#i![a,h] → ∀K1,V1. ⬇*[i]L ≘ K1.ⓑ{I}V1 → ∀K2,V2. ⬇*[i]L ≘ K2.ⓑ{I}V2 → ∀n1,XV1. ⦃G,K1⦄ ⊢ V1 ➡[n1,h] XV1 → ∀n2,XV2. ⦃G,K2⦄ ⊢ V2 ➡[n2,h] XV2 → ∀X1. ⬆*[↑i]XV1 ≘ X1 → ∀X2. ⬆*[↑i]XV2 ≘ X2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ X1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ X2 ➡*[n1-n2,h] T. -#a #h #o #I #G #L #i #IH #HT +#a #h #I #G #L #i #IH #HT #K #V #HLK #Y #X #HLY #n1 #XV1 #HVX1 #n2 #XV2 #HVX2 #X1 #HXV1 #X2 #HXV2 #L1 #HL1 #L2 #HL2 lapply (drops_mono … HLY … HLK) -HLY #H destruct @@ -107,14 +107,14 @@ fact cnv_cpm_conf_lpr_delta_ell_aux (L) (K1) (K2) (V) (W) (i): lapply (drops_mono … HLK2 … HLK1) -L -i #H destruct qed-. -fact cnv_cpm_conf_lpr_bind_bind_aux (a) (h) (o) (p) (I) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓑ{p,I}V.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_bind_bind_aux (a) (h) (p) (I) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓑ{p,I}V.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓑ{p,I}V.T ![a,h] → ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → ∀n1,T1. ⦃G,L.ⓑ{I}V⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T ➡[n2,h] T2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓑ{p,I}V2.T2 ➡*[n1-n2,h] T. -#a #h #o #p #I #G0 #L0 #V0 #T0 #IH #H0 +#a #h #p #I #G0 #L0 #V0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_bind … H0) -H0 #HV0 #HT0 @@ -124,14 +124,14 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 (L1.ⓑ{I}V1) … (L2.ⓑ{I} /3 width=5 by cpms_bind_dx, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_bind_zeta_aux (a) (h) (o) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_bind_zeta_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ +ⓓV.T ![a,h] → ∀V1. ⦃G,L⦄ ⊢V ➡[h] V1 → ∀n1,T1. ⦃G,L.ⓓV⦄ ⊢ T ➡[n1,h] T1 → ∀T2. ⬆*[1]T2 ≘ T → ∀n2,XT2. ⦃G,L⦄ ⊢ T2 ➡[n2,h] XT2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ +ⓓV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ XT2 ➡*[n1-n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 +#a #h #G0 #L0 #V0 #T0 #IH #H0 #V1 #HV01 #n1 #T1 #HT01 #T2 #HT20 #n2 #XT2 #HXT2 #L1 #HL01 #L2 #HL02 elim (cnv_inv_bind … H0) -H0 #_ #HT0 @@ -144,14 +144,14 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT12 … HXT2 … HL01 … HL02) /3 width=3 by cpms_zeta, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_zeta_zeta_aux (a) (h) (o) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_zeta_zeta_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ +ⓓV.T ![a,h] → ∀T1. ⬆*[1]T1 ≘ T → ∀T2. ⬆*[1]T2 ≘ T → ∀n1,XT1. ⦃G,L⦄ ⊢ T1 ➡[n1,h] XT1 → ∀n2,XT2. ⦃G,L⦄ ⊢ T2 ➡[n2,h] XT2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ XT1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ XT2 ➡*[n1-n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 +#a #h #G0 #L0 #V0 #T0 #IH #H0 #T1 #HT10 #T2 #HT20 #n1 #XT1 #HXT1 #n2 #XT2 #HXT2 #L1 #HL01 #L2 #HL02 elim (cnv_inv_bind … H0) -H0 #_ #HT0 @@ -163,14 +163,14 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT1 … HXT2 … HL01 … HL02) /2 width=3 by ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_appl_appl_aux (a) (h) (o) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_appl_appl_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓐV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓐV.T ![a,h] → ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → ∀n1,T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓐV2.T2 ➡*[n1-n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 +#a #h #G0 #L0 #V0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #HV0 #HT0 #_ #_ -n0 -p0 -X01 -X02 @@ -180,15 +180,15 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w /3 width=5 by cpms_appl_dx, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_appl_beta_aux (a) (h) (o) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓛ{p}W.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_appl_beta_aux (a) (h) (p) (G) (L) (V) (W) (T): + (∀G0,L0,T0. ⦃G,L,ⓐV.ⓛ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓐV.ⓛ{p}W.T ![a,h] → ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → ∀n1,T1. ⦃G,L⦄ ⊢ ⓛ{p}W.T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓛW⦄ ⊢ T ➡[n2,h] T2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}ⓝW2.V2.T2 ➡*[n1-n2,h] T. -#a #h #o #p #G0 #L0 #V0 #W0 #T0 #IH #H0 +#a #h #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #HV0 #H0 #_ #_ -n0 -p0 -X01 -X02 @@ -202,8 +202,8 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 [ /2 width=1 by lsubr_ /4 width=5 by cpms_beta_dx, cpms_bind_dx, cpm_cast, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_appl_theta_aux (a) (h) (o) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓓ{p}W.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_appl_theta_aux (a) (h) (p) (G) (L) (V) (W) (T): + (∀G0,L0,T0. ⦃G,L,ⓐV.ⓓ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓐV.ⓓ{p}W.T ![a,h] → ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → @@ -211,7 +211,7 @@ fact cnv_cpm_conf_lpr_appl_theta_aux (a) (h) (o) (p) (G) (L) (V) (W) (T): ∀U2. ⬆*[1]V2 ≘ U2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T. -#a #h #o #p #G0 #L0 #V0 #W0 #T0 #IH #H0 +#a #h #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02 #U2 #HVU2 #L1 #HL01 #L2 #HL02 elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #HV0 #H0 #_ #_ -n0 -p0 -X01 -X02 @@ -233,15 +233,15 @@ elim (cpm_inv_abbr1 … HX) -HX * ] qed-. -fact cnv_cpm_conf_lpr_beta_beta_aux (a) (h) (o) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓛ{p}W.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_beta_beta_aux (a) (h) (p) (G) (L) (V) (W) (T): + (∀G0,L0,T0. ⦃G,L,ⓐV.ⓛ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓐV.ⓛ{p}W.T ![a,h] → ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → ∀W1. ⦃G,L⦄ ⊢ W ➡[h] W1 → ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → ∀n1,T1. ⦃G,L.ⓛW⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓛW⦄ ⊢ T ➡[n2,h] T2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓓ{p}ⓝW1.V1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}ⓝW2.V2.T2 ➡*[n1-n2,h] T. -#a #h #o #p #G0 #L0 #V0 #W0 #T0 #IH #H0 +#a #h #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #HV0 #H0 #_ #_ -n0 -p0 -X01 -X02 @@ -255,8 +255,8 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 /2 width=1 by lsubr_be /4 width=5 by cpms_bind_dx, cpm_eps, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_theta_theta_aux (a) (h) (o) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓓ{p}W.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_theta_theta_aux (a) (h) (p) (G) (L) (V) (W) (T): + (∀G0,L0,T0. ⦃G,L,ⓐV.ⓓ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓐV.ⓓ{p}W.T ![a,h] → ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → ∀W1. ⦃G,L⦄ ⊢ W ➡[h] W1 → ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → @@ -264,7 +264,7 @@ fact cnv_cpm_conf_lpr_theta_theta_aux (a) (h) (o) (p) (G) (L) (V) (W) (T): ∀U1. ⬆*[1]V1 ≘ U1 → ∀U2. ⬆*[1]V2 ≘ U2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓓ{p}W1.ⓐU1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T. -#a #h #o #p #G0 #L0 #V0 #W0 #T0 #IH #H0 +#a #h #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02 #U1 #HVU1 #U2 #HVU2 #L1 #HL01 #L2 #HL02 elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #HV0 #H0 #_ #_ -n0 -p0 -X01 -X02 @@ -278,14 +278,14 @@ lapply (cpm_lifts_bi … HV2 (Ⓣ) … (L2.ⓓW2) … HVU2 … HVU) -V2 -V [ /3 /4 width=7 by cpms_appl_dx, cpms_bind_dx, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_cast_cast_aux (a) (h) (o) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_cast_cast_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓝV.T ![a,h] → ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → ∀T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓝV2.T2 ➡*[n1-n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 +#a #h #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #HT0 #_ #_ -X0 @@ -295,14 +295,14 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w /3 width=5 by cpms_cast, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_cast_epsilon_aux (a) (h) (o) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_cast_epsilon_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓝV.T ![a,h] → ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → ∀T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ T2 ➡*[n1-n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 +#a #h #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #HV01 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #HT0 #_ #_ -X0 @@ -311,15 +311,15 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w /3 width=3 by cpms_eps, ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_cast_ee_aux (a) (h) (o) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_cast_ee_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓝV.T ![a,h] → ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → ∀T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ ⓝV1.T1 ➡*[↑n2-n1,h] T & ⦃G,L2⦄ ⊢ V2 ➡*[n1-↑n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH2 #IH1 #H0 +#a #h #G0 #L0 #V0 #T0 #IH2 #IH1 #H0 #n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01 #L1 #HL01 #L2 #HL02 -HV01 elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #HT0 #HVX0 #HTX0 @@ -334,13 +334,13 @@ lapply (cpms_trans … HT1 … HTU) -T [h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_epsilon_epsilon_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓝV.T ![a,h] → ∀n1,T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ T2 ➡*[n1-n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 +#a #h #G0 #L0 #V0 #T0 #IH #H0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_cast … H0) -H0 #X0 #_ #HT0 #_ #_ -X0 @@ -349,14 +349,14 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w /2 width=3 by ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_epsilon_ee_aux (a) (h) (o) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_epsilon_ee_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓝV.T ![a,h] → ∀n1,T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡*[↑n2-n1,h] T & ⦃G,L2⦄ ⊢ V2 ➡*[n1-↑n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH2 #IH1 #H0 +#a #h #G0 #L0 #V0 #T0 #IH2 #IH1 #H0 #n1 #T1 #HT01 #n2 #V2 #HV02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #HT0 #HVX0 #HTX0 @@ -371,13 +371,13 @@ lapply (cpms_trans … HT1 … HTU) -T [h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → +fact cnv_cpm_conf_lpr_ee_ee_aux (a) (h) (G) (L) (V) (T): + (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → ⦃G,L⦄ ⊢ ⓝV.T ![a,h] → ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G,L1⦄ ⊢ V1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ V2 ➡*[n1-n2,h] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 +#a #h #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #HV01 #n2 #V2 #HV02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #_ #_ #_ -X0 @@ -386,19 +386,19 @@ elim (cnv_cpm_conf_lpr_sub … IH … HV01 … HV02 … HL01 … HL02) [|*: /2 w /2 width=3 by ex2_intro/ qed-. -fact cnv_cpm_conf_lpr_aux (a) (h) (o): +fact cnv_cpm_conf_lpr_aux (a) (h): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpm_trans_lpr a h G1 L1 T1) → - (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → + (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpm_trans_lpr a h G1 L1 T1) → + (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_conf_lpr a h G1 L1 T1. -#a #h #o #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] +#a #h #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #HX1 #n2 #X2 #HX2 #L1 #HL1 #L2 #HL2 destruct elim (cpm_inv_atom1_drops … HX1) -HX1 * elim (cpm_inv_atom1_drops … HX2) -HX2 * - [ #H21 #H22 #H11 #H12 destruct -a -o -L + [ #H21 #H22 #H11 #H12 destruct -a -L minus_S_S >minus_S_S diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq.ma index 4919e3eae..c02e30077 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq.ma @@ -23,10 +23,10 @@ include "basic_2/dynamic/cnv_fsb.ma". (* Inversion lemmas with restricted rt-transition for terms *****************) -lemma cnv_cpr_tdeq_fwd_refl (a) (h) (o) (G) (L): - ∀T1,T2. ⦃G, L⦄ ⊢ T1 ➡[h] T2 → T1 ≛[h,o] T2 → +lemma cnv_cpr_tdeq_fwd_refl (a) (h) (G) (L): + ∀T1,T2. ⦃G, L⦄ ⊢ T1 ➡[h] T2 → T1 ≛ T2 → ⦃G, L⦄ ⊢ T1 ![a,h] → T1 = T2. -#a #h #o #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2 +#a #h #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2 [ // | #G #K #V1 #V2 #X2 #_ #_ #_ #H1 #_ -a -G -K -V1 -V2 lapply (tdeq_inv_lref1 … H1) -H1 #H destruct // @@ -41,11 +41,11 @@ lemma cnv_cpr_tdeq_fwd_refl (a) (h) (o) (G) (L): elim (cnv_fwd_flat … H2) -H2 #HV1 #HT1 /3 width=3 by eq_f2/ | #G #K #V #T1 #X1 #X2 #HXT1 #HX12 #_ #H1 #H2 - elim (cnv_fpbg_refl_false … o … H2) -a + elim (cnv_fpbg_refl_false … H2) -a @(fpbg_tdeq_div … H1) -H1 /3 width=9 by cpm_tdneq_cpm_fpbg, cpm_zeta, tdeq_lifts_inv_pair_sn/ | #G #L #U #T1 #T2 #HT12 #_ #H1 #H2 - elim (cnv_fpbg_refl_false … o … H2) -a + elim (cnv_fpbg_refl_false … H2) -a @(fpbg_tdeq_div … H1) -H1 /3 width=6 by cpm_tdneq_cpm_fpbg, cpm_eps, tdeq_inv_pair_xy_y/ | #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #H1 #_ @@ -55,11 +55,11 @@ lemma cnv_cpr_tdeq_fwd_refl (a) (h) (o) (G) (L): ] qed-. -lemma cpm_tdeq_inv_bind_sn (a) (h) (o) (n) (p) (I) (G) (L): +lemma cpm_tdeq_inv_bind_sn (a) (h) (n) (p) (I) (G) (L): ∀V,T1. ⦃G, L⦄ ⊢ ⓑ{p,I}V.T1 ![a,h] → - ∀X. ⦃G, L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛[h,o] X → - ∃∃T2. ⦃G,L⦄ ⊢ V ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛[h,o] T2 & X = ⓑ{p,I}V.T2. -#a #h #o #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 + ∀X. ⦃G, L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → + ∃∃T2. ⦃G,L⦄ ⊢ V ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. +#a #h #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 elim (cpm_inv_bind1 … H1) -H1 * [ #XV #T2 #HXV #HT12 #H destruct elim (tdeq_inv_pair … H2) -H2 #_ #H2XV #H2T12 @@ -67,18 +67,18 @@ elim (cpm_inv_bind1 … H1) -H1 * lapply (cnv_cpr_tdeq_fwd_refl … HXV H2XV HV) #H destruct -HXV -H2XV /2 width=4 by ex5_intro/ | #X1 #HXT1 #HX1 #H1 #H destruct - elim (cnv_fpbg_refl_false … o … H0) -a + elim (cnv_fpbg_refl_false … H0) -a @(fpbg_tdeq_div … H2) -H2 /3 width=9 by cpm_tdneq_cpm_fpbg, cpm_zeta, tdeq_lifts_inv_pair_sn/ ] qed-. -lemma cpm_tdeq_inv_appl_sn (a) (h) (o) (n) (G) (L): +lemma cpm_tdeq_inv_appl_sn (a) (h) (n) (G) (L): ∀V,T1. ⦃G,L⦄ ⊢ ⓐV.T1 ![a,h] → - ∀X. ⦃G,L⦄ ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛[h,o] X → + ∀X. ⦃G,L⦄ ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛ X → ∃∃m,q,W,U1,T2. a = Ⓣ → m ≤ 1 & ⦃G,L⦄ ⊢ V ![a,h] & ⦃G, L⦄ ⊢ V ➡*[1,h] W & ⦃G, L⦄ ⊢ T1 ➡*[m,h] ⓛ{q}W.U1 - & ⦃G,L⦄⊢ T1 ![a,h] & ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛[h,o] T2 & X = ⓐV.T2. -#a #h #o #n #G #L #V #T1 #H0 #X #H1 #H2 + & ⦃G,L⦄⊢ T1 ![a,h] & ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓐV.T2. +#a #h #n #G #L #V #T1 #H0 #X #H1 #H2 elim (cpm_inv_appl1 … H1) -H1 * [ #XV #T2 #HXV #HT12 #H destruct elim (tdeq_inv_pair … H2) -H2 #_ #H2XV #H2T12 @@ -92,34 +92,34 @@ elim (cpm_inv_appl1 … H1) -H1 * ] qed-. -lemma cpm_tdeq_inv_cast_sn (a) (h) (o) (n) (G) (L): +lemma cpm_tdeq_inv_cast_sn (a) (h) (n) (G) (L): ∀U1,T1. ⦃G, L⦄ ⊢ ⓝU1.T1 ![a,h] → - ∀X. ⦃G, L⦄ ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛[h,o] X → + ∀X. ⦃G, L⦄ ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛ X → ∃∃U0,U2,T2. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 & ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 - & ⦃G, L⦄ ⊢ U1 ![a,h] & ⦃G, L⦄ ⊢ U1 ➡[n,h] U2 & U1 ≛[h,o] U2 - & ⦃G, L⦄ ⊢ T1 ![a,h] & ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛[h,o] T2 & X = ⓝU2.T2. -#a #h #o #n #G #L #U1 #T1 #H0 #X #H1 #H2 + & ⦃G, L⦄ ⊢ U1 ![a,h] & ⦃G, L⦄ ⊢ U1 ➡[n,h] U2 & U1 ≛ U2 + & ⦃G, L⦄ ⊢ T1 ![a,h] & ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓝU2.T2. +#a #h #n #G #L #U1 #T1 #H0 #X #H1 #H2 elim (cpm_inv_cast1 … H1) -H1 [ * || * ] [ #U2 #T2 #HU12 #HT12 #H destruct elim (tdeq_inv_pair … H2) -H2 #_ #H2U12 #H2T12 elim (cnv_inv_cast … H0) -H0 #U0 #HU1 #HT1 #HU10 #HT1U0 /2 width=7 by ex9_3_intro/ | #HT1X - elim (cnv_fpbg_refl_false … o … H0) -a + elim (cnv_fpbg_refl_false … H0) -a @(fpbg_tdeq_div … H2) -H2 /3 width=6 by cpm_tdneq_cpm_fpbg, cpm_eps, tdeq_inv_pair_xy_y/ | #m #HU1X #H destruct - elim (cnv_fpbg_refl_false … o … H0) -a + elim (cnv_fpbg_refl_false … H0) -a @(fpbg_tdeq_div … H2) -H2 /3 width=6 by cpm_tdneq_cpm_fpbg, cpm_ee, tdeq_inv_pair_xy_x/ ] qed-. -lemma cpm_tdeq_inv_bind_dx (a) (h) (o) (n) (p) (I) (G) (L): +lemma cpm_tdeq_inv_bind_dx (a) (h) (n) (p) (I) (G) (L): ∀X. ⦃G, L⦄ ⊢ X ![a,h] → - ∀V,T2. ⦃G, L⦄ ⊢ X ➡[n,h] ⓑ{p,I}V.T2 → X ≛[h,o] ⓑ{p,I}V.T2 → - ∃∃T1. ⦃G,L⦄ ⊢ V ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛[h,o] T2 & X = ⓑ{p,I}V.T1. -#a #h #o #n #p #I #G #L #X #H0 #V #T2 #H1 #H2 + ∀V,T2. ⦃G, L⦄ ⊢ X ➡[n,h] ⓑ{p,I}V.T2 → X ≛ ⓑ{p,I}V.T2 → + ∃∃T1. ⦃G,L⦄ ⊢ V ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T1. +#a #h #n #p #I #G #L #X #H0 #V #T2 #H1 #H2 elim (tdeq_inv_pair2 … H2) #V0 #T1 #_ #_ #H destruct elim (cpm_tdeq_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T0 #HV #HT1 #H1T12 #H2T12 #H destruct /2 width=5 by ex5_intro/ @@ -127,34 +127,34 @@ qed-. (* Eliminators with restricted rt-transition for terms **********************) -lemma cpm_tdeq_ind (a) (h) (o) (n) (G) (Q:relation3 …): +lemma cpm_tdeq_ind (a) (h) (n) (G) (Q:relation3 …): (∀I,L. n = 0 → Q L (⓪{I}) (⓪{I})) → - (∀L,s. n = 1 → deg h o s 0 → Q L (⋆s) (⋆(next h s))) → + (∀L,s. n = 1 → Q L (⋆s) (⋆(next h s))) → (∀p,I,L,V,T1. ⦃G,L⦄⊢ V![a,h] → ⦃G,L.ⓑ{I}V⦄⊢T1![a,h] → - ∀T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛[h,o] T2 → + ∀T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q (L.ⓑ{I}V) T1 T2 → Q L (ⓑ{p,I}V.T1) (ⓑ{p,I}V.T2) ) → (∀m. (a = Ⓣ → m ≤ 1) → ∀L,V. ⦃G,L⦄ ⊢ V ![a,h] → ∀W. ⦃G, L⦄ ⊢ V ➡*[1,h] W → ∀p,T1,U1. ⦃G, L⦄ ⊢ T1 ➡*[m,h] ⓛ{p}W.U1 → ⦃G,L⦄⊢ T1 ![a,h] → - ∀T2. ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛[h,o] T2 → + ∀T2. ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2 → Q L (ⓐV.T1) (ⓐV.T2) ) → (∀L,U0,U1,T1. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 → ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 → - ∀U2. ⦃G, L⦄ ⊢ U1 ![a,h] → ⦃G, L⦄ ⊢ U1 ➡[n,h] U2 → U1 ≛[h,o] U2 → - ∀T2. ⦃G, L⦄ ⊢ T1 ![a,h] → ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛[h,o] T2 → + ∀U2. ⦃G, L⦄ ⊢ U1 ![a,h] → ⦃G, L⦄ ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 → + ∀T2. ⦃G, L⦄ ⊢ T1 ![a,h] → ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L U1 U2 → Q L T1 T2 → Q L (ⓝU1.T1) (ⓝU2.T2) ) → ∀L,T1. ⦃G,L⦄ ⊢ T1 ![a,h] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛[h,o] T2 → Q L T1 T2. -#a #h #o #n #G #Q #IH1 #IH2 #IH3 #IH4 #IH5 #L #T1 + ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2. +#a #h #n #G #Q #IH1 #IH2 #IH3 #IH4 #IH5 #L #T1 @(insert_eq_0 … G) #F @(fqup_wf_ind_eq (Ⓣ) … F L T1) -L -T1 -F #G0 #L0 #T0 #IH #F #L * [| * [| * ]] [ #I #_ #_ #_ #_ #HF #X #H1X #H2X destruct -G0 -L0 -T0 elim (cpm_tdeq_inv_atom_sn … H1X H2X) -H1X -H2X * [ #H1 #H2 destruct /2 width=1 by/ - | #s #H1 #H2 #H3 #Hs destruct /2 width=1 by/ + | #s #H1 #H2 #H3 destruct /2 width=1 by/ ] | #p #I #V #T1 #HG #HL #HT #H0 #HF #X #H1X #H2X destruct elim (cpm_tdeq_inv_bind_sn … H0 … H1X H2X) -H0 -H1X -H2X #T2 #HV #HT1 #H1T12 #H2T12 #H destruct @@ -170,14 +170,14 @@ qed-. (* Advanced properties with restricted rt-transition for terms **************) -lemma cpm_tdeq_free (a) (h) (o) (n) (G) (L): +lemma cpm_tdeq_free (a) (h) (n) (G) (L): ∀T1. ⦃G, L⦄ ⊢ T1 ![a,h] → - ∀T2. ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛[h,o] T2 → + ∀T2. ⦃G, L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → ∀F,K. ⦃F, K⦄ ⊢ T1 ➡[n,h] T2. -#a #h #o #n #G #L #T1 #H0 #T2 #H1 #H2 +#a #h #n #G #L #T1 #H0 #T2 #H1 #H2 @(cpm_tdeq_ind … H0 … H1 H2) -L -T1 -T2 [ #I #L #H #F #K destruct // -| #L #s #H #_ #F #K destruct // +| #L #s #H #F #K destruct // | #p #I #L #V #T1 #_ #_ #T2 #_ #_ #IH #F #K /2 width=1 by cpm_bind/ | #m #_ #L #V #_ #W #_ #q #T1 #U1 #_ #_ #T2 #_ #_ #IH #F #K @@ -189,11 +189,11 @@ qed-. (* Advanced inversion lemmas with restricted rt-transition for terms ********) -lemma cpm_tdeq_inv_bind_sn_void (a) (h) (o) (n) (p) (I) (G) (L): +lemma cpm_tdeq_inv_bind_sn_void (a) (h) (n) (p) (I) (G) (L): ∀V,T1. ⦃G, L⦄ ⊢ ⓑ{p,I}V.T1 ![a,h] → - ∀X. ⦃G, L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛[h,o] X → - ∃∃T2. ⦃G,L⦄ ⊢ V ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ![a,h] & ⦃G, L.ⓧ⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛[h,o] T2 & X = ⓑ{p,I}V.T2. -#a #h #o #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 + ∀X. ⦃G, L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → + ∃∃T2. ⦃G,L⦄ ⊢ V ![a,h] & ⦃G, L.ⓑ{I}V⦄ ⊢ T1 ![a,h] & ⦃G, L.ⓧ⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. +#a #h #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 elim (cpm_tdeq_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T2 #HV #HT1 #H1T12 #H2T12 #H /3 width=5 by ex5_intro, cpm_tdeq_free/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma index f45bf4d42..8ea98673b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_tdeq_conf.ma @@ -17,36 +17,35 @@ include "basic_2/dynamic/cnv_cpm_tdeq.ma". (* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) -definition IH_cnv_cpm_tdeq_conf_lpr (a) (h) (o): relation3 genv lenv term ≝ - λG,L0,T0. ⦃G, L0⦄ ⊢ T0 ![a,h] → - ∀n1,T1. ⦃G, L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛[h,o] T1 → - ∀n2,T2. ⦃G, L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛[h,o] T2 → - ∀L1. ⦃G, L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G, L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛[h,o] T & ⦃G, L2⦄ ⊢ T2 ➡[n1-n2,h] T & T2 ≛[h,o] T. +definition IH_cnv_cpm_tdeq_conf_lpr (a) (h): relation3 genv lenv term ≝ + λG,L0,T0. ⦃G, L0⦄ ⊢ T0 ![a,h] → + ∀n1,T1. ⦃G, L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ⦃G, L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ⦃G, L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h] L2 → + ∃∃T. ⦃G, L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G, L2⦄ ⊢ T2 ➡[n1-n2,h] T & T2 ≛ T. (* Diamond propery with restricted rt-transition for terms ******************) -fact cnv_cpm_tdeq_conf_lpr_atom_atom_aux (h) (o) (G0) (L1) (L2) (I): - ∃∃T. ⦃G0,L1⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛[h,o] T & ⦃G0, L2⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛[h,o] T. -#h #o #G0 #L1 #L2 #I +fact cnv_cpm_tdeq_conf_lpr_atom_atom_aux (h) (G0) (L1) (L2) (I): + ∃∃T. ⦃G0,L1⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T & ⦃G0, L2⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T. +#h #G0 #L1 #L2 #I /2 width=5 by ex4_intro/ qed-. -fact cnv_cpm_tdeq_conf_lpr_atom_ess_aux (h) (o) (G0) (L1) (L2) (s): - deg h o s 0 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⋆s ➡[1,h] T & ⋆s ≛[h,o] T & ⦃G0,L2⦄ ⊢ ⋆(next h s) ➡[h] T & ⋆(next h s) ≛[h,o] T. -#h #o #G0 #L1 #L2 #s #Hs -/4 width=5 by tdeq_sort, deg_next, ex4_intro/ +fact cnv_cpm_tdeq_conf_lpr_atom_ess_aux (h) (G0) (L1) (L2) (s): + ∃∃T. ⦃G0,L1⦄ ⊢ ⋆s ➡[1,h] T & ⋆s ≛ T & ⦃G0,L2⦄ ⊢ ⋆(next h s) ➡[h] T & ⋆(next h s) ≛ T. +#h #G0 #L1 #L2 #s +/3 width=5 by tdeq_sort, ex4_intro/ qed-. -fact cnv_cpm_tdeq_conf_lpr_bind_bind_aux (a) (h) (o) (p) (I) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓑ{p,I}V0.T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h o G L T) → +fact cnv_cpm_tdeq_conf_lpr_bind_bind_aux (a) (h) (p) (I) (G0) (L0) (V0) (T0): + (∀G,L,T. ⦃G0,L0,ⓑ{p,I}V0.T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ ⓑ{p,I}V0.T0 ![a,h] → - ∀n1,T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛[h,o] T1 → - ∀n2,T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛[h,o] T2 → + ∀n1,T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓑ{p,I}V0.T1 ➡[n2-n1,h] T & ⓑ{p,I}V0.T1 ≛[h,o] T & ⦃G0,L2⦄ ⊢ ⓑ{p,I}V0.T2 ➡[n1-n2,h] T & ⓑ{p,I}V0.T2 ≛[h,o] T. -#a #h #o #p #I #G0 #L0 #V0 #T0 #IH #H0 + ∃∃T. ⦃G0,L1⦄ ⊢ ⓑ{p,I}V0.T1 ➡[n2-n1,h] T & ⓑ{p,I}V0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓑ{p,I}V0.T2 ➡[n1-n2,h] T & ⓑ{p,I}V0.T2 ≛ T. +#a #h #p #I #G0 #L0 #V0 #T0 #IH #H0 #n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_bind … H0) -H0 #_ #HT0 @@ -55,14 +54,14 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ{I}V0) … (L2.ⓑ{I}V0)) [|*: / /3 width=7 by cpm_bind, tdeq_pair, ex4_intro/ qed-. -fact cnv_cpm_tdeq_conf_lpr_appl_appl_aux (a) (h) (o) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓐV0.T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h o G L T) → +fact cnv_cpm_tdeq_conf_lpr_appl_appl_aux (a) (h) (G0) (L0) (V0) (T0): + (∀G,L,T. ⦃G0,L0,ⓐV0.T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ ⓐV0.T0 ![a,h] → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛[h,o] T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛[h,o] T2 → + ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓐV0.T1 ➡[n2-n1,h] T & ⓐV0.T1 ≛[h,o] T & ⦃G0,L2⦄ ⊢ ⓐV0.T2 ➡[n1-n2,h] T & ⓐV0.T2 ≛[h,o] T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 + ∃∃T. ⦃G0,L1⦄ ⊢ ⓐV0.T1 ➡[n2-n1,h] T & ⓐV0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓐV0.T2 ➡[n1-n2,h] T & ⓐV0.T2 ≛ T. +#a #h #G0 #L0 #V0 #T0 #IH #H0 #n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_appl … H0) -H0 #n0 #p0 #X01 #X02 #_ #_ #HT0 #_ #_ -n0 -p0 -X01 -X02 @@ -71,16 +70,16 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f /3 width=7 by cpm_appl, tdeq_pair, ex4_intro/ qed-. -fact cnv_cpm_tdeq_conf_lpr_cast_cast_aux (a) (h) (o) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓝV0.T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h o G L T) → +fact cnv_cpm_tdeq_conf_lpr_cast_cast_aux (a) (h) (G0) (L0) (V0) (T0): + (∀G,L,T. ⦃G0,L0,ⓝV0.T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ ⓝV0.T0 ![a,h] → - ∀n1,V1. ⦃G0,L0⦄ ⊢ V0 ➡[n1,h] V1 → V0 ≛[h,o] V1 → - ∀n2,V2. ⦃G0,L0⦄ ⊢ V0 ➡[n2,h] V2 → V0 ≛[h,o] V2 → - ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛[h,o] T1 → - ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛[h,o] T2 → + ∀n1,V1. ⦃G0,L0⦄ ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 → + ∀n2,V2. ⦃G0,L0⦄ ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 → + ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓝV1.T1 ➡[n2-n1,h] T & ⓝV1.T1≛[h,o]T & ⦃G0,L2⦄ ⊢ ⓝV2.T2 ➡[n1-n2,h] T & ⓝV2.T2≛[h,o]T. -#a #h #o #G0 #L0 #V0 #T0 #IH #H0 + ∃∃T. ⦃G0,L1⦄ ⊢ ⓝV1.T1 ➡[n2-n1,h] T & ⓝV1.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓝV2.T2 ➡[n1-n2,h] T & ⓝV2.T2 ≛ T. +#a #h #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #H1V01 #H2V01 #n2 #V2 #H1V02 #H2V02 #T1 #H1T01 #H2T01 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_cast … H0) -H0 #X0 #HV0 #HT0 #_ #_ -X0 @@ -90,23 +89,23 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f /3 width=7 by cpm_cast, tdeq_pair, ex4_intro/ qed-. -fact cnv_cpm_tdeq_conf_lpr_aux (a) (h) (o) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h o G L T) → - ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_tdeq_conf_lpr a h o G L T. -#a #h #o #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]] +fact cnv_cpm_tdeq_conf_lpr_aux (a) (h) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_conf_lpr a h G L T) → + ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_tdeq_conf_lpr a h G L T. +#a #h #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]] [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #H1X1 #H2X1 #n2 #X2 #H1X2 #H2X2 #L1 #HL1 #L2 #HL2 destruct elim (cpm_tdeq_inv_atom_sn … H1X1 H2X1) -H1X1 -H2X1 * elim (cpm_tdeq_inv_atom_sn … H1X2 H2X2) -H1X2 -H2X2 * [ #H21 #H22 #H11 #H12 destruct -a -L [h,o] ⦃G, L, T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_cpm_trans a h o G L T) → - ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_tdeq_cpm_trans a h o G L T1. -#a #h #o #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] +fact cnv_cpm_tdeq_cpm_trans_sub (a) (h) (G0) (L0) (T0): + (∀G,L,T. ⦃G0, L0, T0⦄ >[h] ⦃G, L, T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ ⊐+ ⦃G,L,T⦄ → IH_cnv_cpm_tdeq_cpm_trans a h G L T) → + ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_tdeq_cpm_trans a h G L T1. +#a #h #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] [ #I #_ #_ #_ #_ #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -G0 -L0 -T0 elim (cpm_tdeq_inv_atom_sn … H1X H2X) -H1X -H2X * [ #H1 #H2 destruct /2 width=4 by ex3_intro/ - | #s #H1 #H2 #H3 #Hs destruct + | #s #H1 #H2 #H3 destruct elim (cpm_inv_sort1 … HX2) -HX2 #H #Hn2 destruct >iter_n_Sm - /5 width=6 by cpm_sort, tdeq_sort, deg_iter, deg_next, ex3_intro/ + /3 width=4 by cpm_sort, tdeq_sort, ex3_intro/ ] | #p #I #V1 #T1 #HG #HL #HT #H0 #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct elim (cpm_tdeq_inv_bind_sn … H0 … H1X H2X) -H0 -H1X -H2X #T #_ #H0T1 #H1T1 #H2T1 #H destruct @@ -88,10 +88,10 @@ fact cnv_cpm_tdeq_cpm_trans_sub (a) (h) (o) (G0) (L0) (T0): ] qed-. -fact cnv_cpm_tdeq_cpm_trans_aux (a) (h) (o) (G0) (L0) (T0): - (∀G,L,T. ⦃G0, L0, T0⦄ >[h, o] ⦃G, L, T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - IH_cnv_cpm_tdeq_cpm_trans a h o G0 L0 T0. -#a #h #o #G0 #L0 #T0 +fact cnv_cpm_tdeq_cpm_trans_aux (a) (h) (G0) (L0) (T0): + (∀G,L,T. ⦃G0, L0, T0⦄ >[h] ⦃G, L, T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + IH_cnv_cpm_tdeq_cpm_trans a h G0 L0 T0. +#a #h #G0 #L0 #T0 @(fqup_wf_ind (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G0 #L0 #T0 #IH #IH0 /5 width=10 by cnv_cpm_tdeq_cpm_trans_sub, fqup_fpbg_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma index 6d58815d0..8e2781a6b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma @@ -23,12 +23,12 @@ include "basic_2/dynamic/lsubv_cnv.ma". (* Sub preservation propery with t-bound rt-transition for terms ************) -fact cnv_cpm_trans_lpr_aux (a) (h) (o): +fact cnv_cpm_trans_lpr_aux (a) (h): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → - (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpm_trans_lpr a h G1 L1 T1) → + (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → + (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpm_trans_lpr a h G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_trans_lpr a h G1 L1 T1. -#a #h #o #G0 #L0 #T0 #IH2 #IH1 #G1 #L1 * * [|||| * ] +#a #h #G0 #L0 #T0 #IH2 #IH1 #G1 #L1 * * [|||| * ] [ #s #HG0 #HL0 #HT0 #H1 #x #X #H2 #L2 #_ destruct -IH2 -IH1 -H1 elim (cpm_inv_sort1 … H2) -H2 #H #_ destruct // | #i #HG0 #HL0 #HT0 #H1 #x #X #H2 #L2 #HL12 destruct -IH2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_conf.ma index fcb2cb319..d1d60870d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_conf.ma @@ -19,29 +19,29 @@ include "basic_2/dynamic/cnv_cpms_tdeq_conf.ma". (* Sub confluence propery with t-bound rt-computation for terms *************) -fact cnv_cpms_conf_lpr_tdeq_tdeq_aux (a) (h) (o) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → +fact cnv_cpms_conf_lpr_tdeq_tdeq_aux (a) (h) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ T0 ![a,h] → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → T0 ≛[h,o] T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛[h,o] T2 → + ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T. -#a #h #o #G #L0 #T0 #IH2 #IH1 #HT0 +#a #h #G #L0 #T0 #IH2 #IH1 #HT0 #n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 elim (cnv_cpms_tdeq_conf_lpr_aux … IH2 IH1 … H1T01 … H1T02 … HL01 … HL02) -IH2 -IH1 -H1T01 -H1T02 -HL01 -HL02 /2 width=3 by ex2_intro/ qed-. -fact cnv_cpms_conf_lpr_refl_tdneq_sub (a) (h) (o) (G0) (L0) (T0) (m21) (m22): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → +fact cnv_cpms_conf_lpr_refl_tdneq_sub (a) (h) (G0) (L0) (T0) (m21) (m22): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ T0 ![a,h] → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛[h,o] X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → + ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G0,L1⦄ ⊢ T0 ➡*[m21+m22,h] T& ⦃G0,L2⦄ ⊢ T2 ➡*[h] T. -#a #h #o #G0 #L0 #T0 #m21 #m22 #IH2 #IH1 #H0 +#a #h #G0 #L0 #T0 #m21 #m22 #IH2 #IH1 #H0 #X2 #HX02 #HnX02 #T2 #HXT2 #L1 #HL01 #L2 #HL02 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX02 … L0 ?) // #HX2 @@ -50,39 +50,39 @@ elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … HX02 … 0 T0 … L0 … HL01) // elim (cnv_cpms_strip_lpr_sub … IH1 … HXT2 0 X2 … HL02 L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ] [h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → +fact cnv_cpms_conf_lpr_step_tdneq_sub (a) (h) (G0) (L0) (T0) (m11) (m12) (m21) (m22): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ T0 ![a,h] → - ∀X1. ⦃G0,L0⦄ ⊢ T0 ➡[m11,h] X1 → T0 ≛[h,o] X1 → ∀T1. ⦃G0,L0⦄ ⊢ X1 ➡*[m12,h] T1 → X1 ≛[h,o] T1 → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛[h,o] X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → + ∀X1. ⦃G0,L0⦄ ⊢ T0 ➡[m11,h] X1 → T0 ≛ X1 → ∀T1. ⦃G0,L0⦄ ⊢ X1 ➡*[m12,h] T1 → X1 ≛ T1 → + ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ((∀G,L,T. ⦃G0,L0,X1⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,X1⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → + ((∀G,L,T. ⦃G0,L0,X1⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,X1⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → ∀m21,m22. - ∀X2. ⦃G0,L0⦄ ⊢ X1 ➡[m21,h] X2 → (X1 ≛[h,o] X2 → ⊥) → + ∀X2. ⦃G0,L0⦄ ⊢ X1 ➡[m21,h] X2 → (X1 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-m12,h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[m12-(m21+m22),h]T ) → ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T. -#a #h #o #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #HT0 +#a #h #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #HT0 #X1 #H1X01 #H2X01 #T1 #H1XT1 #H2XT1 #X2 #H1X02 #H2X02 #T2 #HXT2 #L1 #HL01 #L2 #HL02 #IH lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X01 … L0 ?) // #HX1 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X02 … L0 ?) // #HX2 elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … H1X01 … H1X02 … L0 … L0) // #Z0 #HXZ10 #HXZ20 -cut (⦃G0,L0,T0⦄ >[h,o] ⦃G0,L0,X2⦄) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) -lapply (fpbg_fpbs_trans ??? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 by cpms_fwd_fpbs/ ] #H2fpbg +cut (⦃G0,L0,T0⦄ >[h] ⦃G0,L0,X2⦄) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) +lapply (fpbg_fpbs_trans ?? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 by cpms_fwd_fpbs/ ] #H2fpbg lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ20 … L0 ?) // #HZ0 elim (IH1 … HXT2 … HXZ20 … L2 … L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ] -HXT2 -HXZ20 #Z2 #HTZ2 #HZ02 -elim (tdeq_dec h o X1 Z0) #H2XZ +elim (tdeq_dec X1 Z0) #H2XZ [ -IH elim (cnv_cpms_conf_lpr_tdeq_tdeq_aux … HX1 … H1XT1 H2XT1 … HXZ10 H2XZ … L1 … L0) [2,3: // |4,5: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] | -H1XT1 -H2XT1 @@ -98,15 +98,15 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 [h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → +fact cnv_cpms_conf_lpr_tdeq_tdneq_aux (a) (h) (G0) (L0) (T0) (n1) (m21) (m22): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ T0 ![a,h] → - ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → T0 ≛[h,o] T1 → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛[h,o] X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → + ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 → + ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-n1,h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-(m21+m22),h] T. -#a #h #o #G0 #L0 #T0 #n1 #m21 #m22 #IH2 #IH1 #HT0 +#a #h #G0 #L0 #T0 #n1 #m21 #m22 #IH2 #IH1 #HT0 #T1 #H1T01 #H2T01 generalize in match m22; generalize in match m21; -m21 -m22 generalize in match IH1; generalize in match IH2; @@ -121,22 +121,22 @@ generalize in match IH1; generalize in match IH2; ] qed-. -fact cnv_cpms_conf_lpr_tdneq_tdneq_aux (a) (h) (o) (G0) (L0) (T0) (m11) (m12) (m21) (m22): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → +fact cnv_cpms_conf_lpr_tdneq_tdneq_aux (a) (h) (G0) (L0) (T0) (m11) (m12) (m21) (m22): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → ⦃G0,L0⦄ ⊢ T0 ![a,h] → - ∀X1. ⦃G0,L0⦄ ⊢ T0 ➡[m11,h] X1 → (T0 ≛[h,o] X1 → ⊥) → ∀T1. ⦃G0,L0⦄ ⊢ X1 ➡*[m12,h] T1 → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛[h,o] X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → + ∀X1. ⦃G0,L0⦄ ⊢ T0 ➡[m11,h] X1 → (T0 ≛ X1 → ⊥) → ∀T1. ⦃G0,L0⦄ ⊢ X1 ➡*[m12,h] T1 → + ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T. -#a #h #o #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #H0 +#a #h #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #H0 #X1 #HX01 #HnX01 #T1 #HXT1 #X2 #HX02 #HnX02 #T2 #HXT2 #L1 #HL01 #L2 #HL02 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX01 … L0 ?) // #HX1 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX02 … L0 ?) // #HX2 elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … HX01 … HX02 … L0 … L0) // #Z0 #HXZ10 #HXZ20 -cut (⦃G0,L0,T0⦄ >[h,o] ⦃G0,L0,X1⦄) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) -lapply (fpbg_fpbs_trans ??? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 by cpms_fwd_fpbs/ ] #H2fpbg +cut (⦃G0,L0,T0⦄ >[h] ⦃G0,L0,X1⦄) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) +lapply (fpbg_fpbs_trans ?? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 by cpms_fwd_fpbs/ ] #H2fpbg lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ10 … L0 ?) // #HZ0 elim (IH1 … HXT1 … HXZ10 … L1 … L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ] -HXT1 -HXZ10 #Z1 #HTZ1 #HZ01 elim (IH1 … HXT2 … HXZ20 … L2 … L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ] -HXT2 -HXZ20 #Z2 #HTZ2 #HZ02 @@ -146,14 +146,14 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 [h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → +fact cnv_cpms_conf_lpr_aux (a) (h) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpms_conf_lpr a h G L T. -#a #h #o #G #L #T #IH2 #IH1 #G0 #L0 #T0 #HG #HL #HT +#a #h #G #L #T #IH2 #IH1 #G0 #L0 #T0 #HG #HL #HT #HT0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 destruct -elim (tdeq_dec h o T0 T1) #H2T01 -elim (tdeq_dec h o T0 T2) #H2T02 +elim (tdeq_dec T0 T1) #H2T01 +elim (tdeq_dec T0 T2) #H2T02 [ @(cnv_cpms_conf_lpr_tdeq_tdeq_aux … IH2 IH1) -IH2 -IH1 /2 width=1 by/ | elim (cpms_tdneq_fwd_step_sn_aux … HT02 HT0 H2T02 IH1 IH2) -HT02 -H2T02 #m21 #m22 #X2 #HX02 #HnX02 #HXT2 #H2 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq.ma index 1c5287e63..44790ef38 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq.ma @@ -18,17 +18,17 @@ include "basic_2/dynamic/cnv_cpm_tdeq_trans.ma". (* Properties with restricted rt-computation for terms **********************) -fact cpms_tdneq_fwd_step_sn_aux (a) (h) (n) (o) (G) (L) (T1): - ∀T2. ⦃G, L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G, L⦄ ⊢ T1 ![a,h] → (T1 ≛[h,o] T2 → ⊥) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → - ∃∃n1,n2,T0. ⦃G, L⦄ ⊢ T1 ➡[n1,h] T0 & T1 ≛[h,o] T0 → ⊥ & ⦃G, L⦄ ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n. -#a #h #n #o #G #L #T1 #T2 #H +fact cpms_tdneq_fwd_step_sn_aux (a) (h) (n) (G) (L) (T1): + ∀T2. ⦃G, L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G, L⦄ ⊢ T1 ![a,h] → (T1 ≛ T2 → ⊥) → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → + ∃∃n1,n2,T0. ⦃G, L⦄ ⊢ T1 ➡[n1,h] T0 & T1 ≛ T0 → ⊥ & ⦃G, L⦄ ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n. +#a #h #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -n -T1 [ #_ #H2T2 elim H2T2 -H2T2 // | #n1 #n2 #T1 #T #H1T1 #H1T2 #IH #H0T1 #H2T12 #IH2 #IH1 - elim (tdeq_dec h o T1 T) #H2T1 - [ elim (tdeq_dec h o T T2) #H2T2 + elim (tdeq_dec T1 T) #H2T1 + [ elim (tdeq_dec T T2) #H2T2 [ -IH -IH2 -IH1 -H0T1 /4 width=7 by tdeq_trans, ex4_3_intro/ | lapply (cnv_cpm_trans_lpr_aux … IH2 IH1 … H1T1 L ?) [6:|*: // ] -H1T2 -H2T12 #H0T elim (IH H0T H2T2) [|*: /4 width=5 by cpm_fpbq, fpbq_fpbg_trans/ ] -IH -IH2 -H0T -H2T2 (**) @@ -42,23 +42,23 @@ fact cpms_tdneq_fwd_step_sn_aux (a) (h) (n) (o) (G) (L) (T1): ] qed-. -fact cpms_tdeq_ind_sn (a) (h) (o) (G) (L) (T2) (Q:relation2 …): +fact cpms_tdeq_ind_sn (a) (h) (G) (L) (T2) (Q:relation2 …): (⦃G, L⦄ ⊢ T2 ![a,h] → Q 0 T2) → - (∀n1,n2,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → ⦃G, L⦄ ⊢ T1 ![a,h] → T1 ≛[h,o] T → ⦃G, L⦄ ⊢ T ➡*[n2,h] T2 → ⦃G, L⦄ ⊢ T ![a,h] → T ≛[h,o] T2 → Q n2 T → Q (n1+n2) T1) → - ∀n,T1. ⦃G, L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G, L⦄ ⊢ T1 ![a,h] → T1 ≛[h,o] T2 → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h,o] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → + (∀n1,n2,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → ⦃G, L⦄ ⊢ T1 ![a,h] → T1 ≛ T → ⦃G, L⦄ ⊢ T ➡*[n2,h] T2 → ⦃G, L⦄ ⊢ T ![a,h] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) → + ∀n,T1. ⦃G, L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G, L⦄ ⊢ T1 ![a,h] → T1 ≛ T2 → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr a h G0 L0 T0) → + (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr a h G0 L0 T0) → Q n T1. -#a #h #o #G #L #T2 #Q #IB1 #IB2 #n #T1 #H +#a #h #G #L #T2 #Q #IB1 #IB2 #n #T1 #H @(cpms_ind_sn … H) -n -T1 [ -IB2 #H0T2 #_ #_ #_ /2 width=1 by/ | #n1 #n2 #T1 #T #H1T1 #H1T2 #IH #H0T1 #H2T12 #IH2 #IH1 -IB1 - elim (tdeq_dec h o T1 T) #H2T1 + elim (tdeq_dec T1 T) #H2T1 [ lapply (cnv_cpm_trans_lpr_aux … IH2 IH1 … H1T1 L ?) [6:|*: // ] #H0T lapply (tdeq_canc_sn … H2T1 … H2T12) -H2T12 #H2T2 /6 width=7 by cpm_fpbq, fpbq_fpbg_trans/ (**) | -IB2 -IH -IH2 -IH1 - elim (cnv_fpbg_refl_false … o … H0T1) -a -Q + elim (cnv_fpbg_refl_false … H0T1) -a -Q /3 width=8 by cpm_tdneq_cpm_cpms_tdeq_sym_fwd_fpbg/ ] ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq_conf.ma index 56b7c440d..44d549d53 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_tdeq_conf.ma @@ -19,14 +19,14 @@ include "basic_2/dynamic/cnv_cpms_tdeq.ma". (* Sub confluence propery with restricted rt-transition for terms ***********) -fact cnv_cpms_tdeq_strip_lpr_aux (a) (h) (o) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![a,h] → T0 ≛[h,o] T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛[h,o] T2 → +fact cnv_cpms_tdeq_strip_lpr_aux (a) (h) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → + ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![a,h] → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛[h,o] T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛[h,o] T. -#a #h #o #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 + ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. +#a #h #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 @(cpms_tdeq_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 [ #H0T1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02 [h,o] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h,o] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![a,h] → T0 ≛[h,o] T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛[h,o] T2 → +fact cnv_cpms_tdeq_conf_lpr_aux (a) (h) (G0) (L0) (T0): + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr a h G L T) → + (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr a h G L T) → + ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![a,h] → T0 ≛ T1 → + ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & T1 ≛[h,o] T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛[h,o] T. -#a #h #o #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 + ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. +#a #h #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 generalize in match IH1; generalize in match IH2; @(cpms_tdeq_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 [ #H0T1 #IH2 #IH1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma index 4ce63d92a..46c1255d6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma @@ -20,12 +20,12 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Forward lemmas with strongly rst-normalizing closures ********************) (* Basic_2A1: uses: snv_fwd_fsb *) -lemma cnv_fwd_fsb (a) (h) (o): ∀G,L,T. ⦃G, L⦄ ⊢ T ![a, h] → ≥[h, o] 𝐒⦃G, L, T⦄. -#a #h #o #G #L #T #H elim (cnv_fwd_aaa … H) -H /2 width=2 by aaa_fsb/ +lemma cnv_fwd_fsb (a) (h): ∀G,L,T. ⦃G, L⦄ ⊢ T ![a, h] → ≥[h] 𝐒⦃G, L, T⦄. +#a #h #G #L #T #H elim (cnv_fwd_aaa … H) -H /2 width=2 by aaa_fsb/ qed-. (* Inversion lemmas with proper parallel rst-computation for closures *******) -lemma cnv_fpbg_refl_false (a) (h) (o) (G) (L) (T): - ⦃G, L⦄ ⊢ T ![a,h] → ⦃G, L, T⦄ >[h,o] ⦃G, L, T⦄ → ⊥. +lemma cnv_fpbg_refl_false (a) (h) (G) (L) (T): + ⦃G, L⦄ ⊢ T ![a,h] → ⦃G, L, T⦄ >[h] ⦃G, L, T⦄ → ⊥. /3 width=7 by cnv_fwd_fsb, fsb_fpbg_refl_false/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma index c4edc5508..483ea690e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma @@ -23,11 +23,10 @@ lemma cnv_preserve (a) (h): ∀G,L,T. ⦃G,L⦄ ⊢ T ![a,h] → ∧∧ IH_cnv_cpms_conf_lpr a h G L T & IH_cnv_cpm_trans_lpr a h G L T. #a #h #G #L #T #HT -letin o ≝ (sd_O h) -lapply (cnv_fwd_fsb … o … HT) -HT #H +lapply (cnv_fwd_fsb … HT) -HT #H @(fsb_ind_fpbg … H) -G -L -T #G #L #T #_ #IH @conj [ letin aux ≝ cnv_cpms_conf_lpr_aux | letin aux ≝ cnv_cpm_trans_lpr_aux ] -@(aux … o … G L T) // #G0 #L0 #T0 #H +@(aux … G L T) // #G0 #L0 #T0 #H elim (IH … H) -IH -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_sub.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_sub.ma index c99d6a5c0..ce9c46f7e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_sub.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_sub.ma @@ -49,23 +49,23 @@ definition IH_cnv_cpms_conf_lpr (a) (h): relation3 genv lenv term ≝ (* Auxiliary properties for preservation ************************************) -fact cnv_cpms_trans_lpr_sub (a) (h) (o): +fact cnv_cpms_trans_lpr_sub (a) (h): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpm_trans_lpr a h G1 L1 T1) → - ∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpms_trans_lpr a h G1 L1 T1. -#a #h #o #G0 #L0 #T0 #IH #G1 #L1 #T1 #H01 #HT1 #n #T2 #H + (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpm_trans_lpr a h G1 L1 T1) → + ∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpms_trans_lpr a h G1 L1 T1. +#a #h #G0 #L0 #T0 #IH #G1 #L1 #T1 #H01 #HT1 #n #T2 #H @(cpms_ind_dx … H) -n -T2 /3 width=7 by fpbg_cpms_trans/ qed-. -fact cnv_cpm_conf_lpr_sub (a) (h) (o): +fact cnv_cpm_conf_lpr_sub (a) (h): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → - ∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpm_conf_lpr a h G1 L1 T1. + (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → + ∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpm_conf_lpr a h G1 L1 T1. /3 width=8 by cpm_cpms/ qed-. -fact cnv_cpms_strip_lpr_sub (a) (h) (o): +fact cnv_cpms_strip_lpr_sub (a) (h): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → - ∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h, o] ⦃G1, L1, T1⦄ → IH_cnv_cpms_strip_lpr a h G1 L1 T1. + (∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpms_conf_lpr a h G1 L1 T1) → + ∀G1,L1,T1. ⦃G0, L0, T0⦄ >[h] ⦃G1, L1, T1⦄ → IH_cnv_cpms_strip_lpr a h G1 L1 T1. /3 width=8 by cpm_cpms/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma index b96b1cfd5..a987f760f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma @@ -23,10 +23,10 @@ include "basic_2/dynamic/nta.ma". (* Note: this might use fsb_inv_cast (still to be proved) *) (* Basic_1: uses: ty3_sn3 *) (* Basic_2A1: uses: nta_fwd_csn *) -theorem nta_fwd_fsb (a) (h) (o) (G) (L): +theorem nta_fwd_fsb (a) (h) (G) (L): ∀T,U. ⦃G,L⦄ ⊢ T :[a,h] U → - ∧∧ ≥[h,o] 𝐒⦃G,L,T⦄ & ≥[h,o] 𝐒⦃G,L,U⦄. -#a #h #o #G #L #T #U #H + ∧∧ ≥[h] 𝐒⦃G,L,T⦄ & ≥[h] 𝐒⦃G,L,U⦄. +#a #h #G #L #T #U #H elim (cnv_inv_cast … H) #X #HU #HT #_ #_ -X /3 width=2 by cnv_fwd_fsb, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_5.ma new file mode 100644 index 000000000..958ca60f7 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_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( G ⊢ break term 46 L1 ⊆ⓧ [ break term 46 h, break term 46 f ] break term 46 L2 )" + non associative with precedence 45 + for @{ 'LSubEqX $h $f $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_6.ma deleted file mode 100644 index 7f9afe8ab..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/lsubeqx_6.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( G ⊢ break term 46 L1 ⊆ⓧ [ break term 46 h, break term 46 o, break term 46 f ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'LSubEqX $h $o $f $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_7.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_7.ma new file mode 100644 index 000000000..295c06611 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_7.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 G1, break term 46 L1, break term 46 T1 ⦄ ≽ [ break term 46 h ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'PRedSubTy $h $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_8.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_8.ma deleted file mode 100644 index d7a706d71..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_8.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ≽ [ break term 46 h, break term 46 o ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'PRedSubTy $h $o $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_7.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_7.ma new file mode 100644 index 000000000..8568de939 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_7.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 G1, break term 46 L1, break term 46 T1 ⦄ ≻ [ break term 46 h ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'PRedSubTyProper $h $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_8.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_8.ma deleted file mode 100644 index 6dc58b058..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_8.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ≻ [ break term 46 h, break term 46 o ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'PRedSubTyProper $h $o $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_7.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_7.ma new file mode 100644 index 000000000..1e33dd23c --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_7.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 G1, break term 46 L1, break term 46 T1 ⦄ ≥ [ break term 46 h ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'PRedSubTyStar $h $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_8.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_8.ma deleted file mode 100644 index 75f409cee..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_8.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ≥ [ break term 46 h, break term 46 o ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'PRedSubTyStar $h $o $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_7.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_7.ma new file mode 100644 index 000000000..161820fb2 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_7.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 G1, break term 46 L1, break term 46 T1 ⦄ > [ break term 46 h ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'PRedSubTyStarProper $h $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_8.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_8.ma deleted file mode 100644 index 15b61d624..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_8.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ > [ break term 46 h, break term 46 o ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'PRedSubTyStarProper $h $o $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_4.ma new file mode 100644 index 000000000..d36f44f40 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_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 G, break term 46 L, break term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'PRedSubTyStrong $h $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_5.ma deleted file mode 100644 index adc313743..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_5.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ≥ [ term 46 h, break term 46 o ] 𝐒 ⦃ break term 46 G, break term 46 L, break term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'PRedSubTyStrong $h $o $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_4.ma new file mode 100644 index 000000000..21c22eee7 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_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 G, break term 46 L ⦄ ⊢ ⬈ [ break term 46 h ] 𝐍 ⦃ break term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'PRedTyNormal $h $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_5.ma deleted file mode 100644 index dca225a8e..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_5.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ ⬈ [ break term 46 h, break term 46 o ] 𝐍 ⦃ break term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'PRedTyNormal $h $o $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_4.ma new file mode 100644 index 000000000..6602630db --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_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( G ⊢ ⬈ * [ break term 46 h, break term 46 T ] 𝐒 ⦃ break term 46 L ⦄ )" + non associative with precedence 45 + for @{ 'PRedTySNStrong $h $T $G $L }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_5.ma deleted file mode 100644 index c86dc8658..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_5.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( G ⊢ ⬈ * [ break term 46 h, break term 46 o, break term 46 T ] 𝐒 ⦃ break term 46 L ⦄ )" - non associative with precedence 45 - for @{ 'PRedTySNStrong $h $o $T $G $L }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_4.ma new file mode 100644 index 000000000..34fb89885 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_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 G, break term 46 L ⦄ ⊢ ⬈ * [ break term 46 h] 𝐒 ⦃ break term 46 T ⦄ )" + non associative with precedence 45 + for @{ 'PRedTyStrong $h $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_5.ma deleted file mode 100644 index 141a8e832..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_5.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ ⬈ * [ break term 46 h, break term 46 o ] 𝐒 ⦃ break term 46 T ⦄ )" - non associative with precedence 45 - for @{ 'PRedTyStrong $h $o $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cwhx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cwhx.ma index 223efe3e0..bfb52bc35 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cwhx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cwhx.ma @@ -24,11 +24,10 @@ include "basic_2/rt_computation/cpms_fpbg.ma". (* Properties with whd normality for unbound rt-transition ******************) lemma aaa_cpms_cwhx (h) (G) (L): - ∀T1,A. ⦃G,L⦄ ⊢ T1 ⁝ A → - ∃∃n,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & ⦃G,L⦄ ⊢ ⬈[h] 𝐖𝐇⦃T2⦄. + ∀T1,A. ⦃G,L⦄ ⊢ T1 ⁝ A → + ∃∃n,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & ⦃G,L⦄ ⊢ ⬈[h] 𝐖𝐇⦃T2⦄. #h #G #L #T1 #A #H -letin o ≝ (sd_O h) -@(aaa_ind_fpbg … o … H) -G -L -T1 -A +@(aaa_ind_fpbg h … H) -G -L -T1 -A #G #L #T1 #A * -G -L -T1 -A [ #G #L #s #_ /2 width=4 by cwhx_sort, ex2_2_intro/ | * #G #K #V1 #A #_ #IH -A @@ -40,7 +39,7 @@ letin o ≝ (sd_O h) elim (lifts_total … V2 (𝐔❴1❵)) #T2 #HVT2 /5 width=10 by cpms_lref, cwhx_lifts, drops_refl, drops_drop, ex2_2_intro/ | * #G #L #V #T1 #B #A #_ #_ #IH -B -A - [ elim (cpr_abbr_pos h o G L V T1) #T0 #HT10 #HnT10 + [ elim (cpr_abbr_pos h G L V T1) #T0 #HT10 #HnT10 elim (IH G L T0) -IH [| /4 width=2 by fpb_fpbg, cpm_fpb/ ] -HnT10 #n #T2 #HT02 #HT2 /3 width=5 by cpms_step_sn, ex2_2_intro/ | elim (IH … G (L.ⓓV) T1) -IH [| /3 width=1 by fpb_fpbg, fpb_fqu, fqu_bind_dx/ ] #n #T2 #HT12 #HT2 @@ -50,7 +49,7 @@ letin o ≝ (sd_O h) /2 width=5 by cwhx_abst, ex2_2_intro/ | #G #L #V #T1 #B #A #_ #HT1 #IH elim (IH … G L T1) [| /3 width=1 by fpb_fpbg, fpb_fqu, fqu_flat_dx/ ] #n1 #T2 #HT12 #HT2 - elim (tdeq_dec h o T1 T2) [ -n1 #HT12 | -HT2 #HnT12 ] + elim (tdeq_dec T1 T2) [ -n1 #HT12 | -HT2 #HnT12 ] [ lapply (tdeq_cwhx_trans … HT2 … HT12) -T2 @(insert_eq_0 … L) #Y @(insert_eq_0 … T1) #X * -Y -X [ #L0 #s0 #H1 #H2 destruct -IH diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma index 8c0c3204e..0452e19a8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma @@ -20,25 +20,29 @@ include "basic_2/rt_computation/cpms_fpbs.ma". (* Forward lemmas with proper parallel rst-computation for closures *********) -lemma cpms_tdneq_fwd_fpbg (h) (o) (n): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → - (T1 ≛[h,o] T2 → ⊥) → ⦃G,L,T1⦄ >[h,o] ⦃G,L,T2⦄. +lemma cpms_tdneq_fwd_fpbg (h) (n): + ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → + (T1 ≛ T2 → ⊥) → ⦃G,L,T1⦄ >[h] ⦃G,L,T2⦄. /3 width=2 by cpms_fwd_cpxs, cpxs_tdneq_fpbg/ qed-. -lemma fpbg_cpms_trans (h) (o) (n): ∀G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ >[h,o] ⦃G2, L2, T⦄ → - ∀T2. ⦃G2, L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1, L1, T1⦄ >[h,o] ⦃G2, L2, T2⦄. +lemma fpbg_cpms_trans (h) (n): + ∀G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T⦄ → + ∀T2. ⦃G2, L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbg_fpbs_trans, cpms_fwd_fpbs/ qed-. -lemma cpms_fpbg_trans (h) (o) (n): ∀G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ➡*[n,h] T → - ∀G2,L2,T2. ⦃G1, L1, T⦄ >[h,o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h,o] ⦃G2, L2, T2⦄. +lemma cpms_fpbg_trans (h) (n): + ∀G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ➡*[n,h] T → + ∀G2,L2,T2. ⦃G1, L1, T⦄ >[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbs_fpbg_trans, cpms_fwd_fpbs/ qed-. -lemma fqup_cpms_fwd_fpbg (h) (o): ∀G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ ⊐+ ⦃G2, L2, T⦄ → - ∀n,T2. ⦃G2, L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1, L1, T1⦄ >[h,o] ⦃G2, L2, T2⦄. +lemma fqup_cpms_fwd_fpbg (h): + ∀G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ ⊐+ ⦃G2, L2, T⦄ → + ∀n,T2. ⦃G2, L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /3 width=5 by cpms_fwd_fpbs, fqup_fpbg,fpbg_fpbs_trans/ qed-. -lemma cpm_tdneq_cpm_cpms_tdeq_sym_fwd_fpbg (h) (o) (G) (L) (T1): - ∀n1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛[h,o] T → ⊥) → - ∀n2,T2. ⦃G,L⦄⊢ T ➡*[n2,h] T2 → T1 ≛[h,o] T2 → ⦃G,L,T1⦄ >[h,o] ⦃G,L,T1⦄. -#h #o #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12 +lemma cpm_tdneq_cpm_cpms_tdeq_sym_fwd_fpbg (h) (G) (L) (T1): + ∀n1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → + ∀n2,T2. ⦃G,L⦄⊢ T ➡*[n2,h] T2 → T1 ≛ T2 → ⦃G,L,T1⦄ >[h] ⦃G,L,T1⦄. +#h #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12 /4 width=7 by cpms_fwd_fpbs, cpm_fpb, fpbs_tdeq_trans, tdeq_sym, ex2_3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma index 4a65edb8b..47aca5419 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma @@ -20,5 +20,6 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* Forward lemmas with parallel rst-computation for closures ****************) (* Basic_2A1: uses: cprs_fpbs *) -lemma cpms_fwd_fpbs (n) (h) (o): ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G, L, T1⦄ ≥[h,o] ⦃G, L, T2⦄. +lemma cpms_fwd_fpbs (n) (h): + ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G, L, T1⦄ ≥[h] ⦃G, L, T2⦄. /3 width=2 by cpms_fwd_cpxs, cpxs_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_rdeq.ma index b335ae603..f2470dbe3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_rdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_rdeq.ma @@ -17,14 +17,14 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) -(* Properties with degree-based equivalence for local environments **********) +(* Properties with sort-irrelevant equivalence for local environments *******) -lemma cpms_rdeq_conf_sn (h) (n) (o) (G) (L1) (L2): +lemma cpms_rdeq_conf_sn (h) (n) (G) (L1) (L2): ∀T1,T2. ⦃G, L1⦄ ⊢ T1 ➡*[n,h] T2 → - L1 ≛[h,o,T1] L2 → L1 ≛[h,o,T2] L2. -/3 width=4 by cpms_fwd_cpxs, cpxs_rdeq_conf_sn/ qed-. + L1 ≛[T1] L2 → L1 ≛[T2] L2. +/3 width=5 by cpms_fwd_cpxs, cpxs_rdeq_conf_sn/ qed-. -lemma cpms_rdeq_conf_dx (h) (n) (o) (G) (L1) (L2): +lemma cpms_rdeq_conf_dx (h) (n) (G) (L1) (L2): ∀T1,T2. ⦃G, L2⦄ ⊢ T1 ➡*[n,h] T2 → - L1 ≛[h,o,T1] L2 → L1 ≛[h,o,T2] L2. -/3 width=4 by cpms_fwd_cpxs, cpxs_rdeq_conf_dx/ qed-. + L1 ≛[T1] L2 → L1 ≛[T2] L2. +/3 width=5 by cpms_fwd_cpxs, cpxs_rdeq_conf_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma index 49f74a202..2135a0cee 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/cpxs.ma". (* Inversion lemmas with normal terms ***************************************) -lemma cpxs_inv_cnx1: ∀h,o,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃T1⦄ → - T1 ≛[h, o] T2. -#h #o #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 -/5 width=8 by cnx_tdeq_trans, tdeq_trans/ +lemma cpxs_inv_cnx1: ∀h,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → + T1 ≛ T2. +#h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 +/5 width=9 by cnx_tdeq_trans, tdeq_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fdeq.ma index 1db09aeb5..ed477d71c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fdeq.ma @@ -17,12 +17,12 @@ include "basic_2/rt_computation/cpxs_rdeq.ma". (* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) -(* Properties with degree-based equivalence for closures ********************) +(* Properties with sort-irrelevant equivalence for closures *****************) -lemma fdeq_cpxs_trans: ∀h,o,G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T⦄ → +lemma fdeq_cpxs_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T⦄ → ∀T2. ⦃G2, L2⦄ ⊢ T ⬈*[h] T2 → - ∃∃T0. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T0 & ⦃G1, L1, T0⦄ ≛[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 + ∃∃T0. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T0 & ⦃G1, L1, T0⦄ ≛ ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 elim (fdeq_inv_gen_dx … H) -H #H #HL12 #HT1 destruct elim (rdeq_cpxs_trans … HT2 … HL12) #T0 #HT0 #HT02 lapply (cpxs_rdeq_conf_dx … HT2 … HL12) -HL12 #HL12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma index c6206f82f..bb0ce14ab 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma @@ -55,10 +55,10 @@ qed-. (* Note: a proof based on fqu_cpx_trans_tdneq might exist *) (* Basic_2A1: uses: fqu_cpxs_trans_neq *) -lemma fqu_cpxs_trans_tdneq: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → - ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛[h, o] U2 → ⊥) → - ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛[h, o] U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐[b] ⦃G2, L2, U2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 +lemma fqu_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → + ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐[b] ⦃G2, L2, U2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❴1❵) #U2 #HVU2 @(ex3_intro … U2) [1,3: /3 width=7 by cpxs_delta, fqu_drop/ @@ -88,10 +88,10 @@ lemma fqu_cpxs_trans_tdneq: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] qed-. (* Basic_2A1: uses: fquq_cpxs_trans_neq *) -lemma fquq_cpxs_trans_tdneq: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐⸮[b] ⦃G2, L2, T2⦄ → - ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛[h, o] U2 → ⊥) → - ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛[h, o] U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐⸮[b] ⦃G2, L2, U2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 +lemma fquq_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐⸮[b] ⦃G2, L2, T2⦄ → + ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐⸮[b] ⦃G2, L2, U2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 [ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tdneq … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ @@ -99,10 +99,10 @@ lemma fquq_cpxs_trans_tdneq: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐⸮ qed-. (* Basic_2A1: uses: fqup_cpxs_trans_neq *) -lemma fqup_cpxs_trans_tdneq: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+[b] ⦃G2, L2, T2⦄ → - ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛[h, o] U2 → ⊥) → - ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛[h, o] U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐+[b] ⦃G2, L2, U2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 +lemma fqup_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+[b] ⦃G2, L2, T2⦄ → + ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐+[b] ⦃G2, L2, U2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 [ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tdneq … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ | #G #G1 #L #L1 #T #T1 #H1 #_ #IH12 #U2 #HTU2 #H elim (IH12 … HTU2 H) -T2 @@ -112,10 +112,10 @@ lemma fqup_cpxs_trans_tdneq: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+[b qed-. (* Basic_2A1: uses: fqus_cpxs_trans_neq *) -lemma fqus_cpxs_trans_tdneq: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄ → - ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛[h, o] U2 → ⊥) → - ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛[h, o] U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐*[b] ⦃G2, L2, U2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 +lemma fqus_cpxs_trans_tdneq: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄ → + ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1, L1, U1⦄ ⊐*[b] ⦃G2, L2, U2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 [ #H12 elim (fqup_cpxs_trans_tdneq … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_rdeq.ma index 292dc54e1..58c6d29ff 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_rdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_rdeq.ma @@ -17,33 +17,33 @@ include "basic_2/rt_computation/cpxs_tdeq.ma". (* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) -(* Properties with degree-based equivalence for local environments **********) +(* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: was just: lleq_cpxs_trans *) -lemma rdeq_cpxs_trans: ∀h,o,G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ⬈*[h] T1 → - ∀L2. L2 ≛[h, o, T0] L0 → - ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈*[h] T & T ≛[h, o] T1. -#h #o #G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/ +lemma rdeq_cpxs_trans: ∀h,G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ⬈*[h] T1 → + ∀L2. L2 ≛[T0] L0 → + ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. +#h #G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/ #T0 #T #HT0 #_ #IH #L2 #HL2 elim (rdeq_cpx_trans … HL2 … HT0) #U1 #H1 #H2 -elim (IH L2) -IH /2 width=4 by cpx_rdeq_conf_dx/ -L0 #U2 #H3 #H4 +elim (IH L2) -IH /2 width=5 by cpx_rdeq_conf_dx/ -L0 #U2 #H3 #H4 elim (tdeq_cpxs_trans … H2 … H3) -T #U0 #H2 #H3 /3 width=5 by cpxs_strap2, tdeq_trans, ex2_intro/ qed-. (* Basic_2A1: was just: cpxs_lleq_conf *) -lemma cpxs_rdeq_conf: ∀h,o,G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ⬈*[h] T1 → - ∀L2. L0 ≛[h, o, T0] L2 → - ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈*[h] T & T ≛[h, o] T1. +lemma cpxs_rdeq_conf: ∀h,G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ⬈*[h] T1 → + ∀L2. L0 ≛[T0] L2 → + ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. /3 width=3 by rdeq_cpxs_trans, rdeq_sym/ qed-. (* Basic_2A1: was just: cpxs_lleq_conf_dx *) -lemma cpxs_rdeq_conf_dx: ∀h,o,G,L2,T1,T2. ⦃G, L2⦄ ⊢ T1 ⬈*[h] T2 → - ∀L1. L1 ≛[h, o, T1] L2 → L1 ≛[h, o, T2] L2. -#h #o #G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_rdeq_conf_dx/ +lemma cpxs_rdeq_conf_dx: ∀h,G,L2,T1,T2. ⦃G, L2⦄ ⊢ T1 ⬈*[h] T2 → + ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. +#h #G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_rdeq_conf_dx/ qed-. (* Basic_2A1: was just: lleq_conf_sn *) -lemma cpxs_rdeq_conf_sn: ∀h,o,G,L1,T1,T2. ⦃G, L1⦄ ⊢ T1 ⬈*[h] T2 → - ∀L2. L1 ≛[h, o, T1] L2 → L1 ≛[h, o, T2] L2. +lemma cpxs_rdeq_conf_sn: ∀h,G,L1,T1,T2. ⦃G, L1⦄ ⊢ T1 ⬈*[h] T2 → + ∀L2. L1 ≛[T1] L2 → L1 ≛[T2] L2. /4 width=6 by cpxs_rdeq_conf_dx, rdeq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_tdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_tdeq.ma index 279ee212e..c313dc7ab 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_tdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_tdeq.ma @@ -17,23 +17,23 @@ include "basic_2/rt_computation/cpxs.ma". (* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) -(* Properties with degree-based equivalence for terms ***********************) +(* Properties with sort-irrelevant equivalence for terms ********************) -lemma tdeq_cpxs_trans: ∀h,o,U1,T1. U1 ≛[h, o] T1 → ∀G,L,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → - ∃∃U2. ⦃G, L⦄ ⊢ U1 ⬈*[h] U2 & U2 ≛[h, o] T2. -#h #o #U1 #T1 #HUT1 #G #L #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/ +lemma tdeq_cpxs_trans: ∀h,U1,T1. U1 ≛ T1 → ∀G,L,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → + ∃∃U2. ⦃G, L⦄ ⊢ U1 ⬈*[h] U2 & U2 ≛ T2. +#h #U1 #T1 #HUT1 #G #L #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/ #T #T2 #_ #HT2 * #U #HU1 #HUT elim (tdeq_cpx_trans … HUT … HT2) -T -T1 /3 width=3 by ex2_intro, cpxs_strap1/ qed-. (* Note: this requires tdeq to be symmetric *) (* Nasic_2A1: uses: cpxs_neq_inv_step_sn *) -lemma cpxs_tdneq_fwd_step_sn: ∀h,o,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛[h, o] T2 → ⊥) → - ∃∃T,T0. ⦃G, L⦄ ⊢ T1 ⬈[h] T & T1 ≛[h, o] T → ⊥ & ⦃G, L⦄ ⊢ T ⬈*[h] T0 & T0 ≛[h, o] T2. -#h #o #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 +lemma cpxs_tdneq_fwd_step_sn: ∀h,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → + ∃∃T,T0. ⦃G, L⦄ ⊢ T1 ⬈[h] T & T1 ≛ T → ⊥ & ⦃G, L⦄ ⊢ T ⬈*[h] T0 & T0 ≛ T2. +#h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 [ #H elim H -H // | #T1 #T0 #HT10 #HT02 #IH #Hn12 - elim (tdeq_dec h o T1 T0) [ -HT10 -HT02 #H10 | -IH #Hn10 ] + elim (tdeq_dec T1 T0) [ -HT10 -HT02 #H10 | -IH #Hn10 ] [ elim IH -IH /3 width=3 by tdeq_trans/ -Hn12 #T3 #T4 #HT03 #Hn03 #HT34 #H42 elim (tdeq_cpx_trans … H10 … HT03) -HT03 #T5 #HT15 #H53 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma index 4bd1dd0c1..58ee19613 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma @@ -21,22 +21,18 @@ include "basic_2/rt_computation/lpxs_cpxs.ma". (* Forward lemmas with head equivalence for terms ***************************) -lemma cpxs_fwd_sort: ∀h,o,G,L,U,s. ⦃G, L⦄ ⊢ ⋆s ⬈*[h] U → - ⋆s ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⋆(next h s) ⬈*[h] U. -#h #o #G #L #U #s #H elim (cpxs_inv_sort1 … H) -H * -[ #H destruct /2 width=1 by or_introl/ -| #n #H destruct - @or_intror >iter_S <(iter_n_Sm … (next h)) // (**) -] +lemma cpxs_fwd_sort: ∀h,G,L,X2,s1. ⦃G, L⦄ ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2. +#h #G #L #X2 #s1 #H +elim (cpxs_inv_sort1 … H) -H #s2 #H destruct // qed-. (* Note: probably this is an inversion lemma *) (* Basic_2A1: was: cpxs_fwd_delta *) -lemma cpxs_fwd_delta_drops: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → +lemma cpxs_fwd_delta_drops: ∀h,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → ∀V2. ⬆*[↑i] V1 ≘ V2 → - ∀U. ⦃G, L⦄ ⊢ #i ⬈*[h] U → - #i ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ V2 ⬈*[h] U. -#h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #U #H + ∀X2. ⦃G, L⦄ ⊢ #i ⬈*[h] X2 → + ∨∨ #i ⩳ X2 | ⦃G, L⦄ ⊢ V2 ⬈*[h] X2. +#h #I #G #L #K #V1 #i #HLK #V2 #HV12 #X2 #H elim (cpxs_inv_lref1_drops … H) -H /2 width=1 by or_introl/ * #I0 #K0 #V0 #U0 #HLK0 #HVU0 #HU0 lapply (drops_mono … HLK0 … HLK) -HLK0 #H destruct @@ -44,9 +40,9 @@ lapply (drops_mono … HLK0 … HLK) -HLK0 #H destruct qed-. (* Basic_1: was just: pr3_iso_beta *) -lemma cpxs_fwd_beta: ∀h,o,p,G,L,V,W,T,U. ⦃G, L⦄ ⊢ ⓐV.ⓛ{p}W.T ⬈*[h] U → - ⓐV.ⓛ{p}W.T ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⓓ{p}ⓝW.V.T ⬈*[h] U. -#h #o #p #G #L #V #W #T #U #H elim (cpxs_inv_appl1 … H) -H * +lemma cpxs_fwd_beta: ∀h,p,G,L,V,W,T,X2. ⦃G, L⦄ ⊢ ⓐV.ⓛ{p}W.T ⬈*[h] X2 → + ∨∨ ⓐV.ⓛ{p}W.T ⩳ X2 | ⦃G, L⦄ ⊢ ⓓ{p}ⓝW.V.T ⬈*[h] X2. +#h #p #G #L #V #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H * [ #V0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair, or_introl/ | #b #W0 #T0 #HT0 #HU elim (cpxs_inv_abst1 … HT0) -HT0 #W1 #T1 #HW1 #HT1 #H destruct @@ -57,10 +53,10 @@ lemma cpxs_fwd_beta: ∀h,o,p,G,L,V,W,T,U. ⦃G, L⦄ ⊢ ⓐV.ⓛ{p}W.T ⬈*[h] ] qed-. -lemma cpxs_fwd_theta: ∀h,o,p,G,L,V1,V,T,U. ⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}V.T ⬈*[h] U → - ∀V2. ⬆*[1] V1 ≘ V2 → ⓐV1.ⓓ{p}V.T ⩳[h, o] U ∨ - ⦃G, L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] U. -#h #o #p #G #L #V1 #V #T #U #H #V2 #HV12 +lemma cpxs_fwd_theta: ∀h,p,G,L,V1,V,T,X2. ⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}V.T ⬈*[h] X2 → + ∀V2. ⬆*[1] V1 ≘ V2 → + ∨∨ ⓐV1.ⓓ{p}V.T ⩳ X2 | ⦃G, L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] X2. +#h #p #G #L #V1 #V #T #X2 #H #V2 #HV12 elim (cpxs_inv_appl1 … H) -H * [ -HV12 #V0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair, or_introl/ | #q #W #T0 #HT0 #HU @@ -68,13 +64,13 @@ elim (cpxs_inv_appl1 … H) -H * [ #V3 #T3 #_ #_ #H destruct | #X #HT2 #H #H0 destruct elim (lifts_inv_bind1 … H) -H #W2 #T2 #HW2 #HT02 #H destruct - @or_intror @(cpxs_trans … HU) -U (**) (* explicit constructor *) + @or_intror @(cpxs_trans … HU) -X2 (**) (* explicit constructor *) @(cpxs_trans … (+ⓓV.ⓐV2.ⓛ{q}W2.T2)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T @(cpxs_strap2 … (ⓐV1.ⓛ{q}W.T0)) [2: /2 width=1 by cpxs_beta_dx/ ] /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] | #q #V3 #V4 #V0 #T0 #HV13 #HV34 #HT0 #HU - @or_intror @(cpxs_trans … HU) -U (**) (* explicit constructor *) + @or_intror @(cpxs_trans … HU) -X2 (**) (* explicit constructor *) elim (cpxs_inv_abbr1_dx … HT0) -HT0 * [ #V5 #T5 #HV5 #HT5 #H destruct /6 width=9 by cpxs_lifts_bi, drops_refl, drops_drop, cpxs_flat, cpxs_bind/ @@ -88,13 +84,13 @@ elim (cpxs_inv_appl1 … H) -H * ] qed-. -lemma cpxs_fwd_cast: ∀h,o,G,L,W,T,U. ⦃G, L⦄ ⊢ ⓝW.T ⬈*[h] U → - ∨∨ ⓝW. T ⩳[h, o] U | ⦃G, L⦄ ⊢ T ⬈*[h] U | ⦃G, L⦄ ⊢ W ⬈*[h] U. -#h #o #G #L #W #T #U #H +lemma cpxs_fwd_cast: ∀h,G,L,W,T,X2. ⦃G, L⦄ ⊢ ⓝW.T ⬈*[h] X2 → + ∨∨ ⓝW. T ⩳ X2 | ⦃G, L⦄ ⊢ T ⬈*[h] X2 | ⦃G, L⦄ ⊢ W ⬈*[h] X2. +#h #G #L #W #T #X2 #H elim (cpxs_inv_cast1 … H) -H /2 width=1 by or3_intro1, or3_intro2/ * #W0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair, or3_intro0/ qed-. -lemma cpxs_fwd_cnx: ∀h,o,G,L,T. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃T⦄ → - ∀U. ⦃G, L⦄ ⊢ T ⬈*[h] U → T ⩳[h, o] U. -/3 width=4 by cpxs_inv_cnx1, tdeq_theq/ qed-. +lemma cpxs_fwd_cnx: ∀h,G,L,T1. ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → + ∀X2. ⦃G, L⦄ ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2. +/3 width=5 by cpxs_inv_cnx1, tdeq_theq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma index 8c0326206..ec7f35fee 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma @@ -20,90 +20,82 @@ include "basic_2/rt_computation/cpxs_theq.ma". (* Vector form of forward lemmas with head equivalence for terms ************) -lemma cpxs_fwd_sort_vector: ∀h,o,G,L,s,Vs,U. ⦃G, L⦄ ⊢ ⒶVs.⋆s ⬈*[h] U → - ⒶVs.⋆s ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⒶVs.⋆(next h s) ⬈*[h] U. -#h #o #G #L #s #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_sort/ -#V #Vs #IHVs #U #H +lemma cpxs_fwd_sort_vector: ∀h,G,L,s,Vs,X2. ⦃G, L⦄ ⊢ ⒶVs.⋆s ⬈*[h] X2 → ⒶVs.⋆s ⩳ X2. +#h #G #L #s #Vs elim Vs -Vs /2 width=4 by cpxs_fwd_sort/ +#V #Vs #IHVs #X2 #H elim (cpxs_inv_appl1 … H) -H * -[ -IHVs #V1 #T1 #_ #_ #H destruct /2 width=1 by theq_pair, or_introl/ +[ -IHVs #V1 #T1 #_ #_ #H destruct /2 width=1 by theq_pair/ | #p #W1 #T1 #HT1 #HU - elim (IHVs … HT1) -IHVs -HT1 #HT1 - [ elim (theq_inv_applv_bind_simple … HT1) // - | @or_intror (**) (* explicit constructor *) - @(cpxs_trans … HU) -U - @(cpxs_strap1 … (ⓐV.ⓛ{p}W1.T1)) /3 width=1 by cpxs_flat_dx, cpx_beta/ - ] + lapply (IHVs … HT1) -IHVs -HT1 #HT1 + elim (theq_inv_applv_bind_simple … HT1) // | #p #V1 #V2 #V3 #T1 #HV01 #HV12 #HT1 #HU - elim (IHVs … HT1) -IHVs -HT1 #HT1 - [ elim (theq_inv_applv_bind_simple … HT1) // - | @or_intror (**) (* explicit constructor *) - @(cpxs_trans … HU) -U - @(cpxs_strap1 … (ⓐV1.ⓓ{p}V3.T1)) /3 width=3 by cpxs_flat, cpx_theta/ - ] + lapply (IHVs … HT1) -IHVs -HT1 #HT1 + elim (theq_inv_applv_bind_simple … HT1) // ] qed-. (* Basic_2A1: was: cpxs_fwd_delta_vector *) -lemma cpxs_fwd_delta_drops_vector: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → +lemma cpxs_fwd_delta_drops_vector: ∀h,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → ∀V2. ⬆*[↑i] V1 ≘ V2 → - ∀Vs,U. ⦃G, L⦄ ⊢ ⒶVs.#i ⬈*[h] U → - ⒶVs.#i ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⒶVs.V2 ⬈*[h] U. -#h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs /2 width=5 by cpxs_fwd_delta_drops/ -#V #Vs #IHVs #U #H -K -V1 + ∀Vs,X2. ⦃G, L⦄ ⊢ ⒶVs.#i ⬈*[h] X2 → + ∨∨ ⒶVs.#i ⩳ X2 | ⦃G, L⦄ ⊢ ⒶVs.V2 ⬈*[h] X2. +#h #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs +elim Vs -Vs /2 width=5 by cpxs_fwd_delta_drops/ +#V #Vs #IHVs #X2 #H -K -V1 elim (cpxs_inv_appl1 … H) -H * [ -IHVs #V0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair, or_introl/ | #q #W0 #T0 #HT0 #HU elim (IHVs … HT0) -IHVs -HT0 #HT0 [ elim (theq_inv_applv_bind_simple … HT0) // | @or_intror -i (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /3 width=1 by cpxs_flat_dx, cpx_beta/ ] | #q #V0 #V1 #V3 #T0 #HV0 #HV01 #HT0 #HU elim (IHVs … HT0) -IHVs -HT0 #HT0 [ elim (theq_inv_applv_bind_simple … HT0) // | @or_intror -i (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV0.ⓓ{q}V3.T0)) /3 width=3 by cpxs_flat, cpx_theta/ ] ] qed-. (* Basic_1: was just: pr3_iso_appls_beta *) -lemma cpxs_fwd_beta_vector: ∀h,o,p,G,L,Vs,V,W,T,U. ⦃G, L⦄ ⊢ ⒶVs.ⓐV.ⓛ{p}W.T ⬈*[h] U → - ⒶVs.ⓐV.ⓛ{p}W. T ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⒶVs.ⓓ{p}ⓝW.V.T ⬈*[h] U. -#h #o #p #G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_beta/ -#V0 #Vs #IHVs #V #W #T #U #H +lemma cpxs_fwd_beta_vector: ∀h,p,G,L,Vs,V,W,T,X2. ⦃G, L⦄ ⊢ ⒶVs.ⓐV.ⓛ{p}W.T ⬈*[h] X2 → + ∨∨ ⒶVs.ⓐV.ⓛ{p}W. T ⩳ X2 | ⦃G, L⦄ ⊢ ⒶVs.ⓓ{p}ⓝW.V.T ⬈*[h] X2. +#h #p #G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_beta/ +#V0 #Vs #IHVs #V #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H * [ -IHVs #V1 #T1 #_ #_ #H destruct /2 width=1 by theq_pair, or_introl/ | #q #W1 #T1 #HT1 #HU elim (IHVs … HT1) -IHVs -HT1 #HT1 [ elim (theq_inv_applv_bind_simple … HT1) // | @or_intror (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV0.ⓛ{q}W1.T1)) /3 width=1 by cpxs_flat_dx, cpx_beta/ ] | #q #V1 #V2 #V3 #T1 #HV01 #HV12 #HT1 #HU elim (IHVs … HT1) -IHVs -HT1 #HT1 [ elim (theq_inv_applv_bind_simple … HT1) // | @or_intror (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV1.ⓓ{q}V3.T1)) /3 width=3 by cpxs_flat, cpx_theta/ ] ] qed-. (* Basic_1: was just: pr3_iso_appls_abbr *) -lemma cpxs_fwd_theta_vector: ∀h,o,G,L,V1b,V2b. ⬆*[1] V1b ≘ V2b → - ∀p,V,T,U. ⦃G, L⦄ ⊢ ⒶV1b.ⓓ{p}V.T ⬈*[h] U → - ⒶV1b.ⓓ{p}V.T ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⓓ{p}V.ⒶV2b.T ⬈*[h] U. -#h #o #G #L #V1b #V2b * -V1b -V2b /3 width=1 by or_intror/ +lemma cpxs_fwd_theta_vector: ∀h,G,L,V1b,V2b. ⬆*[1] V1b ≘ V2b → + ∀p,V,T,X2. ⦃G, L⦄ ⊢ ⒶV1b.ⓓ{p}V.T ⬈*[h] X2 → + ∨∨ ⒶV1b.ⓓ{p}V.T ⩳ X2 | ⦃G, L⦄ ⊢ ⓓ{p}V.ⒶV2b.T ⬈*[h] X2. +#h #G #L #V1b #V2b * -V1b -V2b /3 width=1 by or_intror/ #V1b #V2b #V1a #V2a #HV12a #HV12b #p generalize in match HV12a; -HV12a generalize in match V2a; -V2a generalize in match V1a; -V1a elim HV12b -V1b -V2b /2 width=1 by cpxs_fwd_theta/ -#V1b #V2b #V1b #V2b #HV12b #_ #IHV12b #V1a #V2a #HV12a #V #T #U #H +#V1b #V2b #V1b #V2b #HV12b #_ #IHV12b #V1a #V2a #HV12a #V #T #X2 #H elim (cpxs_inv_appl1 … H) -H * [ -IHV12b -HV12a -HV12b #V0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair, or_introl/ | #q #W0 #T0 #HT0 #HU @@ -111,7 +103,7 @@ elim (cpxs_inv_appl1 … H) -H * [ -HV12a -HV12b -HU elim (theq_inv_pair1 … HT0) #V1 #T1 #H destruct | @or_intror -V1b (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 elim (cpxs_inv_abbr1_dx … HT0) -HT0 * [ -HV12a #V1 #T1 #_ #_ #H destruct | -V1b #X #HT1 #H #H0 destruct @@ -126,7 +118,7 @@ elim (cpxs_inv_appl1 … H) -H * [ -HV12a -HV10a -HV0a -HU elim (theq_inv_pair1 … HT0) #V1 #T1 #H destruct | @or_intror -V1b -V1b (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 elim (cpxs_inv_abbr1_dx … HT0) -HT0 * [ #V1 #T1 #HV1 #HT1 #H destruct lapply (cpxs_lifts_bi … HV10a (Ⓣ) … (L.ⓓV) … HV12a … HV0a) -V1a -V0a /3 width=1 by drops_refl, drops_drop/ #HV2a @@ -143,41 +135,41 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_1: was just: pr3_iso_appls_cast *) -lemma cpxs_fwd_cast_vector: ∀h,o,G,L,Vs,W,T,U. ⦃G, L⦄ ⊢ ⒶVs.ⓝW.T ⬈*[h] U → - ∨∨ ⒶVs. ⓝW. T ⩳[h, o] U - | ⦃G, L⦄ ⊢ ⒶVs.T ⬈*[h] U - | ⦃G, L⦄ ⊢ ⒶVs.W ⬈*[h] U. -#h #o #G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_cast/ -#V #Vs #IHVs #W #T #U #H +lemma cpxs_fwd_cast_vector: ∀h,G,L,Vs,W,T,X2. ⦃G, L⦄ ⊢ ⒶVs.ⓝW.T ⬈*[h] X2 → + ∨∨ ⒶVs. ⓝW. T ⩳ X2 + | ⦃G, L⦄ ⊢ ⒶVs.T ⬈*[h] X2 + | ⦃G, L⦄ ⊢ ⒶVs.W ⬈*[h] X2. +#h #G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_cast/ +#V #Vs #IHVs #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H * [ -IHVs #V0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair, or3_intro0/ | #q #W0 #T0 #HT0 #HU elim (IHVs … HT0) -IHVs -HT0 #HT0 [ elim (theq_inv_applv_bind_simple … HT0) // | @or3_intro1 -W (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/ | @or3_intro2 -T (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/ ] | #q #V0 #V1 #V2 #T0 #HV0 #HV01 #HT0 #HU elim (IHVs … HT0) -IHVs -HT0 #HT0 [ elim (theq_inv_applv_bind_simple … HT0) // | @or3_intro1 -W (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV0.ⓓ{q}V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/ | @or3_intro2 -T (**) (* explicit constructor *) - @(cpxs_trans … HU) -U + @(cpxs_trans … HU) -X2 @(cpxs_strap1 … (ⓐV0.ⓓ{q}V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/ ] ] qed-. (* Basic_1: was just: nf2_iso_appls_lref *) -lemma cpxs_fwd_cnx_vector: ∀h,o,G,L,T. 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃T⦄ → - ∀Vs,U. ⦃G, L⦄ ⊢ ⒶVs.T ⬈*[h] U → ⒶVs.T ⩳[h, o] U. -#h #o #G #L #T #H1T #H2T #Vs elim Vs -Vs [ @(cpxs_fwd_cnx … H2T) ] (**) (* /2 width=3 by cpxs_fwd_cnx/ does not work *) -#V #Vs #IHVs #U #H +lemma cpxs_fwd_cnx_vector: ∀h,G,L,T. 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → + ∀Vs,X2. ⦃G, L⦄ ⊢ ⒶVs.T ⬈*[h] X2 → ⒶVs.T ⩳ X2. +#h #G #L #T #H1T #H2T #Vs elim Vs -Vs [ @(cpxs_fwd_cnx … H2T) ] (**) (* /2 width=3 by cpxs_fwd_cnx/ does not work *) +#V #Vs #IHVs #X2 #H elim (cpxs_inv_appl1 … H) -H * [ -IHVs #V0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair/ | #p #W0 #T0 #HT0 #HU diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma index 4c8371a0b..384d014cb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma @@ -12,83 +12,83 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtystrong_5.ma". +include "basic_2/notation/relations/predtystrong_4.ma". include "static_2/syntax/tdeq.ma". include "basic_2/rt_transition/cpx.ma". (* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) -definition csx: ∀h. sd h → relation3 genv lenv term ≝ - λh,o,G,L. SN … (cpx h G L) (tdeq h o …). +definition csx: ∀h. relation3 genv lenv term ≝ + λh,G,L. SN … (cpx h G L) tdeq. interpretation "strong normalization for unbound context-sensitive parallel rt-transition (term)" - 'PRedTyStrong h o G L T = (csx h o G L T). + 'PRedTyStrong h G L T = (csx h G L T). (* Basic eliminators ********************************************************) -lemma csx_ind: ∀h,o,G,L. ∀Q:predicate term. - (∀T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛[h, o] T2 → ⊥) → Q T2) → +lemma csx_ind: ∀h,G,L. ∀Q:predicate term. + (∀T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → Q T. -#h #o #G #L #Q #H0 #T1 #H elim H -T1 + ∀T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q T. +#h #G #L #Q #H0 #T1 #H elim H -T1 /5 width=1 by SN_intro/ qed-. (* Basic properties *********************************************************) (* Basic_1: was just: sn3_pr2_intro *) -lemma csx_intro: ∀h,o,G,L,T1. - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛[h, o] T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄) → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄. +lemma csx_intro: ∀h,G,L,T1. + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄) → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄. /4 width=1 by SN_intro/ qed. (* Basic forward lemmas *****************************************************) -fact csx_fwd_pair_sn_aux: ∀h,o,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U⦄ → - ∀I,V,T. U = ②{I}V.T → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄. -#h #o #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct +fact csx_fwd_pair_sn_aux: ∀h,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → + ∀I,V,T. U = ②{I}V.T → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. +#h #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct @csx_intro #V2 #HLV2 #HV2 @(IH (②{I}V2.T)) -IH /2 width=3 by cpx_pair_sn/ -HLV2 #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_head *) -lemma csx_fwd_pair_sn: ∀h,o,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃②{I}V.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄. +lemma csx_fwd_pair_sn: ∀h,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃②{I}V.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. /2 width=5 by csx_fwd_pair_sn_aux/ qed-. -fact csx_fwd_bind_dx_aux: ∀h,o,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U⦄ → - ∀p,I,V,T. U = ⓑ{p,I}V.T → ⦃G, L.ⓑ{I}V⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L #U #H elim H -H #U0 #_ #IH #p #I #V #T #H destruct +fact csx_fwd_bind_dx_aux: ∀h,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → + ∀p,I,V,T. U = ⓑ{p,I}V.T → ⦃G, L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L #U #H elim H -H #U0 #_ #IH #p #I #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 @(IH (ⓑ{p,I}V.T2)) -IH /2 width=3 by cpx_bind/ -HLT2 #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_bind *) -lemma csx_fwd_bind_dx: ∀h,o,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓑ{p,I}V.T⦄ → ⦃G, L.ⓑ{I}V⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma csx_fwd_bind_dx: ∀h,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → ⦃G, L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /2 width=4 by csx_fwd_bind_dx_aux/ qed-. -fact csx_fwd_flat_dx_aux: ∀h,o,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U⦄ → - ∀I,V,T. U = ⓕ{I}V.T → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct +fact csx_fwd_flat_dx_aux: ∀h,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → + ∀I,V,T. U = ⓕ{I}V.T → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 @(IH (ⓕ{I}V.T2)) -IH /2 width=3 by cpx_flat/ -HLT2 #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_flat *) -lemma csx_fwd_flat_dx: ∀h,o,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓕ{I}V.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma csx_fwd_flat_dx: ∀h,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓕ{I}V.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /2 width=5 by csx_fwd_flat_dx_aux/ qed-. -lemma csx_fwd_bind: ∀h,o,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓑ{p,I}V.T⦄ → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ ∧ ⦃G, L.ⓑ{I}V⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma csx_fwd_bind: ∀h,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ ∧ ⦃G, L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /3 width=3 by csx_fwd_pair_sn, csx_fwd_bind_dx, conj/ qed-. -lemma csx_fwd_flat: ∀h,o,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓕ{I}V.T⦄ → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ ∧ ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma csx_fwd_flat: ∀h,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓕ{I}V.T⦄ → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ ∧ ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /3 width=3 by csx_fwd_pair_sn, csx_fwd_flat_dx, conj/ qed-. (* Basic_1: removed theorems 14: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma index 6cc0664aa..c44bf1d53 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma @@ -21,40 +21,40 @@ include "basic_2/rt_computation/csx_gcr.ma". (* Main properties with atomic arity assignment *****************************) -theorem aaa_csx: ∀h,o,G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L #T #A #H -@(gcr_aaa … (csx_gcp h o) (csx_gcr h o) … H) +theorem aaa_csx: ∀h,G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L #T #A #H +@(gcr_aaa … (csx_gcp h) (csx_gcr h) … H) qed. (* Advanced eliminators *****************************************************) -fact aaa_ind_csx_aux: ∀h,o,G,L,A. ∀Q:predicate term. +fact aaa_ind_csx_aux: ∀h,G,L,A. ∀Q:predicate term. (∀T1. ⦃G, L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛[h, o] T2 → ⊥) → Q T2) → Q T1 + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ T ⁝ A → Q T. -#h #o #G #L #A #Q #IH #T #H @(csx_ind … H) -T /4 width=5 by cpx_aaa_conf/ + ∀T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ T ⁝ A → Q T. +#h #G #L #A #Q #IH #T #H @(csx_ind … H) -T /4 width=5 by cpx_aaa_conf/ qed-. -lemma aaa_ind_csx: ∀h,o,G,L,A. ∀Q:predicate term. +lemma aaa_ind_csx: ∀h,G,L,A. ∀Q:predicate term. (∀T1. ⦃G, L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛[h, o] T2 → ⊥) → Q T2) → Q T1 + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → ∀T. ⦃G, L⦄ ⊢ T ⁝ A → Q T. /5 width=9 by aaa_ind_csx_aux, aaa_csx/ qed-. -fact aaa_ind_csx_cpxs_aux: ∀h,o,G,L,A. ∀Q:predicate term. +fact aaa_ind_csx_cpxs_aux: ∀h,G,L,A. ∀Q:predicate term. (∀T1. ⦃G, L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛[h, o] T2 → ⊥) → Q T2) → Q T1 + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ T ⁝ A → Q T. -#h #o #G #L #A #Q #IH #T #H @(csx_ind_cpxs … H) -T /4 width=5 by cpxs_aaa_conf/ + ∀T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ T ⁝ A → Q T. +#h #G #L #A #Q #IH #T #H @(csx_ind_cpxs … H) -T /4 width=5 by cpxs_aaa_conf/ qed-. (* Basic_2A1: was: aaa_ind_csx_alt *) -lemma aaa_ind_csx_cpxs: ∀h,o,G,L,A. ∀Q:predicate term. +lemma aaa_ind_csx_cpxs: ∀h,G,L,A. ∀Q:predicate term. (∀T1. ⦃G, L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛[h, o] T2 → ⊥) → Q T2) → Q T1 + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → ∀T. ⦃G, L⦄ ⊢ T ⁝ A → Q T. /5 width=9 by aaa_ind_csx_cpxs_aux, aaa_csx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma index 24320b69f..eaaaa9aa2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma @@ -20,18 +20,10 @@ include "basic_2/rt_computation/csx.ma". (* Properties with normal terms for unbound parallel rt-transition **********) (* Basic_1: was just: sn3_nf2 *) -lemma cnx_csx: ∀h,o,G,L,T. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma cnx_csx: ∀h,G,L,T. ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /2 width=1 by NF_to_SN/ qed. (* Advanced properties ******************************************************) -lemma csx_sort: ∀h,o,G,L,s. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃⋆s⦄. -#h #o #G #L #s elim (deg_total h o s) -#d generalize in match s; -s elim d -d -[ /3 width=3 by cnx_csx, cnx_sort/ -| #d #IH #s #Hsd lapply (deg_next_SO … Hsd) -Hsd - #Hsd @csx_intro #X #H #HX - elim (cpx_inv_sort1 … H) -H #H destruct /2 width=1 by/ - elim HX -HX // -] -qed. +lemma csx_sort: ∀h,G,L,s. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃⋆s⦄. +/3 width=4 by cnx_csx, cnx_sort/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma index 4a93b473e..d0072aa83 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma @@ -23,34 +23,20 @@ include "basic_2/rt_computation/csx_vector.ma". (* Properties with normal terms for unbound parallel rt-transition **********) (* Basic_1: was just: sn3_appls_lref *) -lemma csx_applv_cnx: ∀h,o,G,L,T. 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃T⦄ → - ∀Vs. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃Vs⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.T⦄. -#h #o #G #L #T #H1T #H2T #Vs elim Vs -Vs -[ #_ normalize in ⊢ (?????%); /2 width=1/ +lemma csx_applv_cnx: ∀h,G,L,T. 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → + ∀Vs. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃Vs⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.T⦄. +#h #G #L #T #H1T #H2T #Vs elim Vs -Vs +[ #_ normalize in ⊢ (????%); /2 width=1 by cnx_csx/ | #V #Vs #IHV #H elim (csxv_inv_cons … H) -H #HV #HVs @csx_appl_simple_theq /2 width=1 by applv_simple/ -IHV -HV -HVs #X #H #H0 - lapply (cpxs_fwd_cnx_vector … o … H) -H // -H1T -H2T #H + lapply (cpxs_fwd_cnx_vector … H) -H // -H1T -H2T #H elim (H0) -H0 // ] qed. (* Advanced properties ******************************************************) -lemma csx_applv_sort: ∀h,o,G,L,s,Vs. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃Vs⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.⋆s⦄. -#h #o #G #L #s elim (deg_total h o s) -#d generalize in match s; -s elim d -d -[ /3 width=6 by csx_applv_cnx, cnx_sort, simple_atom/ -| #d #IHd #s #Hd #Vs elim Vs -Vs /2 width=1 by/ - #V #Vs #IHVs #HVVs - elim (csxv_inv_cons … HVVs) #HV #HVs - @csx_appl_simple_theq /2 width=1 by applv_simple, simple_atom/ - #X #H #H0 - elim (cpxs_fwd_sort_vector … o … H) -H #H - [ elim H0 -H0 // - | -H0 @(csx_cpxs_trans … (Ⓐ(V⨮Vs).⋆(next h s))) - /3 width=1 by cpxs_flat_dx, deg_next_SO/ - ] -] -qed. +lemma csx_applv_sort: ∀h,G,L,s,Vs. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃Vs⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.⋆s⦄. +/3 width=6 by csx_applv_cnx, cnx_sort, simple_atom/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma index 3a8a70ef9..586c2847f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma @@ -21,33 +21,33 @@ include "basic_2/rt_computation/csx_csx.ma". (* Properties with unbound context-sensitive rt-computation for terms *******) (* Basic_1: was just: sn3_intro *) -lemma csx_intro_cpxs: ∀h,o,G,L,T1. - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛[h, o] T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄) → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄. +lemma csx_intro_cpxs: ∀h,G,L,T1. + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄) → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄. /4 width=1 by cpx_cpxs, csx_intro/ qed-. (* Basic_1: was just: sn3_pr3_trans *) -lemma csx_cpxs_trans: ∀h,o,G,L,T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #G #L #T1 #HT1 #T2 #H @(cpxs_ind … H) -T2 +lemma csx_cpxs_trans: ∀h,G,L,T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #G #L #T1 #HT1 #T2 #H @(cpxs_ind … H) -T2 /2 width=3 by csx_cpx_trans/ qed-. (* Eliminators with unbound context-sensitive rt-computation for terms ******) -lemma csx_ind_cpxs_tdeq: ∀h,o,G,L. ∀Q:predicate term. - (∀T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛[h, o] T2 → ⊥) → Q T2) → Q T1 +lemma csx_ind_cpxs_tdeq: ∀h,G,L. ∀Q:predicate term. + (∀T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀T0. ⦃G, L⦄ ⊢ T1 ⬈*[h] T0 → ∀T2. T0 ≛[h, o] T2 → Q T2. -#h #o #G #L #Q #IH #T1 #H @(csx_ind … H) -T1 + ∀T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀T0. ⦃G, L⦄ ⊢ T1 ⬈*[h] T0 → ∀T2. T0 ≛ T2 → Q T2. +#h #G #L #Q #IH #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IH1 #T0 #HT10 #T2 #HT02 @IH -IH /3 width=3 by csx_cpxs_trans, csx_tdeq_trans/ -HT1 #V2 #HTV2 #HnTV2 lapply (tdeq_tdneq_trans … HT02 … HnTV2) -HnTV2 #H elim (tdeq_cpxs_trans … HT02 … HTV2) -T2 #V0 #HTV0 #HV02 lapply (tdneq_tdeq_canc_dx … H … HV02) -H #HnTV0 -elim (tdeq_dec h o T1 T0) #H +elim (tdeq_dec T1 T0) #H [ lapply (tdeq_tdneq_trans … H … HnTV0) -H -HnTV0 #Hn10 lapply (cpxs_trans … HT10 … HTV0) -T0 #H10 elim (cpxs_tdneq_fwd_step_sn … H10 … Hn10) -H10 -Hn10 @@ -59,11 +59,11 @@ elim (tdeq_dec h o T1 T0) #H qed-. (* Basic_2A1: was: csx_ind_alt *) -lemma csx_ind_cpxs: ∀h,o,G,L. ∀Q:predicate term. - (∀T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛[h, o] T2 → ⊥) → Q T2) → Q T1 +lemma csx_ind_cpxs: ∀h,G,L. ∀Q:predicate term. + (∀T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → Q T. -#h #o #G #L #Q #IH #T #HT + ∀T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q T. +#h #G #L #Q #IH #T #HT @(csx_ind_cpxs_tdeq … IH … HT) -IH -HT // (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma index 5efee8db4..3702ba245 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma @@ -19,23 +19,23 @@ include "basic_2/rt_computation/csx_drops.ma". (* Advanced properties ******************************************************) -lemma csx_tdeq_trans: ∀h,o,G,L,T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀T2. T1 ≛[h, o] T2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #G #L #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2 +lemma csx_tdeq_trans: ∀h,G,L,T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀T2. T1 ≛ T2 → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #G #L #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2 @csx_intro #T1 #HT21 #HnT21 elim (tdeq_cpx_trans … HT2 … HT21) -HT21 /4 width=5 by tdeq_repl/ qed-. -lemma csx_cpx_trans: ∀h,o,G,L,T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12 -elim (tdeq_dec h o T1 T2) /3 width=4 by csx_tdeq_trans/ +lemma csx_cpx_trans: ∀h,G,L,T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12 +elim (tdeq_dec T1 T2) /3 width=4 by csx_tdeq_trans/ qed-. (* Basic_1: was just: sn3_cast *) -lemma csx_cast: ∀h,o,G,L,W. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃W⦄ → - ∀T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓝW.T⦄. -#h #o #G #L #W #HW @(csx_ind … HW) -W +lemma csx_cast: ∀h,G,L,W. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃W⦄ → + ∀T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓝW.T⦄. +#h #G #L #W #HW @(csx_ind … HW) -W #W #HW #IHW #T #HT @(csx_ind … HT) -T #T #HT #IHT @csx_intro #X #H1 #H2 elim (cpx_inv_cast1 … H1) -H1 @@ -51,9 +51,9 @@ qed. (* Basic_1: was just: sn3_abbr *) (* Basic_2A1: was: csx_lref_bind *) -lemma csx_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≘ K.ⓑ{I}V → - ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄. -#h #o #I #G #L #K #V #i #HLK #HV +lemma csx_lref_pair: ∀h,I,G,L,K,V,i. ⬇*[i] L ≘ K.ⓑ{I}V → + ⦃G, K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄. +#h #I #G #L #K #V #i #HLK #HV @csx_intro #X #H #Hi elim (cpx_inv_lref1_drops … H) -H [ #H destruct elim Hi // | -Hi * #I0 #K0 #V0 #V1 #HLK0 #HV01 #HV1 @@ -66,17 +66,17 @@ qed. (* Basic_1: was: sn3_gen_def *) (* Basic_2A1: was: csx_inv_lref_bind *) -lemma csx_inv_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≘ K.ⓑ{I}V → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄ → ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄. -#h #o #I #G #L #K #V #i #HLK #Hi +lemma csx_inv_lref_pair: ∀h,I,G,L,K,V,i. ⬇*[i] L ≘ K.ⓑ{I}V → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄ → ⦃G, K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. +#h #I #G #L #K #V #i #HLK #Hi elim (lifts_total V (𝐔❴↑i❵)) /4 width=9 by csx_inv_lifts, csx_cpx_trans, cpx_delta_drops, drops_isuni_fwd_drop2/ qed-. -lemma csx_inv_lref: ∀h,o,G,L,i. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄ → +lemma csx_inv_lref: ∀h,G,L,i. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄ → ∨∨ ⬇*[Ⓕ, 𝐔❴i❵] L ≘ ⋆ | ∃∃I,K. ⬇*[i] L ≘ K.ⓤ{I} - | ∃∃I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V & ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄. -#h #o #G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/ + | ∃∃I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V & ⦃G, K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. +#h #G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/ * * /4 width=9 by csx_inv_lref_pair, ex2_3_intro, ex1_2_intro, or3_intro2, or3_intro1/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma index 30f35f70f..4899dc66d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma @@ -23,31 +23,31 @@ include "basic_2/rt_computation/csx_vector.ma". (* Advanced properties ************************************* ****************) (* Basic_1: was just: sn3_appls_beta *) -lemma csx_applv_beta: ∀h,o,p,G,L,Vs,V,W,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.ⓓ{p}ⓝW.V.T⦄ → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.ⓐV.ⓛ{p}W.T⦄. -#h #o #p #G #L #Vs elim Vs -Vs /2 width=1 by csx_appl_beta/ +lemma csx_applv_beta: ∀h,p,G,L,Vs,V,W,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.ⓓ{p}ⓝW.V.T⦄ → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.ⓐV.ⓛ{p}W.T⦄. +#h #p #G #L #Vs elim Vs -Vs /2 width=1 by csx_appl_beta/ #V0 #Vs #IHV #V #W #T #H1T lapply (csx_fwd_pair_sn … H1T) #HV0 lapply (csx_fwd_flat_dx … H1T) #H2T @csx_appl_simple_theq /2 width=1 by applv_simple, simple_flat/ -IHV -HV0 -H2T #X #H #H0 -elim (cpxs_fwd_beta_vector … o … H) -H #H +elim (cpxs_fwd_beta_vector … H) -H #H [ -H1T elim H0 -H0 // | -H0 /3 width=5 by csx_cpxs_trans, cpxs_flat_dx/ ] qed. -lemma csx_applv_delta: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → +lemma csx_applv_delta: ∀h,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → ∀V2. ⬆*[↑i] V1 ≘ V2 → - ∀Vs. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.V2⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.#i⦄. -#h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs + ∀Vs. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.V2⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.#i⦄. +#h #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs [ /4 width=11 by csx_inv_lifts, csx_lref_pair, drops_isuni_fwd_drop2/ | #V #Vs #IHV #H1T lapply (csx_fwd_pair_sn … H1T) #HV lapply (csx_fwd_flat_dx … H1T) #H2T @csx_appl_simple_theq /2 width=1 by applv_simple, simple_atom/ -IHV -HV -H2T #X #H #H0 - elim (cpxs_fwd_delta_drops_vector … o … HLK … HV12 … H) -HLK -HV12 -H #H + elim (cpxs_fwd_delta_drops_vector … HLK … HV12 … H) -HLK -HV12 -H #H [ -H1T elim H0 -H0 // | -H0 /3 width=5 by csx_cpxs_trans, cpxs_flat_dx/ ] @@ -55,10 +55,10 @@ lemma csx_applv_delta: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → qed. (* Basic_1: was just: sn3_appls_abbr *) -lemma csx_applv_theta: ∀h,o,p,G,L,V1b,V2b. ⬆*[1] V1b ≘ V2b → - ∀V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}V.ⒶV2b.T⦄ → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶV1b.ⓓ{p}V.T⦄. -#h #o #p #G #L #V1b #V2b * -V1b -V2b /2 width=1 by/ +lemma csx_applv_theta: ∀h,p,G,L,V1b,V2b. ⬆*[1] V1b ≘ V2b → + ∀V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.ⒶV2b.T⦄ → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶV1b.ⓓ{p}V.T⦄. +#h #p #G #L #V1b #V2b * -V1b -V2b /2 width=1 by/ #V1b #V2b #V1 #V2 #HV12 #H generalize in match HV12; -HV12 generalize in match V2; -V2 generalize in match V1; -V1 elim H -V1b -V2b /2 width=3 by csx_appl_theta/ @@ -67,23 +67,23 @@ lapply (csx_appl_theta … H … HW12) -H -HW12 #H lapply (csx_fwd_pair_sn … H) #HW1 lapply (csx_fwd_flat_dx … H) #H1 @csx_appl_simple_theq /2 width=3 by simple_flat/ -IHV12b -HW1 -H1 #X #H1 #H2 -elim (cpxs_fwd_theta_vector … o … (V2⨮V2b) … H1) -H1 /2 width=1 by liftsv_cons/ -HV12b -HV12 +elim (cpxs_fwd_theta_vector … (V2⨮V2b) … H1) -H1 /2 width=1 by liftsv_cons/ -HV12b -HV12 [ -H #H elim H2 -H2 // | -H2 /3 width=5 by csx_cpxs_trans, cpxs_flat_dx/ ] qed. (* Basic_1: was just: sn3_appls_cast *) -lemma csx_applv_cast: ∀h,o,G,L,Vs,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.U⦄ → - ∀T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.ⓝU.T⦄. -#h #o #G #L #Vs elim Vs -Vs /2 width=1 by csx_cast/ +lemma csx_applv_cast: ∀h,G,L,Vs,U. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.U⦄ → + ∀T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.ⓝU.T⦄. +#h #G #L #Vs elim Vs -Vs /2 width=1 by csx_cast/ #V #Vs #IHV #U #H1U #T #H1T lapply (csx_fwd_pair_sn … H1U) #HV lapply (csx_fwd_flat_dx … H1U) #H2U lapply (csx_fwd_flat_dx … H1T) #H2T @csx_appl_simple_theq /2 width=1 by applv_simple, simple_flat/ -IHV -HV -H2U -H2T #X #H #H0 -elim (cpxs_fwd_cast_vector … o … H) -H #H +elim (cpxs_fwd_cast_vector … H) -H #H [ -H1U -H1T elim H0 -H0 // | -H1U -H0 /3 width=5 by csx_cpxs_trans, cpxs_flat_dx/ | -H1T -H0 /3 width=5 by csx_cpxs_trans, cpxs_flat_dx/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma index c0ecbf084..ad0c072fb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_drops.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/csx.ma". (* Basic_1: was just: sn3_lift *) (* Basic_2A1: was just: csx_lift *) -lemma csx_lifts: ∀h,o,G. d_liftable1 … (csx h o G). -#h #o #G #K #T #H @(csx_ind … H) -T +lemma csx_lifts: ∀h,G. d_liftable1 … (csx h G). +#h #G #K #T #H @(csx_ind … H) -T #T1 #_ #IH #b #f #L #HLK #U1 #HTU1 @csx_intro #U2 #HU12 #HnU12 elim (cpx_inv_lifts_sn … HU12 … HLK … HTU1) -HU12 @@ -34,8 +34,8 @@ qed-. (* Basic_1: was just: sn3_gen_lift *) (* Basic_2A1: was just: csx_inv_lift *) -lemma csx_inv_lifts: ∀h,o,G. d_deliftable1 … (csx h o G). -#h #o #G #L #U #H @(csx_ind … H) -U +lemma csx_inv_lifts: ∀h,G. d_deliftable1 … (csx h G). +#h #G #L #U #H @(csx_ind … H) -U #U1 #_ #IH #b #f #K #HLK #T1 #HTU1 @csx_intro #T2 #HT12 #HnT12 elim (cpx_lifts_sn … HT12 … HLK … HTU1) -HT12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fdeq.ma index 7c58163b3..2ffd57655 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fdeq.ma @@ -17,10 +17,10 @@ include "basic_2/rt_computation/csx_rdeq.ma". (* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) -(* Properties with degree-based equivalence for closures ********************) +(* Properties with sort-irrelevant equivalence for closures *****************) -lemma csx_fdeq_conf: ∀h,o,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 +lemma csx_fdeq_conf: ∀h,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 /3 width=3 by csx_rdeq_conf, csx_tdeq_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma index fbc312d03..a08e70926 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/csx_lpx.ma". (* Properties with parallel rst-transition for closures *********************) (* Basic_2A1: was: csx_fpb_conf *) -lemma csx_fpbq_conf: ∀h,o,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≽[h, o] ⦃G2, L2, T2⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * +lemma csx_fpbq_conf: ∀h,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≽[h] ⦃G2, L2, T2⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * /2 width=6 by csx_cpx_trans, csx_fquq_conf, csx_lpx_conf, csx_fdeq_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma index 0943a9add..ee76d6762 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/csx_lsubr.ma". (* Properties with extended supclosure **************************************) -lemma csx_fqu_conf: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → - ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 +lemma csx_fqu_conf: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → + ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by csx_inv_lref_pair, drops_refl/ | /2 width=3 by csx_fwd_pair_sn/ | /2 width=2 by csx_fwd_bind_dx/ @@ -31,20 +31,20 @@ lemma csx_fqu_conf: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L ] qed-. -lemma csx_fquq_conf: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐⸮[b] ⦃G2, L2, T2⦄ → - ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 * /2 width=6 by csx_fqu_conf/ +lemma csx_fquq_conf: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐⸮[b] ⦃G2, L2, T2⦄ → + ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 * /2 width=6 by csx_fqu_conf/ * #HG #HL #HT destruct // qed-. -lemma csx_fqup_conf: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+[b] ⦃G2, L2, T2⦄ → - ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 +lemma csx_fqup_conf: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+[b] ⦃G2, L2, T2⦄ → + ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=6 by csx_fqu_conf/ qed-. -lemma csx_fqus_conf: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄ → - ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -H +lemma csx_fqus_conf: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄ → + ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -H /3 width=6 by csx_fquq_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma index f5b170930..ead714a32 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcp.ma @@ -20,10 +20,10 @@ include "basic_2/rt_computation/csx_drops.ma". (* Main properties with generic computation properties **********************) -theorem csx_gcp: ∀h,o. gcp (cpx h) (tdeq h o) (csx h o). -#h #o @mk_gcp +theorem csx_gcp: ∀h. gcp (cpx h) tdeq (csx h). +#h @mk_gcp [ normalize /3 width=13 by cnx_lifts/ -| #G #L elim (deg_total h o 0) /3 width=8 by cnx_sort_iter, ex_intro/ +| /3 width=5 by O, cnx_sort, ex_intro/ | /2 width=8 by csx_lifts/ | /2 width=3 by csx_fwd_flat_dx/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma index 03970d35b..b95725eec 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_gcr.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/csx_csx_vector.ma". (* Main properties with generic candidates of reducibility ******************) -theorem csx_gcr: ∀h,o. gcr (cpx h) (tdeq h o) (csx h o) (csx h o). -#h #o @mk_gcr // +theorem csx_gcr: ∀h. gcr (cpx h) tdeq (csx h) (csx h). +#h @mk_gcr // [ /3 width=1 by csx_applv_cnx/ |2,3,6: /2 width=1 by csx_applv_beta, csx_applv_sort, csx_applv_cast/ | /2 width=7 by csx_applv_delta/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma index 980c1f12d..77cf480fa 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma @@ -19,32 +19,32 @@ include "basic_2/rt_computation/csx_cpxs.ma". (* Properties with unbound parallel rt-transition on all entries ************) -lemma csx_lpx_conf: ∀h,o,G,L1,T. ⦃G, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → - ∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → ⦃G, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L1 #T #H @(csx_ind_cpxs … H) -T +lemma csx_lpx_conf: ∀h,G,L1,T. ⦃G, L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → + ∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → ⦃G, L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L1 #T #H @(csx_ind_cpxs … H) -T /4 width=3 by csx_intro, lpx_cpx_trans/ qed-. (* Advanced properties ******************************************************) -lemma csx_abst: ∀h,o,p,G,L,W. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃W⦄ → - ∀T. ⦃G, L.ⓛW⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓛ{p}W.T⦄. -#h #o #p #G #L #W #HW +lemma csx_abst: ∀h,p,G,L,W. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃W⦄ → + ∀T. ⦃G, L.ⓛW⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓛ{p}W.T⦄. +#h #p #G #L #W #HW @(csx_ind … HW) -W #W #_ #IHW #T #HT @(csx_ind … HT) -T #T #HT #IHT @csx_intro #X #H1 #H2 elim (cpx_inv_abst1 … H1) -H1 #W0 #T0 #HLW0 #HLT0 #H destruct elim (tdneq_inv_pair … H2) -H2 [ #H elim H -H // -| -IHT #H lapply (csx_cpx_trans … o … HLT0) // -HT #HT0 +| -IHT #H lapply (csx_cpx_trans … HLT0) // -HT #HT0 /4 width=5 by csx_lpx_conf, lpx_pair/ | -IHW -HT /4 width=3 by csx_cpx_trans, cpx_pair_sn/ ] qed. -lemma csx_abbr: ∀h,o,p,G,L,V. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → - ∀T. ⦃G, L.ⓓV⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}V.T⦄. -#h #o #p #G #L #V #HV +lemma csx_abbr: ∀h,p,G,L,V. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → + ∀T. ⦃G, L.ⓓV⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.T⦄. +#h #p #G #L #V #HV @(csx_ind … HV) -V #V #_ #IHV #T #HT @(csx_ind_cpxs … HT) -T #T #HT #IHT @csx_intro #X #H1 #H2 @@ -60,9 +60,9 @@ elim (cpx_inv_abbr1 … H1) -H1 * ] qed. -fact csx_appl_theta_aux: ∀h,o,p,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U⦄ → ∀V1,V2. ⬆*[1] V1 ≘ V2 → - ∀V,T. U = ⓓ{p}V.ⓐV2.T → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. -#h #o #p #G #L #X #H +fact csx_appl_theta_aux: ∀h,p,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → ∀V1,V2. ⬆*[1] V1 ≘ V2 → + ∀V,T. U = ⓓ{p}V.ⓐV2.T → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. +#h #p #G #L #X #H @(csx_ind_cpxs … H) -X #X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct lapply (csx_fwd_pair_sn … HVT) #HV lapply (csx_fwd_bind_dx … HVT) -HVT #HVT @@ -72,13 +72,13 @@ elim (cpx_inv_appl1 … HL) -HL * elim (cpx_inv_abbr1 … HL) -HL * [ #V3 #T3 #HV3 #HLT3 #H0 destruct elim (cpx_lifts_sn … HLV10 (Ⓣ) … (L.ⓓV) … HV12) -HLV10 /3 width=1 by drops_refl, drops_drop/ #V4 #HV04 #HV24 - elim (tdeq_dec h o (ⓓ{p}V.ⓐV2.T) (ⓓ{p}V3.ⓐV4.T3)) #H0 + elim (tdeq_dec (ⓓ{p}V.ⓐV2.T) (ⓓ{p}V3.ⓐV4.T3)) #H0 [ -IHVT -HV3 -HV24 -HLT3 elim (tdeq_inv_pair … H0) -H0 #_ #HV3 #H0 elim (tdeq_inv_pair … H0) -H0 #_ #HV24 #HT3 elim (tdneq_inv_pair … H) -H #H elim H -H -G -L /3 width=6 by tdeq_inv_lifts_bi, tdeq_pair/ - | -V1 @(IHVT … H0 … HV04) -o -V0 /4 width=1 by cpx_cpxs, cpx_flat, cpx_bind/ + | -V1 @(IHVT … H0 … HV04) -V0 /4 width=1 by cpx_cpxs, cpx_flat, cpx_bind/ ] | #T0 #HT0 #HLT0 #H0 destruct -H -IHVT lapply (csx_inv_lifts … HVT (Ⓣ) … L ???) -HVT @@ -94,6 +94,6 @@ elim (cpx_inv_appl1 … HL) -HL * ] qed-. -lemma csx_appl_theta: ∀h,o,p,G,L,V,V2,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}V.ⓐV2.T⦄ → - ∀V1. ⬆*[1] V1 ≘ V2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. +lemma csx_appl_theta: ∀h,p,G,L,V,V2,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.ⓐV2.T⦄ → + ∀V1. ⬆*[1] V1 ≘ V2 → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. /2 width=5 by csx_appl_theta_aux/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma index cc9ae833d..14f7a9d3a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/lpxs_lpx.ma". (* Properties with unbound parallel rt-computation on all entries ***********) -lemma csx_lpxs_conf: ∀h,o,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → - ⦃G, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ⦃G, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 +lemma csx_lpxs_conf: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → + ⦃G, L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G, L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 /3 by lpxs_step_dx, csx_lpx_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma index 169970ed1..b96942572 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/csx_csx.ma". (* Advanced properties ******************************************************) -fact csx_appl_beta_aux: ∀h,o,p,G,L,U1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U1⦄ → - ∀V,W,T1. U1 = ⓓ{p}ⓝW.V.T1 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.ⓛ{p}W.T1⦄. -#h #o #p #G #L #X #H @(csx_ind … H) -X +fact csx_appl_beta_aux: ∀h,p,G,L,U1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃U1⦄ → + ∀V,W,T1. U1 = ⓓ{p}ⓝW.V.T1 → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.ⓛ{p}W.T1⦄. +#h #p #G #L #X #H @(csx_ind … H) -X #X #HT1 #IHT1 #V #W #T1 #H1 destruct @csx_intro #X #H1 #H2 elim (cpx_inv_appl1 … H1) -H1 * @@ -42,23 +42,23 @@ elim (cpx_inv_appl1 … H1) -H1 * qed-. (* Basic_1: was just: sn3_beta *) -lemma csx_appl_beta: ∀h,o,p,G,L,V,W,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}ⓝW.V.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.ⓛ{p}W.T⦄. +lemma csx_appl_beta: ∀h,p,G,L,V,W,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}ⓝW.V.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.ⓛ{p}W.T⦄. /2 width=3 by csx_appl_beta_aux/ qed. (* Advanced forward lemmas **************************************************) -fact csx_fwd_bind_dx_unit_aux: ∀h,o,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U⦄ → - ∀p,I,J,V,T. U = ⓑ{p,I}V.T → ⦃G, L.ⓤ{J}⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L #U #H elim H -H #U0 #_ #IH #p #I #J #V #T #H destruct +fact csx_fwd_bind_dx_unit_aux: ∀h,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → + ∀p,I,J,V,T. U = ⓑ{p,I}V.T → ⦃G, L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L #U #H elim H -H #U0 #_ #IH #p #I #J #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 @(IH (ⓑ{p,I}V.T2)) -IH /2 width=4 by cpx_bind_unit/ -HLT2 #H elim (tdeq_inv_pair … H) -H /2 width=1 by/ qed-. -lemma csx_fwd_bind_dx_unit: ∀h,o,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓑ{p,I}V.T⦄ → - ∀J. ⦃G, L.ⓤ{J}⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma csx_fwd_bind_dx_unit: ∀h,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → + ∀J. ⦃G, L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /2 width=6 by csx_fwd_bind_dx_unit_aux/ qed-. -lemma csx_fwd_bind_unit: ∀h,o,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓑ{p,I}V.T⦄ → - ∀J. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ ∧ ⦃G, L.ⓤ{J}⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma csx_fwd_bind_unit: ∀h,p,I,G,L,V,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → + ∀J. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ ∧ ⦃G, L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /3 width=4 by csx_fwd_pair_sn, csx_fwd_bind_dx_unit, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_rdeq.ma index de6114d2f..a254d9751 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_rdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_rdeq.ma @@ -17,19 +17,19 @@ include "basic_2/rt_computation/csx_csx.ma". (* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) -(* Properties with degree-based equivalence for local environments **********) +(* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: uses: csx_lleq_conf *) -lemma csx_rdeq_conf: ∀h,o,G,L1,T. ⦃G, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → - ∀L2. L1 ≛[h, o, T] L2 → ⦃G, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L1 #T #H +lemma csx_rdeq_conf: ∀h,G,L1,T. ⦃G, L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → + ∀L2. L1 ≛[T] L2 → ⦃G, L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L1 #T #H @(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 @csx_intro #T2 #HT12 #HnT12 elim (rdeq_cpx_trans … HL12 … HT12) -HT12 -/5 width=4 by cpx_rdeq_conf_sn, csx_tdeq_trans, tdeq_trans/ +/5 width=5 by cpx_rdeq_conf_sn, csx_tdeq_trans, tdeq_trans/ qed-. (* Basic_2A1: uses: csx_lleq_conf *) -lemma csx_rdeq_trans: ∀h,o,L1,L2,T. L1 ≛[h, o, T] L2 → - ∀G. ⦃G, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ⦃G, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. +lemma csx_rdeq_trans: ∀h,L1,L2,T. L1 ≛[T] L2 → + ∀G. ⦃G, L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G, L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. /3 width=3 by csx_rdeq_conf, rdeq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma index efa69cff7..95cb186f5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma @@ -19,10 +19,10 @@ include "basic_2/rt_computation/csx_csx.ma". (* Properties with simple terms *********************************************) -lemma csx_appl_simple: ∀h,o,G,L,V. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → ∀T1. - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛[h, o] T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.T2⦄) → - 𝐒⦃T1⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.T1⦄. -#h #o #G #L #V #H @(csx_ind … H) -V +lemma csx_appl_simple: ∀h,G,L,V. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ∀T1. + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T2⦄) → + 𝐒⦃T1⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T1⦄. +#h #G #L #V #H @(csx_ind … H) -V #V #_ #IHV #T1 #IHT1 #HT1 @csx_intro #X #H1 #H2 elim (cpx_inv_appl1_simple … H1) // -H1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_theq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_theq.ma index cc286ae6a..478f6fa05 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_theq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_theq.ma @@ -24,10 +24,10 @@ include "basic_2/rt_computation/csx_csx.ma". (* Basic_1: was just: sn3_appl_appl *) (* Basic_2A1: was: csx_appl_simple_tsts *) -lemma csx_appl_simple_theq: ∀h,o,G,L,V. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → ∀T1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ⩳[h, o] T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.T2⦄) → - 𝐒⦃T1⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.T1⦄. -#h #o #G #L #V #H @(csx_ind … H) -V +lemma csx_appl_simple_theq: ∀h,G,L,V. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ∀T1. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + (∀T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ⩳ T2 → ⊥) → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T2⦄) → + 𝐒⦃T1⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T1⦄. +#h #G #L #V #H @(csx_ind … H) -V #V #_ #IHV #T1 #H @(csx_ind … H) -T1 #T1 #H1T1 #IHT1 #H2T1 #H3T1 @csx_intro #X #HL #H @@ -40,7 +40,7 @@ elim (tdneq_inv_pair … H) -H @IHV -IHV /4 width=3 by csx_cpx_trans, cpx_pair_sn/ | -IHV -H1T1 #H1T10 @(csx_cpx_trans … (ⓐV.T0)) /2 width=1 by cpx_flat/ -HLV0 - elim (theq_dec h o T1 T0) #H2T10 + elim (theq_dec T1 T0) #H2T10 [ @IHT1 -IHT1 /4 width=5 by cpxs_strap2, cpxs_strap1, theq_canc_sn, simple_theq_repl_dx/ | -IHT1 -H3T1 -H1T10 /3 width=1 by cpx_cpxs/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma index 32afe79a4..0e11278b9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma @@ -17,24 +17,24 @@ include "basic_2/rt_computation/csx.ma". (* STRONGLY NORMALIZING TERMS VECTORS FOR UNBOUND PARALLEL RT-TRANSITION ****) -definition csxv: ∀h. sd h → relation3 genv lenv (list term) ≝ - λh,o,G,L. all … (csx h o G L). +definition csxv: ∀h. relation3 genv lenv (list term) ≝ + λh,G,L. all … (csx h G L). interpretation "strong normalization for unbound context-sensitive parallel rt-transition (term vector)" - 'PRedTyStrong h o G L Ts = (csxv h o G L Ts). + 'PRedTyStrong h G L Ts = (csxv h G L Ts). (* Basic inversion lemmas ***************************************************) -lemma csxv_inv_cons: ∀h,o,G,L,T,Ts. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⨮Ts⦄ → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ ∧ ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃Ts⦄. +lemma csxv_inv_cons: ∀h,G,L,T,Ts. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⨮Ts⦄ → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ ∧ ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃Ts⦄. normalize // qed-. (* Basic forward lemmas *****************************************************) -lemma csx_fwd_applv: ∀h,o,G,L,T,Vs. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.T⦄ → - ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃Vs⦄ ∧ ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L #T #Vs elim Vs -Vs /2 width=1 by conj/ +lemma csx_fwd_applv: ∀h,G,L,T,Vs. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.T⦄ → + ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃Vs⦄ ∧ ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L #T #Vs elim Vs -Vs /2 width=1 by conj/ #V #Vs #IHVs #HVs lapply (csx_fwd_pair_sn … HVs) #HV lapply (csx_fwd_flat_dx … HVs) -HVs #HVs diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma index bda560f42..1ce29c009 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma @@ -12,47 +12,46 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predsubtystarproper_8.ma". +include "basic_2/notation/relations/predsubtystarproper_7.ma". include "basic_2/rt_transition/fpb.ma". include "basic_2/rt_computation/fpbs.ma". (* PROPER PARALLEL RST-COMPUTATION FOR CLOSURES *****************************) -definition fpbg: ∀h. sd h → tri_relation genv lenv term ≝ - λh,o,G1,L1,T1,G2,L2,T2. - ∃∃G,L,T. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G, L, T⦄ & ⦃G, L, T⦄ ≥[h, o] ⦃G2, L2, T2⦄. +definition fpbg: ∀h. tri_relation genv lenv term ≝ + λh,G1,L1,T1,G2,L2,T2. + ∃∃G,L,T. ⦃G1, L1, T1⦄ ≻[h] ⦃G, L, T⦄ & ⦃G, L, T⦄ ≥[h] ⦃G2, L2, T2⦄. interpretation "proper parallel rst-computation (closure)" - 'PRedSubTyStarProper h o G1 L1 T1 G2 L2 T2 = (fpbg h o G1 L1 T1 G2 L2 T2). + 'PRedSubTyStarProper h G1 L1 T1 G2 L2 T2 = (fpbg h G1 L1 T1 G2 L2 T2). (* Basic properties *********************************************************) -lemma fpb_fpbg: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. +lemma fpb_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≻[h] ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /2 width=5 by ex2_3_intro/ qed. -lemma fpbg_fpbq_trans: ∀h,o,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1, L1, T1⦄ >[h, o] ⦃G, L, T⦄ → ⦃G, L, T⦄ ≽[h, o] ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 * +lemma fpbg_fpbq_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. + ⦃G1, L1, T1⦄ >[h] ⦃G, L, T⦄ → ⦃G, L, T⦄ ≽[h] ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. +#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 * /3 width=9 by fpbs_strap1, ex2_3_intro/ qed-. (* Note: this is used in the closure proof *) -lemma fpbg_fpbs_trans: ∀h,o,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∀G1,L1,T1. ⦃G1, L1, T1⦄ >[h, o] ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. -#h #o #G #G2 #L #L2 #T #T2 #H @(fpbs_ind_dx … H) -G -L -T /3 width=5 by fpbg_fpbq_trans/ +lemma fpbg_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∀G1,L1,T1. ⦃G1, L1, T1⦄ >[h] ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. +#h #G #G2 #L #L2 #T #T2 #H @(fpbs_ind_dx … H) -G -L -T /3 width=5 by fpbg_fpbq_trans/ qed-. (* Basic_2A1: uses: fpbg_fleq_trans *) -lemma fpbg_fdeq_trans: ∀h,o,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ >[h, o] ⦃G, L, T⦄ → - ∀G2,L2,T2. ⦃G, L, T⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. +lemma fpbg_fdeq_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ >[h] ⦃G, L, T⦄ → + ∀G2,L2,T2. ⦃G, L, T⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbg_fpbq_trans, fpbq_fdeq/ qed-. (* Properties with t-bound rt-transition for terms **************************) -lemma cpm_tdneq_cpm_fpbg (h) (o) (G) (L): - ∀n1,T1,T. ⦃G, L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛[h,o] T → ⊥) → - ∀n2,T2. ⦃G, L⦄ ⊢ T ➡[n2,h] T2 → - ⦃G, L, T1⦄ >[h,o] ⦃G, L, T2⦄. +lemma cpm_tdneq_cpm_fpbg (h) (G) (L): + ∀n1,T1,T. ⦃G, L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → + ∀n2,T2. ⦃G, L⦄ ⊢ T ➡[n2,h] T2 → ⦃G, L, T1⦄ >[h] ⦃G, L, T2⦄. /4 width=5 by fpbq_fpbs, cpm_fpbq, cpm_fpb, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma index e70619a8d..d5d24893f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma @@ -21,13 +21,13 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Properties with unbound context-sensitive parallel rt-computation ********) (* Basic_2A1: was: cpxs_fpbg *) -lemma cpxs_tdneq_fpbg (h) (o): ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → - (T1 ≛[h, o] T2 → ⊥) → ⦃G, L, T1⦄ >[h, o] ⦃G, L, T2⦄. -#h #o #G #L #T1 #T2 #H #H0 +lemma cpxs_tdneq_fpbg (h): ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → + (T1 ≛ T2 → ⊥) → ⦃G, L, T1⦄ >[h] ⦃G, L, T2⦄. +#h #G #L #T1 #T2 #H #H0 elim (cpxs_tdneq_fwd_step_sn … H … H0) -H -H0 /4 width=5 by cpxs_tdeq_fpbs, fpb_cpx, ex2_3_intro/ qed. -lemma cpxs_fpbg_trans (h) (o): ∀G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → - ∀G2,L2,T2. ⦃G1, L1, T⦄ >[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. +lemma cpxs_fpbg_trans (h): ∀G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → + ∀G2,L2,T2. ⦃G1, L1, T⦄ >[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbs_fpbg_trans, cpxs_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbg.ma index 636f20955..6d511b7f4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbg.ma @@ -18,5 +18,5 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Main properties **********************************************************) -theorem fpbg_trans: ∀h,o. tri_transitive … (fpbg h o). +theorem fpbg_trans: ∀h. tri_transitive … (fpbg h). /3 width=5 by fpbg_fpbs_trans, fpbg_fwd_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma index d7a1ccae0..57f4a81af 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma @@ -21,60 +21,60 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced forward lemmas **************************************************) -lemma fpbg_fwd_fpbs: ∀h,o,G1,G2,L1,L2,T1,T2. - ⦃G1, L1, T1⦄ >[h,o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 * +lemma fpbg_fwd_fpbs: ∀h,G1,G2,L1,L2,T1,T2. + ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T2 * /3 width=5 by fpbs_strap2, fpb_fpbq/ qed-. -(* Advanced properties with degree-based equivalence on closures ************) +(* Advanced properties with sort-irrelevant equivalence on closures *********) (* Basic_2A1: uses: fleq_fpbg_trans *) -lemma fdeq_fpbg_trans: ∀h,o,G,G2,L,L2,T,T2. ⦃G, L, T⦄ >[h, o] ⦃G2, L2, T2⦄ → - ∀G1,L1,T1. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. -#h #o #G #G2 #L #L2 #T #T2 * #G0 #L0 #T0 #H0 #H02 #G1 #L1 #T1 #H1 +lemma fdeq_fpbg_trans: ∀h,G,G2,L,L2,T,T2. ⦃G, L, T⦄ >[h] ⦃G2, L2, T2⦄ → + ∀G1,L1,T1. ⦃G1, L1, T1⦄ ≛ ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. +#h #G #G2 #L #L2 #T #T2 * #G0 #L0 #T0 #H0 #H02 #G1 #L1 #T1 #H1 elim (fdeq_fpb_trans … H1 … H0) -G -L -T /4 width=9 by fpbs_strap2, fpbq_fdeq, ex2_3_intro/ qed-. (* Properties with parallel proper rst-reduction on closures ****************) -lemma fpb_fpbg_trans: ∀h,o,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1, L1, T1⦄ ≻[h, o] ⦃G, L, T⦄ → ⦃G, L, T⦄ >[h, o] ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. +lemma fpb_fpbg_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. + ⦃G1, L1, T1⦄ ≻[h] ⦃G, L, T⦄ → ⦃G, L, T⦄ >[h] ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbg_fwd_fpbs, ex2_3_intro/ qed-. (* Properties with parallel rst-reduction on closures ***********************) -lemma fpbq_fpbg_trans: ∀h,o,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1, L1, T1⦄ ≽[h, o] ⦃G, L, T⦄ → ⦃G, L, T⦄ >[h, o] ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 +lemma fpbq_fpbg_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. + ⦃G1, L1, T1⦄ ≽[h] ⦃G, L, T⦄ → ⦃G, L, T⦄ >[h] ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. +#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fpbq_inv_fpb … H1) -H1 /2 width=5 by fdeq_fpbg_trans, fpb_fpbg_trans/ qed-. (* Properties with parallel rst-compuutation on closures ********************) -lemma fpbs_fpbg_trans: ∀h,o,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T⦄ → - ∀G2,L2,T2. ⦃G, L, T⦄ >[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G #L1 #L #T1 #T #H @(fpbs_ind … H) -G -L -T /3 width=5 by fpbq_fpbg_trans/ +lemma fpbs_fpbg_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T⦄ → + ∀G2,L2,T2. ⦃G, L, T⦄ >[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. +#h #G1 #G #L1 #L #T1 #T #H @(fpbs_ind … H) -G -L -T /3 width=5 by fpbq_fpbg_trans/ qed-. (* Advanced properties with plus-iterated structural successor for closures *) -lemma fqup_fpbg_trans (h) (o): +lemma fqup_fpbg_trans (h): ∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ⊐+ ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ >[h,o] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h,o] ⦃G2,L2,T2⦄. + ∀G2,L2,T2. ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. /3 width=5 by fpbs_fpbg_trans, fqup_fpbs/ qed-. (* Advanced inversion lemmas of parallel rst-computation on closures ********) (* Basic_2A1: was: fpbs_fpbg *) -lemma fpbs_inv_fpbg: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∨∨ ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ - | ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 +lemma fpbs_inv_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∨∨ ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ + | ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 [ /2 width=1 by or_introl/ | #G #G2 #L #L2 #T #T2 #_ #H2 * #H1 elim (fpbq_inv_fpb … H2) -H2 #H2 @@ -89,10 +89,10 @@ qed-. (* Advanced properties of parallel rst-computation on closures **************) -lemma fpbs_fpb_trans: ∀h,o,F1,F2,K1,K2,T1,T2. ⦃F1, K1, T1⦄ ≥[h, o] ⦃F2, K2, T2⦄ → - ∀G2,L2,U2. ⦃F2, K2, T2⦄ ≻[h, o] ⦃G2, L2, U2⦄ → - ∃∃G1,L1,U1. ⦃F1, K1, T1⦄ ≻[h, o] ⦃G1, L1, U1⦄ & ⦃G1, L1, U1⦄ ≥[h, o] ⦃G2, L2, U2⦄. -#h #o #F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H +lemma fpbs_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ⦃F1, K1, T1⦄ ≥[h] ⦃F2, K2, T2⦄ → + ∀G2,L2,U2. ⦃F2, K2, T2⦄ ≻[h] ⦃G2, L2, U2⦄ → + ∃∃G1,L1,U1. ⦃F1, K1, T1⦄ ≻[h] ⦃G1, L1, U1⦄ & ⦃G1, L1, U1⦄ ≥[h] ⦃G2, L2, U2⦄. +#h #F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H [ #H12 #G2 #L2 #U2 #H2 elim (fdeq_fpb_trans … H12 … H2) -F2 -K2 -T2 /3 width=5 by fdeq_fpbs, ex2_3_intro/ | * #H1 #H2 #H3 #H4 #H5 #H6 #H7 #H8 #H9 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma index ce02c890a..c72dcc821 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma @@ -17,16 +17,16 @@ include "basic_2/rt_computation/fpbg.ma". (* PROPER PARALLEL RST-COMPUTATION FOR CLOSURES *****************************) -(* Advanced properties with degree-based equivalence for terms **************) +(* Advanced properties with sort-irrelevant equivalence for terms ***********) -lemma fpbg_tdeq_div: ∀h,o,G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T⦄ → - ∀T2. T2 ≛[h, o] T → ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. +lemma fpbg_tdeq_div: ∀h,G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T⦄ → + ∀T2. T2 ≛ T → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. /4 width=5 by fpbg_fdeq_trans, tdeq_fdeq, tdeq_sym/ qed-. (* Properties with plus-iterated structural successor for closures **********) (* Note: this is used in the closure proof *) -lemma fqup_fpbg: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqup_inv_step_sn … H) -H +lemma fqup_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqup_inv_step_sn … H) -H /3 width=5 by fqus_fpbs, fpb_fqu, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma index 71dcdc50a..4abcd30de 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma @@ -20,9 +20,9 @@ include "basic_2/rt_computation/fpbg.ma". (* Properties with unbound rt-computation on full local environments ********) (* Basic_2A1: uses: lpxs_fpbg *) -lemma lpxs_rdneq_fpbg: ∀h,o,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → - (L1 ≛[h, o, T] L2 → ⊥) → ⦃G, L1, T⦄ >[h, o] ⦃G, L2, T⦄. -#h #o #G #L1 #L2 #T #H #H0 +lemma lpxs_rdneq_fpbg: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → + (L1 ≛[T] L2 → ⊥) → ⦃G, L1, T⦄ >[h] ⦃G, L2, T⦄. +#h #G #L1 #L2 #T #H #H0 elim (lpxs_rdneq_inv_step_sn … H … H0) -H -H0 /4 width=7 by fpb_lpx, lpxs_fdeq_fpbs, fdeq_intro_sn, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma index f5c9176b0..ab2994823 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma @@ -13,62 +13,62 @@ (**************************************************************************) include "ground_2/lib/star.ma". -include "basic_2/notation/relations/predsubtystar_8.ma". +include "basic_2/notation/relations/predsubtystar_7.ma". include "basic_2/rt_transition/fpbq.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) -definition fpbs: ∀h. sd h → tri_relation genv lenv term ≝ - λh,o. tri_TC … (fpbq h o). +definition fpbs: ∀h. tri_relation genv lenv term ≝ + λh. tri_TC … (fpbq h). interpretation "parallel rst-computation (closure)" - 'PRedSubTyStar h o G1 L1 T1 G2 L2 T2 = (fpbs h o G1 L1 T1 G2 L2 T2). + 'PRedSubTyStar h G1 L1 T1 G2 L2 T2 = (fpbs h G1 L1 T1 G2 L2 T2). (* Basic eliminators ********************************************************) -lemma fpbs_ind: ∀h,o,G1,L1,T1. ∀Q:relation3 genv lenv term. Q G1 L1 T1 → - (∀G,G2,L,L2,T,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T⦄ → ⦃G, L, T⦄ ≽[h, o] ⦃G2, L2, T2⦄ → Q G L T → Q G2 L2 T2) → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2. +lemma fpbs_ind: ∀h,G1,L1,T1. ∀Q:relation3 genv lenv term. Q G1 L1 T1 → + (∀G,G2,L,L2,T,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T⦄ → ⦃G, L, T⦄ ≽[h] ⦃G2, L2, T2⦄ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2. /3 width=8 by tri_TC_star_ind/ qed-. -lemma fpbs_ind_dx: ∀h,o,G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 → - (∀G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≽[h, o] ⦃G, L, T⦄ → ⦃G, L, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → Q G L T → Q G1 L1 T1) → - ∀G1,L1,T1. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → Q G1 L1 T1. +lemma fpbs_ind_dx: ∀h,G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 → + (∀G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≽[h] ⦃G, L, T⦄ → ⦃G, L, T⦄ ≥[h] ⦃G2, L2, T2⦄ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → Q G1 L1 T1. /3 width=8 by tri_TC_star_ind_dx/ qed-. (* Basic properties *********************************************************) -lemma fpbs_refl: ∀h,o. tri_reflexive … (fpbs h o). +lemma fpbs_refl: ∀h. tri_reflexive … (fpbs h). /2 width=1 by tri_inj/ qed. -lemma fpbq_fpbs: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≽[h, o] ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpbq_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≽[h] ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /2 width=1 by tri_inj/ qed. -lemma fpbs_strap1: ∀h,o,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T⦄ → - ⦃G, L, T⦄ ≽[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpbs_strap1: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T⦄ → + ⦃G, L, T⦄ ≽[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /2 width=5 by tri_step/ qed-. -lemma fpbs_strap2: ∀h,o,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ≽[h, o] ⦃G, L, T⦄ → - ⦃G, L, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpbs_strap2: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ≽[h] ⦃G, L, T⦄ → + ⦃G, L, T⦄ ≥[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /2 width=5 by tri_TC_strap/ qed-. (* Basic_2A1: uses: lleq_fpbs fleq_fpbs *) -lemma fdeq_fpbs: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fdeq_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=1 by fpbq_fpbs, fpbq_fdeq/ qed. (* Basic_2A1: uses: fpbs_lleq_trans *) -lemma fpbs_fdeq_trans: ∀h,o,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T⦄ → - ∀G2,L2,T2. ⦃G, L, T⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpbs_fdeq_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T⦄ → + ∀G2,L2,T2. ⦃G, L, T⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=9 by fpbs_strap1, fpbq_fdeq/ qed-. (* Basic_2A1: uses: lleq_fpbs_trans *) -lemma fdeq_fpbs_trans: ∀h,o,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∀G1,L1,T1. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fdeq_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∀G1,L1,T1. ⦃G1, L1, T1⦄ ≛ ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbs_strap2, fpbq_fdeq/ qed-. -lemma tdeq_rdeq_lpx_fpbs: ∀h,o,T1,T2. T1 ≛[h, o] T2 → ∀L1,L0. L1 ≛[h, o, T2] L0 → - ∀G,L2. ⦃G, L0⦄ ⊢ ⬈[h] L2 → ⦃G, L1, T1⦄ ≥[h, o] ⦃G, L2, T2⦄. +lemma tdeq_rdeq_lpx_fpbs: ∀h,T1,T2. T1 ≛ T2 → ∀L1,L0. L1 ≛[T2] L0 → + ∀G,L2. ⦃G, L0⦄ ⊢ ⬈[h] L2 → ⦃G, L1, T1⦄ ≥[h] ⦃G, L2, T2⦄. /4 width=5 by fdeq_fpbs, fpbs_strap1, fpbq_lpx, fdeq_intro_dx/ qed. (* Basic_2A1: removed theorems 3: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma index 601758e03..0ecacf3e4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with atomic arity assignment for terms ************************) -lemma fpbs_aaa_conf: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → +lemma fpbs_aaa_conf: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → ∀A1. ⦃G1, L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2, L2⦄ ⊢ T2 ⁝ A2. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 /2 width=2 by ex_intro/ +#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 /2 width=2 by ex_intro/ #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A /2 width=8 by fpbq_aaa_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma index c3cdaf038..b716e5d43 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma @@ -21,18 +21,18 @@ include "basic_2/rt_computation/fpbs_lpxs.ma". (* Properties with unbound context-sensitive parallel rt-transition *********) (* Basic_2A1: uses: fpbs_cpx_trans_neq *) -lemma fpbs_cpx_tdneq_trans: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛[h, o] U2 → ⊥) → - ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛[h, o] U1 → ⊥ & ⦃G1, L1, U1⦄ ≥[h, o] ⦃G2, L2, U2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2 +lemma fpbs_cpx_tdneq_trans: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∀U2. ⦃G2, L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ⦃G1, L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1, L1, U1⦄ ≥[h] ⦃G2, L2, U2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2 elim (fpbs_inv_star … H) -H #G0 #L0 #L3 #T0 #T3 #HT10 #H10 #HL03 #H32 elim (fdeq_cpx_trans … H32 … HTU2) -HTU2 #T4 #HT34 #H42 lapply (fdeq_tdneq_repl_dx … H32 … H42 … HnTU2) -T2 #HnT34 lapply (lpxs_cpx_trans … HT34 … HL03) -HT34 #HT34 elim (fqus_cpxs_trans_tdneq … H10 … HT34 HnT34) -T3 #T2 #HT02 #HnT02 #H24 -elim (tdeq_dec h o T1 T0) [ #H10 | -HnT02 #HnT10 ] +elim (tdeq_dec T1 T0) [ #H10 | -HnT02 #HnT10 ] [ lapply (cpxs_trans … HT10 … HT02) -HT10 -HT02 #HT12 - elim (cpxs_tdneq_fwd_step_sn … o … HT12) [2: /3 width=3 by tdeq_canc_sn/ ] -T0 -HT12 + elim (cpxs_tdneq_fwd_step_sn … HT12) [2: /3 width=3 by tdeq_canc_sn/ ] -T0 -HT12 | elim (cpxs_tdneq_fwd_step_sn … HT10 … HnT10) -HT10 -HnT10 ] /4 width=16 by fpbs_intro_star, cpxs_tdeq_fpbs_trans, ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma index 4f23c0d00..09a7919b1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma @@ -19,40 +19,40 @@ include "basic_2/rt_computation/fpbs_fqup.ma". (* Properties with unbound context-sensitive parallel rt-computation ********) -lemma cpxs_fpbs: ∀h,o,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L, T1⦄ ≥[h, o] ⦃G, L, T2⦄. -#h #o #G #L #T1 #T2 #H @(cpxs_ind … H) -T2 +lemma cpxs_fpbs: ∀h,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L, T1⦄ ≥[h] ⦃G, L, T2⦄. +#h #G #L #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=5 by fpbq_cpx, fpbs_strap1/ qed. -lemma fpbs_cpxs_trans: ∀h,o,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T⦄ → - ∀T2. ⦃G, L⦄ ⊢ T ⬈*[h] T2 → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T2⦄. -#h #o #G1 #G #L1 #L #T1 #T #H1 #T2 #H @(cpxs_ind … H) -T2 +lemma fpbs_cpxs_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T⦄ → + ∀T2. ⦃G, L⦄ ⊢ T ⬈*[h] T2 → ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T2⦄. +#h #G1 #G #L1 #L #T1 #T #H1 #T2 #H @(cpxs_ind … H) -T2 /3 width=5 by fpbs_strap1, fpbq_cpx/ qed-. -lemma cpxs_fpbs_trans: ∀h,o,G1,G2,L1,L2,T,T2. ⦃G1, L1, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∀T1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T #T2 #H1 #T1 #H @(cpxs_ind_dx … H) -T1 +lemma cpxs_fpbs_trans: ∀h,G1,G2,L1,L2,T,T2. ⦃G1, L1, T⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∀T1. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T #T2 #H1 #T1 #H @(cpxs_ind_dx … H) -T1 /3 width=5 by fpbs_strap2, fpbq_cpx/ qed-. -lemma cpxs_tdeq_fpbs_trans: ∀h,o,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → - ∀T0. T ≛[h, o] T0 → - ∀G2,L2,T2. ⦃G1, L1, T0⦄ ≥[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma cpxs_tdeq_fpbs_trans: ∀h,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → + ∀T0. T ≛ T0 → + ∀G2,L2,T2. ⦃G1, L1, T0⦄ ≥[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=3 by cpxs_fpbs_trans, tdeq_fpbs_trans/ qed-. -lemma cpxs_tdeq_fpbs: ∀h,o,G,L,T1,T. ⦃G, L⦄ ⊢ T1 ⬈*[h] T → - ∀T2. T ≛[h, o] T2 → ⦃G, L, T1⦄ ≥[h, o] ⦃G, L, T2⦄. +lemma cpxs_tdeq_fpbs: ∀h,G,L,T1,T. ⦃G, L⦄ ⊢ T1 ⬈*[h] T → + ∀T2. T ≛ T2 → ⦃G, L, T1⦄ ≥[h] ⦃G, L, T2⦄. /4 width=3 by cpxs_fpbs_trans, fdeq_fpbs, tdeq_fdeq/ qed. (* Properties with star-iterated structural successor for closures **********) -lemma cpxs_fqus_fpbs: ∀h,o,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → - ∀G2,L2,T2. ⦃G1, L1, T⦄ ⊐* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma cpxs_fqus_fpbs: ∀h,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → + ∀G2,L2,T2. ⦃G1, L1, T⦄ ⊐* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbs_fqus_trans, cpxs_fpbs/ qed. (* Properties with plus-iterated structural successor for closures **********) -lemma cpxs_fqup_fpbs: ∀h,o,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → - ∀G2,L2,T2. ⦃G1, L1, T⦄ ⊐+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma cpxs_fqup_fpbs: ∀h,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → + ∀G2,L2,T2. ⦃G1, L1, T⦄ ⊐+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbs_fqup_trans, cpxs_fpbs/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma index ce44e7e7b..71f12aeff 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with sn for unbound parallel rt-transition for terms **********) (* Basic_2A1: was: csx_fpbs_conf *) -lemma fpbs_csx_conf: ∀h,o,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h, o] 𝐒⦃T2⦄. -#h #o #G1 #L1 #T1 #HT1 #G2 #L2 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 +lemma fpbs_csx_conf: ∀h,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → ⦃G2, L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 /2 width=5 by csx_fpbq_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma index 632fe7dc6..2c6cb6a8b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma @@ -19,6 +19,6 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with proper parallel rst-reduction on closures ****************) -lemma fpb_fpbs: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpb_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≻[h] ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=1 by fpbq_fpbs, fpb_fpbq/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbs.ma index 12d5d8de6..6e75949fc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbs.ma @@ -18,5 +18,5 @@ include "basic_2/rt_computation/fpbs.ma". (* Main properties **********************************************************) -theorem fpbs_trans: ∀h,o. tri_transitive … (fpbs h o). +theorem fpbs_trans: ∀h. tri_transitive … (fpbs h). /2 width=5 by tri_TC_transitive/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma index b625f889b..8c588f3b3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma @@ -20,26 +20,26 @@ include "basic_2/rt_computation/fpbs_fqus.ma". (* Advanced properties ******************************************************) -lemma tdeq_fpbs_trans: ∀h,o,T1,T. T1 ≛[h, o] T → - ∀G1,G2,L1,L2,T2. ⦃G1, L1, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma tdeq_fpbs_trans: ∀h,T1,T. T1 ≛ T → + ∀G1,G2,L1,L2,T2. ⦃G1, L1, T⦄ ≥[h] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by fdeq_fpbs_trans, tdeq_fdeq/ qed-. -lemma fpbs_tdeq_trans: ∀h,o,G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T⦄ → - ∀T2. T ≛[h, o] T2 → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpbs_tdeq_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T⦄ → + ∀T2. T ≛ T2 → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbs_fdeq_trans, tdeq_fdeq/ qed-. (* Properties with plus-iterated structural successor for closures **********) -lemma fqup_fpbs: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+ ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 +lemma fqup_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐+ ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /4 width=5 by fqu_fquq, fpbq_fquq, tri_step/ qed. -lemma fpbs_fqup_trans: ∀h,o,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T⦄ → - ∀G2,L2,T2. ⦃G, L, T⦄ ⊐+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpbs_fqup_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T⦄ → + ∀G2,L2,T2. ⦃G, L, T⦄ ⊐+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by fpbs_fqus_trans, fqup_fqus/ qed-. -lemma fqup_fpbs_trans: ∀h,o,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∀G1,L1,T1. ⦃G1, L1, T1⦄ ⊐+ ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fqup_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∀G1,L1,T1. ⦃G1, L1, T1⦄ ⊐+ ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by fqus_fpbs_trans, fqup_fqus/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma index db3925f71..57de42633 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma @@ -19,20 +19,20 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with star-iterated structural successor for closures **********) -lemma fqus_fpbs: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐* ⦃G2, L2, T2⦄ → - ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 +lemma fqus_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐* ⦃G2, L2, T2⦄ → + ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /3 width=5 by fpbq_fquq, tri_step/ qed. -lemma fpbs_fqus_trans: ∀h,o,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G, L, T⦄ → - ∀G2,L2,T2. ⦃G, L, T⦄ ⊐* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 +lemma fpbs_fqus_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≥[h] ⦃G, L, T⦄ → + ∀G2,L2,T2. ⦃G, L, T⦄ ⊐* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /3 width=5 by fpbs_strap1, fpbq_fquq/ qed-. -lemma fqus_fpbs_trans: ∀h,o,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∀G1,L1,T1. ⦃G1, L1, T1⦄ ⊐* ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqus_ind_dx … H) -G1 -L1 -T1 +lemma fqus_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G, L, T⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∀G1,L1,T1. ⦃G1, L1, T1⦄ ⊐* ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqus_ind_dx … H) -G1 -L1 -T1 /3 width=5 by fpbs_strap2, fpbq_fquq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma index 2760e2a33..c5ad6426a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma @@ -23,50 +23,50 @@ include "basic_2/rt_computation/fpbs_cpxs.ma". (* Properties with unbound rt-computation on full local environments *******) -lemma lpxs_fpbs: ∀h,o,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → ⦃G, L1, T⦄ ≥[h, o] ⦃G, L2, T⦄. -#h #o #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 +lemma lpxs_fpbs: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → ⦃G, L1, T⦄ ≥[h] ⦃G, L2, T⦄. +#h #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 /3 width=5 by fpbq_lpx, fpbs_strap1/ qed. -lemma fpbs_lpxs_trans: ∀h,o,G1,G2,L1,L,T1,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L, T2⦄ → - ∀L2. ⦃G2, L⦄ ⊢ ⬈*[h] L2 → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L #T1 #T2 #H1 #L2 #H @(lpxs_ind_dx … H) -L2 +lemma fpbs_lpxs_trans: ∀h,G1,G2,L1,L,T1,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L, T2⦄ → + ∀L2. ⦃G2, L⦄ ⊢ ⬈*[h] L2 → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L #T1 #T2 #H1 #L2 #H @(lpxs_ind_dx … H) -L2 /3 width=5 by fpbs_strap1, fpbq_lpx/ qed-. -lemma lpxs_fpbs_trans: ∀h,o,G1,G2,L,L2,T1,T2. ⦃G1, L, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → - ∀L1. ⦃G1, L1⦄ ⊢ ⬈*[h] L → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L #L2 #T1 #T2 #H1 #L1 #H @(lpxs_ind_sn … H) -L1 +lemma lpxs_fpbs_trans: ∀h,G1,G2,L,L2,T1,T2. ⦃G1, L, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → + ∀L1. ⦃G1, L1⦄ ⊢ ⬈*[h] L → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. +#h #G1 #G2 #L #L2 #T1 #T2 #H1 #L1 #H @(lpxs_ind_sn … H) -L1 /3 width=5 by fpbs_strap2, fpbq_lpx/ qed-. (* Basic_2A1: uses: lpxs_lleq_fpbs *) -lemma lpxs_fdeq_fpbs: ∀h,o,G1,L1,L,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] L → - ∀G2,L2,T2. ⦃G1, L, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma lpxs_fdeq_fpbs: ∀h,G1,L1,L,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] L → + ∀G2,L2,T2. ⦃G1, L, T1⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=3 by lpxs_fpbs_trans, fdeq_fpbs/ qed. -lemma fpbs_lpx_trans: ∀h,o,G1,G2,L1,L,T1,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L, T2⦄ → - ∀L2. ⦃G2, L⦄ ⊢ ⬈[h] L2 → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fpbs_lpx_trans: ∀h,G1,G2,L1,L,T1,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L, T2⦄ → + ∀L2. ⦃G2, L⦄ ⊢ ⬈[h] L2 → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=3 by fpbs_lpxs_trans, lpx_lpxs/ qed-. (* Properties with star-iterated structural successor for closures **********) -lemma fqus_lpxs_fpbs: ∀h,o,G1,G2,L1,L,T1,T2. ⦃G1, L1, T1⦄ ⊐* ⦃G2, L, T2⦄ → - ∀L2. ⦃G2, L⦄ ⊢ ⬈*[h] L2 → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. +lemma fqus_lpxs_fpbs: ∀h,G1,G2,L1,L,T1,T2. ⦃G1, L1, T1⦄ ⊐* ⦃G2, L, T2⦄ → + ∀L2. ⦃G2, L⦄ ⊢ ⬈*[h] L2 → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed. (* Properties with unbound context-sensitive parallel rt-computation ********) -lemma cpxs_fqus_lpxs_fpbs: ∀h,o,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → +lemma cpxs_fqus_lpxs_fpbs: ∀h,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → ∀G2,L,T2. ⦃G1, L1, T⦄ ⊐* ⦃G2, L, T2⦄ → - ∀L2.⦃G2, L⦄ ⊢ ⬈*[h] L2 → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄. + ∀L2.⦃G2, L⦄ ⊢ ⬈*[h] L2 → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄. /3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed. -lemma fpbs_cpxs_tdeq_fqup_lpx_trans: ∀h,o,G1,G3,L1,L3,T1,T3. ⦃G1, L1, T1⦄ ≥ [h, o] ⦃G3, L3, T3⦄ → - ∀T4. ⦃G3, L3⦄ ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛[h, o] T5 → +lemma fpbs_cpxs_tdeq_fqup_lpx_trans: ∀h,G1,G3,L1,L3,T1,T3. ⦃G1, L1, T1⦄ ≥ [h] ⦃G3, L3, T3⦄ → + ∀T4. ⦃G3, L3⦄ ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 → ∀G2,L4,T2. ⦃G3, L3, T5⦄ ⊐+ ⦃G2, L4, T2⦄ → - ∀L2. ⦃G2, L4⦄ ⊢ ⬈[h] L2 → ⦃G1, L1, T1⦄ ≥ [h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42 + ∀L2. ⦃G2, L4⦄ ⊢ ⬈[h] L2 → ⦃G1, L1, T1⦄ ≥ [h] ⦃G2, L2, T2⦄. +#h #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42 @(fpbs_lpx_trans … HL42) -L2 (**) (* full auto too slow *) @(fpbs_fqup_trans … H34) -G2 -L4 -T2 /3 width=3 by fpbs_cpxs_trans, fpbs_tdeq_trans/ @@ -75,19 +75,19 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: fpbs_intro_alt *) -lemma fpbs_intro_star: ∀h,o,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → +lemma fpbs_intro_star: ∀h,G1,L1,T1,T. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T → ∀G,L,T0. ⦃G1, L1, T⦄ ⊐* ⦃G, L, T0⦄ → ∀L0. ⦃G, L⦄ ⊢ ⬈*[h] L0 → - ∀G2,L2,T2. ⦃G, L0, T0⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ . + ∀G2,L2,T2. ⦃G, L0, T0⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ . /3 width=5 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, fpbq_fdeq/ qed. (* Advanced inversion lemmas *************************************************) (* Basic_2A1: uses: fpbs_inv_alt *) -lemma fpbs_inv_star: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → +lemma fpbs_inv_star: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → ∃∃G,L,L0,T,T0. ⦃G1, L1⦄ ⊢ T1 ⬈*[h] T & ⦃G1, L1, T⦄ ⊐* ⦃G, L, T0⦄ - & ⦃G, L⦄ ⊢ ⬈*[h] L0 & ⦃G, L0, T0⦄ ≛[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1 + & ⦃G, L⦄ ⊢ ⬈*[h] L0 & ⦃G, L0, T0⦄ ≛ ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1 [ /2 width=9 by ex4_5_intro/ | #G1 #G0 #L1 #L0 #T1 #T0 * -G0 -L0 -T0 [ #G0 #L0 #T0 #H10 #_ * #G3 #L3 #L4 #T3 #T4 #HT03 #H34 #HL34 #H42 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma index 8ae6b26e8..936fabeca 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma @@ -12,32 +12,32 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predsubtystrong_5.ma". +include "basic_2/notation/relations/predsubtystrong_4.ma". include "basic_2/rt_transition/fpb.ma". (* STRONGLY NORMALIZING CLOSURES FOR PARALLEL RST-TRANSITION ****************) -inductive fsb (h) (o): relation3 genv lenv term ≝ +inductive fsb (h): relation3 genv lenv term ≝ | fsb_intro: ∀G1,L1,T1. ( - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G2, L2, T2⦄ → fsb h o G2 L2 T2 - ) → fsb h o G1 L1 T1 + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h] ⦃G2, L2, T2⦄ → fsb h G2 L2 T2 + ) → fsb h G1 L1 T1 . interpretation "strong normalization for parallel rst-transition (closure)" - 'PRedSubTyStrong h o G L T = (fsb h o G L T). + 'PRedSubTyStrong h G L T = (fsb h G L T). (* Basic eliminators ********************************************************) (* Note: eliminator with shorter ground hypothesis *) (* Note: to be named fsb_ind when fsb becomes a definition like csx, lfsx ***) -lemma fsb_ind_alt: ∀h,o. ∀Q: relation3 …. ( - ∀G1,L1,T1. ≥[h,o] 𝐒⦃G1, L1, T1⦄ → ( - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2 +lemma fsb_ind_alt: ∀h. ∀Q: relation3 …. ( + ∀G1,L1,T1. ≥[h] 𝐒⦃G1, L1, T1⦄ → ( + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2 ) → Q G1 L1 T1 ) → - ∀G,L,T. ≥[h, o] 𝐒⦃G, L, T⦄ → Q G L T. -#h #o #Q #IH #G #L #T #H elim H -G -L -T + ∀G,L,T. ≥[h] 𝐒⦃G, L, T⦄ → Q G L T. +#h #Q #IH #G #L #T #H elim H -G -L -T /4 width=1 by fsb_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma index 43eb814dc..93e9c0ec4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma @@ -22,46 +22,46 @@ include "basic_2/rt_computation/fsb_csx.ma". (* Main properties with atomic arity assignment for terms *******************) (* Note: this is the "big tree" theorem *) -theorem aaa_fsb: ∀h,o,G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ≥[h, o] 𝐒⦃G, L, T⦄. +theorem aaa_fsb: ∀h,G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ≥[h] 𝐒⦃G, L, T⦄. /3 width=2 by aaa_csx, csx_fsb/ qed. (* Advanced eliminators with atomic arity assignment for terms **************) -fact aaa_ind_fpb_aux: ∀h,o. ∀Q:relation3 …. +fact aaa_ind_fpb_aux: ∀h. ∀Q:relation3 …. (∀G1,L1,T1,A. ⦃G1, L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ∀A. ⦃G, L⦄ ⊢ T ⁝ A → Q G L T. -#h #o #R #IH #G #L #T #H @(csx_ind_fpb … H) -G -L -T + ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ∀A. ⦃G, L⦄ ⊢ T ⁝ A → Q G L T. +#h #R #IH #G #L #T #H @(csx_ind_fpb … H) -G -L -T #G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH // -#G2 #L2 #T2 #H12 elim (fpbs_aaa_conf h o … G2 … L2 … T2 … HTA1) -A1 +#G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1 /2 width=2 by fpb_fpbs/ qed-. -lemma aaa_ind_fpb: ∀h,o. ∀Q:relation3 …. +lemma aaa_ind_fpb: ∀h. ∀Q:relation3 …. (∀G1,L1,T1,A. ⦃G1, L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → ∀G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → Q G L T. /4 width=4 by aaa_ind_fpb_aux, aaa_csx/ qed-. -fact aaa_ind_fpbg_aux: ∀h,o. ∀Q:relation3 …. +fact aaa_ind_fpbg_aux: ∀h. ∀Q:relation3 …. (∀G1,L1,T1,A. ⦃G1, L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ∀A. ⦃G, L⦄ ⊢ T ⁝ A → Q G L T. -#h #o #Q #IH #G #L #T #H @(csx_ind_fpbg … H) -G -L -T + ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ∀A. ⦃G, L⦄ ⊢ T ⁝ A → Q G L T. +#h #Q #IH #G #L #T #H @(csx_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH // -#G2 #L2 #T2 #H12 elim (fpbs_aaa_conf h o … G2 … L2 … T2 … HTA1) -A1 +#G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1 /2 width=2 by fpbg_fwd_fpbs/ qed-. -lemma aaa_ind_fpbg: ∀h,o. ∀Q:relation3 …. +lemma aaa_ind_fpbg: ∀h. ∀Q:relation3 …. (∀G1,L1,T1,A. ⦃G1, L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → ∀G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → Q G L T. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma index 2746e5457..2d33b783e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma @@ -21,15 +21,15 @@ include "basic_2/rt_computation/fsb_fpbg.ma". (* Inversion lemmas with context-sensitive stringly rt-normalizing terms ****) -lemma fsb_inv_csx: ∀h,o,G,L,T. ≥[h, o] 𝐒⦃G, L, T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄. -#h #o #G #L #T #H @(fsb_ind_alt … H) -G -L -T /5 width=1 by csx_intro, fpb_cpx/ +lemma fsb_inv_csx: ∀h,G,L,T. ≥[h] 𝐒⦃G, L, T⦄ → ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +#h #G #L #T #H @(fsb_ind_alt … H) -G -L -T /5 width=1 by csx_intro, fpb_cpx/ qed-. (* Propreties with context-sensitive stringly rt-normalizing terms **********) -lemma csx_fsb_fpbs: ∀h,o,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → ≥[h, o] 𝐒⦃G2, L2, T2⦄. -#h #o #G1 #L1 #T1 #H @(csx_ind … H) -T1 +lemma csx_fsb_fpbs: ∀h,G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → ≥[h] 𝐒⦃G2, L2, T2⦄. +#h #G1 #L1 #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHc #G2 #L2 #T2 @(fqup_wf_ind (Ⓣ) … G2 L2 T2) -G2 -L2 -T2 #G0 #L0 #T0 #IHu #H10 lapply (fpbs_csx_conf … H10) // -HT1 #HT0 @@ -45,7 +45,7 @@ generalize in match IHu; -IHu generalize in match H10; -H10 [ /3 width=3 by fpbs_lpxs_trans, lpx_lpxs/ | #G3 #L3 #T3 #H03 #_ elim (lpx_fqup_trans … H03 … HL02) -L2 #L4 #T4 #HT04 #H43 #HL43 - elim (tdeq_dec h o T0 T4) [ -IHc -HT04 #HT04 | -IHu #HnT04 ] + elim (tdeq_dec T0 T4) [ -IHc -HT04 #HT04 | -IHu #HnT04 ] [ elim (tdeq_fqup_trans … H43 … HT04) -T4 #L2 #T4 #H04 #HT43 #HL24 /4 width=7 by fsb_fpbs_trans, tdeq_rdeq_lpx_fpbs, fpbs_fqup_trans/ | elim (cpxs_tdneq_fwd_step_sn … HT04 HnT04) -HT04 -HnT04 #T2 #T5 #HT02 #HnT02 #HT25 #HT54 @@ -56,23 +56,23 @@ generalize in match IHu; -IHu generalize in match H10; -H10 ] qed. -lemma csx_fsb: ∀h,o,G,L,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → ≥[h, o] 𝐒⦃G, L, T⦄. +lemma csx_fsb: ∀h,G,L,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ≥[h] 𝐒⦃G, L, T⦄. /2 width=5 by csx_fsb_fpbs/ qed. (* Advanced eliminators *****************************************************) -lemma csx_ind_fpb: ∀h,o. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → +lemma csx_ind_fpb: ∀h. ∀Q:relation3 genv lenv term. + (∀G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ ≻[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → Q G L T. + ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q G L T. /4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_alt/ qed-. -lemma csx_ind_fpbg: ∀h,o. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h, o] 𝐒⦃T1⦄ → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → +lemma csx_ind_fpbg: ∀h. ∀Q:relation3 genv lenv term. + (∀G1,L1,T1. ⦃G1, L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → Q G L T. + ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q G L T. /4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_fpbg/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fdeq.ma index 271a0e476..84703ccb6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fdeq.ma @@ -17,11 +17,11 @@ include "basic_2/rt_computation/fsb.ma". (* STRONGLY NORMALIZING CLOSURES FOR PARALLEL RST-TRANSITION ****************) -(* Properties with degree-based equivalence for closures ********************) +(* Properties with sort-irrelevant equivalence for closures *****************) -lemma fsb_fdeq_trans: ∀h,o,G1,L1,T1. ≥[h, o] 𝐒⦃G1, L1, T1⦄ → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ≥[h, o] 𝐒⦃G2, L2, T2⦄. -#h #o #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 +lemma fsb_fdeq_trans: ∀h,G1,L1,T1. ≥[h] 𝐒⦃G1, L1, T1⦄ → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ → ≥[h] 𝐒⦃G2, L2, T2⦄. +#h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #_ #IH #G2 #L2 #T2 #H12 @fsb_intro #G #L #T #H2 elim (fdeq_fpb_trans … H12 … H2) -G2 -L2 -T2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma index cd2c41248..806180ead 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/fsb_fdeq.ma". (* Properties with parallel rst-computation for closures ********************) -lemma fsb_fpbs_trans: ∀h,o,G1,L1,T1. ≥[h, o] 𝐒⦃G1, L1, T1⦄ → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → ≥[h, o] 𝐒⦃G2, L2, T2⦄. -#h #o #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 +lemma fsb_fpbs_trans: ∀h,G1,L1,T1. ≥[h] 𝐒⦃G1, L1, T1⦄ → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → ≥[h] 𝐒⦃G2, L2, T2⦄. +#h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12 elim (fpbs_inv_fpbg … H12) -H12 [ -IH /2 width=5 by fsb_fdeq_trans/ @@ -31,21 +31,21 @@ qed-. (* Properties with proper parallel rst-computation for closures *************) -lemma fsb_intro_fpbg: ∀h,o,G1,L1,T1. ( - ∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄ → ≥[h, o] 𝐒⦃G2, L2, T2⦄ - ) → ≥[h, o] 𝐒⦃G1, L1, T1⦄. +lemma fsb_intro_fpbg: ∀h,G1,L1,T1. ( + ∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄ → ≥[h] 𝐒⦃G2, L2, T2⦄ + ) → ≥[h] 𝐒⦃G1, L1, T1⦄. /4 width=1 by fsb_intro, fpb_fpbg/ qed. (* Eliminators with proper parallel rst-computation for closures ************) -lemma fsb_ind_fpbg_fpbs: ∀h,o. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ≥[h, o] 𝐒⦃G1, L1, T1⦄ → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → +lemma fsb_ind_fpbg_fpbs: ∀h. ∀Q:relation3 genv lenv term. + (∀G1,L1,T1. ≥[h] 𝐒⦃G1, L1, T1⦄ → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G1,L1,T1. ≥[h, o] 𝐒⦃G1, L1, T1⦄ → - ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2. -#h #o #Q #IH1 #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 + ∀G1,L1,T1. ≥[h] 𝐒⦃G1, L1, T1⦄ → + ∀G2,L2,T2. ⦃G1, L1, T1⦄ ≥[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2. +#h #Q #IH1 #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12 @IH1 -IH1 [ -IH /2 width=5 by fsb_fpbs_trans/ @@ -55,21 +55,21 @@ lemma fsb_ind_fpbg_fpbs: ∀h,o. ∀Q:relation3 genv lenv term. ] qed-. -lemma fsb_ind_fpbg: ∀h,o. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ≥[h, o] 𝐒⦃G1, L1, T1⦄ → - (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h, o] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → +lemma fsb_ind_fpbg: ∀h. ∀Q:relation3 genv lenv term. + (∀G1,L1,T1. ≥[h] 𝐒⦃G1, L1, T1⦄ → + (∀G2,L2,T2. ⦃G1, L1, T1⦄ >[h] ⦃G2, L2, T2⦄ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G1,L1,T1. ≥[h, o] 𝐒⦃G1, L1, T1⦄ → Q G1 L1 T1. -#h #o #Q #IH #G1 #L1 #T1 #H @(fsb_ind_fpbg_fpbs … H) -H + ∀G1,L1,T1. ≥[h] 𝐒⦃G1, L1, T1⦄ → Q G1 L1 T1. +#h #Q #IH #G1 #L1 #T1 #H @(fsb_ind_fpbg_fpbs … H) -H /3 width=1 by/ qed-. (* Inversion lemmas with proper parallel rst-computation for closures *******) -lemma fsb_fpbg_refl_false (h) (o) (G) (L) (T): - ≥[h,o] 𝐒⦃G, L, T⦄ → ⦃G, L, T⦄ >[h,o] ⦃G, L, T⦄ → ⊥. -#h #o #G #L #T #H +lemma fsb_fpbg_refl_false (h) (G) (L) (T): + ≥[h] 𝐒⦃G, L, T⦄ → ⦃G, L, T⦄ >[h] ⦃G, L, T⦄ → ⊥. +#h #G #L #T #H @(fsb_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #_ #IH #H /2 width=5 by/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_fdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_fdeq.ma index 8a5676cc0..30bbb3e75 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_fdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_fdeq.ma @@ -17,12 +17,12 @@ include "basic_2/rt_computation/lpxs_rdeq.ma". (* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) -(* Properties with degree-based equivalence on closures *********************) +(* Properties with sort-irrelevant equivalence on closures ******************) -lemma fdeq_lpxs_trans (h) (o): ∀G1,G2,L1,L0,T1,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L0, T2⦄ → - ∀L2. ⦃G2, L0⦄ ⊢⬈*[h] L2 → - ∃∃L. ⦃G1, L1⦄ ⊢⬈*[h] L & ⦃G1, L, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄. -#h #o #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 +lemma fdeq_lpxs_trans (h): ∀G1,G2,L1,L0,T1,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L0, T2⦄ → + ∀L2. ⦃G2, L0⦄ ⊢⬈*[h] L2 → + ∃∃L. ⦃G1, L1⦄ ⊢⬈*[h] L & ⦃G1, L, T1⦄ ≛ ⦃G2, L2, T2⦄. +#h #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 elim (fdeq_inv_gen_dx … H1) -H1 #HG #HL10 #HT12 destruct elim (rdeq_lpxs_trans … HL02 … HL10) -L0 #L0 #HL10 #HL02 /3 width=3 by fdeq_intro_dx, ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_rdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_rdeq.ma index 3526c22c2..2bc873339 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_rdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_rdeq.ma @@ -17,13 +17,14 @@ include "basic_2/rt_computation/lpxs_lpx.ma". (* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) -(* Properties with degree-based equivalence on referred entries *************) +(* Properties with sort-irrelevant equivalence on referred entries **********) (* Basic_2A1: uses: lleq_lpxs_trans *) -lemma rdeq_lpxs_trans (h) (o) (G) (T:term): ∀L2,K2. ⦃G, L2⦄ ⊢ ⬈*[h] K2 → - ∀L1. L1 ≛[h, o, T] L2 → - ∃∃K1. ⦃G, L1⦄ ⊢ ⬈*[h] K1 & K1 ≛[h, o, T] K2. -#h #o #G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ +lemma rdeq_lpxs_trans (h) (G) (T:term): + ∀L2,K2. ⦃G, L2⦄ ⊢ ⬈*[h] K2 → + ∀L1. L1 ≛[T] L2 → + ∃∃K1. ⦃G, L1⦄ ⊢ ⬈*[h] K1 & K1 ≛[T] K2. +#h #G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ #L #L2 #HL2 #_ #IH #L1 #HT elim (rdeq_lpx_trans … HL2 … HT) -L #L #HL1 #HT elim (IH … HT) -L2 #K #HLK #HT @@ -31,13 +32,13 @@ elim (IH … HT) -L2 #K #HLK #HT qed-. (* Basic_2A1: uses: lpxs_nlleq_inv_step_sn *) -lemma lpxs_rdneq_inv_step_sn (h) (o) (G) (T:term): - ∀L1,L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[h, o, T] L2 → ⊥) → - ∃∃L,L0. ⦃G, L1⦄ ⊢ ⬈[h] L & L1 ≛[h, o, T] L → ⊥ & - ⦃G, L⦄ ⊢ ⬈*[h] L0 & L0 ≛[h, o, T] L2. -#h #o #G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1 +lemma lpxs_rdneq_inv_step_sn (h) (G) (T:term): + ∀L1,L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → + ∃∃L,L0. ⦃G, L1⦄ ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ & + ⦃G, L⦄ ⊢ ⬈*[h] L0 & L0 ≛[T] L2. +#h #G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1 [ #H elim H -H // -| #L1 #L #H1 #H2 #IH2 #H12 elim (rdeq_dec h o L1 L T) #H +| #L1 #L #H1 #H2 #IH2 #H12 elim (rdeq_dec L1 L T) #H [ -H1 -H2 elim IH2 -IH2 /3 width=3 by rdeq_trans/ -H12 #L0 #L3 #H1 #H2 #H3 #H4 lapply (rdeq_rdneq_trans … H … H2) -H2 #H2 elim (rdeq_lpx_trans … H1 … H) -L diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma index 0f4601234..d976e52d1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma @@ -12,45 +12,45 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/lsubeqx_6.ma". +include "basic_2/notation/relations/lsubeqx_5.ma". include "basic_2/rt_computation/rdsx.ma". (* CLEAR OF STRONGLY NORMALIZING ENTRIES FOR UNBOUND RT-TRANSITION **********) (* Note: this should be an instance of a more general sex *) (* Basic_2A1: uses: lcosx *) -inductive lsubsx (h) (o) (G): rtmap → relation lenv ≝ -| lsubsx_atom: ∀f. lsubsx h o G f (⋆) (⋆) -| lsubsx_push: ∀f,I,K1,K2. lsubsx h o G f K1 K2 → - lsubsx h o G (⫯f) (K1.ⓘ{I}) (K2.ⓘ{I}) -| lsubsx_unit: ∀f,I,K1,K2. lsubsx h o G f K1 K2 → - lsubsx h o G (↑f) (K1.ⓤ{I}) (K2.ⓧ) -| lsubsx_pair: ∀f,I,K1,K2,V. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ → - lsubsx h o G f K1 K2 → lsubsx h o G (↑f) (K1.ⓑ{I}V) (K2.ⓧ) +inductive lsubsx (h) (G): rtmap → relation lenv ≝ +| lsubsx_atom: ∀f. lsubsx h G f (⋆) (⋆) +| lsubsx_push: ∀f,I,K1,K2. lsubsx h G f K1 K2 → + lsubsx h G (⫯f) (K1.ⓘ{I}) (K2.ⓘ{I}) +| lsubsx_unit: ∀f,I,K1,K2. lsubsx h G f K1 K2 → + lsubsx h G (↑f) (K1.ⓤ{I}) (K2.ⓧ) +| lsubsx_pair: ∀f,I,K1,K2,V. G ⊢ ⬈*[h, V] 𝐒⦃K2⦄ → + lsubsx h G f K1 K2 → lsubsx h G (↑f) (K1.ⓑ{I}V) (K2.ⓧ) . interpretation "local environment refinement (clear)" - 'LSubEqX h o f G L1 L2 = (lsubsx h o G f L1 L2). + 'LSubEqX h f G L1 L2 = (lsubsx h G f L1 L2). (* Basic inversion lemmas ***************************************************) -fact lsubsx_inv_atom_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → +fact lsubsx_inv_atom_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, g] L2 → L1 = ⋆ → L2 = ⋆. -#h #o #g #G #L1 #L2 * -g -L1 -L2 // +#h #g #G #L1 #L2 * -g -L1 -L2 // [ #f #I #K1 #K2 #_ #H destruct | #f #I #K1 #K2 #_ #H destruct | #f #I #K1 #K2 #V #_ #_ #H destruct ] qed-. -lemma lsubsx_inv_atom_sn: ∀h,o,g,G,L2. G ⊢ ⋆ ⊆ⓧ[h, o, g] L2 → L2 = ⋆. +lemma lsubsx_inv_atom_sn: ∀h,g,G,L2. G ⊢ ⋆ ⊆ⓧ[h, g] L2 → L2 = ⋆. /2 width=7 by lsubsx_inv_atom_sn_aux/ qed-. -fact lsubsx_inv_push_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → +fact lsubsx_inv_push_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, g] L2 → ∀f,I,K1. g = ⫯f → L1 = K1.ⓘ{I} → - ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓘ{I}. -#h #o #g #G #L1 #L2 * -g -L1 -L2 + ∃∃K2. G ⊢ K1 ⊆ⓧ[h, f] K2 & L2 = K2.ⓘ{I}. +#h #g #G #L1 #L2 * -g -L1 -L2 [ #f #g #J #L1 #_ #H destruct | #f #I #K1 #K2 #HK12 #g #J #L1 #H1 #H2 destruct <(injective_push … H1) -g /2 width=3 by ex2_intro/ @@ -61,14 +61,14 @@ fact lsubsx_inv_push_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → ] qed-. -lemma lsubsx_inv_push_sn: ∀h,o,f,I,G,K1,L2. G ⊢ K1.ⓘ{I} ⊆ⓧ[h, o, ⫯f] L2 → - ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓘ{I}. +lemma lsubsx_inv_push_sn: ∀h,f,I,G,K1,L2. G ⊢ K1.ⓘ{I} ⊆ⓧ[h, ⫯f] L2 → + ∃∃K2. G ⊢ K1 ⊆ⓧ[h, f] K2 & L2 = K2.ⓘ{I}. /2 width=5 by lsubsx_inv_push_sn_aux/ qed-. -fact lsubsx_inv_unit_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → +fact lsubsx_inv_unit_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, g] L2 → ∀f,I,K1. g = ↑f → L1 = K1.ⓤ{I} → - ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. -#h #o #g #G #L1 #L2 * -g -L1 -L2 + ∃∃K2. G ⊢ K1 ⊆ⓧ[h, f] K2 & L2 = K2.ⓧ. +#h #g #G #L1 #L2 * -g -L1 -L2 [ #f #g #J #L1 #_ #H destruct | #f #I #K1 #K2 #_ #g #J #L1 #H elim (discr_push_next … H) @@ -78,15 +78,15 @@ fact lsubsx_inv_unit_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → ] qed-. -lemma lsubsx_inv_unit_sn: ∀h,o,f,I,G,K1,L2. G ⊢ K1.ⓤ{I} ⊆ⓧ[h, o, ↑f] L2 → - ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. +lemma lsubsx_inv_unit_sn: ∀h,f,I,G,K1,L2. G ⊢ K1.ⓤ{I} ⊆ⓧ[h, ↑f] L2 → + ∃∃K2. G ⊢ K1 ⊆ⓧ[h, f] K2 & L2 = K2.ⓧ. /2 width=6 by lsubsx_inv_unit_sn_aux/ qed-. -fact lsubsx_inv_pair_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → +fact lsubsx_inv_pair_sn_aux: ∀h,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, g] L2 → ∀f,I,K1,V. g = ↑f → L1 = K1.ⓑ{I}V → - ∃∃K2. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ & - G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. -#h #o #g #G #L1 #L2 * -g -L1 -L2 + ∃∃K2. G ⊢ ⬈*[h, V] 𝐒⦃K2⦄ & + G ⊢ K1 ⊆ⓧ[h, f] K2 & L2 = K2.ⓧ. +#h #g #G #L1 #L2 * -g -L1 -L2 [ #f #g #J #L1 #W #_ #H destruct | #f #I #K1 #K2 #_ #g #J #L1 #W #H elim (discr_push_next … H) @@ -97,18 +97,18 @@ fact lsubsx_inv_pair_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → qed-. (* Basic_2A1: uses: lcosx_inv_pair *) -lemma lsubsx_inv_pair_sn: ∀h,o,f,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, o, ↑f] L2 → - ∃∃K2. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ & - G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. +lemma lsubsx_inv_pair_sn: ∀h,f,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, ↑f] L2 → + ∃∃K2. G ⊢ ⬈*[h, V] 𝐒⦃K2⦄ & + G ⊢ K1 ⊆ⓧ[h, f] K2 & L2 = K2.ⓧ. /2 width=6 by lsubsx_inv_pair_sn_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma lsubsx_inv_pair_sn_gen: ∀h,o,g,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, o, g] L2 → - ∨∨ ∃∃f,K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & g = ⫯f & L2 = K2.ⓑ{I}V - | ∃∃f,K2. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ & - G ⊢ K1 ⊆ⓧ[h, o, f] K2 & g = ↑f & L2 = K2.ⓧ. -#h #o #g #I #G #K1 #L2 #V #H +lemma lsubsx_inv_pair_sn_gen: ∀h,g,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, g] L2 → + ∨∨ ∃∃f,K2. G ⊢ K1 ⊆ⓧ[h, f] K2 & g = ⫯f & L2 = K2.ⓑ{I}V + | ∃∃f,K2. G ⊢ ⬈*[h, V] 𝐒⦃K2⦄ & + G ⊢ K1 ⊆ⓧ[h, f] K2 & g = ↑f & L2 = K2.ⓧ. +#h #g #I #G #K1 #L2 #V #H elim (pn_split g) * #f #Hf destruct [ elim (lsubsx_inv_push_sn … H) -H /3 width=5 by ex3_2_intro, or_introl/ | elim (lsubsx_inv_pair_sn … H) -H /3 width=6 by ex4_2_intro, or_intror/ @@ -117,9 +117,9 @@ qed-. (* Advanced forward lemmas **************************************************) -lemma lsubsx_fwd_bind_sn: ∀h,o,g,I1,G,K1,L2. G ⊢ K1.ⓘ{I1} ⊆ⓧ[h, o, g] L2 → - ∃∃I2,K2. G ⊢ K1 ⊆ⓧ[h, o, ⫱g] K2 & L2 = K2.ⓘ{I2}. -#h #o #g #I1 #G #K1 #L2 +lemma lsubsx_fwd_bind_sn: ∀h,g,I1,G,K1,L2. G ⊢ K1.ⓘ{I1} ⊆ⓧ[h, g] L2 → + ∃∃I2,K2. G ⊢ K1 ⊆ⓧ[h, ⫱g] K2 & L2 = K2.ⓘ{I2}. +#h #g #I1 #G #K1 #L2 elim (pn_split g) * #f #Hf destruct [ #H elim (lsubsx_inv_push_sn … H) -H | cases I1 -I1 #I1 @@ -132,8 +132,8 @@ qed-. (* Basic properties *********************************************************) -lemma lsubsx_eq_repl_back: ∀h,o,G,L1,L2. eq_repl_back … (λf. G ⊢ L1 ⊆ⓧ[h, o, f] L2). -#h #o #G #L1 #L2 #f1 #H elim H -L1 -L2 -f1 // +lemma lsubsx_eq_repl_back: ∀h,G,L1,L2. eq_repl_back … (λf. G ⊢ L1 ⊆ⓧ[h, f] L2). +#h #G #L1 #L2 #f1 #H elim H -L1 -L2 -f1 // [ #f #I #L1 #L2 #_ #IH #x #H elim (eq_inv_px … H) -H /3 width=3 by lsubsx_push/ | #f #I #L1 #L2 #_ #IH #x #H @@ -143,15 +143,15 @@ lemma lsubsx_eq_repl_back: ∀h,o,G,L1,L2. eq_repl_back … (λf. G ⊢ L1 ⊆ ] qed-. -lemma lsubsx_eq_repl_fwd: ∀h,o,G,L1,L2. eq_repl_fwd … (λf. G ⊢ L1 ⊆ⓧ[h, o, f] L2). -#h #o #G #L1 #L2 @eq_repl_sym /2 width=3 by lsubsx_eq_repl_back/ +lemma lsubsx_eq_repl_fwd: ∀h,G,L1,L2. eq_repl_fwd … (λf. G ⊢ L1 ⊆ⓧ[h, f] L2). +#h #G #L1 #L2 @eq_repl_sym /2 width=3 by lsubsx_eq_repl_back/ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: lcosx_O *) -lemma lsubsx_refl: ∀h,o,f,G. 𝐈⦃f⦄ → reflexive … (lsubsx h o G f). -#h #o #f #G #Hf #L elim L -L +lemma lsubsx_refl: ∀h,f,G. 𝐈⦃f⦄ → reflexive … (lsubsx h G f). +#h #f #G #Hf #L elim L -L /3 width=3 by lsubsx_eq_repl_back, lsubsx_push, eq_push_inv_isid/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_lsubsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_lsubsx.ma index 018e5c262..0a06062e6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_lsubsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_lsubsx.ma @@ -18,9 +18,9 @@ include "basic_2/rt_computation/lsubsx.ma". (* Main properties **********************************************************) -theorem lsubsx_fix: ∀h,o,f,G,L1,L. G ⊢ L1 ⊆ⓧ[h, o, f] L → - ∀L2. G ⊢ L ⊆ⓧ[h, o, f] L2 → L = L2. -#h #o #f #G #L1 #L #H elim H -f -L1 -L +theorem lsubsx_fix: ∀h,f,G,L1,L. G ⊢ L1 ⊆ⓧ[h, f] L → + ∀L2. G ⊢ L ⊆ⓧ[h, f] L2 → L = L2. +#h #f #G #L1 #L #H elim H -f -L1 -L [ #f #L2 #H >(lsubsx_inv_atom_sn … H) -L2 // | #f #I #K1 #K2 #_ #IH #L2 #H @@ -32,7 +32,7 @@ theorem lsubsx_fix: ∀h,o,f,G,L1,L. G ⊢ L1 ⊆ⓧ[h, o, f] L → ] qed-. -theorem lsubsx_trans: ∀h,o,f,G. Transitive … (lsubsx h o G f). -#h #o #f #G #L1 #L #H1 #L2 #H2 +theorem lsubsx_trans: ∀h,f,G. Transitive … (lsubsx h G f). +#h #f #G #L1 #L #H1 #L2 #H2 <(lsubsx_fix … H1 … H2) -L2 // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_rdsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_rdsx.ma index 52454a2ac..70ba811a9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_rdsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx_rdsx.ma @@ -21,10 +21,11 @@ include "basic_2/rt_computation/lsubsx.ma". (* Properties with strongly normalizing referred local environments *********) (* Basic_2A1: uses: lsx_cpx_trans_lcosx *) -lemma rdsx_cpx_trans_lsubsx (h) (o): ∀G,L0,T1,T2. ⦃G, L0⦄ ⊢ T1 ⬈[h] T2 → - ∀f,L. G ⊢ L0 ⊆ⓧ[h, o, f] L → - G ⊢ ⬈*[h, o, T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h, o, T2] 𝐒⦃L⦄. -#h #o #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2 // +lemma rdsx_cpx_trans_lsubsx (h): + ∀G,L0,T1,T2. ⦃G, L0⦄ ⊢ T1 ⬈[h] T2 → + ∀f,L. G ⊢ L0 ⊆ⓧ[h, f] L → + G ⊢ ⬈*[h, T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h, T2] 𝐒⦃L⦄. +#h #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2 // [ #I0 #G #K0 #V1 #V2 #W2 #_ #IH #HVW2 #g #L #HK0 #HL elim (lsubsx_inv_pair_sn_gen … HK0) -HK0 * [ #f #K #HK0 #H1 #H2 destruct @@ -61,13 +62,15 @@ qed-. (* Advanced properties of strongly normalizing referred local environments **) (* Basic_2A1: uses: lsx_cpx_trans_O *) -lemma rdsx_cpx_trans (h) (o): ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → - G ⊢ ⬈*[h, o, T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h, o, T2] 𝐒⦃L⦄. +lemma rdsx_cpx_trans (h): + ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → + G ⊢ ⬈*[h, T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h, T2] 𝐒⦃L⦄. /3 width=6 by rdsx_cpx_trans_lsubsx, lsubsx_refl/ qed-. -lemma rdsx_cpxs_trans (h) (o): ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → - G ⊢ ⬈*[h, o, T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h, o, T2] 𝐒⦃L⦄. -#h #o #G #L #T1 #T2 #H +lemma rdsx_cpxs_trans (h): + ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 → + G ⊢ ⬈*[h, T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h, T2] 𝐒⦃L⦄. +#h #G #L #T1 #T2 #H @(cpxs_ind_dx ???????? H) -T1 // /3 width=3 by rdsx_cpx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx.ma index 5b62dbae1..45dd9f908 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx.ma @@ -12,80 +12,82 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtysnstrong_5.ma". +include "basic_2/notation/relations/predtysnstrong_4.ma". include "static_2/static/rdeq.ma". include "basic_2/rt_transition/lpx.ma". (* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) -definition rdsx (h) (o) (G) (T): predicate lenv ≝ - SN … (lpx h G) (rdeq h o T). +definition rdsx (h) (G) (T): predicate lenv ≝ + SN … (lpx h G) (rdeq T). interpretation "strong normalization for unbound context-sensitive parallel rt-transition on referred entries (local environment)" - 'PRedTySNStrong h o T G L = (rdsx h o G T L). + 'PRedTySNStrong h T G L = (rdsx h G T L). (* Basic eliminators ********************************************************) (* Basic_2A1: uses: lsx_ind *) -lemma rdsx_ind (h) (o) (G) (T): +lemma rdsx_ind (h) (G) (T): ∀Q:predicate lenv. - (∀L1. G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄ → - (∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[h, o, T] L2 → ⊥) → Q L2) → + (∀L1. G ⊢ ⬈*[h, T] 𝐒⦃L1⦄ → + (∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L. G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄ → Q L. -#h #o #G #T #Q #H0 #L1 #H elim H -L1 + ∀L. G ⊢ ⬈*[h, T] 𝐒⦃L⦄ → Q L. +#h #G #T #Q #H0 #L1 #H elim H -L1 /5 width=1 by SN_intro/ qed-. (* Basic properties *********************************************************) (* Basic_2A1: uses: lsx_intro *) -lemma rdsx_intro (h) (o) (G) (T): +lemma rdsx_intro (h) (G) (T): ∀L1. - (∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[h, o, T] L2 → ⊥) → G ⊢ ⬈*[h, o, T] 𝐒⦃L2⦄) → - G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄. + (∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h, T] 𝐒⦃L2⦄) → + G ⊢ ⬈*[h, T] 𝐒⦃L1⦄. /5 width=1 by SN_intro/ qed. (* Basic forward lemmas *****************************************************) (* Basic_2A1: uses: lsx_fwd_pair_sn lsx_fwd_bind_sn lsx_fwd_flat_sn *) -lemma rdsx_fwd_pair_sn (h) (o) (G): - ∀I,L,V,T. G ⊢ ⬈*[h, o, ②{I}V.T] 𝐒⦃L⦄ → - G ⊢ ⬈*[h, o, V] 𝐒⦃L⦄. -#h #o #G #I #L #V #T #H +lemma rdsx_fwd_pair_sn (h) (G): + ∀I,L,V,T. G ⊢ ⬈*[h, ②{I}V.T] 𝐒⦃L⦄ → + G ⊢ ⬈*[h, V] 𝐒⦃L⦄. +#h #G #I #L #V #T #H @(rdsx_ind … H) -L #L1 #_ #IHL1 @rdsx_intro #L2 #HL12 #HnL12 /4 width=3 by rdeq_fwd_pair_sn/ qed-. (* Basic_2A1: uses: lsx_fwd_flat_dx *) -lemma rdsx_fwd_flat_dx (h) (o) (G): - ∀I,L,V,T. G ⊢ ⬈*[h, o, ⓕ{I}V.T] 𝐒⦃L⦄ → - G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄. -#h #o #G #I #L #V #T #H +lemma rdsx_fwd_flat_dx (h) (G): + ∀I,L,V,T. G ⊢ ⬈*[h, ⓕ{I}V.T] 𝐒⦃L⦄ → + G ⊢ ⬈*[h, T] 𝐒⦃L⦄. +#h #G #I #L #V #T #H @(rdsx_ind … H) -L #L1 #_ #IHL1 @rdsx_intro #L2 #HL12 #HnL12 /4 width=3 by rdeq_fwd_flat_dx/ qed-. -fact rdsx_fwd_pair_aux (h) (o) (G): ∀L. G ⊢ ⬈*[h, o, #0] 𝐒⦃L⦄ → - ∀I,K,V. L = K.ⓑ{I}V → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄. -#h #o #G #L #H +fact rdsx_fwd_pair_aux (h) (G): + ∀L. G ⊢ ⬈*[h, #0] 𝐒⦃L⦄ → + ∀I,K,V. L = K.ⓑ{I}V → G ⊢ ⬈*[h, V] 𝐒⦃K⦄. +#h #G #L #H @(rdsx_ind … H) -L #L1 #_ #IH #I #K1 #V #H destruct /5 width=5 by lpx_pair, rdsx_intro, rdeq_fwd_zero_pair/ qed-. -lemma rdsx_fwd_pair (h) (o) (G): - ∀I,K,V. G ⊢ ⬈*[h, o, #0] 𝐒⦃K.ⓑ{I}V⦄ → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄. +lemma rdsx_fwd_pair (h) (G): + ∀I,K,V. G ⊢ ⬈*[h, #0] 𝐒⦃K.ⓑ{I}V⦄ → G ⊢ ⬈*[h, V] 𝐒⦃K⦄. /2 width=4 by rdsx_fwd_pair_aux/ qed-. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: uses: lsx_inv_flat *) -lemma rdsx_inv_flat (h) (o) (G): ∀I,L,V,T. G ⊢ ⬈*[h, o, ⓕ{I}V.T] 𝐒⦃L⦄ → - ∧∧ G ⊢ ⬈*[h, o, V] 𝐒⦃L⦄ & G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄. +lemma rdsx_inv_flat (h) (G): + ∀I,L,V,T. G ⊢ ⬈*[h, ⓕ{I}V.T] 𝐒⦃L⦄ → + ∧∧ G ⊢ ⬈*[h, V] 𝐒⦃L⦄ & G ⊢ ⬈*[h, T] 𝐒⦃L⦄. /3 width=3 by rdsx_fwd_pair_sn, rdsx_fwd_flat_dx, conj/ qed-. (* Basic_2A1: removed theorems 9: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_csx.ma index 355ecb004..436c2b224 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_csx.ma @@ -21,16 +21,16 @@ include "basic_2/rt_computation/lsubsx_rdsx.ma". (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lref_be_lpxs *) -lemma rdsx_pair_lpxs (h) (o) (G): - ∀K1,V. ⦃G, K1⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → - ∀K2. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ → ⦃G, K1⦄ ⊢ ⬈*[h] K2 → - ∀I. G ⊢ ⬈*[h, o, #0] 𝐒⦃K2.ⓑ{I}V⦄. -#h #o #G #K1 #V #H +lemma rdsx_pair_lpxs (h) (G): + ∀K1,V. ⦃G, K1⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → + ∀K2. G ⊢ ⬈*[h, V] 𝐒⦃K2⦄ → ⦃G, K1⦄ ⊢ ⬈*[h] K2 → + ∀I. G ⊢ ⬈*[h, #0] 𝐒⦃K2.ⓑ{I}V⦄. +#h #G #K1 #V #H @(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H @(rdsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #I @rdsx_intro #Y #HY #HnY elim (lpx_inv_pair_sn … HY) -HY #K2 #V2 #HK02 #HV02 #H destruct -elim (tdeq_dec h o V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] +elim (tdeq_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] [ /5 width=5 by rdsx_rdeq_trans, lpxs_step_dx, rdeq_pair/ | @(IHV0 … HnV02) -IHV0 -HnV02 [ /2 width=3 by lpxs_cpx_trans/ @@ -41,10 +41,10 @@ elim (tdeq_dec h o V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] qed. (* Basic_2A1: uses: lsx_lref_be *) -lemma rdsx_lref_pair_drops (h) (o) (G): - ∀K,V. ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄ → - ∀I,i,L. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. -#h #o #G #K #V #HV #HK #I #i elim i -i +lemma rdsx_lref_pair_drops (h) (G): + ∀K,V. ⦃G, K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → G ⊢ ⬈*[h, V] 𝐒⦃K⦄ → + ∀I,i,L. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h, #i] 𝐒⦃L⦄. +#h #G #K #V #HV #HK #I #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=3 by rdsx_pair_lpxs/ | #i #IH #L #H elim (drops_inv_bind2_isuni_next … H) -H // #J #Y #HY #H destruct @@ -55,8 +55,8 @@ qed. (* Main properties **********************************************************) (* Basic_2A1: uses: csx_lsx *) -theorem csx_rdsx (h) (o): ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃T⦄ → G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄. -#h #o #G #L #T @(fqup_wf_ind_eq (Ⓕ) … G L T) -G -L -T +theorem csx_rdsx (h): ∀G,L,T. ⦃G, L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → G ⊢ ⬈*[h, T] 𝐒⦃L⦄. +#h #G #L #T @(fqup_wf_ind_eq (Ⓕ) … G L T) -G -L -T #Z #Y #X #IH #G #L * * // [ #i #HG #HL #HT #H destruct elim (csx_inv_lref … H) -H [ |*: * ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_drops.ma index ed5e99053..a27c2a71d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_drops.ma @@ -23,8 +23,8 @@ include "basic_2/rt_computation/rdsx_fqup.ma". (* Note: this uses length *) (* Basic_2A1: uses: lsx_lift_le lsx_lift_ge *) -lemma rdsx_lifts (h) (o) (G): d_liftable1_isuni … (λL,T. G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄). -#h #o #G #K #T #H @(rdsx_ind … H) -K +lemma rdsx_lifts (h) (G): d_liftable1_isuni … (λL,T. G ⊢ ⬈*[h, T] 𝐒⦃L⦄). +#h #G #K #T #H @(rdsx_ind … H) -K #K1 #_ #IH #b #f #L1 #HLK1 #Hf #U #HTU @rdsx_intro #L2 #HL12 #HnL12 elim (lpx_drops_conf … HLK1 … HL12) /5 width=9 by rdeq_lifts_bi, lpx_fwd_length/ @@ -33,8 +33,8 @@ qed-. (* Inversion lemmas on relocation *******************************************) (* Basic_2A1: uses: lsx_inv_lift_le lsx_inv_lift_be lsx_inv_lift_ge *) -lemma rdsx_inv_lifts (h) (o) (G): d_deliftable1_isuni … (λL,T. G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄). -#h #o #G #L #U #H @(rdsx_ind … H) -L +lemma rdsx_inv_lifts (h) (G): d_deliftable1_isuni … (λL,T. G ⊢ ⬈*[h, T] 𝐒⦃L⦄). +#h #G #L #U #H @(rdsx_ind … H) -L #L1 #_ #IH #b #f #K1 #HLK1 #Hf #T #HTU @rdsx_intro #K2 #HK12 #HnK12 elim (drops_lpx_trans … HLK1 … HK12) -HK12 /4 width=10 by rdeq_inv_lifts_bi/ @@ -43,24 +43,24 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lref_free *) -lemma rdsx_lref_atom (h) (o) (G): ∀L,i. ⬇*[Ⓕ, 𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. -#h #o #G #L1 #i #HL1 +lemma rdsx_lref_atom (h) (G): ∀L,i. ⬇*[Ⓕ, 𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h, #i] 𝐒⦃L⦄. +#h #G #L1 #i #HL1 @(rdsx_lifts … (#0) … HL1) -HL1 // qed. (* Basic_2A1: uses: lsx_lref_skip *) -lemma rdsx_lref_unit (h) (o) (G): ∀I,L,K,i. ⬇*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. -#h #o #G #I #L1 #K1 #i #HL1 +lemma rdsx_lref_unit (h) (G): ∀I,L,K,i. ⬇*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h, #i] 𝐒⦃L⦄. +#h #G #I #L1 #K1 #i #HL1 @(rdsx_lifts … (#0) … HL1) -HL1 // qed. (* Advanced forward lemmas **************************************************) (* Basic_2A1: uses: lsx_fwd_lref_be *) -lemma rdsx_fwd_lref_pair (h) (o) (G): - ∀L,i. G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄ → - ∀I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄. -#h #o #G #L #i #HL #I #K #V #HLK +lemma rdsx_fwd_lref_pair (h) (G): + ∀L,i. G ⊢ ⬈*[h, #i] 𝐒⦃L⦄ → + ∀I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h, V] 𝐒⦃K⦄. +#h #G #L #i #HL #I #K #V #HLK lapply (rdsx_inv_lifts … HL … HLK … (#0) ?) -L /2 width=2 by rdsx_fwd_pair/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_fqup.ma index 2913cb998..7906406eb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_fqup.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/rdsx.ma". (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_atom *) -lemma lfsx_atom (h) (o) (G) (T): G ⊢ ⬈*[h, o, T] 𝐒⦃⋆⦄. -#h #o #G #T +lemma lfsx_atom (h) (G) (T): G ⊢ ⬈*[h, T] 𝐒⦃⋆⦄. +#h #G #T @rdsx_intro #Y #H #HnT lapply (lpx_inv_atom_sn … H) -H #H destruct elim HnT -HnT // @@ -32,10 +32,10 @@ qed. (* Basic_2A1: uses: lsx_fwd_bind_dx *) (* Note: the exclusion binder (ⓧ) makes this more elegant and much simpler *) (* Note: the old proof without the exclusion binder requires lreq *) -lemma rdsx_fwd_bind_dx (h) (o) (G): - ∀p,I,L,V,T. G ⊢ ⬈*[h, o, ⓑ{p,I}V.T] 𝐒⦃L⦄ → - G ⊢ ⬈*[h, o, T] 𝐒⦃L.ⓧ⦄. -#h #o #G #p #I #L #V #T #H +lemma rdsx_fwd_bind_dx (h) (G): + ∀p,I,L,V,T. G ⊢ ⬈*[h, ⓑ{p,I}V.T] 𝐒⦃L⦄ → + G ⊢ ⬈*[h, T] 𝐒⦃L.ⓧ⦄. +#h #G #p #I #L #V #T #H @(rdsx_ind … H) -L #L1 #_ #IH @rdsx_intro #Y #H #HT elim (lpx_inv_unit_sn … H) -H #L2 #HL12 #H destruct @@ -45,6 +45,7 @@ qed-. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: uses: lsx_inv_bind *) -lemma rdsx_inv_bind (h) (o) (G): ∀p,I,L,V,T. G ⊢ ⬈*[h, o, ⓑ{p,I}V.T] 𝐒⦃L⦄ → - ∧∧ G ⊢ ⬈*[h, o, V] 𝐒⦃L⦄ & G ⊢ ⬈*[h, o, T] 𝐒⦃L.ⓧ⦄. +lemma rdsx_inv_bind (h) (G): + ∀p,I,L,V,T. G ⊢ ⬈*[h, ⓑ{p,I}V.T] 𝐒⦃L⦄ → + ∧∧ G ⊢ ⬈*[h, V] 𝐒⦃L⦄ & G ⊢ ⬈*[h, T] 𝐒⦃L.ⓧ⦄. /3 width=4 by rdsx_fwd_pair_sn, rdsx_fwd_bind_dx, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_length.ma index 22451994b..7c3c5703b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_length.ma @@ -21,19 +21,19 @@ include "basic_2/rt_computation/rdsx.ma". (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_sort *) -lemma rdsx_sort (h) (o) (G): ∀L,s. G ⊢ ⬈*[h, o, ⋆s] 𝐒⦃L⦄. -#h #o #G #L1 #s @rdsx_intro #L2 #H #Hs +lemma rdsx_sort (h) (G): ∀L,s. G ⊢ ⬈*[h, ⋆s] 𝐒⦃L⦄. +#h #G #L1 #s @rdsx_intro #L2 #H #Hs elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_sort_length/ qed. (* Basic_2A1: uses: lsx_gref *) -lemma rdsx_gref (h) (o) (G): ∀L,l. G ⊢ ⬈*[h, o, §l] 𝐒⦃L⦄. -#h #o #G #L1 #s @rdsx_intro #L2 #H #Hs +lemma rdsx_gref (h) (G): ∀L,l. G ⊢ ⬈*[h, §l] 𝐒⦃L⦄. +#h #G #L1 #s @rdsx_intro #L2 #H #Hs elim Hs -Hs /3 width=3 by lpx_fwd_length, rdeq_gref_length/ qed. -lemma rdsx_unit (h) (o) (G): ∀I,L. G ⊢ ⬈*[h, o, #0] 𝐒⦃L.ⓤ{I}⦄. -#h #o #G #I #L1 @rdsx_intro +lemma rdsx_unit (h) (G): ∀I,L. G ⊢ ⬈*[h, #0] 𝐒⦃L.ⓤ{I}⦄. +#h #G #I #L1 @rdsx_intro #Y #HY #HnY elim HnY -HnY elim (lpx_inv_unit_sn … HY) -HY #L2 #HL12 #H destruct /3 width=3 by lpx_fwd_length, rdeq_unit_length/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma index 06649215c..0368929ea 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_lpxs.ma @@ -21,35 +21,36 @@ include "basic_2/rt_computation/rdsx_rdsx.ma". (* Properties with unbound rt-computation for full local environments *******) (* Basic_2A1: uses: lsx_intro_alt *) -lemma rdsx_intro_lpxs (h) (o) (G): - ∀L1,T. (∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[h, o, T] L2 → ⊥) → G ⊢ ⬈*[h, o, T] 𝐒⦃L2⦄) → - G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄. +lemma rdsx_intro_lpxs (h) (G): + ∀L1,T. (∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h, T] 𝐒⦃L2⦄) → + G ⊢ ⬈*[h, T] 𝐒⦃L1⦄. /4 width=1 by lpx_lpxs, rdsx_intro/ qed-. (* Basic_2A1: uses: lsx_lpxs_trans *) -lemma rdsx_lpxs_trans (h) (o) (G): ∀L1,T. G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄ → - ∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → G ⊢ ⬈*[h, o, T] 𝐒⦃L2⦄. -#h #o #G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2 +lemma rdsx_lpxs_trans (h) (G): + ∀L1,T. G ⊢ ⬈*[h, T] 𝐒⦃L1⦄ → + ∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → G ⊢ ⬈*[h, T] 𝐒⦃L2⦄. +#h #G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2 /2 width=3 by rdsx_lpx_trans/ qed-. (* Eliminators with unbound rt-computation for full local environments ******) -lemma rdsx_ind_lpxs_rdeq (h) (o) (G): +lemma rdsx_ind_lpxs_rdeq (h) (G): ∀T. ∀Q:predicate lenv. - (∀L1. G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄ → - (∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[h, o, T] L2 → ⊥) → Q L2) → + (∀L1. G ⊢ ⬈*[h, T] 𝐒⦃L1⦄ → + (∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L1. G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄ → - ∀L0. ⦃G, L1⦄ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[h, o, T] L2 → Q L2. -#h #o #G #T #Q #IH #L1 #H @(rdsx_ind … H) -L1 + ∀L1. G ⊢ ⬈*[h, T] 𝐒⦃L1⦄ → + ∀L0. ⦃G, L1⦄ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2. +#h #G #T #Q #IH #L1 #H @(rdsx_ind … H) -L1 #L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02 @IH -IH /3 width=3 by rdsx_lpxs_trans, rdsx_rdeq_trans/ -HL1 #K2 #HLK2 #HnLK2 lapply (rdeq_rdneq_trans … HL02 … HnLK2) -HnLK2 #H elim (rdeq_lpxs_trans … HLK2 … HL02) -L2 #K0 #HLK0 #HK02 lapply (rdneq_rdeq_canc_dx … H … HK02) -H #HnLK0 -elim (rdeq_dec h o L1 L0 T) #H +elim (rdeq_dec L1 L0 T) #H [ lapply (rdeq_rdneq_trans … H … HnLK0) -H -HnLK0 #Hn10 lapply (lpxs_trans … HL10 … HLK0) -L0 #H10 elim (lpxs_rdneq_inv_step_sn … H10 … Hn10) -H10 -Hn10 @@ -61,31 +62,31 @@ elim (rdeq_dec h o L1 L0 T) #H qed-. (* Basic_2A1: uses: lsx_ind_alt *) -lemma rdsx_ind_lpxs (h) (o) (G): +lemma rdsx_ind_lpxs (h) (G): ∀T. ∀Q:predicate lenv. - (∀L1. G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄ → - (∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[h, o, T] L2 → ⊥) → Q L2) → + (∀L1. G ⊢ ⬈*[h, T] 𝐒⦃L1⦄ → + (∀L2. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L. G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄ → Q L. -#h #o #G #T #Q #IH #L #HL + ∀L. G ⊢ ⬈*[h, T] 𝐒⦃L⦄ → Q L. +#h #G #T #Q #IH #L #HL @(rdsx_ind_lpxs_rdeq … IH … HL) -IH -HL // (**) (* full auto fails *) qed-. (* Advanced properties ******************************************************) -fact rdsx_bind_lpxs_aux (h) (o) (G): - ∀p,I,L1,V. G ⊢ ⬈*[h, o, V] 𝐒⦃L1⦄ → - ∀Y,T. G ⊢ ⬈*[h, o, T] 𝐒⦃Y⦄ → +fact rdsx_bind_lpxs_aux (h) (G): + ∀p,I,L1,V. G ⊢ ⬈*[h, V] 𝐒⦃L1⦄ → + ∀Y,T. G ⊢ ⬈*[h, T] 𝐒⦃Y⦄ → ∀L2. Y = L2.ⓑ{I}V → ⦃G, L1⦄ ⊢ ⬈*[h] L2 → - G ⊢ ⬈*[h, o, ⓑ{p,I}V.T] 𝐒⦃L2⦄. -#h #o #G #p #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1 + G ⊢ ⬈*[h, ⓑ{p,I}V.T] 𝐒⦃L2⦄. +#h #G #p #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rdsx_ind_lpxs … H) -Y #Y #HY #IHY #L2 #H #HL12 destruct @rdsx_intro_lpxs #L0 #HL20 lapply (lpxs_trans … HL12 … HL20) #HL10 #H elim (rdneq_inv_bind … H) -H [ -IHY | -HY -IHL1 -HL12 ] -[ #HnV elim (rdeq_dec h o L1 L2 V) +[ #HnV elim (rdeq_dec L1 L2 V) [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10 /3 width=4 by rdsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *) | -HnV -HL10 /4 width=4 by rdsx_lpxs_trans, lpxs_bind_refl_dx/ @@ -95,23 +96,23 @@ elim (rdneq_inv_bind … H) -H [ -IHY | -HY -IHL1 -HL12 ] qed-. (* Basic_2A1: uses: lsx_bind *) -lemma rdsx_bind (h) (o) (G): - ∀p,I,L,V. G ⊢ ⬈*[h, o, V] 𝐒⦃L⦄ → - ∀T. G ⊢ ⬈*[h, o, T] 𝐒⦃L.ⓑ{I}V⦄ → - G ⊢ ⬈*[h, o, ⓑ{p,I}V.T] 𝐒⦃L⦄. +lemma rdsx_bind (h) (G): + ∀p,I,L,V. G ⊢ ⬈*[h, V] 𝐒⦃L⦄ → + ∀T. G ⊢ ⬈*[h, T] 𝐒⦃L.ⓑ{I}V⦄ → + G ⊢ ⬈*[h, ⓑ{p,I}V.T] 𝐒⦃L⦄. /2 width=3 by rdsx_bind_lpxs_aux/ qed. (* Basic_2A1: uses: lsx_flat_lpxs *) -lemma rdsx_flat_lpxs (h) (o) (G): - ∀I,L1,V. G ⊢ ⬈*[h, o, V] 𝐒⦃L1⦄ → - ∀L2,T. G ⊢ ⬈*[h, o, T] 𝐒⦃L2⦄ → ⦃G, L1⦄ ⊢ ⬈*[h] L2 → - G ⊢ ⬈*[h, o, ⓕ{I}V.T] 𝐒⦃L2⦄. -#h #o #G #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1 +lemma rdsx_flat_lpxs (h) (G): + ∀I,L1,V. G ⊢ ⬈*[h, V] 𝐒⦃L1⦄ → + ∀L2,T. G ⊢ ⬈*[h, T] 𝐒⦃L2⦄ → ⦃G, L1⦄ ⊢ ⬈*[h] L2 → + G ⊢ ⬈*[h, ⓕ{I}V.T] 𝐒⦃L2⦄. +#h #G #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1 #L1 #HL1 #IHL1 #L2 #T #H @(rdsx_ind_lpxs … H) -L2 #L2 #HL2 #IHL2 #HL12 @rdsx_intro_lpxs #L0 #HL20 lapply (lpxs_trans … HL12 … HL20) #HL10 #H elim (rdneq_inv_flat … H) -H [ -HL1 -IHL2 | -HL2 -IHL1 ] -[ #HnV elim (rdeq_dec h o L1 L2 V) +[ #HnV elim (rdeq_dec L1 L2 V) [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10 /3 width=5 by rdsx_lpxs_trans, rdeq_canc_sn/ (**) (* full auto too slow: 47s *) | -HnV -HL10 /3 width=4 by rdsx_lpxs_trans/ @@ -121,23 +122,23 @@ lemma rdsx_flat_lpxs (h) (o) (G): qed-. (* Basic_2A1: uses: lsx_flat *) -lemma rdsx_flat (h) (o) (G): - ∀I,L,V. G ⊢ ⬈*[h, o, V] 𝐒⦃L⦄ → - ∀T. G ⊢ ⬈*[h, o, T] 𝐒⦃L⦄ → G ⊢ ⬈*[h, o, ⓕ{I}V.T] 𝐒⦃L⦄. +lemma rdsx_flat (h) (G): + ∀I,L,V. G ⊢ ⬈*[h, V] 𝐒⦃L⦄ → + ∀T. G ⊢ ⬈*[h, T] 𝐒⦃L⦄ → G ⊢ ⬈*[h, ⓕ{I}V.T] 𝐒⦃L⦄. /2 width=3 by rdsx_flat_lpxs/ qed. -fact rdsx_bind_lpxs_void_aux (h) (o) (G): - ∀p,I,L1,V. G ⊢ ⬈*[h, o, V] 𝐒⦃L1⦄ → - ∀Y,T. G ⊢ ⬈*[h, o, T] 𝐒⦃Y⦄ → +fact rdsx_bind_lpxs_void_aux (h) (G): + ∀p,I,L1,V. G ⊢ ⬈*[h, V] 𝐒⦃L1⦄ → + ∀Y,T. G ⊢ ⬈*[h, T] 𝐒⦃Y⦄ → ∀L2. Y = L2.ⓧ → ⦃G, L1⦄ ⊢ ⬈*[h] L2 → - G ⊢ ⬈*[h, o, ⓑ{p,I}V.T] 𝐒⦃L2⦄. -#h #o #G #p #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1 + G ⊢ ⬈*[h, ⓑ{p,I}V.T] 𝐒⦃L2⦄. +#h #G #p #I #L1 #V #H @(rdsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rdsx_ind_lpxs … H) -Y #Y #HY #IHY #L2 #H #HL12 destruct @rdsx_intro_lpxs #L0 #HL20 lapply (lpxs_trans … HL12 … HL20) #HL10 #H elim (rdneq_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ] -[ #HnV elim (rdeq_dec h o L1 L2 V) +[ #HnV elim (rdeq_dec L1 L2 V) [ #HV @(IHL1 … HL10) -IHL1 -HL12 -HL10 /3 width=6 by rdsx_lpxs_trans, lpxs_bind_refl_dx, rdeq_canc_sn/ (**) (* full auto too slow *) | -HnV -HL10 /4 width=4 by rdsx_lpxs_trans, lpxs_bind_refl_dx/ @@ -146,8 +147,8 @@ elim (rdneq_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ] ] qed-. -lemma rdsx_bind_void (h) (o) (G): - ∀p,I,L,V. G ⊢ ⬈*[h, o, V] 𝐒⦃L⦄ → - ∀T. G ⊢ ⬈*[h, o, T] 𝐒⦃L.ⓧ⦄ → - G ⊢ ⬈*[h, o, ⓑ{p,I}V.T] 𝐒⦃L⦄. +lemma rdsx_bind_void (h) (G): + ∀p,I,L,V. G ⊢ ⬈*[h, V] 𝐒⦃L⦄ → + ∀T. G ⊢ ⬈*[h, T] 𝐒⦃L.ⓧ⦄ → + G ⊢ ⬈*[h, ⓑ{p,I}V.T] 𝐒⦃L⦄. /2 width=3 by rdsx_bind_lpxs_void_aux/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_rdsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_rdsx.ma index 2305aac19..8066dad4b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_rdsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rdsx_rdsx.ma @@ -20,19 +20,19 @@ include "basic_2/rt_computation/rdsx.ma". (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lleq_trans *) -lemma rdsx_rdeq_trans (h) (o) (G): - ∀L1,T. G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄ → - ∀L2. L1 ≛[h, o, T] L2 → G ⊢ ⬈*[h, o, T] 𝐒⦃L2⦄. -#h #o #G #L1 #T #H @(rdsx_ind … H) -L1 +lemma rdsx_rdeq_trans (h) (G): + ∀L1,T. G ⊢ ⬈*[h, T] 𝐒⦃L1⦄ → + ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*[h, T] 𝐒⦃L2⦄. +#h #G #L1 #T #H @(rdsx_ind … H) -L1 #L1 #_ #IHL1 #L2 #HL12 @rdsx_intro #L #HL2 #HnL2 elim (rdeq_lpx_trans … HL2 … HL12) -HL2 /4 width=5 by rdeq_repl/ qed-. (* Basic_2A1: uses: lsx_lpx_trans *) -lemma rdsx_lpx_trans (h) (o) (G): - ∀L1,T. G ⊢ ⬈*[h, o, T] 𝐒⦃L1⦄ → - ∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → G ⊢ ⬈*[h, o, T] 𝐒⦃L2⦄. -#h #o #G #L1 #T #H @(rdsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12 -elim (rdeq_dec h o L1 L2 T) /3 width=4 by rdsx_rdeq_trans/ +lemma rdsx_lpx_trans (h) (G): + ∀L1,T. G ⊢ ⬈*[h, T] 𝐒⦃L1⦄ → + ∀L2. ⦃G, L1⦄ ⊢ ⬈[h] L2 → G ⊢ ⬈*[h, T] 𝐒⦃L2⦄. +#h #G #L1 #T #H @(rdsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12 +elim (rdeq_dec L1 L2 T) /3 width=4 by rdsx_rdeq_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma index cc2397d0f..6607013df 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma @@ -12,33 +12,24 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtynormal_5.ma". +include "basic_2/notation/relations/predtynormal_4.ma". include "static_2/syntax/tdeq.ma". include "basic_2/rt_transition/cpx.ma". (* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) -definition cnx: ∀h. sd h → relation3 genv lenv term ≝ - λh,o,G,L. NF … (cpx h G L) (tdeq h o …). +definition cnx: ∀h. relation3 genv lenv term ≝ + λh,G,L. NF … (cpx h G L) tdeq. interpretation "normality for unbound context-sensitive parallel rt-transition (term)" - 'PRedTyNormal h o G L T = (cnx h o G L T). + 'PRedTyNormal h G L T = (cnx h G L T). (* Basic inversion lemmas ***************************************************) -lemma cnx_inv_sort: ∀h,o,G,L,s. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃⋆s⦄ → deg h o s 0. -#h #o #G #L #s #H -lapply (H (⋆(next h s)) ?) -H /2 width=2 by cpx_ess/ -G -L #H -elim (tdeq_inv_sort1 … H) -H #s0 #d #H1 #H2 #H destruct -lapply (deg_next … H1) #H0 -lapply (deg_mono … H0 … H2) -H0 -H2 #H ->(pred_inv_fix_sn … H) -H // -qed-. - -lemma cnx_inv_abst: ∀h,o,p,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃ⓛ{p}V.T⦄ → - ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃V⦄ ∧ ⦃G, L.ⓛV⦄ ⊢ ⬈[h, o] 𝐍⦃T⦄. -#h #o #p #G #L #V1 #T1 #HVT1 @conj +lemma cnx_inv_abst: ∀h,p,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃ⓛ{p}V.T⦄ → + ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ ∧ ⦃G, L.ⓛV⦄ ⊢ ⬈[h] 𝐍⦃T⦄. +#h #p #G #L #V1 #T1 #HVT1 @conj [ #V2 #HV2 lapply (HVT1 (ⓛ{p}V2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 | #T2 #HT2 lapply (HVT1 (ⓛ{p}V1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 ] @@ -46,9 +37,9 @@ lemma cnx_inv_abst: ∀h,o,p,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃ⓛ{p}V.T qed-. (* Basic_2A1: was: cnx_inv_abbr *) -lemma cnx_inv_abbr_neg: ∀h,o,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃-ⓓV.T⦄ → - ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃V⦄ ∧ ⦃G, L.ⓓV⦄ ⊢ ⬈[h, o] 𝐍⦃T⦄. -#h #o #G #L #V1 #T1 #HVT1 @conj +lemma cnx_inv_abbr_neg: ∀h,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃-ⓓV.T⦄ → + ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ ∧ ⦃G, L.ⓓV⦄ ⊢ ⬈[h] 𝐍⦃T⦄. +#h #G #L #V1 #T1 #HVT1 @conj [ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 | #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 ] @@ -56,26 +47,21 @@ lemma cnx_inv_abbr_neg: ∀h,o,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃-ⓓV.T qed-. (* Basic_2A1: was: cnx_inv_eps *) -lemma cnx_inv_cast: ∀h,o,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃ⓝV.T⦄ → ⊥. -#h #o #G #L #V #T #H lapply (H T ?) -H +lemma cnx_inv_cast: ∀h,G,L,V,T. ⦃G, L⦄ ⊢ ⬈[h] 𝐍⦃ⓝV.T⦄ → ⊥. +#h #G #L #V #T #H lapply (H T ?) -H /2 width=6 by cpx_eps, tdeq_inv_pair_xy_y/ qed-. (* Basic properties *********************************************************) -lemma cnx_sort: ∀h,o,G,L,s. deg h o s 0 → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃⋆s⦄. -#h #o #G #L #s #Hs #X #H elim (cpx_inv_sort1 … H) -H -/3 width=3 by tdeq_sort, deg_next/ -qed. - -lemma cnx_sort_iter: ∀h,o,G,L,s,d. deg h o s d → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃⋆((next h)^d s)⦄. -#h #o #G #L #s #d #Hs lapply (deg_iter … d Hs) -Hs -(tdeq_inv_lref1 … H0) -H0 elim (rpx_inv_zero_pair_sn … H1) -H1 #K1 #X1 #HK01 #HX1 #H destruct @@ -125,46 +125,46 @@ lemma cpx_tdeq_conf_sex: ∀h,o,G. R_confluent2_rex … (cpx h G) (cdeq h o) (cp ] qed-. -lemma cpx_tdeq_conf: ∀h,o,G,L. ∀T0:term. ∀T1. ⦃G, L⦄ ⊢ T0 ⬈[h] T1 → - ∀T2. T0 ≛[h, o] T2 → - ∃∃T. T1 ≛[h, o] T & ⦃G, L⦄ ⊢ T2 ⬈[h] T. -#h #o #G #L #T0 #T1 #HT01 #T2 #HT02 +lemma cpx_tdeq_conf: ∀h,G,L. ∀T0:term. ∀T1. ⦃G, L⦄ ⊢ T0 ⬈[h] T1 → + ∀T2. T0 ≛ T2 → + ∃∃T. T1 ≛ T & ⦃G, L⦄ ⊢ T2 ⬈[h] T. +#h #G #L #T0 #T1 #HT01 #T2 #HT02 elim (cpx_tdeq_conf_sex … HT01 … HT02 L … L) -HT01 -HT02 /2 width=3 by rex_refl, ex2_intro/ qed-. -lemma tdeq_cpx_trans: ∀h,o,G,L,T2. ∀T0:term. T2 ≛[h, o] T0 → +lemma tdeq_cpx_trans: ∀h,G,L,T2. ∀T0:term. T2 ≛ T0 → ∀T1. ⦃G, L⦄ ⊢ T0 ⬈[h] T1 → - ∃∃T. ⦃G, L⦄ ⊢ T2 ⬈[h] T & T ≛[h, o] T1. -#h #o #G #L #T2 #T0 #HT20 #T1 #HT01 + ∃∃T. ⦃G, L⦄ ⊢ T2 ⬈[h] T & T ≛ T1. +#h #G #L #T2 #T0 #HT20 #T1 #HT01 elim (cpx_tdeq_conf … HT01 T2) -HT01 /3 width=3 by tdeq_sym, ex2_intro/ qed-. (* Basic_2A1: uses: cpx_lleq_conf *) -lemma cpx_rdeq_conf: ∀h,o,G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ⬈[h] T1 → - ∀L2. L0 ≛[h, o, T0] L2 → - ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈[h] T & T1 ≛[h, o] T. -#h #o #G #L0 #T0 #T1 #HT01 #L2 #HL02 +lemma cpx_rdeq_conf: ∀h,G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ⬈[h] T1 → + ∀L2. L0 ≛[T0] L2 → + ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈[h] T & T1 ≛ T. +#h #G #L0 #T0 #T1 #HT01 #L2 #HL02 elim (cpx_tdeq_conf_sex … HT01 T0 … L0 … HL02) -HT01 -HL02 /2 width=3 by rex_refl, ex2_intro/ qed-. (* Basic_2A1: uses: lleq_cpx_trans *) -lemma rdeq_cpx_trans: ∀h,o,G,L2,L0,T0. L2 ≛[h, o, T0] L0 → +lemma rdeq_cpx_trans: ∀h,G,L2,L0,T0. L2 ≛[T0] L0 → ∀T1. ⦃G, L0⦄ ⊢ T0 ⬈[h] T1 → - ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈[h] T & T ≛[h, o] T1. -#h #o #G #L2 #L0 #T0 #HL20 #T1 #HT01 -elim (cpx_rdeq_conf … o … HT01 L2) -HT01 + ∃∃T. ⦃G, L2⦄ ⊢ T0 ⬈[h] T & T ≛ T1. +#h #G #L2 #L0 #T0 #HL20 #T1 #HT01 +elim (cpx_rdeq_conf … HT01 L2) -HT01 /3 width=3 by rdeq_sym, tdeq_sym, ex2_intro/ qed-. -lemma rpx_rdeq_conf: ∀h,o,G,T. confluent2 … (rpx h G T) (rdeq h o T). +lemma rpx_rdeq_conf: ∀h,G,T. confluent2 … (rpx h G T) (rdeq T). /3 width=6 by rpx_fsge_comp, rdeq_fsge_comp, cpx_tdeq_conf_sex, rex_conf/ qed-. -lemma rdeq_rpx_trans: ∀h,o,G,T,L2,K2. ⦃G, L2⦄ ⊢ ⬈[h, T] K2 → - ∀L1. L1 ≛[h, o, T] L2 → - ∃∃K1. ⦃G, L1⦄ ⊢ ⬈[h, T] K1 & K1 ≛[h, o, T] K2. -#h #o #G #T #L2 #K2 #HLK2 #L1 #HL12 -elim (rpx_rdeq_conf … o … HLK2 L1) +lemma rdeq_rpx_trans: ∀h,G,T,L2,K2. ⦃G, L2⦄ ⊢ ⬈[h, T] K2 → + ∀L1. L1 ≛[T] L2 → + ∃∃K1. ⦃G, L1⦄ ⊢ ⬈[h, T] K1 & K1 ≛[T] K2. +#h #G #T #L2 #K2 #HLK2 #L1 #HL12 +elim (rpx_rdeq_conf … HLK2 L1) /3 width=3 by rdeq_sym, ex2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2.ldw.xml b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2.ldw.xml index 66fb5e30c..e1457f0b7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2.ldw.xml +++ b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2.ldw.xml @@ -27,6 +27,11 @@ Stage "B" + + Preservation of validity for rt-computation + does not need the sort degree parameter + (i.e. no induction on the degree). + Extended (λδ-2) and restricted (λδ-1) type rules justified. diff --git a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl index bac5d2dd2..0d63a09a5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl @@ -65,16 +65,16 @@ table { } ] [ { "unbound context-sensitive parallel rst-computation" * } { - [ [ "strongly normalizing for closures" ] "fsb" + "( ≥[?,?] 𝐒⦃?,?,?⦄ )" "fsb_fdeq" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] - [ [ "proper for closures" ] "fpbg" + "( ⦃?,?,?⦄ >[?,?] ⦃?,?,?⦄ )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] - [ [ "for closures" ] "fpbs" + "( ⦃?,?,?⦄ ≥[?,?] ⦃?,?,?⦄ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] + [ [ "strongly normalizing for closures" ] "fsb" + "( ≥[?] 𝐒⦃?,?,?⦄ )" "fsb_fdeq" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] + [ [ "proper for closures" ] "fpbg" + "( ⦃?,?,?⦄ >[?] ⦃?,?,?⦄ )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] + [ [ "for closures" ] "fpbs" + "( ⦃?,?,?⦄ ≥[?] ⦃?,?,?⦄ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] } ] [ { "unbound context-sensitive parallel rt-computation" * } { - [ [ "refinement for lenvs on selected entries" ] "lsubsx" + "( ? ⊢ ? ⊆ⓧ[?,?,?] ? )" "lsubsx_lfsx" + "lsubsx_lsubsx" * ] - [ [ "strongly normalizing for lenvs on referred entries" ] "rdsx" + "( ? ⊢ ⬈*[?,?,?] 𝐒⦃?⦄ )" "rdsx_length" + "rdsx_drops" + "rdsx_fqup" + "rdsx_cpxs" + "rdsx_csx" + "rdsx_rdsx" * ] - [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ⦃?,?⦄ ⊢ ⬈*[?,?] 𝐒⦃?⦄ )" "csx_cnx_vector" + "csx_csx_vector" * ] - [ [ "strongly normalizing for terms" ] "csx" + "( ⦃?,?⦄ ⊢ ⬈*[?,?] 𝐒⦃?⦄ )" "csx_simple" + "csx_simple_theq" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_rdeq" + "csx_fdeq" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] + [ [ "refinement for lenvs on selected entries" ] "lsubsx" + "( ? ⊢ ? ⊆ⓧ[?,?] ? )" "lsubsx_lfsx" + "lsubsx_lsubsx" * ] + [ [ "strongly normalizing for lenvs on referred entries" ] "rdsx" + "( ? ⊢ ⬈*[?,?] 𝐒⦃?⦄ )" "rdsx_length" + "rdsx_drops" + "rdsx_fqup" + "rdsx_cpxs" + "rdsx_csx" + "rdsx_rdsx" * ] + [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_cnx_vector" + "csx_csx_vector" * ] + [ [ "strongly normalizing for terms" ] "csx" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_simple" + "csx_simple_theq" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_rdeq" + "csx_fdeq" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] [ [ "for lenvs on all entries" ] "lpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_rdeq" + "lpxs_fdeq" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] [ [ "for binders" ] "cpxs_ext" + "( ⦃?,?⦄ ⊢ ? ⬈*[?] ? )" * ] [ [ "for terms" ] "cpxs" + "( ⦃?,?⦄ ⊢ ? ⬈*[?] ? )" "cpxs_tdeq" + "cpxs_theq" + "cpxs_theq_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_rdeq" + "cpxs_fdeq" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] @@ -85,8 +85,8 @@ table { class "cyan" [ { "rt-transition" * } { [ { "unbound parallel rst-transition" * } { - [ [ "for closures" ] "fpbq" + "( ⦃?,?,?⦄ ≽[?,?] ⦃?,?,?⦄ )" "fpbq_aaa" + "fpbq_fpb" * ] - [ [ "proper for closures" ] "fpb" + "( ⦃?,?,?⦄ ≻[?,?] ⦃?,?,?⦄ )" "fpb_rdeq" + "fpb_fdeq" * ] + [ [ "for closures" ] "fpbq" + "( ⦃?,?,?⦄ ≽[?] ⦃?,?,?⦄ )" "fpbq_aaa" + "fpbq_fpb" * ] + [ [ "proper for closures" ] "fpb" + "( ⦃?,?,?⦄ ≻[?] ⦃?,?,?⦄ )" "fpb_rdeq" + "fpb_fdeq" * ] } ] [ { "context-sensitive parallel r-transition" * } { @@ -101,7 +101,7 @@ table { ] [ { "unbound context-sensitive parallel rt-transition" * } { [ [ "whd normal form for terms" ] "cwhx" + "( ⦃?,?⦄ ⊢ ⬈[?] 𝐖𝐇⦃?⦄ )" "cwhx_drops" + "cwhx_rdeq" * ] - [ [ "normal form for terms" ] "cnx" + "( ⦃?,?⦄ ⊢ ⬈[?,?] 𝐍⦃?⦄ )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] + [ [ "normal form for terms" ] "cnx" + "( ⦃?,?⦄ ⊢ ⬈[?] 𝐍⦃?⦄ )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] [ [ "for lenvs on referred entries" ] "rpx" + "( ⦃?,?⦄ ⊢ ⬈[?,?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_rdeq" + "rpx_lpx" + "rpx_rpx" * ] [ [ "for lenvs on all entries" ] "lpx" + "( ⦃?,?⦄ ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_rdeq" + "lpx_aaa" * ] [ [ "for binders" ] "cpx_ext" + "( ⦃?,?⦄ ⊢ ? ⬈[?] ? )" * ] diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_2.ma new file mode 100644 index 000000000..04a438adc --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_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 @{ 'StarEq $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_3.ma new file mode 100644 index 000000000..fbb650ac6 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_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 @{ 'StarEq $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_4.ma deleted file mode 100644 index 0f67a8382..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_4.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( T1 ≛ [ break term 46 h, break term 46 o ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'StarEq $h $o $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_5.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_5.ma deleted file mode 100644 index 553205960..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareq_5.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( L ⊢ break term 46 T1 ≛ [ break term 46 h, break term 46 o ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'StarEq $h $o $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_3.ma new file mode 100644 index 000000000..5d7cb99f1 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_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 @{ 'StarEqSn $T $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_5.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_5.ma deleted file mode 100644 index af611f765..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_5.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( L1 ≛ [ break term 46 h, break term 46 o, break term 46 T ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'StarEqSn $h $o $T $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_6.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_6.ma new file mode 100644 index 000000000..71174825e --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_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 G1, break term 46 L1, break term 46 T1 ⦄ ≛ ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" + non associative with precedence 45 + for @{ 'StarEqSn $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_8.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_8.ma deleted file mode 100644 index 6e4ed5d11..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_8.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ≛ [ break term 46 h, break term 46 o ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" - non associative with precedence 45 - for @{ 'StarEqSn $h $o $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/topiso_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/topiso_2.ma new file mode 100644 index 000000000..35dd47569 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/topiso_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 @{ 'TopIso $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/topiso_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/topiso_4.ma deleted file mode 100644 index e8c080f6a..000000000 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/topiso_4.ma +++ /dev/null @@ -1,19 +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 λδ ****************************************) - -notation "hvbox( T1 ⩳ [ break term 46 h, break term 46 o ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'TopIso $h $o $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_tdeq.ma index 12affa3a1..5aee3ad12 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_tdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_tdeq.ma @@ -17,12 +17,12 @@ include "static_2/relocation/lifts_lifts.ma". (* GENERIC RELOCATION FOR TERMS *********************************************) -(* Properties with degree-based equivalence for terms ***********************) +(* Properties with sort-irrelevant equivalence for terms ********************) -lemma tdeq_lifts_sn: ∀h,o. liftable2_sn (tdeq h o). -#h #o #T1 #T2 #H elim H -T1 -T2 [||| * ] -[ #s1 #s2 #d #Hs1 #Hs2 #f #X #H >(lifts_inv_sort1 … H) -H - /3 width=5 by lifts_sort, tdeq_sort, ex2_intro/ +lemma tdeq_lifts_sn: liftable2_sn tdeq. +#T1 #T2 #H elim H -T1 -T2 [||| * ] +[ #s1 #s2 #f #X #H >(lifts_inv_sort1 … H) -H + /3 width=3 by lifts_sort, tdeq_sort, ex2_intro/ | #i #f #X #H elim (lifts_inv_lref1 … H) -H /3 width=3 by lifts_lref, tdeq_lref, ex2_intro/ | #l #f #X #H >(lifts_inv_gref1 … H) -H @@ -38,15 +38,15 @@ lemma tdeq_lifts_sn: ∀h,o. liftable2_sn (tdeq h o). ] qed-. -lemma tdeq_lifts_bi: ∀h,o. liftable2_bi (tdeq h o). +lemma tdeq_lifts_bi: liftable2_bi tdeq. /3 width=6 by tdeq_lifts_sn, liftable2_sn_bi/ qed-. -(* Inversion lemmas with degree-based equivalence for terms *****************) +(* Inversion lemmas with sort-irrelevant equivalence for terms **************) -lemma tdeq_inv_lifts_sn: ∀h,o. deliftable2_sn (tdeq h o). -#h #o #U1 #U2 #H elim H -U1 -U2 [||| * ] -[ #s1 #s2 #d #Hs1 #Hs2 #f #X #H >(lifts_inv_sort2 … H) -H - /3 width=5 by lifts_sort, tdeq_sort, ex2_intro/ +lemma tdeq_inv_lifts_sn: deliftable2_sn tdeq. +#U1 #U2 #H elim H -U1 -U2 [||| * ] +[ #s1 #s2 #f #X #H >(lifts_inv_sort2 … H) -H + /3 width=3 by lifts_sort, tdeq_sort, ex2_intro/ | #i #f #X #H elim (lifts_inv_lref2 … H) -H /3 width=3 by lifts_lref, tdeq_lref, ex2_intro/ | #l #f #X #H >(lifts_inv_gref2 … H) -H @@ -62,15 +62,15 @@ lemma tdeq_inv_lifts_sn: ∀h,o. deliftable2_sn (tdeq h o). ] qed-. -lemma tdeq_inv_lifts_dx (h) (o): deliftable2_dx (tdeq h o). +lemma tdeq_inv_lifts_dx: deliftable2_dx tdeq. /3 width=3 by tdeq_inv_lifts_sn, deliftable2_sn_dx, tdeq_sym/ qed-. -lemma tdeq_inv_lifts_bi: ∀h,o. deliftable2_bi (tdeq h o). +lemma tdeq_inv_lifts_bi: deliftable2_bi tdeq. /3 width=6 by tdeq_inv_lifts_sn, deliftable2_sn_bi/ qed-. -lemma tdeq_lifts_inv_pair_sn (h) (o) (I) (f:rtmap): - ∀X,T. ⬆*[f]X ≘ T → ∀V. ②{I}V.T ≛[h,o] X → ⊥. -#h #o #I #f #X #T #H elim H -f -X -T +lemma tdeq_lifts_inv_pair_sn (I) (f:rtmap): + ∀X,T. ⬆*[f]X ≘ T → ∀V. ②{I}V.T ≛ X → ⊥. +#I #f #X #T #H elim H -f -X -T [ #f #s #V #H elim (tdeq_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct | #f #i #j #_ #V #H diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma index 7deebbc61..d08dc97d2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_tdeq.ma @@ -17,11 +17,11 @@ include "static_2/s_transition/fqu_length.ma". (* SUPCLOSURE ***************************************************************) -(* Inversion lemmas with context-free degree-based equivalence for terms ****) +(* Inversion lemmas with context-free sort-irrelevant equivalence for terms *) -fact fqu_inv_tdeq_aux: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → - G1 = G2 → |L1| = |L2| → T1 ≛[h, o] T2 → ⊥. -#h #o #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 +fact fqu_inv_tdeq_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → + G1 = G2 → |L1| = |L2| → T1 ≛ T2 → ⊥. +#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [1: #I #G #L #V #_ #H elim (succ_inv_refl_sn … H) |6: #I #G #L #T #U #_ #_ #H elim (succ_inv_refl_sn … H) ] @@ -29,8 +29,8 @@ fact fqu_inv_tdeq_aux: ∀h,o,b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2 qed-. (* Basic_2A1: uses: fqu_inv_eq *) -lemma fqu_inv_tdeq: ∀h,o,b,G,L1,L2,T1,T2. ⦃G, L1, T1⦄ ⊐[b] ⦃G, L2, T2⦄ → - |L1| = |L2| → T1 ≛[h, o] T2 → ⊥. -#h #o #b #G #L1 #L2 #T1 #T2 #H +lemma fqu_inv_tdeq: ∀b,G,L1,L2,T1,T2. ⦃G, L1, T1⦄ ⊐[b] ⦃G, L2, T2⦄ → + |L1| = |L2| → T1 ≛ T2 → ⊥. +#b #G #L1 #L2 #T1 #T2 #H @(fqu_inv_tdeq_aux … H) // (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_fdeq.ma index 4572fda32..777183562 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_fdeq.ma @@ -17,9 +17,9 @@ include "static_2/static/aaa_rdeq.ma". (* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) -(* Properties with degree-based equivalence on referred entries *************) +(* Properties with sort-irrelevant equivalence on referred entries **********) -lemma aaa_fdeq_conf: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → +lemma aaa_fdeq_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ → ∀A. ⦃G1, L1⦄ ⊢ T1 ⁝ A → ⦃G2, L2⦄ ⊢ T2 ⁝ A. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 -/2 width=7 by aaa_tdeq_conf_rdeq/ qed-. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +/2 width=5 by aaa_tdeq_conf_rdeq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_rdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_rdeq.ma index 23760c8bd..265ed7f5c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_rdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_rdeq.ma @@ -17,11 +17,11 @@ include "static_2/static/aaa.ma". (* ATONIC ARITY ASSIGNMENT ON TERMS *****************************************) -(* Properties with degree-based equivalence on referred entries *************) +(* Properties with sort-irrelevant equivalence on referred entries **********) -lemma aaa_tdeq_conf_rdeq: ∀h,o,G,L1,T1,A. ⦃G, L1⦄ ⊢ T1 ⁝ A → ∀T2. T1 ≛[h, o] T2 → - ∀L2. L1 ≛[h, o, T1] L2 → ⦃G, L2⦄ ⊢ T2 ⁝ A. -#h #o #G #L1 #T1 #A #H elim H -G -L1 -T1 -A +lemma aaa_tdeq_conf_rdeq: ∀G,L1,T1,A. ⦃G, L1⦄ ⊢ T1 ⁝ A → ∀T2. T1 ≛ T2 → + ∀L2. L1 ≛[T1] L2 → ⦃G, L2⦄ ⊢ T2 ⁝ A. +#G #L1 #T1 #A #H elim H -G -L1 -T1 -A [ #G #L1 #s1 #X #H1 elim (tdeq_inv_sort1 … H1) -H1 // | #I #G #L1 #V1 #B #_ #IH #X #H1 >(tdeq_inv_lref1 … H1) -H1 #Y #H2 elim (rdeq_inv_zero_pair_sn … H2) -H2 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq.ma index 25427895c..be82b9302 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/fdeq.ma @@ -12,37 +12,37 @@ (* *) (**************************************************************************) -include "static_2/notation/relations/stareqsn_8.ma". +include "static_2/notation/relations/stareqsn_6.ma". include "static_2/syntax/genv.ma". include "static_2/static/rdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES ****************) +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) -inductive fdeq (h) (o) (G) (L1) (T1): relation3 genv lenv term ≝ -| fdeq_intro_sn: ∀L2,T2. L1 ≛[h, o, T1] L2 → T1 ≛[h, o] T2 → - fdeq h o G L1 T1 G L2 T2 +inductive fdeq (G) (L1) (T1): relation3 genv lenv term ≝ +| fdeq_intro_sn: ∀L2,T2. L1 ≛[T1] L2 → T1 ≛ T2 → + fdeq G L1 T1 G L2 T2 . interpretation - "degree-based equivalence on referred entries (closure)" - 'StarEqSn h o G1 L1 T1 G2 L2 T2 = (fdeq h o G1 L1 T1 G2 L2 T2). + "sort-irrelevant equivalence on referred entries (closure)" + 'StarEqSn G1 L1 T1 G2 L2 T2 = (fdeq G1 L1 T1 G2 L2 T2). (* Basic_properties *********************************************************) -lemma fdeq_intro_dx (h) (o) (G): ∀L1,L2,T2. L1 ≛[h, o, T2] L2 → - ∀T1. T1 ≛[h, o] T2 → ⦃G, L1, T1⦄ ≛[h, o] ⦃G, L2, T2⦄. +lemma fdeq_intro_dx (G): ∀L1,L2,T2. L1 ≛[T2] L2 → + ∀T1. T1 ≛ T2 → ⦃G, L1, T1⦄ ≛ ⦃G, L2, T2⦄. /3 width=3 by fdeq_intro_sn, tdeq_rdeq_div/ qed. (* Basic inversion lemmas ***************************************************) -lemma fdeq_inv_gen_sn: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → - ∧∧ G1 = G2 & L1 ≛[h, o, T1] L2 & T1 ≛[h, o] T2. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/ +lemma fdeq_inv_gen_sn: ∀G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ → + ∧∧ G1 = G2 & L1 ≛[T1] L2 & T1 ≛ T2. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/ qed-. -lemma fdeq_inv_gen_dx: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → - ∧∧ G1 = G2 & L1 ≛[h, o, T2] L2 & T1 ≛[h, o] T2. -#h #o #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +lemma fdeq_inv_gen_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ → + ∧∧ G1 = G2 & L1 ≛[T2] L2 & T1 ≛ T2. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /3 width=3 by tdeq_rdeq_conf, and3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fdeq.ma index 729185985..d337f7054 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fdeq.ma @@ -15,37 +15,37 @@ include "static_2/static/rdeq_rdeq.ma". include "static_2/static/fdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES ****************) +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) (* Advanced properties ******************************************************) -lemma fdeq_sym: ∀h,o. tri_symmetric … (fdeq h o). -#h #o #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -L1 -T1 +lemma fdeq_sym: tri_symmetric … fdeq. +#G1 #G2 #L1 #L2 #T1 #T2 * -G1 -L1 -T1 /3 width=1 by fdeq_intro_dx, rdeq_sym, tdeq_sym/ qed-. (* Main properties **********************************************************) -theorem fdeq_trans: ∀h,o. tri_transitive … (fdeq h o). -#h #o #G1 #G #L1 #L #T1 #T * -G -L -T +theorem fdeq_trans: tri_transitive … fdeq. +#G1 #G #L1 #L #T1 #T * -G -L -T #L #T #HL1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 /4 width=5 by fdeq_intro_sn, rdeq_trans, tdeq_rdeq_div, tdeq_trans/ qed-. -theorem fdeq_canc_sn: ∀h,o,G,G1,G2,L,L1,L2,T,T1,T2. - ⦃G, L, T⦄ ≛[h, o] ⦃G1, L1, T1⦄→ ⦃G, L, T⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄. +theorem fdeq_canc_sn: ∀G,G1,L,L1,T,T1. ⦃G, L, T⦄ ≛ ⦃G1, L1, T1⦄→ + ∀G2,L2,T2. ⦃G, L, T⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄. /3 width=5 by fdeq_trans, fdeq_sym/ qed-. -theorem fdeq_canc_dx: ∀h,o,G1,G2,G,L1,L2,L,T1,T2,T. - ⦃G1, L1, T1⦄ ≛[h, o] ⦃G, L, T⦄ → ⦃G2, L2, T2⦄ ≛[h, o] ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄. +theorem fdeq_canc_dx: ∀G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≛ ⦃G, L, T⦄ → + ∀G2,L2,T2. ⦃G2, L2, T2⦄ ≛ ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄. /3 width=5 by fdeq_trans, fdeq_sym/ qed-. (* Main inversion lemmas with degree-based equivalence on terms *************) -theorem fdeq_tdneq_repl_dx: ∀h,o,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → - ∀U1,U2. ⦃G1, L1, U1⦄ ≛[h, o] ⦃G2, L2, U2⦄ → - (T2 ≛[h, o] U2 → ⊥) → (T1 ≛[h, o] U1 → ⊥). -#h #o #G1 #G2 #L1 #L2 #T1 #T2 #HT #U1 #U2 #HU #HnTU2 #HTU1 +theorem fdeq_tdneq_repl_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄ → + ∀U1,U2. ⦃G1, L1, U1⦄ ≛ ⦃G2, L2, U2⦄ → + (T2 ≛ U2 → ⊥) → (T1 ≛ U1 → ⊥). +#G1 #G2 #L1 #L2 #T1 #T2 #HT #U1 #U2 #HU #HnTU2 #HTU1 elim (fdeq_inv_gen_sn … HT) -HT #_ #_ #HT elim (fdeq_inv_gen_sn … HU) -HU #_ #_ #HU /3 width=5 by tdeq_repl/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqup.ma index 6a4f49e57..19fe848f7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqup.ma @@ -15,15 +15,15 @@ include "static_2/static/rdeq_fqup.ma". include "static_2/static/fdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES ****************) +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) -(* Properties with degree-based equivalence for terms ***********************) +(* Properties with sort-irrelevant equivalence for terms ********************) -lemma tdeq_fdeq: ∀h,o,T1,T2. T1 ≛[h, o] T2 → - ∀G,L. ⦃G, L, T1⦄ ≛[h, o] ⦃G, L, T2⦄. +lemma tdeq_fdeq: ∀T1,T2. T1 ≛ T2 → + ∀G,L. ⦃G, L, T1⦄ ≛ ⦃G, L, T2⦄. /2 width=1 by fdeq_intro_sn/ qed. (* Advanced properties ******************************************************) -lemma fdeq_refl: ∀h,o. tri_reflexive … (fdeq h o). +lemma fdeq_refl: tri_reflexive … fdeq. /2 width=1 by fdeq_intro_sn/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma index 4274cd40f..9662b6b32 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_fqus.ma @@ -15,14 +15,14 @@ include "static_2/static/rdeq_fqus.ma". include "static_2/static/fdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES ****************) +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) (* Properties with star-iterated structural successor for closures **********) -lemma fdeq_fqus_trans: ∀h,o,b,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≛[h, o] ⦃G, L, T⦄ → +lemma fdeq_fqus_trans: ∀b,G1,G,L1,L,T1,T. ⦃G1, L1, T1⦄ ≛ ⦃G, L, T⦄ → ∀G2,L2,T2. ⦃G, L, T⦄ ⊐*[b] ⦃G2, L2, T2⦄ → - ∃∃G,L0,T0. ⦃G1, L1, T1⦄ ⊐*[b] ⦃G, L0, T0⦄ & ⦃G, L0, T0⦄ ≛[h, o] ⦃G2, L2, T2⦄. -#h #o #b #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2 + ∃∃G,L0,T0. ⦃G1, L1, T1⦄ ⊐*[b] ⦃G, L0, T0⦄ & ⦃G, L0, T0⦄ ≛ ⦃G2, L2, T2⦄. +#b #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2 elim(fdeq_inv_gen_dx … H1) -H1 #HG #HL1 #HT1 destruct elim (rdeq_fqus_trans … H2 … HL1) -L #L #T0 #H2 #HT02 #HL2 elim (tdeq_fqus_trans … H2 … HT1) -T #L0 #T #H2 #HT0 #HL0 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_req.ma b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_req.ma index 0c0d9c3bc..c430e7aae 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/fdeq_req.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/fdeq_req.ma @@ -15,13 +15,13 @@ include "static_2/static/rdeq_req.ma". include "static_2/static/fdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES ****************) +(* SORT-IRRELEVANT EQUIVALENCE FOR CLOSURES ON REFERRED ENTRIES *************) (* Properties with syntactic equivalence on referred entries ****************) -lemma req_rdeq_trans: ∀h,o,L1,L,T1. L1 ≡[T1] L → - ∀G1,G2,L2,T2. ⦃G1, L, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄. -#h #o #L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H +lemma req_rdeq_trans: ∀L1,L,T1. L1 ≡[T1] L → + ∀G1,G2,L2,T2. ⦃G1, L, T1⦄ ≛ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≛ ⦃G2, L2, T2⦄. +#L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H elim (fdeq_inv_gen_sn … H) -H #H #HL2 #T12 destruct /3 width=3 by fdeq_intro_sn, req_rdeq_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma index f2de0dfe6..6cb56dcaf 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rdeq.ma @@ -12,30 +12,30 @@ (* *) (**************************************************************************) -include "static_2/notation/relations/stareqsn_5.ma". +include "static_2/notation/relations/stareqsn_3.ma". include "static_2/syntax/tdeq_ext.ma". include "static_2/static/rex.ma". -(* DEGREE-BASED EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ******) +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) -definition rdeq (h) (o): relation3 term lenv lenv ≝ - rex (cdeq h o). +definition rdeq: relation3 term lenv lenv ≝ + rex cdeq. interpretation - "degree-based equivalence on referred entries (local environment)" - 'StarEqSn h o T L1 L2 = (rdeq h o T L1 L2). + "sort-irrelevant equivalence on referred entries (local environment)" + 'StarEqSn T L1 L2 = (rdeq T L1 L2). interpretation - "degree-based ranged equivalence (local environment)" - 'StarEqSn h o f L1 L2 = (sex (cdeq_ext h o) cfull f L1 L2). + "sort-irrelevant ranged equivalence (local environment)" + 'StarEqSn f L1 L2 = (sex cdeq_ext cfull f L1 L2). (* Basic properties ***********************************************************) -lemma frees_tdeq_conf_rdeq (h) (o): ∀f,L1,T1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f → ∀T2. T1 ≛[h, o] T2 → - ∀L2. L1 ≛[h, o, f] L2 → L2 ⊢ 𝐅*⦃T2⦄ ≘ f. -#h #o #f #L1 #T1 #H elim H -f -L1 -T1 +lemma frees_tdeq_conf_rdeq: ∀f,L1,T1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f → ∀T2. T1 ≛ T2 → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅*⦃T2⦄ ≘ f. +#f #L1 #T1 #H elim H -f -L1 -T1 [ #f #L1 #s1 #Hf #X #H1 #L2 #_ - elim (tdeq_inv_sort1 … H1) -H1 #s2 #d #_ #_ #H destruct + elim (tdeq_inv_sort1 … H1) -H1 #s2 #H destruct /2 width=3 by frees_sort/ | #f #i #Hf #X #H1 >(tdeq_inv_lref1 … H1) -X #Y #H2 @@ -65,130 +65,130 @@ lemma frees_tdeq_conf_rdeq (h) (o): ∀f,L1,T1. L1 ⊢ 𝐅*⦃T1⦄ ≘ f → ] qed-. -lemma frees_tdeq_conf (h) (o): ∀f,L,T1. L ⊢ 𝐅*⦃T1⦄ ≘ f → - ∀T2. T1 ≛[h, o] T2 → L ⊢ 𝐅*⦃T2⦄ ≘ f. +lemma frees_tdeq_conf: ∀f,L,T1. L ⊢ 𝐅*⦃T1⦄ ≘ f → + ∀T2. T1 ≛ T2 → L ⊢ 𝐅*⦃T2⦄ ≘ f. /4 width=7 by frees_tdeq_conf_rdeq, sex_refl, ext2_refl/ qed-. -lemma frees_rdeq_conf (h) (o): ∀f,L1,T. L1 ⊢ 𝐅*⦃T⦄ ≘ f → - ∀L2. L1 ≛[h, o, f] L2 → L2 ⊢ 𝐅*⦃T⦄ ≘ f. +lemma frees_rdeq_conf: ∀f,L1,T. L1 ⊢ 𝐅*⦃T⦄ ≘ f → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅*⦃T⦄ ≘ f. /2 width=7 by frees_tdeq_conf_rdeq, tdeq_refl/ qed-. -lemma tdeq_rex_conf (R) (h) (o): s_r_confluent1 … (cdeq h o) (rex R). -#R #h #o #L1 #T1 #T2 #HT12 #L2 * +lemma tdeq_rex_conf (R): s_r_confluent1 … cdeq (rex R). +#R #L1 #T1 #T2 #HT12 #L2 * /3 width=5 by frees_tdeq_conf, ex2_intro/ qed-. -lemma tdeq_rex_div (R) (h) (o): ∀T1,T2. T1 ≛[h, o] T2 → - ∀L1,L2. L1 ⪤[R, T2] L2 → L1 ⪤[R, T1] L2. +lemma tdeq_rex_div (R): ∀T1,T2. T1 ≛ T2 → + ∀L1,L2. L1 ⪤[R, T2] L2 → L1 ⪤[R, T1] L2. /3 width=5 by tdeq_rex_conf, tdeq_sym/ qed-. -lemma tdeq_rdeq_conf (h) (o): s_r_confluent1 … (cdeq h o) (rdeq h o). +lemma tdeq_rdeq_conf: s_r_confluent1 … cdeq rdeq. /2 width=5 by tdeq_rex_conf/ qed-. -lemma tdeq_rdeq_div (h) (o): ∀T1,T2. T1 ≛[h, o] T2 → - ∀L1,L2. L1 ≛[h, o, T2] L2 → L1 ≛[h, o, T1] L2. +lemma tdeq_rdeq_div: ∀T1,T2. T1 ≛ T2 → + ∀L1,L2. L1 ≛[T2] L2 → L1 ≛[T1] L2. /2 width=5 by tdeq_rex_div/ qed-. -lemma rdeq_atom (h) (o): ∀I. ⋆ ≛[h, o, ⓪{I}] ⋆. +lemma rdeq_atom: ∀I. ⋆ ≛[⓪{I}] ⋆. /2 width=1 by rex_atom/ qed. -lemma rdeq_sort (h) (o): ∀I1,I2,L1,L2,s. - L1 ≛[h, o, ⋆s] L2 → L1.ⓘ{I1} ≛[h, o, ⋆s] L2.ⓘ{I2}. +lemma rdeq_sort: ∀I1,I2,L1,L2,s. + L1 ≛[⋆s] L2 → L1.ⓘ{I1} ≛[⋆s] L2.ⓘ{I2}. /2 width=1 by rex_sort/ qed. -lemma rdeq_pair (h) (o): ∀I,L1,L2,V1,V2. L1 ≛[h, o, V1] L2 → V1 ≛[h, o] V2 → - L1.ⓑ{I}V1 ≛[h, o, #0] L2.ⓑ{I}V2. +lemma rdeq_pair: ∀I,L1,L2,V1,V2. + L1 ≛[V1] L2 → V1 ≛ V2 → L1.ⓑ{I}V1 ≛[#0] L2.ⓑ{I}V2. /2 width=1 by rex_pair/ qed. (* -lemma rdeq_unit (h) (o): ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤[cdeq_ext h o, cfull, f] L2 → - L1.ⓤ{I} ≛[h, o, #0] L2.ⓤ{I}. +lemma rdeq_unit: ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤[cdeq_ext, cfull, f] L2 → + L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. /2 width=3 by rex_unit/ qed. *) -lemma rdeq_lref (h) (o): ∀I1,I2,L1,L2,i. - L1 ≛[h, o, #i] L2 → L1.ⓘ{I1} ≛[h, o, #↑i] L2.ⓘ{I2}. +lemma rdeq_lref: ∀I1,I2,L1,L2,i. + L1 ≛[#i] L2 → L1.ⓘ{I1} ≛[#↑i] L2.ⓘ{I2}. /2 width=1 by rex_lref/ qed. -lemma rdeq_gref (h) (o): ∀I1,I2,L1,L2,l. - L1 ≛[h, o, §l] L2 → L1.ⓘ{I1} ≛[h, o, §l] L2.ⓘ{I2}. +lemma rdeq_gref: ∀I1,I2,L1,L2,l. + L1 ≛[§l] L2 → L1.ⓘ{I1} ≛[§l] L2.ⓘ{I2}. /2 width=1 by rex_gref/ qed. -lemma rdeq_bind_repl_dx (h) (o): ∀I,I1,L1,L2.∀T:term. - L1.ⓘ{I} ≛[h, o, T] L2.ⓘ{I1} → - ∀I2. I ≛[h, o] I2 → - L1.ⓘ{I} ≛[h, o, T] L2.ⓘ{I2}. +lemma rdeq_bind_repl_dx: ∀I,I1,L1,L2.∀T:term. + L1.ⓘ{I} ≛[T] L2.ⓘ{I1} → + ∀I2. I ≛ I2 → + L1.ⓘ{I} ≛[T] L2.ⓘ{I2}. /2 width=2 by rex_bind_repl_dx/ qed-. (* Basic inversion lemmas ***************************************************) -lemma rdeq_inv_atom_sn (h) (o): ∀Y2. ∀T:term. ⋆ ≛[h, o, T] Y2 → Y2 = ⋆. +lemma rdeq_inv_atom_sn: ∀Y2. ∀T:term. ⋆ ≛[T] Y2 → Y2 = ⋆. /2 width=3 by rex_inv_atom_sn/ qed-. -lemma rdeq_inv_atom_dx (h) (o): ∀Y1. ∀T:term. Y1 ≛[h, o, T] ⋆ → Y1 = ⋆. +lemma rdeq_inv_atom_dx: ∀Y1. ∀T:term. Y1 ≛[T] ⋆ → Y1 = ⋆. /2 width=3 by rex_inv_atom_dx/ qed-. (* -lemma rdeq_inv_zero (h) (o): ∀Y1,Y2. Y1 ≛[h, o, #0] Y2 → - ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I,L1,L2,V1,V2. L1 ≛[h, o, V1] L2 & V1 ≛[h, o] V2 & - Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 - | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ⪤[cdeq_ext h o, cfull, f] L2 & - Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. -#h #o #Y1 #Y2 #H elim (rex_inv_zero … H) -H * +lemma rdeq_inv_zero: ∀Y1,Y2. Y1 ≛[#0] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I,L1,L2,V1,V2. L1 ≛[V1] L2 & V1 ≛ V2 & + Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 + | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ⪤[cdeq_ext h o, cfull, f] L2 & + Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. +#Y1 #Y2 #H elim (rex_inv_zero … H) -H * /3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/ qed-. *) -lemma rdeq_inv_lref (h) (o): ∀Y1,Y2,i. Y1 ≛[h, o, #↑i] Y2 → - ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. L1 ≛[h, o, #i] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. +lemma rdeq_inv_lref: ∀Y1,Y2,i. Y1 ≛[#↑i] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I1,I2,L1,L2. L1 ≛[#i] L2 & + Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. /2 width=1 by rex_inv_lref/ qed-. (* Basic_2A1: uses: lleq_inv_bind lleq_inv_bind_O *) -lemma rdeq_inv_bind (h) (o): ∀p,I,L1,L2,V,T. L1 ≛[h, o, ⓑ{p,I}V.T] L2 → - ∧∧ L1 ≛[h, o, V] L2 & L1.ⓑ{I}V ≛[h, o, T] L2.ⓑ{I}V. +lemma rdeq_inv_bind: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → + ∧∧ L1 ≛[V] L2 & L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. /2 width=2 by rex_inv_bind/ qed-. (* Basic_2A1: uses: lleq_inv_flat *) -lemma rdeq_inv_flat (h) (o): ∀I,L1,L2,V,T. L1 ≛[h, o, ⓕ{I}V.T] L2 → - ∧∧ L1 ≛[h, o, V] L2 & L1 ≛[h, o, T] L2. +lemma rdeq_inv_flat: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → + ∧∧ L1 ≛[V] L2 & L1 ≛[T] L2. /2 width=2 by rex_inv_flat/ qed-. (* Advanced inversion lemmas ************************************************) -lemma rdeq_inv_zero_pair_sn (h) (o): ∀I,Y2,L1,V1. L1.ⓑ{I}V1 ≛[h, o, #0] Y2 → - ∃∃L2,V2. L1 ≛[h, o, V1] L2 & V1 ≛[h, o] V2 & Y2 = L2.ⓑ{I}V2. +lemma rdeq_inv_zero_pair_sn: ∀I,Y2,L1,V1. L1.ⓑ{I}V1 ≛[#0] Y2 → + ∃∃L2,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y2 = L2.ⓑ{I}V2. /2 width=1 by rex_inv_zero_pair_sn/ qed-. -lemma rdeq_inv_zero_pair_dx (h) (o): ∀I,Y1,L2,V2. Y1 ≛[h, o, #0] L2.ⓑ{I}V2 → - ∃∃L1,V1. L1 ≛[h, o, V1] L2 & V1 ≛[h, o] V2 & Y1 = L1.ⓑ{I}V1. +lemma rdeq_inv_zero_pair_dx: ∀I,Y1,L2,V2. Y1 ≛[#0] L2.ⓑ{I}V2 → + ∃∃L1,V1. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1. /2 width=1 by rex_inv_zero_pair_dx/ qed-. -lemma rdeq_inv_lref_bind_sn (h) (o): ∀I1,Y2,L1,i. L1.ⓘ{I1} ≛[h, o, #↑i] Y2 → - ∃∃I2,L2. L1 ≛[h, o, #i] L2 & Y2 = L2.ⓘ{I2}. +lemma rdeq_inv_lref_bind_sn: ∀I1,Y2,L1,i. L1.ⓘ{I1} ≛[#↑i] Y2 → + ∃∃I2,L2. L1 ≛[#i] L2 & Y2 = L2.ⓘ{I2}. /2 width=2 by rex_inv_lref_bind_sn/ qed-. -lemma rdeq_inv_lref_bind_dx (h) (o): ∀I2,Y1,L2,i. Y1 ≛[h, o, #↑i] L2.ⓘ{I2} → - ∃∃I1,L1. L1 ≛[h, o, #i] L2 & Y1 = L1.ⓘ{I1}. +lemma rdeq_inv_lref_bind_dx: ∀I2,Y1,L2,i. Y1 ≛[#↑i] L2.ⓘ{I2} → + ∃∃I1,L1. L1 ≛[#i] L2 & Y1 = L1.ⓘ{I1}. /2 width=2 by rex_inv_lref_bind_dx/ qed-. (* Basic forward lemmas *****************************************************) -lemma rdeq_fwd_zero_pair (h) (o): ∀I,K1,K2,V1,V2. - K1.ⓑ{I}V1 ≛[h, o, #0] K2.ⓑ{I}V2 → K1 ≛[h, o, V1] K2. +lemma rdeq_fwd_zero_pair: ∀I,K1,K2,V1,V2. + K1.ⓑ{I}V1 ≛[#0] K2.ⓑ{I}V2 → K1 ≛[V1] K2. /2 width=3 by rex_fwd_zero_pair/ qed-. (* Basic_2A1: uses: lleq_fwd_bind_sn lleq_fwd_flat_sn *) -lemma rdeq_fwd_pair_sn (h) (o): ∀I,L1,L2,V,T. L1 ≛[h, o, ②{I}V.T] L2 → L1 ≛[h, o, V] L2. +lemma rdeq_fwd_pair_sn: ∀I,L1,L2,V,T. L1 ≛[②{I}V.T] L2 → L1 ≛[V] L2. /2 width=3 by rex_fwd_pair_sn/ qed-. (* Basic_2A1: uses: lleq_fwd_bind_dx lleq_fwd_bind_O_dx *) -lemma rdeq_fwd_bind_dx (h) (o): ∀p,I,L1,L2,V,T. - L1 ≛[h, o, ⓑ{p,I}V.T] L2 → L1.ⓑ{I}V ≛[h, o, T] L2.ⓑ{I}V. +lemma rdeq_fwd_bind_dx: ∀p,I,L1,L2,V,T. + L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. /2 width=2 by rex_fwd_bind_dx/ qed-. (* Basic_2A1: uses: lleq_fwd_flat_dx *) -lemma rdeq_fwd_flat_dx (h) (o): ∀I,L1,L2,V,T. L1 ≛[h, o, ⓕ{I}V.T] L2 → L1 ≛[h, o, T] L2. +lemma rdeq_fwd_flat_dx: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → L1 ≛[T] L2. /2 width=3 by rex_fwd_flat_dx/ qed-. -lemma rdeq_fwd_dx (h) (o): ∀I2,L1,K2. ∀T:term. L1 ≛[h, o, T] K2.ⓘ{I2} → - ∃∃I1,K1. L1 = K1.ⓘ{I1}. +lemma rdeq_fwd_dx: ∀I2,L1,K2. ∀T:term. L1 ≛[T] K2.ⓘ{I2} → + ∃∃I1,K1. L1 = K1.ⓘ{I1}. /2 width=5 by rex_fwd_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_drops.ma index 825ed84d9..f2ea3b894 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_drops.ma @@ -16,37 +16,37 @@ include "static_2/relocation/lifts_tdeq.ma". include "static_2/static/rex_drops.ma". include "static_2/static/rdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ******) +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) (* Properties with generic slicing for local environments *******************) -lemma rdeq_lifts_sn: ∀h,o. f_dedropable_sn (cdeq h o). +lemma rdeq_lifts_sn: f_dedropable_sn cdeq. /3 width=5 by rex_liftable_dedropable_sn, tdeq_lifts_sn/ qed-. (* Inversion lemmas with generic slicing for local environments *************) -lemma rdeq_inv_lifts_sn: ∀h,o. f_dropable_sn (cdeq h o). +lemma rdeq_inv_lifts_sn: f_dropable_sn cdeq. /2 width=5 by rex_dropable_sn/ qed-. -lemma rdeq_inv_lifts_dx: ∀h,o. f_dropable_dx (cdeq h o). +lemma rdeq_inv_lifts_dx: f_dropable_dx cdeq. /2 width=5 by rex_dropable_dx/ qed-. -lemma rdeq_inv_lifts_bi: ∀h,o,L1,L2,U. L1 ≛[h, o, U] L2 → ∀b,f. 𝐔⦃f⦄ → +lemma rdeq_inv_lifts_bi: ∀L1,L2,U. L1 ≛[U] L2 → ∀b,f. 𝐔⦃f⦄ → ∀K1,K2. ⬇*[b, f] L1 ≘ K1 → ⬇*[b, f] L2 ≘ K2 → - ∀T. ⬆*[f] T ≘ U → K1 ≛[h, o, T] K2. + ∀T. ⬆*[f] T ≘ U → K1 ≛[T] K2. /2 width=10 by rex_inv_lifts_bi/ qed-. -lemma rdeq_inv_lref_pair_sn: ∀h,o,L1,L2,i. L1 ≛[h, o, #i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[h, o, V1] K2 & V1 ≛[h, o] V2. +lemma rdeq_inv_lref_pair_sn: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 → + ∃∃K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[V1] K2 & V1 ≛ V2. /2 width=3 by rex_inv_lref_pair_sn/ qed-. -lemma rdeq_inv_lref_pair_dx: ∀h,o,L1,L2,i. L1 ≛[h, o, #i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[h, o, V1] K2 & V1 ≛[h, o] V2. +lemma rdeq_inv_lref_pair_dx: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 → + ∃∃K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[V1] K2 & V1 ≛ V2. /2 width=3 by rex_inv_lref_pair_dx/ qed-. -lemma rdeq_inv_lref_pair_bi (h) (o) (L1) (L2) (i): - L1 ≛[h,o,#i] L2 → +lemma rdeq_inv_lref_pair_bi (L1) (L2) (i): + L1 ≛[#i] L2 → ∀I1,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I1}V1 → ∀I2,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I2}V2 → - ∧∧ K1 ≛[h,o,V1] K2 & V1 ≛[h,o] V2 & I1 = I2. + ∧∧ K1 ≛[V1] K2 & V1 ≛ V2 & I1 = I2. /2 width=6 by rex_inv_lref_pair_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqup.ma index e1a7afb3a..904bb601b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqup.ma @@ -15,25 +15,25 @@ include "static_2/static/rex_fqup.ma". include "static_2/static/rdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ******) +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) (* Advanced properties ******************************************************) -lemma rdeq_refl: ∀h,o,T. reflexive … (rdeq h o T). +lemma rdeq_refl: ∀T. reflexive … (rdeq T). /2 width=1 by rex_refl/ qed. -lemma rdeq_pair_refl: ∀h,o,V1,V2. V1 ≛[h, o] V2 → - ∀I,L. ∀T:term. L.ⓑ{I}V1 ≛[h, o, T] L.ⓑ{I}V2. +lemma rdeq_pair_refl: ∀V1,V2. V1 ≛ V2 → + ∀I,L. ∀T:term. L.ⓑ{I}V1 ≛[T] L.ⓑ{I}V2. /2 width=1 by rex_pair_refl/ qed. (* Advanced inversion lemmas ************************************************) -lemma rdeq_inv_bind_void: ∀h,o,p,I,L1,L2,V,T. L1 ≛[h, o, ⓑ{p,I}V.T] L2 → - L1 ≛[h, o, V] L2 ∧ L1.ⓧ ≛[h, o, T] L2.ⓧ. +lemma rdeq_inv_bind_void: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → + L1 ≛[V] L2 ∧ L1.ⓧ ≛[T] L2.ⓧ. /2 width=3 by rex_inv_bind_void/ qed-. (* Advanced forward lemmas **************************************************) -lemma rdeq_fwd_bind_dx_void: ∀h,o,p,I,L1,L2,V,T. - L1 ≛[h, o, ⓑ{p,I}V.T] L2 → L1.ⓧ ≛[h, o, T] L2.ⓧ. +lemma rdeq_fwd_bind_dx_void: ∀p,I,L1,L2,V,T. + L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓧ ≛[T] L2.ⓧ. /2 width=4 by rex_fwd_bind_dx_void/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma index 3ebf19118..66fd1b753 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_fqus.ma @@ -17,14 +17,14 @@ include "static_2/static/rdeq_drops.ma". include "static_2/static/rdeq_fqup.ma". include "static_2/static/rdeq_rdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ******) +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) (* Properties with extended structural successor for closures ***************) -lemma fqu_tdeq_conf: ∀h,o,b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐[b] ⦃G2, L2, T1⦄ → - ∀U2. U1 ≛[h, o] U2 → - ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐[b] ⦃G2, L, T2⦄ & L2 ≛[h, o, T1] L & T1 ≛[h, o] T2. -#h #o #b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1 +lemma fqu_tdeq_conf: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐[b] ⦃G2, L2, T1⦄ → + ∀U2. U1 ≛ U2 → + ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐[b] ⦃G2, L, T2⦄ & L2 ≛[T1] L & T1 ≛ T2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1 [ #I #G #L #W #X #H >(tdeq_inv_lref1 … H) -X /2 width=5 by fqu_lref_O, ex3_2_intro/ | #I #G #L #W1 #U1 #X #H @@ -45,19 +45,19 @@ lemma fqu_tdeq_conf: ∀h,o,b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐[b] ⦃G2, ] qed-. -lemma tdeq_fqu_trans: ∀h,o,b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐[b] ⦃G2, L2, T1⦄ → - ∀U2. U2 ≛[h, o] U1 → - ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐[b] ⦃G2, L, T2⦄ & T2 ≛[h, o] T1 & L ≛[h, o, T1] L2. -#h #o #b #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21 -elim (fqu_tdeq_conf … o … H12 U2) -H12 +lemma tdeq_fqu_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐[b] ⦃G2, L2, T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐[b] ⦃G2, L, T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21 +elim (fqu_tdeq_conf … H12 U2) -H12 /3 width=5 by rdeq_sym, tdeq_sym, ex3_2_intro/ qed-. (* Basic_2A1: uses: lleq_fqu_trans *) -lemma rdeq_fqu_trans: ∀h,o,b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐[b] ⦃G2, K2, U⦄ → - ∀L1. L1 ≛[h, o, T] L2 → - ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐[b] ⦃G2, K1, U0⦄ & U0 ≛[h, o] U & K1 ≛[h, o, U] K2. -#h #o #b #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U +lemma rdeq_fqu_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐[b] ⦃G2, K2, U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐[b] ⦃G2, K1, U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U [ #I #G #L2 #V2 #L1 #H elim (rdeq_inv_zero_pair_dx … H) -H #K1 #V1 #HV1 #HV12 #H destruct /3 width=7 by tdeq_rdeq_conf, fqu_lref_O, ex3_2_intro/ @@ -80,10 +80,10 @@ qed-. (* Properties with optional structural successor for closures ***************) -lemma tdeq_fquq_trans: ∀h,o,b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐⸮[b] ⦃G2, L2, T1⦄ → - ∀U2. U2 ≛[h, o] U1 → - ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐⸮[b] ⦃G2, L, T2⦄ & T2 ≛[h, o] T1 & L ≛[h, o, T1] L2. -#h #o #b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H +lemma tdeq_fquq_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐⸮[b] ⦃G2, L2, T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐⸮[b] ⦃G2, L, T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H [ #H #U2 #HU21 elim (tdeq_fqu_trans … H … HU21) -U1 /3 width=5 by fqu_fquq, ex3_2_intro/ | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ @@ -91,10 +91,10 @@ lemma tdeq_fquq_trans: ∀h,o,b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐⸮[b] qed-. (* Basic_2A1: was just: lleq_fquq_trans *) -lemma rdeq_fquq_trans: ∀h,o,b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐⸮[b] ⦃G2, K2, U⦄ → - ∀L1. L1 ≛[h, o, T] L2 → - ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐⸮[b] ⦃G2, K1, U0⦄ & U0 ≛[h, o] U & K1 ≛[h, o, U] K2. -#h #o #b #G1 #G2 #L2 #K2 #T #U #H elim H -H +lemma rdeq_fquq_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐⸮[b] ⦃G2, K2, U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐⸮[b] ⦃G2, K1, U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H elim H -H [ #H #L1 #HL12 elim (rdeq_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/ | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ ] @@ -103,10 +103,10 @@ qed-. (* Properties with plus-iterated structural successor for closures **********) (* Basic_2A1: was just: lleq_fqup_trans *) -lemma rdeq_fqup_trans: ∀h,o,b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐+[b] ⦃G2, K2, U⦄ → - ∀L1. L1 ≛[h, o, T] L2 → - ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐+[b] ⦃G2, K1, U0⦄ & U0 ≛[h, o] U & K1 ≛[h, o, U] K2. -#h #o #b #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U +lemma rdeq_fqup_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐+[b] ⦃G2, K2, U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐+[b] ⦃G2, K1, U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U [ #G2 #K2 #U #HTU #L1 #HL12 elim (rdeq_fqu_trans … HTU … HL12) -L2 /3 width=5 by fqu_fqup, ex3_2_intro/ | #G #G2 #K #K2 #U #U2 #_ #HU2 #IHTU #L1 #HL12 @@ -118,10 +118,10 @@ lemma rdeq_fqup_trans: ∀h,o,b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐+[b] ⦃G2, ] qed-. -lemma tdeq_fqup_trans: ∀h,o,b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐+[b] ⦃G2, L2, T1⦄ → - ∀U2. U2 ≛[h, o] U1 → - ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐+[b] ⦃G2, L, T2⦄ & T2 ≛[h, o] T1 & L ≛[h, o, T1] L2. -#h #o #b #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1 +lemma tdeq_fqup_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐+[b] ⦃G2, L2, T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐+[b] ⦃G2, L, T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1 [ #G1 #L1 #U1 #H #U2 #HU21 elim (tdeq_fqu_trans … H … HU21) -U1 /3 width=5 by fqu_fqup, ex3_2_intro/ | #G1 #G #L1 #L #U1 #U #H #_ #IH #U2 #HU21 @@ -136,20 +136,20 @@ qed-. (* Properties with star-iterated structural successor for closures **********) -lemma tdeq_fqus_trans: ∀h,o,b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐*[b] ⦃G2, L2, T1⦄ → - ∀U2. U2 ≛[h, o] U1 → - ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐*[b] ⦃G2, L, T2⦄ & T2 ≛[h, o] T1 & L ≛[h, o, T1] L2. -#h #o #b #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H +lemma tdeq_fqus_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1, L1, U1⦄ ⊐*[b] ⦃G2, L2, T1⦄ → + ∀U2. U2 ≛ U1 → + ∃∃L,T2. ⦃G1, L1, U2⦄ ⊐*[b] ⦃G2, L, T2⦄ & T2 ≛ T1 & L ≛[T1] L2. +#b #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H [ #H elim (tdeq_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ ] qed-. (* Basic_2A1: was just: lleq_fqus_trans *) -lemma rdeq_fqus_trans: ∀h,o,b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐*[b] ⦃G2, K2, U⦄ → - ∀L1. L1 ≛[h, o, T] L2 → - ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐*[b] ⦃G2, K1, U0⦄ & U0 ≛[h, o] U & K1 ≛[h, o, U] K2. -#h #o #b #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H +lemma rdeq_fqus_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1, L2, T⦄ ⊐*[b] ⦃G2, K2, U⦄ → + ∀L1. L1 ≛[T] L2 → + ∃∃K1,U0. ⦃G1, L1, T⦄ ⊐*[b] ⦃G2, K1, U0⦄ & U0 ≛ U & K1 ≛[U] K2. +#b #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H [ #H elim (rdeq_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ ] diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_length.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_length.ma index e0f3bb236..c5b0e5f31 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_length.ma @@ -17,13 +17,13 @@ include "static_2/static/rex_length.ma". include "static_2/static/rex_fsle.ma". include "static_2/static/rdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ******) +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) (* Advanved properties with free variables inclusion ************************) -lemma rdeq_fsge_comp (h) (o): rex_fsge_compatible (cdeq h o). -#h #o #L1 #L2 #T * #f1 #Hf1 #HL12 -lapply (frees_rdeq_conf h o … Hf1 … HL12) +lemma rdeq_fsge_comp: rex_fsge_compatible cdeq. +#L1 #L2 #T * #f1 #Hf1 #HL12 +lapply (frees_rdeq_conf … Hf1 … HL12) lapply (sex_fwd_length … HL12) /3 width=8 by lveq_length_eq, ex4_4_intro/ (**) (* full auto fails *) qed-. @@ -31,25 +31,25 @@ qed-. (* Properties with length for local environments ****************************) (* Basic_2A1: uses: lleq_sort *) -lemma rdeq_sort_length (h) (o): ∀L1,L2. |L1| = |L2| → ∀s. L1 ≛[h, o, ⋆s] L2. +lemma rdeq_sort_length: ∀L1,L2. |L1| = |L2| → ∀s. L1 ≛[⋆s] L2. /2 width=1 by rex_sort_length/ qed. (* Basic_2A1: uses: lleq_gref *) -lemma rdeq_gref_length (h) (o): ∀L1,L2. |L1| = |L2| → ∀l. L1 ≛[h, o, §l] L2. +lemma rdeq_gref_length: ∀L1,L2. |L1| = |L2| → ∀l. L1 ≛[§l] L2. /2 width=1 by rex_gref_length/ qed. -lemma rdeq_unit_length (h) (o): ∀L1,L2. |L1| = |L2| → - ∀I. L1.ⓤ{I} ≛[h, o, #0] L2.ⓤ{I}. +lemma rdeq_unit_length: ∀L1,L2. |L1| = |L2| → + ∀I. L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. /2 width=1 by rex_unit_length/ qed. (* Basic_2A1: uses: lleq_lift_le lleq_lift_ge *) -lemma rdeq_lifts_bi (h) (o): ∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ≛[h, o, T] K2 → - ∀b,f. ⬇*[b, f] L1 ≘ K1 → ⬇*[b, f] L2 ≘ K2 → - ∀U. ⬆*[f] T ≘ U → L1 ≛[h, o, U] L2. +lemma rdeq_lifts_bi: ∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ≛[T] K2 → + ∀b,f. ⬇*[b, f] L1 ≘ K1 → ⬇*[b, f] L2 ≘ K2 → + ∀U. ⬆*[f] T ≘ U → L1 ≛[U] L2. /3 width=9 by rex_lifts_bi, tdeq_lifts_sn/ qed-. (* Forward lemmas with length for local environments ************************) (* Basic_2A1: lleq_fwd_length *) -lemma rdeq_fwd_length (h) (o): ∀L1,L2. ∀T:term. L1 ≛[h, o, T] L2 → |L1| = |L2|. +lemma rdeq_fwd_length: ∀L1,L2. ∀T:term. L1 ≛[T] L2 → |L1| = |L2|. /2 width=3 by rex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_rdeq.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_rdeq.ma index 316438d66..30069162d 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_rdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_rdeq.ma @@ -16,85 +16,84 @@ include "static_2/syntax/ext2_ext2.ma". include "static_2/syntax/tdeq_tdeq.ma". include "static_2/static/rdeq_length.ma". -(* DEGREE-BASED EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ******) +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) (* Advanced properties ******************************************************) (* Basic_2A1: uses: lleq_sym *) -lemma rdeq_sym: ∀h,o,T. symmetric … (rdeq h o T). +lemma rdeq_sym: ∀T. symmetric … (rdeq T). /3 width=3 by rdeq_fsge_comp, rex_sym, tdeq_sym/ qed-. (* Basic_2A1: uses: lleq_dec *) -lemma rdeq_dec: ∀h,o,L1,L2. ∀T:term. Decidable (L1 ≛[h, o, T] L2). +lemma rdeq_dec: ∀L1,L2. ∀T:term. Decidable (L1 ≛[T] L2). /3 width=1 by rex_dec, tdeq_dec/ qed-. (* Main properties **********************************************************) (* Basic_2A1: uses: lleq_bind lleq_bind_O *) -theorem rdeq_bind: ∀h,o,p,I,L1,L2,V1,V2,T. - L1 ≛[h, o, V1] L2 → L1.ⓑ{I}V1 ≛[h, o, T] L2.ⓑ{I}V2 → - L1 ≛[h, o, ⓑ{p,I}V1.T] L2. +theorem rdeq_bind: ∀p,I,L1,L2,V1,V2,T. + L1 ≛[V1] L2 → L1.ⓑ{I}V1 ≛[T] L2.ⓑ{I}V2 → + L1 ≛[ⓑ{p,I}V1.T] L2. /2 width=2 by rex_bind/ qed. (* Basic_2A1: uses: lleq_flat *) -theorem rdeq_flat: ∀h,o,I,L1,L2,V,T. L1 ≛[h, o, V] L2 → L1 ≛[h, o, T] L2 → - L1 ≛[h, o, ⓕ{I}V.T] L2. +theorem rdeq_flat: ∀I,L1,L2,V,T. + L1 ≛[V] L2 → L1 ≛[T] L2 → L1 ≛[ⓕ{I}V.T] L2. /2 width=1 by rex_flat/ qed. -theorem rdeq_bind_void: ∀h,o,p,I,L1,L2,V,T. - L1 ≛[h, o, V] L2 → L1.ⓧ ≛[h, o, T] L2.ⓧ → - L1 ≛[h, o, ⓑ{p,I}V.T] L2. +theorem rdeq_bind_void: ∀p,I,L1,L2,V,T. + L1 ≛[V] L2 → L1.ⓧ ≛[T] L2.ⓧ → L1 ≛[ⓑ{p,I}V.T] L2. /2 width=1 by rex_bind_void/ qed. (* Basic_2A1: uses: lleq_trans *) -theorem rdeq_trans: ∀h,o,T. Transitive … (rdeq h o T). -#h #o #T #L1 #L * #f1 #Hf1 #HL1 #L2 * #f2 #Hf2 #HL2 +theorem rdeq_trans: ∀T. Transitive … (rdeq T). +#T #L1 #L * #f1 #Hf1 #HL1 #L2 * #f2 #Hf2 #HL2 lapply (frees_tdeq_conf_rdeq … Hf1 T … HL1) // #H0 lapply (frees_mono … Hf2 … H0) -Hf2 -H0 /5 width=7 by sex_trans, sex_eq_repl_back, tdeq_trans, ext2_trans, ex2_intro/ qed-. (* Basic_2A1: uses: lleq_canc_sn *) -theorem rdeq_canc_sn: ∀h,o,T. left_cancellable … (rdeq h o T). +theorem rdeq_canc_sn: ∀T. left_cancellable … (rdeq T). /3 width=3 by rdeq_trans, rdeq_sym/ qed-. (* Basic_2A1: uses: lleq_canc_dx *) -theorem rdeq_canc_dx: ∀h,o,T. right_cancellable … (rdeq h o T). +theorem rdeq_canc_dx: ∀T. right_cancellable … (rdeq T). /3 width=3 by rdeq_trans, rdeq_sym/ qed-. -theorem rdeq_repl: ∀h,o,L1,L2. ∀T:term. L1 ≛[h, o, T] L2 → - ∀K1. L1 ≛[h, o, T] K1 → ∀K2. L2 ≛[h, o, T] K2 → K1 ≛[h, o, T] K2. +theorem rdeq_repl: ∀L1,L2. ∀T:term. L1 ≛[T] L2 → + ∀K1. L1 ≛[T] K1 → ∀K2. L2 ≛[T] K2 → K1 ≛[T] K2. /3 width=3 by rdeq_canc_sn, rdeq_trans/ qed-. (* Negated properties *******************************************************) (* Note: auto works with /4 width=8/ so rdeq_canc_sn is preferred **********) (* Basic_2A1: uses: lleq_nlleq_trans *) -lemma rdeq_rdneq_trans: ∀h,o.∀T:term.∀L1,L. L1 ≛[h, o, T] L → - ∀L2. (L ≛[h, o, T] L2 → ⊥) → (L1 ≛[h, o, T] L2 → ⊥). +lemma rdeq_rdneq_trans: ∀T:term.∀L1,L. L1 ≛[T] L → + ∀L2. (L ≛[T] L2 → ⊥) → (L1 ≛[T] L2 → ⊥). /3 width=3 by rdeq_canc_sn/ qed-. (* Basic_2A1: uses: nlleq_lleq_div *) -lemma rdneq_rdeq_div: ∀h,o.∀T:term.∀L2,L. L2 ≛[h, o, T] L → - ∀L1. (L1 ≛[h, o, T] L → ⊥) → (L1 ≛[h, o, T] L2 → ⊥). +lemma rdneq_rdeq_div: ∀T:term.∀L2,L. L2 ≛[T] L → + ∀L1. (L1 ≛[T] L → ⊥) → (L1 ≛[T] L2 → ⊥). /3 width=3 by rdeq_trans/ qed-. -theorem rdneq_rdeq_canc_dx: ∀h,o,L1,L. ∀T:term. (L1 ≛[h, o, T] L → ⊥) → - ∀L2. L2 ≛[h, o, T] L → L1 ≛[h, o, T] L2 → ⊥. +theorem rdneq_rdeq_canc_dx: ∀L1,L. ∀T:term. (L1 ≛[T] L → ⊥) → + ∀L2. L2 ≛[T] L → L1 ≛[T] L2 → ⊥. /3 width=3 by rdeq_trans/ qed-. (* Negated inversion lemmas *************************************************) (* Basic_2A1: uses: nlleq_inv_bind nlleq_inv_bind_O *) -lemma rdneq_inv_bind: ∀h,o,p,I,L1,L2,V,T. (L1 ≛[h, o, ⓑ{p,I}V.T] L2 → ⊥) → - (L1 ≛[h, o, V] L2 → ⊥) ∨ (L1.ⓑ{I}V ≛[h, o, T] L2.ⓑ{I}V → ⊥). +lemma rdneq_inv_bind: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → + (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V → ⊥). /3 width=2 by rnex_inv_bind, tdeq_dec/ qed-. (* Basic_2A1: uses: nlleq_inv_flat *) -lemma rdneq_inv_flat: ∀h,o,I,L1,L2,V,T. (L1 ≛[h, o, ⓕ{I}V.T] L2 → ⊥) → - (L1 ≛[h, o, V] L2 → ⊥) ∨ (L1 ≛[h, o, T] L2 → ⊥). +lemma rdneq_inv_flat: ∀I,L1,L2,V,T. (L1 ≛[ⓕ{I}V.T] L2 → ⊥) → + (L1 ≛[V] L2 → ⊥) ∨ (L1 ≛[T] L2 → ⊥). /3 width=2 by rnex_inv_flat, tdeq_dec/ qed-. -lemma rdneq_inv_bind_void: ∀h,o,p,I,L1,L2,V,T. (L1 ≛[h, o, ⓑ{p,I}V.T] L2 → ⊥) → - (L1 ≛[h, o, V] L2 → ⊥) ∨ (L1.ⓧ ≛[h, o, T] L2.ⓧ → ⊥). +lemma rdneq_inv_bind_void: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → + (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓧ ≛[T] L2.ⓧ → ⊥). /3 width=3 by rnex_inv_bind_void, tdeq_dec/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_req.ma b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_req.ma index ab3ebca98..5ef8bef9b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rdeq_req.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rdeq_req.ma @@ -15,13 +15,13 @@ include "static_2/static/req_fsle.ma". include "static_2/static/rdeq.ma". -(* DEGREE-BASED EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ******) +(* SORT-IRRELEVANT EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES ***) (* Properties with syntactic equivalence on referred entries ****************) -lemma req_rdeq: ∀h,o,L1,L2. ∀T:term. L1 ≡[T] L2 → L1 ≛[h, o, T] L2. +lemma req_rdeq: ∀L1,L2. ∀T:term. L1 ≡[T] L2 → L1 ≛[T] L2. /2 width=3 by rex_co/ qed. -lemma req_rdeq_trans: ∀h,o,L1,L. ∀T:term. L1 ≡[T] L → - ∀L2. L ≛[h, o, T] L2 → L1 ≛[h, o, T] L2. +lemma req_rdeq_trans: ∀L1,L. ∀T:term. L1 ≡[T] L → + ∀L2. L ≛[T] L2 → L1 ≛[T] L2. /2 width=3 by req_rex_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq.ma index 358533f04..60c1e4d13 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq.ma @@ -12,132 +12,116 @@ (* *) (**************************************************************************) -include "static_2/notation/relations/stareq_4.ma". -include "static_2/syntax/item_sd.ma". +include "static_2/notation/relations/stareq_2.ma". include "static_2/syntax/term.ma". -(* DEGREE-BASED EQUIVALENCE ON TERMS ****************************************) +(* SORT-IRRELEVANT EQUIVALENCE ON TERMS *************************************) -inductive tdeq (h) (o): relation term ≝ -| tdeq_sort: ∀s1,s2,d. deg h o s1 d → deg h o s2 d → tdeq h o (⋆s1) (⋆s2) -| tdeq_lref: ∀i. tdeq h o (#i) (#i) -| tdeq_gref: ∀l. tdeq h o (§l) (§l) -| tdeq_pair: ∀I,V1,V2,T1,T2. tdeq h o V1 V2 → tdeq h o T1 T2 → tdeq h o (②{I}V1.T1) (②{I}V2.T2) +inductive tdeq: relation term ≝ +| tdeq_sort: ∀s1,s2. tdeq (⋆s1) (⋆s2) +| tdeq_lref: ∀i. tdeq (#i) (#i) +| tdeq_gref: ∀l. tdeq (§l) (§l) +| tdeq_pair: ∀I,V1,V2,T1,T2. tdeq V1 V2 → tdeq T1 T2 → tdeq (②{I}V1.T1) (②{I}V2.T2) . interpretation - "context-free degree-based equivalence (term)" - 'StarEq h o T1 T2 = (tdeq h o T1 T2). + "context-free sort-irrelevant equivalence (term)" + 'StarEq T1 T2 = (tdeq T1 T2). (* Basic properties *********************************************************) -lemma tdeq_refl: ∀h,o. reflexive … (tdeq h o). -#h #o #T elim T -T /2 width=1 by tdeq_pair/ +lemma tdeq_refl: reflexive … tdeq. +#T elim T -T /2 width=1 by tdeq_pair/ * /2 width=1 by tdeq_lref, tdeq_gref/ -#s elim (deg_total h o s) /2 width=3 by tdeq_sort/ qed. -lemma tdeq_sym: ∀h,o. symmetric … (tdeq h o). -#h #o #T1 #T2 #H elim H -T1 -T2 +lemma tdeq_sym: symmetric … tdeq. +#T1 #T2 #H elim H -T1 -T2 /2 width=3 by tdeq_sort, tdeq_lref, tdeq_gref, tdeq_pair/ qed-. (* Basic inversion lemmas ***************************************************) -fact tdeq_inv_sort1_aux: ∀h,o,X,Y. X ≛[h, o] Y → ∀s1. X = ⋆s1 → - ∃∃s2,d. deg h o s1 d & deg h o s2 d & Y = ⋆s2. -#h #o #X #Y * -X -Y -[ #s1 #s2 #d #Hs1 #Hs2 #s #H destruct /2 width=5 by ex3_2_intro/ +fact tdeq_inv_sort1_aux: ∀X,Y. X ≛ Y → ∀s1. X = ⋆s1 → + ∃s2. Y = ⋆s2. +#X #Y * -X -Y +[ #s1 #s2 #s #H destruct /2 width=2 by ex_intro/ | #i #s #H destruct | #l #s #H destruct | #I #V1 #V2 #T1 #T2 #_ #_ #s #H destruct ] qed-. -lemma tdeq_inv_sort1: ∀h,o,Y,s1. ⋆s1 ≛[h, o] Y → - ∃∃s2,d. deg h o s1 d & deg h o s2 d & Y = ⋆s2. -/2 width=3 by tdeq_inv_sort1_aux/ qed-. +lemma tdeq_inv_sort1: ∀Y,s1. ⋆s1 ≛ Y → + ∃s2. Y = ⋆s2. +/2 width=4 by tdeq_inv_sort1_aux/ qed-. -fact tdeq_inv_lref1_aux: ∀h,o,X,Y. X ≛[h, o] Y → ∀i. X = #i → Y = #i. -#h #o #X #Y * -X -Y // -[ #s1 #s2 #d #_ #_ #j #H destruct +fact tdeq_inv_lref1_aux: ∀X,Y. X ≛ Y → ∀i. X = #i → Y = #i. +#X #Y * -X -Y // +[ #s1 #s2 #j #H destruct | #I #V1 #V2 #T1 #T2 #_ #_ #j #H destruct ] qed-. -lemma tdeq_inv_lref1: ∀h,o,Y,i. #i ≛[h, o] Y → Y = #i. +lemma tdeq_inv_lref1: ∀Y,i. #i ≛ Y → Y = #i. /2 width=5 by tdeq_inv_lref1_aux/ qed-. -fact tdeq_inv_gref1_aux: ∀h,o,X,Y. X ≛[h, o] Y → ∀l. X = §l → Y = §l. -#h #o #X #Y * -X -Y // -[ #s1 #s2 #d #_ #_ #k #H destruct +fact tdeq_inv_gref1_aux: ∀X,Y. X ≛ Y → ∀l. X = §l → Y = §l. +#X #Y * -X -Y // +[ #s1 #s2 #k #H destruct | #I #V1 #V2 #T1 #T2 #_ #_ #k #H destruct ] qed-. -lemma tdeq_inv_gref1: ∀h,o,Y,l. §l ≛[h, o] Y → Y = §l. +lemma tdeq_inv_gref1: ∀Y,l. §l ≛ Y → Y = §l. /2 width=5 by tdeq_inv_gref1_aux/ qed-. -fact tdeq_inv_pair1_aux: ∀h,o,X,Y. X ≛[h, o] Y → ∀I,V1,T1. X = ②{I}V1.T1 → - ∃∃V2,T2. V1 ≛[h, o] V2 & T1 ≛[h, o] T2 & Y = ②{I}V2.T2. -#h #o #X #Y * -X -Y -[ #s1 #s2 #d #_ #_ #J #W1 #U1 #H destruct +fact tdeq_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②{I}V1.T1 → + ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. +#X #Y * -X -Y +[ #s1 #s2 #J #W1 #U1 #H destruct | #i #J #W1 #U1 #H destruct | #l #J #W1 #U1 #H destruct | #I #V1 #V2 #T1 #T2 #HV #HT #J #W1 #U1 #H destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma tdeq_inv_pair1: ∀h,o,I,V1,T1,Y. ②{I}V1.T1 ≛[h, o] Y → - ∃∃V2,T2. V1 ≛[h, o] V2 & T1 ≛[h, o] T2 & Y = ②{I}V2.T2. +lemma tdeq_inv_pair1: ∀I,V1,T1,Y. ②{I}V1.T1 ≛ Y → + ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. /2 width=3 by tdeq_inv_pair1_aux/ qed-. -lemma tdeq_inv_sort2: ∀h,o,X1,s2. X1 ≛[h, o] ⋆s2 → - ∃∃s1,d. deg h o s1 d & deg h o s2 d & X1 = ⋆s1. -#h #o #X1 #s2 #H -elim (tdeq_inv_sort1 h o X1 s2) -/2 width=5 by tdeq_sym, ex3_2_intro/ +lemma tdeq_inv_sort2: ∀X1,s2. X1 ≛ ⋆s2 → + ∃s1. X1 = ⋆s1. +#X1 #s2 #H +elim (tdeq_inv_sort1 X1 s2) +/2 width=2 by tdeq_sym, ex_intro/ qed-. -lemma tdeq_inv_pair2: ∀h,o,I,X1,V2,T2. X1 ≛[h, o] ②{I}V2.T2 → - ∃∃V1,T1. V1 ≛[h, o] V2 & T1 ≛[h, o] T2 & X1 = ②{I}V1.T1. -#h #o #I #X1 #V2 #T2 #H -elim (tdeq_inv_pair1 h o I V2 T2 X1) +lemma tdeq_inv_pair2: ∀I,X1,V2,T2. X1 ≛ ②{I}V2.T2 → + ∃∃V1,T1. V1 ≛ V2 & T1 ≛ T2 & X1 = ②{I}V1.T1. +#I #X1 #V2 #T2 #H +elim (tdeq_inv_pair1 I V2 T2 X1) [ #V1 #T1 #HV #HT #H destruct ] /3 width=5 by tdeq_sym, ex3_2_intro/ qed-. (* Advanced inversion lemmas ************************************************) -lemma tdeq_inv_sort1_deg: ∀h,o,Y,s1. ⋆s1 ≛[h, o] Y → ∀d. deg h o s1 d → - ∃∃s2. deg h o s2 d & Y = ⋆s2. -#h #o #Y #s1 #H #d #Hs1 elim (tdeq_inv_sort1 … H) -H -#s2 #x #Hx <(deg_mono h o … Hx … Hs1) -s1 -d /2 width=3 by ex2_intro/ -qed-. - -lemma tdeq_inv_sort_deg: ∀h,o,s1,s2. ⋆s1 ≛[h, o] ⋆s2 → - ∀d1,d2. deg h o s1 d1 → deg h o s2 d2 → - d1 = d2. -#h #o #s1 #y #H #d1 #d2 #Hs1 #Hy -elim (tdeq_inv_sort1_deg … H … Hs1) -s1 #s2 #Hs2 #H destruct -<(deg_mono h o … Hy … Hs2) -s2 -d1 // -qed-. - -lemma tdeq_inv_pair: ∀h,o,I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ≛[h, o] ②{I2}V2.T2 → - ∧∧ I1 = I2 & V1 ≛[h, o] V2 & T1 ≛[h, o] T2. -#h #o #I1 #I2 #V1 #V2 #T1 #T2 #H elim (tdeq_inv_pair1 … H) -H +lemma tdeq_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ≛ ②{I2}V2.T2 → + ∧∧ I1 = I2 & V1 ≛ V2 & T1 ≛ T2. +#I1 #I2 #V1 #V2 #T1 #T2 #H elim (tdeq_inv_pair1 … H) -H #V0 #T0 #HV #HT #H destruct /2 width=1 by and3_intro/ qed-. -lemma tdeq_inv_pair_xy_x: ∀h,o,I,V,T. ②{I}V.T ≛[h, o] V → ⊥. -#h #o #I #V elim V -V +lemma tdeq_inv_pair_xy_x: ∀I,V,T. ②{I}V.T ≛ V → ⊥. +#I #V elim V -V [ #J #T #H elim (tdeq_inv_pair1 … H) -H #X #Y #_ #_ #H destruct | #J #X #Y #IHX #_ #T #H elim (tdeq_inv_pair … H) -H #H #HY #_ destruct /2 width=2 by/ ] qed-. -lemma tdeq_inv_pair_xy_y: ∀h,o,I,T,V. ②{I}V.T ≛[h, o] T → ⊥. -#h #o #I #T elim T -T +lemma tdeq_inv_pair_xy_y: ∀I,T,V. ②{I}V.T ≛ T → ⊥. +#I #T elim T -T [ #J #V #H elim (tdeq_inv_pair1 … H) -H #X #Y #_ #_ #H destruct | #J #X #Y #_ #IHY #V #H elim (tdeq_inv_pair … H) -H #H #_ #HY destruct /2 width=2 by/ ] @@ -145,23 +129,19 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma tdeq_fwd_atom1: ∀h,o,I,Y. ⓪{I} ≛[h, o] Y → ∃J. Y = ⓪{J}. -#h #o * #x #Y #H [ elim (tdeq_inv_sort1 … H) -H ] +lemma tdeq_fwd_atom1: ∀I,Y. ⓪{I} ≛ Y → ∃J. Y = ⓪{J}. +* #x #Y #H [ elim (tdeq_inv_sort1 … H) -H ] /3 width=4 by tdeq_inv_gref1, tdeq_inv_lref1, ex_intro/ qed-. (* Advanced properties ******************************************************) -lemma tdeq_dec: ∀h,o,T1,T2. Decidable (T1 ≛[h, o] T2). -#h #o #T1 elim T1 -T1 [ * #s1 | #I1 #V1 #T1 #IHV #IHT ] * [1,3,5,7: * #s2 |*: #I2 #V2 #T2 ] -[ elim (deg_total h o s1) #d1 #H1 - elim (deg_total h o s2) #d2 #H2 - elim (eq_nat_dec d1 d2) #Hd12 destruct /3 width=3 by tdeq_sort, or_introl/ - @or_intror #H - lapply (tdeq_inv_sort_deg … H … H1 H2) -H -H1 -H2 /2 width=1 by/ +lemma tdeq_dec: ∀T1,T2. Decidable (T1 ≛ T2). +#T1 elim T1 -T1 [ * #s1 | #I1 #V1 #T1 #IHV #IHT ] * [1,3,5,7: * #s2 |*: #I2 #V2 #T2 ] +[ /3 width=1 by tdeq_sort, or_introl/ |2,3,13: @or_intror #H - elim (tdeq_inv_sort1 … H) -H #x1 #x2 #_ #_ #H destruct + elim (tdeq_inv_sort1 … H) -H #x #H destruct |4,6,14: @or_intror #H lapply (tdeq_inv_lref1 … H) -H #H destruct @@ -192,13 +172,13 @@ qed-. (* Negated inversion lemmas *************************************************) -lemma tdneq_inv_pair: ∀h,o,I1,I2,V1,V2,T1,T2. - (②{I1}V1.T1 ≛[h, o] ②{I2}V2.T2 → ⊥) → +lemma tdneq_inv_pair: ∀I1,I2,V1,V2,T1,T2. + (②{I1}V1.T1 ≛ ②{I2}V2.T2 → ⊥) → ∨∨ I1 = I2 → ⊥ - | (V1 ≛[h, o] V2 → ⊥) - | (T1 ≛[h, o] T2 → ⊥). -#h #o #I1 #I2 #V1 #V2 #T1 #T2 #H12 + | (V1 ≛ V2 → ⊥) + | (T1 ≛ T2 → ⊥). +#I1 #I2 #V1 #V2 #T1 #T2 #H12 elim (eq_item2_dec I1 I2) /3 width=1 by or3_intro0/ #H destruct -elim (tdeq_dec h o V1 V2) /3 width=1 by or3_intro1/ -elim (tdeq_dec h o T1 T2) /4 width=1 by tdeq_pair, or3_intro2/ +elim (tdeq_dec V1 V2) /3 width=1 by or3_intro1/ +elim (tdeq_dec T1 T2) /4 width=1 by tdeq_pair, or3_intro2/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_ext.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_ext.ma index f13292089..09f7c5a76 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_ext.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_ext.ma @@ -12,29 +12,29 @@ (* *) (**************************************************************************) -include "static_2/notation/relations/stareq_5.ma". +include "static_2/notation/relations/stareq_3.ma". include "static_2/syntax/cext2.ma". include "static_2/syntax/tdeq.ma". -(* EXTENDED DEGREE-BASED EQUIVALENCE ****************************************) +(* EXTENDED SORT-IRRELEVANT EQUIVALENCE *************************************) -definition tdeq_ext: ∀h. sd h → relation bind ≝ - λh,o. ext2 (tdeq h o). +definition tdeq_ext: relation bind ≝ + ext2 tdeq. -definition cdeq: ∀h. sd h → relation3 lenv term term ≝ - λh,o,L. tdeq h o. +definition cdeq: relation3 lenv term term ≝ + λL. tdeq. -definition cdeq_ext: ∀h. sd h → relation3 lenv bind bind ≝ - λh,o. cext2 (cdeq h o). +definition cdeq_ext: relation3 lenv bind bind ≝ + cext2 cdeq. interpretation - "context-free degree-based equivalence (binder)" - 'StarEq h o I1 I2 = (tdeq_ext h o I1 I2). + "context-free sort-irrelevant equivalence (binder)" + 'StarEq I1 I2 = (tdeq_ext I1 I2). interpretation - "context-dependent degree-based equivalence (term)" - 'StarEq h o L T1 T2 = (cdeq h o L T1 T2). + "context-dependent sort-irrelevant equivalence (term)" + 'StarEq L T1 T2 = (cdeq L T1 T2). interpretation - "context-dependent degree-based equivalence (binder)" - 'StarEq h o L I1 I2 = (cdeq_ext h o L I1 I2). + "context-dependent sort-irrelevant equivalence (binder)" + 'StarEq L I1 I2 = (cdeq_ext L I1 I2). diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_tdeq.ma index a8bbec3fd..3ed01ec19 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_tdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/tdeq_tdeq.ma @@ -14,14 +14,14 @@ include "static_2/syntax/tdeq.ma". -(* DEGREE-BASED EQUIVALENCE ON TERMS ****************************************) +(* SORT-IRRELEVANT EQUIVALENCE ON TERMS *************************************) (* Main properties **********************************************************) -theorem tdeq_trans: ∀h,o. Transitive … (tdeq h o). -#h #o #T1 #T #H elim H -T1 -T -[ #s1 #s #d #Hs1 #Hs #X #H - elim (tdeq_inv_sort1_deg … H … Hs) -s /2 width=3 by tdeq_sort/ +theorem tdeq_trans: Transitive … tdeq. +#T1 #T #H elim H -T1 -T +[ #s1 #s #X #H + elim (tdeq_inv_sort1 … H) -s /2 width=1 by tdeq_sort/ | #i1 #i #H <(tdeq_inv_lref1 … H) -H // | #l1 #l #H <(tdeq_inv_gref1 … H) -H // | #I #V1 #V #T1 #T #_ #_ #IHV #IHT #X #H @@ -29,22 +29,20 @@ theorem tdeq_trans: ∀h,o. Transitive … (tdeq h o). ] qed-. -theorem tdeq_canc_sn: ∀h,o. left_cancellable … (tdeq h o). +theorem tdeq_canc_sn: left_cancellable … tdeq. /3 width=3 by tdeq_trans, tdeq_sym/ qed-. -theorem tdeq_canc_dx: ∀h,o. right_cancellable … (tdeq h o). +theorem tdeq_canc_dx: right_cancellable … tdeq. /3 width=3 by tdeq_trans, tdeq_sym/ qed-. -theorem tdeq_repl: ∀h,o,T1,T2. T1 ≛[h, o] T2 → - ∀U1. T1 ≛[h, o] U1 → ∀U2. T2 ≛[h, o] U2 → U1 ≛[h, o] U2. +theorem tdeq_repl: ∀T1,T2. T1 ≛ T2 → + ∀U1. T1 ≛ U1 → ∀U2. T2 ≛ U2 → U1 ≛ U2. /3 width=3 by tdeq_canc_sn, tdeq_trans/ qed-. (* Negated main properies ***************************************************) -theorem tdeq_tdneq_trans: ∀h,o,T1,T. T1 ≛[h, o] T → ∀T2. (T ≛[h, o] T2 → ⊥) → - T1 ≛[h, o] T2 → ⊥. +theorem tdeq_tdneq_trans: ∀T1,T. T1 ≛ T → ∀T2. (T ≛ T2 → ⊥) → T1 ≛ T2 → ⊥. /3 width=3 by tdeq_canc_sn/ qed-. -theorem tdneq_tdeq_canc_dx: ∀h,o,T1,T. (T1 ≛[h, o] T → ⊥) → ∀T2. T2 ≛[h, o] T → - T1 ≛[h, o] T2 → ⊥. +theorem tdneq_tdeq_canc_dx: ∀T1,T. (T1 ≛ T → ⊥) → ∀T2. T2 ≛ T → T1 ≛ T2 → ⊥. /3 width=3 by tdeq_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/theq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/theq.ma index 37c4af70a..052f9f775 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/theq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/theq.ma @@ -12,28 +12,27 @@ (* *) (**************************************************************************) -include "static_2/notation/relations/topiso_4.ma". -include "static_2/syntax/item_sd.ma". +include "static_2/notation/relations/topiso_2.ma". include "static_2/syntax/term.ma". (* HEAD EQUIVALENCE FOR TERMS ***********************************************) (* Basic_2A1: includes: tsts_atom tsts_pair *) -inductive theq (h) (o): relation term ≝ -| theq_sort: ∀s1,s2,d. deg h o s1 d → deg h o s2 d → theq h o (⋆s1) (⋆s2) -| theq_lref: ∀i. theq h o (#i) (#i) -| theq_gref: ∀l. theq h o (§l) (§l) -| theq_pair: ∀I,V1,V2,T1,T2. theq h o (②{I}V1.T1) (②{I}V2.T2) +inductive theq: relation term ≝ +| theq_sort: ∀s1,s2. theq (⋆s1) (⋆s2) +| theq_lref: ∀i. theq (#i) (#i) +| theq_gref: ∀l. theq (§l) (§l) +| theq_pair: ∀I,V1,V2,T1,T2. theq (②{I}V1.T1) (②{I}V2.T2) . -interpretation "head equivalence (term)" 'TopIso h o T1 T2 = (theq h o T1 T2). +interpretation "head equivalence (term)" 'TopIso T1 T2 = (theq T1 T2). (* Basic inversion lemmas ***************************************************) -fact theq_inv_sort1_aux: ∀h,o,X,Y. X ⩳[h, o] Y → ∀s1. X = ⋆s1 → - ∃∃s2,d. deg h o s1 d & deg h o s2 d & Y = ⋆s2. -#h #o #X #Y * -X -Y -[ #s1 #s2 #d #Hs1 #Hs2 #s #H destruct /2 width=5 by ex3_2_intro/ +fact theq_inv_sort1_aux: ∀X,Y. X ⩳ Y → ∀s1. X = ⋆s1 → + ∃s2. Y = ⋆s2. +#X #Y * -X -Y +[ #s1 #s2 #s #H destruct /2 width=2 by ex_intro/ | #i #s #H destruct | #l #s #H destruct | #I #V1 #V2 #T1 #T2 #s #H destruct @@ -41,36 +40,36 @@ fact theq_inv_sort1_aux: ∀h,o,X,Y. X ⩳[h, o] Y → ∀s1. X = ⋆s1 → qed-. (* Basic_1: was just: iso_gen_sort *) -lemma theq_inv_sort1: ∀h,o,Y,s1. ⋆s1 ⩳[h, o] Y → - ∃∃s2,d. deg h o s1 d & deg h o s2 d & Y = ⋆s2. -/2 width=3 by theq_inv_sort1_aux/ qed-. +lemma theq_inv_sort1: ∀Y,s1. ⋆s1 ⩳ Y → + ∃s2. Y = ⋆s2. +/2 width=4 by theq_inv_sort1_aux/ qed-. -fact theq_inv_lref1_aux: ∀h,o,X,Y. X ⩳[h, o] Y → ∀i. X = #i → Y = #i. -#h #o #X #Y * -X -Y // -[ #s1 #s2 #d #_ #_ #j #H destruct +fact theq_inv_lref1_aux: ∀X,Y. X ⩳ Y → ∀i. X = #i → Y = #i. +#X #Y * -X -Y // +[ #s1 #s2 #j #H destruct | #I #V1 #V2 #T1 #T2 #j #H destruct ] qed-. (* Basic_1: was: iso_gen_lref *) -lemma theq_inv_lref1: ∀h,o,Y,i. #i ⩳[h, o] Y → Y = #i. +lemma theq_inv_lref1: ∀Y,i. #i ⩳ Y → Y = #i. /2 width=5 by theq_inv_lref1_aux/ qed-. -fact theq_inv_gref1_aux: ∀h,o,X,Y. X ⩳[h, o] Y → ∀l. X = §l → Y = §l. -#h #o #X #Y * -X -Y // -[ #s1 #s2 #d #_ #_ #k #H destruct +fact theq_inv_gref1_aux: ∀X,Y. X ⩳ Y → ∀l. X = §l → Y = §l. +#X #Y * -X -Y // +[ #s1 #s2 #k #H destruct | #I #V1 #V2 #T1 #T2 #k #H destruct ] qed-. -lemma theq_inv_gref1: ∀h,o,Y,l. §l ⩳[h, o] Y → Y = §l. +lemma theq_inv_gref1: ∀Y,l. §l ⩳ Y → Y = §l. /2 width=5 by theq_inv_gref1_aux/ qed-. -fact theq_inv_pair1_aux: ∀h,o,T1,T2. T1 ⩳[h, o] T2 → +fact theq_inv_pair1_aux: ∀T1,T2. T1 ⩳ T2 → ∀J,W1,U1. T1 = ②{J}W1.U1 → ∃∃W2,U2. T2 = ②{J}W2.U2. -#h #o #T1 #T2 * -T1 -T2 -[ #s1 #s2 #d #_ #_ #J #W1 #U1 #H destruct +#T1 #T2 * -T1 -T2 +[ #s1 #s2 #J #W1 #U1 #H destruct | #i #J #W1 #U1 #H destruct | #l #J #W1 #U1 #H destruct | #I #V1 #V2 #T1 #T2 #J #W1 #U1 #H destruct /2 width=3 by ex1_2_intro/ @@ -79,15 +78,15 @@ qed-. (* Basic_1: was: iso_gen_head *) (* Basic_2A1: was: tsts_inv_pair1 *) -lemma theq_inv_pair1: ∀h,o,J,W1,U1,T2. ②{J}W1.U1 ⩳[h, o] T2 → +lemma theq_inv_pair1: ∀J,W1,U1,T2. ②{J}W1.U1 ⩳ T2 → ∃∃W2,U2. T2 = ②{J}W2. U2. /2 width=7 by theq_inv_pair1_aux/ qed-. -fact theq_inv_pair2_aux: ∀h,o,T1,T2. T1 ⩳[h, o] T2 → +fact theq_inv_pair2_aux: ∀T1,T2. T1 ⩳ T2 → ∀J,W2,U2. T2 = ②{J}W2.U2 → ∃∃W1,U1. T1 = ②{J}W1.U1. -#h #o #T1 #T2 * -T1 -T2 -[ #s1 #s2 #d #_ #_ #J #W2 #U2 #H destruct +#T1 #T2 * -T1 -T2 +[ #s1 #s2 #J #W2 #U2 #H destruct | #i #J #W2 #U2 #H destruct | #l #J #W2 #U2 #H destruct | #I #V1 #V2 #T1 #T2 #J #W2 #U2 #H destruct /2 width=3 by ex1_2_intro/ @@ -95,29 +94,15 @@ fact theq_inv_pair2_aux: ∀h,o,T1,T2. T1 ⩳[h, o] T2 → qed-. (* Basic_2A1: was: tsts_inv_pair2 *) -lemma theq_inv_pair2: ∀h,o,J,T1,W2,U2. T1 ⩳[h, o] ②{J}W2.U2 → +lemma theq_inv_pair2: ∀J,T1,W2,U2. T1 ⩳ ②{J}W2.U2 → ∃∃W1,U1. T1 = ②{J}W1.U1. /2 width=7 by theq_inv_pair2_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma theq_inv_sort1_deg: ∀h,o,Y,s1. ⋆s1 ⩳[h, o] Y → ∀d. deg h o s1 d → - ∃∃s2. deg h o s2 d & Y = ⋆s2. -#h #o #Y #s1 #H #d #Hs1 elim (theq_inv_sort1 … H) -H -#s2 #x #Hx <(deg_mono h o … Hx … Hs1) -s1 -d /2 width=3 by ex2_intro/ -qed-. - -lemma theq_inv_sort_deg: ∀h,o,s1,s2. ⋆s1 ⩳[h, o] ⋆s2 → - ∀d1,d2. deg h o s1 d1 → deg h o s2 d2 → - d1 = d2. -#h #o #s1 #y #H #d1 #d2 #Hs1 #Hy -elim (theq_inv_sort1_deg … H … Hs1) -s1 #s2 #Hs2 #H destruct -<(deg_mono h o … Hy … Hs2) -s2 -d1 // -qed-. - -lemma theq_inv_pair: ∀h,o,I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ⩳[h, o] ②{I2}V2.T2 → +lemma theq_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ⩳ ②{I2}V2.T2 → I1 = I2. -#h #o #I1 #I2 #V1 #V2 #T1 #T2 #H elim (theq_inv_pair1 … H) -H +#I1 #I2 #V1 #V2 #T1 #T2 #H elim (theq_inv_pair1 … H) -H #V0 #T0 #H destruct // qed-. @@ -125,28 +110,23 @@ qed-. (* Basic_1: was: iso_refl *) (* Basic_2A1: was: tsts_refl *) -lemma theq_refl: ∀h,o. reflexive … (theq h o). -#h #o * // +lemma theq_refl: reflexive … theq. +* // * /2 width=1 by theq_lref, theq_gref/ -#s elim (deg_total h o s) /2 width=3 by theq_sort/ qed. (* Basic_2A1: was: tsts_sym *) -lemma theq_sym: ∀h,o. symmetric … (theq h o). -#h #o #T1 #T2 * -T1 -T2 /2 width=3 by theq_sort/ +lemma theq_sym: symmetric … theq. +#T1 #T2 * -T1 -T2 /2 width=3 by theq_sort/ qed-. (* Basic_2A1: was: tsts_dec *) -lemma theq_dec: ∀h,o,T1,T2. Decidable (T1 ⩳[h, o] T2). -#h #o * [ * #s1 | #I1 #V1 #T1 ] * [1,3,5,7: * #s2 |*: #I2 #V2 #T2 ] -[ elim (deg_total h o s1) #d1 #H1 - elim (deg_total h o s2) #d2 #H2 - elim (eq_nat_dec d1 d2) #Hd12 destruct /3 width=3 by theq_sort, or_introl/ - @or_intror #H - lapply (theq_inv_sort_deg … H … H1 H2) -H -H1 -H2 /2 width=1 by/ +lemma theq_dec: ∀T1,T2. Decidable (T1 ⩳ T2). +* [ * #s1 | #I1 #V1 #T1 ] * [1,3,5,7: * #s2 |*: #I2 #V2 #T2 ] +[ /3 width=1 by theq_sort, or_introl/ |2,3,13: @or_intror #H - elim (theq_inv_sort1 … H) -H #x1 #x2 #_ #_ #H destruct + elim (theq_inv_sort1 … H) -H #x #H destruct |4,6,14: @or_intror #H lapply (theq_inv_lref1 … H) -H #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple.ma index 9ad5ed550..d9f59e4a5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple.ma @@ -20,12 +20,12 @@ include "static_2/syntax/theq.ma". (* Properies with simple (neutral) terms ************************************) (* Basic_2A1: was: simple_tsts_repl_dx *) -lemma simple_theq_repl_dx: ∀h,o,T1,T2. T1 ⩳[h, o] T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. -#h #o #T1 #T2 * -T1 -T2 // +lemma simple_theq_repl_dx: ∀T1,T2. T1 ⩳ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. +#T1 #T2 * -T1 -T2 // #I #V1 #V2 #T1 #T2 #H elim (simple_inv_pair … H) -H #J #H destruct // qed-. (* Basic_2A1: was: simple_tsts_repl_sn *) -lemma simple_theq_repl_sn: ∀h,o,T1,T2. T1 ⩳[h, o] T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. -/3 width=5 by simple_theq_repl_dx, theq_sym/ qed-. +lemma simple_theq_repl_sn: ∀T1,T2. T1 ⩳ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. +/3 width=3 by simple_theq_repl_dx, theq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple_vector.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple_vector.ma index f7212ee11..471389125 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple_vector.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_simple_vector.ma @@ -21,9 +21,9 @@ include "static_2/syntax/theq_simple.ma". (* Basic_1: was only: iso_flats_lref_bind_false iso_flats_flat_bind_false *) (* Basic_2A1: was: tsts_inv_bind_applv_simple *) -lemma theq_inv_applv_bind_simple: ∀h,o,p,I,Vs,V2,T1,T2. ⒶVs.T1 ⩳[h, o] ⓑ{p,I}V2.T2 → - 𝐒⦃T1⦄ → ⊥. -#h #o #p #I #Vs #V2 #T1 #T2 #H elim (theq_inv_pair2 … H) -H +lemma theq_inv_applv_bind_simple (p) (I): + ∀Vs,V2,T1,T2. ⒶVs.T1 ⩳ ⓑ{p,I}V2.T2 → 𝐒⦃T1⦄ → ⊥. +#p #I #Vs #V2 #T1 #T2 #H elim (theq_inv_pair2 … H) -H #V0 #T0 elim Vs -Vs normalize [ #H destruct #H /2 width=5 by simple_inv_bind/ | #V #Vs #_ #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_tdeq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_tdeq.ma index 99447dba7..b70559d87 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_tdeq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_tdeq.ma @@ -17,8 +17,8 @@ include "static_2/syntax/theq.ma". (* HEAD EQUIVALENCE FOR TERMS ***********************************************) -(* Properties with degree-based equivalence for terms ***********************) +(* Properties with sort-irrelevant equivalence for terms ********************) -lemma tdeq_theq: ∀h,o,T1,T2. T1 ≛[h, o] T2 → T1 ⩳[h, o] T2. -#h #o #T1 #T2 * -T1 -T2 /2 width=3 by theq_sort, theq_pair/ +lemma tdeq_theq: ∀T1,T2. T1 ≛ T2 → T1 ⩳ T2. +#T1 #T2 * -T1 -T2 /2 width=1 by theq_sort, theq_pair/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_theq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_theq.ma index e9e586d00..6b33049ee 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/theq_theq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/theq_theq.ma @@ -20,10 +20,10 @@ include "static_2/syntax/theq.ma". (* Basic_1: was: iso_trans *) (* Basic_2A1: was: tsts_trans *) -theorem theq_trans: ∀h,o. Transitive … (theq h o). -#h #o #T1 #T * -T1 -T -[ #s1 #s #d #Hs1 #Hs #X #H - elim (theq_inv_sort1_deg … H … Hs) -s /2 width=3 by theq_sort/ +theorem theq_trans: Transitive … theq. +#T1 #T * -T1 -T +[ #s1 #s #X #H + elim (theq_inv_sort1 … H) -s /2 width=1 by theq_sort/ | #i1 #i #H <(theq_inv_lref1 … H) -H // | #l1 #l #H <(theq_inv_gref1 … H) -H // | #I #V1 #V #T1 #T #X #H @@ -32,9 +32,9 @@ theorem theq_trans: ∀h,o. Transitive … (theq h o). qed-. (* Basic_2A1: was: tsts_canc_sn *) -theorem theq_canc_sn: ∀h,o. left_cancellable … (theq h o). +theorem theq_canc_sn: left_cancellable … theq. /3 width=3 by theq_trans, theq_sym/ qed-. (* Basic_2A1: was: tsts_canc_dx *) -theorem theq_canc_dx: ∀h,o. right_cancellable … (theq h o). +theorem theq_canc_dx: right_cancellable … theq. /3 width=3 by theq_trans, theq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl index 990057cc1..8b9fec7bb 100644 --- a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl @@ -31,8 +31,8 @@ table { } ] [ { "degree-based equivalence" * } { - [ [ "for closures on referred entries" ] "fdeq" + "( ⦃?,?,?⦄ ≛[?,?] ⦃?,?,?⦄ )" "fdeq_fqup" + "fdeq_fqus" + "fdeq_req" + "fdeq_fdeq" * ] - [ [ "for lenvs on referred entries" ] "rdeq" + "( ? ≛[?,?,?] ? )" "rdeq_length" + "rdeq_drops" + "rdeq_fqup" + "rdeq_fqus" + "rdeq_req" + "rdeq_rdeq" * ] + [ [ "for closures on referred entries" ] "fdeq" + "( ⦃?,?,?⦄ ≛ ⦃?,?,?⦄ )" "fdeq_fqup" + "fdeq_fqus" + "fdeq_req" + "fdeq_fdeq" * ] + [ [ "for lenvs on referred entries" ] "rdeq" + "( ? ≛[?] ? )" "rdeq_length" + "rdeq_drops" + "rdeq_fqup" + "rdeq_fqus" + "rdeq_req" + "rdeq_rdeq" * ] } ] [ { "syntactic equivalence" * } { @@ -112,12 +112,12 @@ table { } ] [ { "head equivalence" * } { - [ [ "for terms" ] "theq" + "( ? ⩳[?,?] ? )" "theq_simple" + "theq_tdeq" + "theq_theq" + "theq_simple_vector" * ] + [ [ "for terms" ] "theq" + "( ? ⩳ ? )" "theq_simple" + "theq_tdeq" + "theq_theq" + "theq_simple_vector" * ] } ] [ { "degree-based equivalence" * } { - [ [ "" ] "tdeq_ext" + "( ? ≛[?,?] ? )" + "( ? ⊢ ? ≛[?,?] ? )" * ] - [ [ "" ] "tdeq" + "( ? ≛[?,?] ? )" "tdeq_tdeq" * ] + [ [ "" ] "tdeq_ext" + "( ? ≛ ? )" + "( ? ⊢ ? ≛ ? )" * ] + [ [ "" ] "tdeq" + "( ? ≛ ? )" "tdeq_tdeq" * ] } ] [ { "closures" * } { @@ -152,7 +152,6 @@ table { } ] [ { "items" * } { - [ [ "" ] "item_sd" * ] [ [ "" ] "item_sh" * ] [ [ "" ] "item" * ] }