From: Ferruccio Guidi Date: Thu, 16 Apr 2020 16:13:01 +0000 (+0200) Subject: milestone update in basic_2, update in ground and static_2 X-Git-Tag: make_still_working~182 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=3c7b4071a9ac096b02334c1d47468776b948e2de;p=helm.git milestone update in basic_2, update in ground and static_2 + new definition of cpx and derivatives without the sort hierarchy parameter + sort hierarchy parameter removed from ex_fpbg_refl.ma --- 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 8a459a0be..fea399443 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 @@ -12,8 +12,8 @@ (* *) (**************************************************************************) -include "basic_2/rt_computation/fpbs_cpxs.ma". include "basic_2/rt_computation/fpbg_fqup.ma". +include "basic_2/rt_computation/fpbs_cpxs.ma". include "basic_2/rt_computation/fpbg_fpbs.ma". (* EXAMPLES *****************************************************************) @@ -36,22 +36,28 @@ lemma ApplDelta_lifts (f) (s0) (s): ⇧*[f] (ApplDelta s0 s) ≘ (ApplDelta s0 s). /5 width=1 by lifts_sort, lifts_lref, lifts_bind, lifts_flat/ qed. -lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega1 s0 s ➡[h,0] ApplOmega2 s0 s. -/2 width=1 by cpm_beta/ qed. +lemma cpr_ApplOmega_12 (G) (L) (s0) (s): + ❪G,L❫ ⊢ ApplOmega1 s0 s ⬈ ApplOmega2 s0 s. +/2 width=1 by cpx_beta/ qed. -lemma cpr_ApplOmega_23 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega2 s0 s ➡[h,0] ApplOmega3 s0 s. -/6 width=3 by cpm_eps, cpm_appl, cpm_bind, cpm_delta, ApplDelta_lifts/ qed. +lemma cpr_ApplOmega_23 (G) (L) (s0) (s): + ❪G,L❫ ⊢ ApplOmega2 s0 s ⬈ ApplOmega3 s0 s. +/6 width=3 by cpx_eps, cpx_flat, cpx_bind, cpx_delta, ApplDelta_lifts/ qed. -lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega3 s0 s ➡[h,0] ApplOmega4 s0 s. -/4 width=3 by cpm_zeta, ApplDelta_lifts, lifts_sort, lifts_flat/ qed. +lemma cpr_ApplOmega_34 (G) (L) (s0) (s): + ❪G,L❫ ⊢ ApplOmega3 s0 s ⬈ ApplOmega4 s0 s. +/4 width=3 by cpx_zeta, ApplDelta_lifts, lifts_sort, lifts_flat/ qed. -lemma cpxs_ApplOmega_14 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega1 s0 s ⬈*[h] ApplOmega4 s0 s. -/5 width=4 by cpxs_strap1, cpm_fwd_cpx/ qed. +lemma cpxs_ApplOmega_14 (G) (L) (s0) (s): + ❪G,L❫ ⊢ ApplOmega1 s0 s ⬈* ApplOmega4 s0 s. +/5 width=5 by cpxs_strap1, cpx_cpxs/ qed. -lemma fqup_ApplOmega_41 (G) (L) (s0) (s): ❪G,L,ApplOmega4 s0 s❫ ⬂+ ❪G,L,ApplOmega1 s0 s❫. +lemma fqup_ApplOmega_41 (G) (L) (s0) (s): + ❪G,L,ApplOmega4 s0 s❫ ⬂+ ❪G,L,ApplOmega1 s0 s❫. /2 width=1 by/ qed. (* Main properties **********************************************************) -theorem fpbg_refl (h) (G) (L) (s0) (s): ❪G,L,ApplOmega1 s0 s❫ >[h] ❪G,L,ApplOmega1 s0 s❫. +theorem fpbg_refl (G) (L) (s0) (s): + ❪G,L,ApplOmega1 s0 s❫ > ❪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 d8c2d4e26..3ef5de466 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 @@ -32,7 +32,7 @@ fact cnv_cpm_conf_lpr_atom_ess_aux (h) (G) (L1) (L2) (s): /3 width=3 by cpm_cpms, ex2_intro/ qed-. fact cnv_cpm_conf_lpr_atom_delta_aux (h) (a) (G) (L) (i): - (∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,#i❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫⊢#i![h,a] → ∀K,V. ⇩[i]L ≘ K.ⓓV → ∀n,XV. ❪G,K❫ ⊢ V ➡[h,n] XV → @@ -54,7 +54,7 @@ elim (cpms_lifts_sn … HVX … HLK2 … HXV) -XV -HLK2 #XV #HVX #HXV qed-. fact cnv_cpm_conf_lpr_atom_ell_aux (h) (a) (G) (L) (i): - (∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,#i❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫⊢#i![h,a] → ∀K,W. ⇩[i]L ≘ K.ⓛW → ∀n,XW. ❪G,K❫ ⊢ W ➡[h,n] XW → @@ -76,7 +76,7 @@ elim (cpms_lifts_sn … HWX … HLK2 … HXW) -XW -HLK2 #XW #HWX #HXW qed-. fact cnv_cpm_conf_lpr_delta_delta_aux (h) (a) (I) (G) (L) (i): - (∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,#i❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫⊢#i![h,a] → ∀K1,V1. ⇩[i]L ≘ K1.ⓑ[I]V1 → ∀K2,V2. ⇩[i]L ≘ K2.ⓑ[I]V2 → ∀n1,XV1. ❪G,K1❫ ⊢ V1 ➡[h,n1] XV1 → ∀n2,XV2. ❪G,K2❫ ⊢ V2 ➡[h,n2] XV2 → @@ -108,7 +108,7 @@ lapply (drops_mono … HLK2 … HLK1) -L -i #H destruct qed-. fact cnv_cpm_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓑ[p,I]V.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓑ[p,I]V.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓑ[p,I]V.T ![h,a] → ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 → ∀n1,T1. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[h,n2] T2 → @@ -125,7 +125,7 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 (L1.ⓑ[I]V1) … (L2.ⓑ[I] qed-. fact cnv_cpm_conf_lpr_bind_zeta_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ +ⓓV.T ![h,a] → ∀V1. ❪G,L❫ ⊢V ➡[h,0] V1 → ∀n1,T1. ❪G,L.ⓓV❫ ⊢ T ➡[h,n1] T1 → ∀T2. ⇧[1]T2 ≘ T → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[h,n2] XT2 → @@ -145,7 +145,7 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT12 … HXT2 … HL01 … HL02) qed-. fact cnv_cpm_conf_lpr_zeta_zeta_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ +ⓓV.T ![h,a] → ∀T1. ⇧[1]T1 ≘ T → ∀T2. ⇧[1]T2 ≘ T → ∀n1,XT1. ❪G,L❫ ⊢ T1 ➡[h,n1] XT1 → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[h,n2] XT2 → @@ -164,7 +164,7 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT1 … HXT2 … HL01 … HL02) qed-. fact cnv_cpm_conf_lpr_appl_appl_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓐV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓐV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓐV.T ![h,a] → ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 → ∀n1,T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → @@ -181,7 +181,7 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_appl_beta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ![h,a] → ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 → ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 → @@ -203,7 +203,7 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 [ /2 width=1 by lsubr_ qed-. fact cnv_cpm_conf_lpr_appl_theta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓐV.ⓓ[p]W.T ![h,a] → ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 → ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 → @@ -234,7 +234,7 @@ elim (cpm_inv_abbr1 … HX) -HX * qed-. fact cnv_cpm_conf_lpr_beta_beta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ![h,a] → ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 → ∀W1. ❪G,L❫ ⊢ W ➡[h,0] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 → @@ -256,7 +256,7 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 /2 width=1 by lsubr_be qed-. fact cnv_cpm_conf_lpr_theta_theta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓐV.ⓓ[p]W.T ![h,a] → ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 → ∀W1. ❪G,L❫ ⊢ W ➡[h,0] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 → @@ -279,7 +279,7 @@ lapply (cpm_lifts_bi … HV2 (Ⓣ) … (L2.ⓓW2) … HVU2 … HVU) -V2 -V [ /3 qed-. fact cnv_cpm_conf_lpr_cast_cast_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓝV.T ![h,a] → ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 → ∀T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → @@ -296,7 +296,7 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_cast_epsilon_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓝV.T ![h,a] → ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 → ∀T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → @@ -312,8 +312,8 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_cast_ee_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓝV.T ![h,a] → ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 → ∀T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → @@ -327,7 +327,7 @@ lapply (cnv_cpms_trans_lpr_sub … IH2 … HVX0 … L0 ?) [4:|*: /2 width=1 by f elim (cnv_cpms_strip_lpr_sub … IH1 … HVX0 … HV02 … L0 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] elim (cnv_cpms_strip_lpr_sub … IH1 … HTX0 … HT01 … L0 … HL01) [|*: /2 width=1 by fqup_fpbg/ ] -HV02 -HTX0 -HT01 minus_plus #H2 lapply (cpms_trans … HT1 … HTU) -T [h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓝV.T ![h,a] → ∀n1,T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 → @@ -350,8 +350,8 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_epsilon_ee_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓝV.T ![h,a] → ∀n1,T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 → ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 → @@ -364,7 +364,7 @@ lapply (cnv_cpms_trans_lpr_sub … IH2 … HVX0 … L0 ?) [4:|*: /2 width=1 by f elim (cnv_cpms_strip_lpr_sub … IH1 … HVX0 … HV02 … L0 … HL02) [|*: /2 width=1 by fqup_fpbg/ ] elim (cnv_cpms_strip_lpr_sub … IH1 … HTX0 … HT01 … L0 … HL01) [|*: /2 width=1 by fqup_fpbg/ ] -HV02 -HTX0 -HT01 minus_plus #H2 lapply (cpms_trans … HT1 … HTU) -T [h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → ❪G,L❫ ⊢ ⓝV.T ![h,a] → ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 → ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 → @@ -388,8 +388,8 @@ qed-. fact cnv_cpm_conf_lpr_aux (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → - (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_conf_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #HX1 #n2 #X2 #HX2 #L1 #HL1 #L2 #HL2 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma index 7d7676f1a..23287638d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma @@ -46,7 +46,7 @@ lemma cnv_cpr_teqx_fwd_refl (h) (a) (G) (L): | #G #L #U #T1 #T2 #HT12 #_ #H1 #H2 elim (cnv_fpbg_refl_false … H2) -a @(fpbg_teqx_div … H1) -H1 - /3 width=6 by cpm_tneqx_cpm_fpbg, cpm_eps, teqx_inv_pair_xy_y/ + /3 width=7 by cpm_tneqx_cpm_fpbg, cpm_eps, teqx_inv_pair_xy_y/ | #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #H1 #_ elim (teqx_inv_pair … H1) -H1 #H #_ #_ destruct | #p #G #L #V1 #V2 #X2 #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #_ #H1 #_ @@ -106,11 +106,11 @@ elim (cpm_inv_cast1 … H1) -H1 [ * || * ] | #HT1X elim (cnv_fpbg_refl_false … H0) -a @(fpbg_teqx_div … H2) -H2 - /3 width=6 by cpm_tneqx_cpm_fpbg, cpm_eps, teqx_inv_pair_xy_y/ + /3 width=7 by cpm_tneqx_cpm_fpbg, cpm_eps, teqx_inv_pair_xy_y/ | #m #HU1X #H destruct elim (cnv_fpbg_refl_false … H0) -a @(fpbg_teqx_div … H2) -H2 - /3 width=6 by cpm_tneqx_cpm_fpbg, cpm_ee, teqx_inv_pair_xy_x/ + /3 width=7 by cpm_tneqx_cpm_fpbg, cpm_ee, teqx_inv_pair_xy_x/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma index 67104bbc6..8c50c3a7e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma @@ -26,7 +26,7 @@ definition IH_cnv_cpm_teqx_cpm_trans (h) (a): relation3 genv lenv term ≝ (* Transitive properties restricted rt-transition for terms *****************) fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → (∀G,L,T. ❪G0,L0,T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_cpm_trans h a G L T) → ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_teqx_cpm_trans h a G L T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] @@ -89,7 +89,7 @@ fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0): qed-. fact cnv_cpm_teqx_cpm_trans_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → IH_cnv_cpm_teqx_cpm_trans h a G0 L0 T0. #h #a #G0 #L0 #T0 @(fqup_wf_ind (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G0 #L0 #T0 #IH #IH0 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 700073bb2..f18e5d0ea 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 @@ -25,8 +25,8 @@ include "basic_2/dynamic/lsubv_cnv.ma". fact cnv_cpm_trans_lpr_aux (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_trans_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G1 #L1 * * [|||| * ] [ #s #HG0 #HL0 #HT0 #H1 #x #X #H2 #L2 #_ destruct -IH2 -IH1 -H1 @@ -117,7 +117,7 @@ fact cnv_cpm_trans_lpr_aux (h) (a): eq_minus_O // #W0 #H1 #H2 -IH2 -IH1 -L1 -W1 -T1 -U1 lapply (cprs_trans … HXW21 … H1) -XW1 #H1 lapply (cpms_trans … HXT21 … H2) -XT1 [h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ❪G0,L0❫ ⊢ T0 ![h,a] → ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → T0 ≛ T1 → ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[h,n2] T2 → T0 ≛ T2 → @@ -35,8 +35,8 @@ elim (cnv_cpms_teqx_conf_lpr_aux … IH2 IH1 … H1T01 … H1T02 … HL01 … HL qed-. fact cnv_cpms_conf_lpr_refl_tneqx_sub (h) (a) (G0) (L0) (T0) (m21) (m22): - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ❪G0,L0❫ ⊢ T0 ![h,a] → ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 → ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 → @@ -47,9 +47,9 @@ fact cnv_cpms_conf_lpr_refl_tneqx_sub (h) (a) (G0) (L0) (T0) (m21) (m22): lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX02 … L0 ?) // #HX2 elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … HX02 … 0 T0 … L0 … HL01) // [h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ❪G0,L0❫ ⊢ T0 ![h,a] → ∀X1. ❪G0,L0❫ ⊢ T0 ➡[h,m11] X1 → T0 ≛ X1 → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[h,m12] T1 → X1 ≛ T1 → ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 → ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 → - ((∀G,L,T. ❪G0,L0,X1❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,X1❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ((∀G,L,T. ❪G0,L0,X1❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,X1❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ∀m21,m22. ∀X2. ❪G0,L0❫ ⊢ X1 ➡[h,m21] X2 → (X1 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 → @@ -78,8 +78,8 @@ fact cnv_cpms_conf_lpr_step_tneqx_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) ( 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] ❪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❫ > ❪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=3 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 (teqx_dec X1 Z0) #H2XZ @@ -99,8 +99,8 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 [h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ❪G0,L0❫ ⊢ T0 ![h,a] → ∀T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → T0 ≛ T1 → ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 → @@ -122,8 +122,8 @@ generalize in match IH1; generalize in match IH2; qed-. fact cnv_cpms_conf_lpr_tneqx_tneqx_aux (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22): - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ❪G0,L0❫ ⊢ T0 ![h,a] → ∀X1. ❪G0,L0❫ ⊢ T0 ➡[h,m11] X1 → (T0 ≛ X1 → ⊥) → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[h,m12] T1 → ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 → @@ -135,11 +135,11 @@ fact cnv_cpms_conf_lpr_tneqx_tneqx_aux (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) 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] ❪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❫ > ❪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=3 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 +elim (IH1 … HXT2 … HXZ20 … L2 … L0) [|*: /4 width=3 by fpb_fpbg, cpm_fpb/ ] -HXT2 -HXZ20 #Z2 #HTZ2 #HZ02 elim (IH1 … HZ01 … HZ02 L1 … L2) // -L0 -T0 -X1 -X2 -Z0 #Z #HZ01 #HZ02 lapply (cpms_trans … HTZ1 … HZ01) -Z1 [h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpms_conf_lpr h a G L T. #h #a #G #L #T #IH2 #IH1 #G0 #L0 #T0 #HG #HL #HT #HT0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma index 13530d008..967e63de5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/cnv_cpm_teqx_trans.ma". fact cpms_tneqx_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1): ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) → - (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,T1❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,T1❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → ∃∃n1,n2,T0. ❪G,L❫ ⊢ T1 ➡[h,n1] T0 & T1 ≛ T0 → ⊥ & ❪G,L❫ ⊢ T0 ➡*[h,n2] T2 & n1+n2 = n. #h #a #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -n -T1 @@ -46,8 +46,8 @@ fact cpms_teqx_ind_sn (h) (a) (G) (L) (T2) (Q:relation2 …): (❪G,L❫ ⊢ T2 ![h,a] → Q 0 T2) → (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T → ❪G,L❫ ⊢ T ➡*[h,n2] T2 → ❪G,L❫ ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) → ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T2 → - (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,T1❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,T1❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → Q n T1. #h #a #G #L #T2 #Q #IB1 #IB2 #n #T1 #H @(cpms_ind_sn … H) -n -T1 @@ -59,7 +59,7 @@ fact cpms_teqx_ind_sn (h) (a) (G) (L) (T2) (Q:relation2 …): /6 width=7 by cpm_fpbq, fpbq_fpbg_trans/ (**) | -IB2 -IH -IH2 -IH1 elim (cnv_fpbg_refl_false … H0T1) -a -Q - /3 width=8 by cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg/ + /3 width=9 by cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg/ ] ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma index 3271b4e11..24a56092c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/cnv_cpms_teqx.ma". (* Sub confluence propery with restricted rt-transition for terms ***********) fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 → ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡[h,n2] T2 → T0 ≛ T2 → ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 → @@ -45,8 +45,8 @@ fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0): qed-. fact cnv_cpms_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 → ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[h,n2] T2 → T0 ≛ T2 → ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 → diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma index ce73661f8..99eb4d4be 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma @@ -27,7 +27,7 @@ lemma cnv_cpmuwe_trans (h) (a) (G) (L): lemma cnv_R_cpmuwe_total (h) (a) (G) (L): ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∃n. R_cpmuwe h G L T1 n. -/4 width=2 by cnv_fwd_fsb, fsb_inv_csx, R_cpmuwe_total_csx/ qed-. +/4 width=3 by cnv_fwd_fsb, fsb_inv_csx, R_cpmuwe_total_csx/ qed-. (* Main inversions with head evaluation for t-bound rt-transition on terms **) 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 866a48566..6055f11e3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma @@ -22,20 +22,20 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Note: this is the "big tree" theorem *) (* Basic_2A1: uses: snv_fwd_fsb *) lemma cnv_fwd_fsb (h) (a): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ≥𝐒[h] ❪G,L,T❫. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ≥𝐒 ❪G,L,T❫. #h #a #G #L #T #H elim (cnv_fwd_aaa … H) -H /2 width=2 by aaa_fsb/ qed-. (* Forward lemmas with strongly rt-normalizing terms ************************) lemma cnv_fwd_csx (h) (a): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ ⬈*𝐒[h] T. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ ⬈*𝐒 T. #h #a #G #L #T #H -/3 width=2 by cnv_fwd_fsb, fsb_inv_csx/ +/3 width=3 by cnv_fwd_fsb, fsb_inv_csx/ qed-. (* Inversion lemmas with proper parallel rst-computation for closures *******) lemma cnv_fpbg_refl_false (h) (a): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L,T❫ >[h] ❪G,L,T❫ → ⊥. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L,T❫ > ❪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_sub.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_sub.ma index b9b06348d..6239b4798 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 @@ -51,8 +51,8 @@ definition IH_cnv_cpms_conf_lpr (h) (a): relation3 genv lenv term ≝ fact cnv_cpms_trans_lpr_sub (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_trans_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_trans_lpr h a G1 L1 T1. #h #a #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/ @@ -60,12 +60,12 @@ qed-. fact cnv_cpm_conf_lpr_sub (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_conf_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpm_conf_lpr h a G1 L1 T1. /3 width=8 by cpm_cpms/ qed-. fact cnv_cpms_strip_lpr_sub (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_strip_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_strip_lpr h a 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 7e94833d3..de8554b48 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma @@ -25,8 +25,8 @@ include "basic_2/dynamic/nta.ma". (* Basic_2A1: uses: nta_fwd_csn *) theorem nta_fwd_fsb (h) (a) (G) (L): ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → - ∧∧ ≥𝐒[h] ❪G,L,T❫ & ≥𝐒[h] ❪G,L,U❫. + ∧∧ ≥𝐒 ❪G,L,T❫ & ≥𝐒 ❪G,L,U❫. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) #X #HU #HT #_ #_ -X -/3 width=2 by cnv_fwd_fsb, conj/ +/3 width=3 by cnv_fwd_fsb, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_6.ma new file mode 100644 index 000000000..d6b61d9ef --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_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 @{ 'PRedSubTy $G1 $L1 $T1 $G2 $L2 $T2 }. 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 deleted file mode 100644 index 4f1dc6a32..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubty_7.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 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/predsubtyproper_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_6.ma new file mode 100644 index 000000000..7494d345e --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_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 @{ 'PRedSubTyProper $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 deleted file mode 100644 index d0f1337b7..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtyproper_7.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 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/predsubtystar_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_6.ma new file mode 100644 index 000000000..79ad698de --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_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 @{ 'PRedSubTyStar $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 deleted file mode 100644 index 348db5513..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystar_7.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 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/predsubtystarproper_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_6.ma new file mode 100644 index 000000000..9c20aedb5 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_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 @{ 'PRedSubTyStarProper $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 deleted file mode 100644 index 2dc44441e..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystarproper_7.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 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/predsubtystrong_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_3.ma new file mode 100644 index 000000000..c7b98755e --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_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( ≥𝐒❪ break term 46 G, break term 46 L, break term 46 T ❫ )" + non associative with precedence 45 + for @{ 'PRedSubTyStrong $G $L $T }. 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 deleted file mode 100644 index 2006de0a7..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_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( ≥𝐒[ 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/predty_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_4.ma new file mode 100644 index 000000000..bb7f36f88 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_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 T1 ⬈ break term 46 T2 )" + non associative with precedence 45 + for @{ 'PRedTy $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_5.ma deleted file mode 100644 index b2ab29aeb..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_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 T1 ⬈[ break term 46 h ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRedTy $h $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma index c59a40dcb..37ae1e799 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈[ break term 46 Rt, break term 46 c, break term 46 h ] break term 46 T2 )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈[ break term 46 Rs, break term 46 Rk, break term 46 c ] break term 46 T2 )" non associative with precedence 45 - for @{ 'PRedTy $Rt $c $h $G $L $T1 $T2 }. + for @{ 'PRedTy $Rs $Rk $c $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_3.ma new file mode 100644 index 000000000..1c87b36f2 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ⬈𝐍 break term 46 T )" + non associative with precedence 45 + for @{ 'PRedTyNormal $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 deleted file mode 100644 index b31ae8a3b..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_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( ❪ 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/predtysn_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_3.ma new file mode 100644 index 000000000..ea2d22209 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈ break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedTySn $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma index f900505ea..ad637ef51 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈[ break term 46 h ] break term 46 L2 )" +notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈[ break term 46 T ] break term 46 L2 )" non associative with precedence 45 - for @{ 'PRedTySn $h $G $L1 $L2 }. + for @{ 'PRedTySn $T $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_5.ma deleted file mode 100644 index fdcc1a4fc..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_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 L1 ❫ ⊢ ⬈[ break term 46 h, break term 46 T ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedTySn $h $T $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_3.ma new file mode 100644 index 000000000..c1f89d6b7 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈* break term 46 L2 )" + non associative with precedence 45 + for @{ 'PRedTySnStar $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_4.ma deleted file mode 100644 index 5cb97d096..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_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( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈*[ break term 46 h ] break term 46 L2 )" - non associative with precedence 45 - for @{ 'PRedTySnStar $h $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_3.ma new file mode 100644 index 000000000..c5dfce58b --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_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( G ⊢ ⬈*𝐒[ break term 46 T ] break term 46 L )" + non associative with precedence 45 + for @{ 'PRedTySNStrong $G $T $L }. 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 deleted file mode 100644 index af9ca53c1..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_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( 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/predtystar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_4.ma new file mode 100644 index 000000000..fca7baa9f --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_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 T1 ⬈* break term 46 T2 )" + non associative with precedence 45 + for @{ 'PRedTyStar $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_5.ma deleted file mode 100644 index 217b589b1..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_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 T1 ⬈*[ break term 46 h ] break term 46 T2 )" - non associative with precedence 45 - for @{ 'PRedTyStar $h $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_3.ma new file mode 100644 index 000000000..a32fcc45a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_3.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) + +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ⬈*𝐒break term 46 T )" + non associative with precedence 45 + for @{ 'PRedTyStrong $G $L $T }. 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 deleted file mode 100644 index e2da53d28..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_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( ❪ 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/topredtysnstrong_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_3.ma new file mode 100644 index 000000000..b830ac385 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_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( G ⊢ break term 46 L1 ⊒ break term 46 L2 )" + non associative with precedence 45 + for @{ 'ToPRedTySNStrong $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_4.ma deleted file mode 100644 index 7b0f2e412..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/topredtysnstrong_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( G ⊢ break term 46 L1 ⊒[ break term 46 h] break term 46 L2 )" - non associative with precedence 45 - for @{ 'ToPRedTySNStrong $h $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma index 3f3cf8bff..8639ec1a3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma @@ -27,6 +27,6 @@ lemma cpmre_total_aaa (h) (n) (A) (G) (L): elim (cpms_total_aaa h … n … HT1) #T0 #HT10 elim (cprre_total_csx h G L T0) [ #T2 /3 width=4 by cpms_cprre_trans, ex_intro/ -| /4 width=4 by cpms_fwd_cpxs, aaa_csx, csx_cpxs_trans/ +| /4 width=5 by cpms_fwd_cpxs, aaa_csx, csx_cpxs_trans/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cpxs.ma index 71b0f64f6..7a053812e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_cpxs.ma @@ -18,10 +18,11 @@ include "basic_2/rt_computation/cpms.ma". (* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) -(* Forward lemmas with unbound context-sensitive rt-computation for terms ***) +(* Forward lemmas with extended context-sensitive rt-computation for terms **) (* Basic_2A1: includes: scpds_fwd_cpxs cprs_cpxs *) -lemma cpms_fwd_cpxs (h) (n): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2. +lemma cpms_fwd_cpxs (h) (n) (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ⬈* T2. #h #n #G #L #T1 #T2 #H @(cpms_ind_dx … H) -T2 -/3 width=4 by cpxs_strap1, cpm_fwd_cpx/ +/3 width=5 by cpxs_strap1, cpm_fwd_cpx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma index b96b5fcc6..09a2e9ceb 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 @@ -22,27 +22,27 @@ include "basic_2/rt_computation/cpms_fpbs.ma". lemma cpms_tneqx_fwd_fpbg (h) (n): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → - (T1 ≛ T2 → ⊥) → ❪G,L,T1❫ >[h] ❪G,L,T2❫. -/3 width=2 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-. + (T1 ≛ T2 → ⊥) → ❪G,L,T1❫ > ❪G,L,T2❫. +/3 width=3 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-. lemma fpbg_cpms_trans (h) (n): - ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ >[h] ❪G2,L2,T❫ → - ∀T2. ❪G2,L2❫ ⊢ T ➡*[h,n] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ > ❪G2,L2,T❫ → + ∀T2. ❪G2,L2❫ ⊢ T ➡*[h,n] T2 → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. /3 width=5 by fpbg_fpbs_trans, cpms_fwd_fpbs/ qed-. lemma cpms_fpbg_trans (h) (n): ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ➡*[h,n] T → - ∀G2,L2,T2. ❪G1,L1,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. + ∀G2,L2,T2. ❪G1,L1,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. /3 width=5 by fpbs_fpbg_trans, cpms_fwd_fpbs/ qed-. lemma fqup_cpms_fwd_fpbg (h): ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T❫ → - ∀n,T2. ❪G2,L2❫ ⊢ T ➡*[h,n] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. + ∀n,T2. ❪G2,L2❫ ⊢ T ➡*[h,n] T2 → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. /3 width=5 by cpms_fwd_fpbs, fqup_fpbg, fpbg_fpbs_trans/ qed-. lemma cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg (h) (G) (L) (T1): ∀n1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → (T1 ≛ T → ⊥) → - ∀n2,T2. ❪G,L❫⊢ T ➡*[h,n2] T2 → T1 ≛ T2 → ❪G,L,T1❫ >[h] ❪G,L,T1❫. + ∀n2,T2. ❪G,L❫⊢ T ➡*[h,n2] T2 → T1 ≛ T2 → ❪G,L,T1❫ > ❪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_teqx_trans, teqx_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 ec8e45b13..7a6ace084 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 @@ -21,5 +21,5 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* Basic_2A1: uses: cprs_fpbs *) lemma cpms_fwd_fpbs (h) (n): - ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L,T1❫ ≥[h] ❪G,L,T2❫. -/3 width=2 by cpms_fwd_cpxs, cpxs_fpbs/ qed-. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L,T1❫ ≥ ❪G,L,T2❫. +/3 width=3 by cpms_fwd_cpxs, cpxs_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma index 3fb6d1cd9..b38e8ca8d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma @@ -20,10 +20,10 @@ include "basic_2/rt_computation/cpmuwe.ma". (* T-UNBOUND WHD EVALUATION FOR T-BOUND RT-TRANSITION ON TERMS **************) -(* Properties with strong normalization for unbound rt-transition for terms *) +(* Properties with strongly normalizing terms for extended rt-transition ****) lemma cpmuwe_total_csx (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → ∃∃T2,n. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. + ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → ∃∃T2,n. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. #h #G #L #T1 #H @(csx_ind_cpxs … H) -T1 #T1 #_ #IHT1 elim (cnuw_dec_ex h G L T1) @@ -32,14 +32,14 @@ elim (cnuw_dec_ex h G L T1) elim (IHT1 … T0) -IHT1 [ #T2 #n2 * #HT02 #HT2 /4 width=5 by cpms_trans, cpmuwe_intro, ex1_2_intro/ | /3 width=1 by teqx_tweq/ - | /2 width=2 by cpms_fwd_cpxs/ + | /2 width=3 by cpms_fwd_cpxs/ ] ] qed-. lemma R_cpmuwe_total_csx (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → ∃n. R_cpmuwe h G L T1 n. + ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → ∃n. R_cpmuwe h G L T1 n. #h #G #L #T1 #H -elim (cpmuwe_total_csx … H) -H #T2 #n #HT12 +elim (cpmuwe_total_csx h … H) -H #T2 #n #HT12 /3 width=3 by ex_intro (* 2x *)/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma index 2642f686e..854fd530b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma @@ -19,16 +19,16 @@ include "basic_2/rt_computation/cprre.ma". (* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS **********) -(* Properties with strong normalization for unbound rt-transition for terms *) +(* Properties with strongly normalizing terms for extended rt-transition ****) (* Basic_1: was just: nf2_sn3 *) (* Basic_2A1: was: csx_cpre *) lemma cprre_total_csx (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → ∃T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] T2. + ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → ∃T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] T2. #h #G #L #T1 #H @(csx_ind … H) -T1 #T1 #_ #IHT1 elim (cnr_dec_teqx h G L T1) [ /3 width=3 by ex_intro, cpmre_intro/ ] * #T0 #HT10 #HnT10 -elim (IHT1 … HnT10) -IHT1 -HnT10 [| /2 width=2 by cpm_fwd_cpx/ ] +elim (IHT1 … HnT10) -IHT1 -HnT10 [| /2 width=3 by cpm_fwd_cpx/ ] #T2 * /4 width=3 by cprs_step_sn, ex_intro, cpmre_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma index 843ec3636..a8afc2c23 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma @@ -13,140 +13,154 @@ (**************************************************************************) include "ground/lib/star.ma". -include "basic_2/notation/relations/predtystar_5.ma". +include "basic_2/notation/relations/predtystar_4.ma". include "basic_2/rt_transition/cpx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) -definition cpxs: sh → relation4 genv lenv term term ≝ - λh,G. CTC … (cpx h G). +definition cpxs (G): relation3 lenv term term ≝ + CTC … (cpx G). -interpretation "unbound context-sensitive parallel rt-computation (term)" - 'PRedTyStar h G L T1 T2 = (cpxs h G L T1 T2). +interpretation + "extended context-sensitive parallel rt-computation (term)" + 'PRedTyStar G L T1 T2 = (cpxs G L T1 T2). (* Basic eliminators ********************************************************) -lemma cpxs_ind: ∀h,G,L,T1. ∀Q:predicate term. Q T1 → - (∀T,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T → ❪G,L❫ ⊢ T ⬈[h] T2 → Q T → Q T2) → - ∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → Q T2. -#h #L #G #T1 #Q #HT1 #IHT1 #T2 #HT12 +lemma cpxs_ind (G) (L) (T1) (Q:predicate …): + Q T1 → + (∀T,T2. ❪G,L❫ ⊢ T1 ⬈* T → ❪G,L❫ ⊢ T ⬈ T2 → Q T → Q T2) → + ∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → Q T2. +#L #G #T1 #Q #HT1 #IHT1 #T2 #HT12 @(TC_star_ind … HT1 IHT1 … HT12) // qed-. -lemma cpxs_ind_dx: ∀h,G,L,T2. ∀Q:predicate term. Q T2 → - (∀T1,T. ❪G,L❫ ⊢ T1 ⬈[h] T → ❪G,L❫ ⊢ T ⬈*[h] T2 → Q T → Q T1) → - ∀T1. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → Q T1. -#h #G #L #T2 #Q #HT2 #IHT2 #T1 #HT12 +lemma cpxs_ind_dx (G) (L) (T2) (Q:predicate …): + Q T2 → + (∀T1,T. ❪G,L❫ ⊢ T1 ⬈ T → ❪G,L❫ ⊢ T ⬈* T2 → Q T → Q T1) → + ∀T1. ❪G,L❫ ⊢ T1 ⬈* T2 → Q T1. +#G #L #T2 #Q #HT2 #IHT2 #T1 #HT12 @(TC_star_ind_dx … HT2 IHT2 … HT12) // qed-. (* Basic properties *********************************************************) -lemma cpxs_refl: ∀h,G,L,T. ❪G,L❫ ⊢ T ⬈*[h] T. +lemma cpxs_refl (G) (L): + ∀T. ❪G,L❫ ⊢ T ⬈* T. /2 width=1 by inj/ qed. -lemma cpx_cpxs: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2. +lemma cpx_cpxs (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → ❪G,L❫ ⊢ T1 ⬈* T2. /2 width=1 by inj/ qed. -lemma cpxs_strap1: ∀h,G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈*[h] T → - ∀T2. ❪G,L❫ ⊢ T ⬈[h] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2. +lemma cpxs_strap1 (G) (L): + ∀T1,T. ❪G,L❫ ⊢ T1 ⬈* T → + ∀T2. ❪G,L❫ ⊢ T ⬈ T2 → ❪G,L❫ ⊢ T1 ⬈* T2. normalize /2 width=3 by step/ qed-. -lemma cpxs_strap2: ∀h,G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈[h] T → - ∀T2. ❪G,L❫ ⊢ T ⬈*[h] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2. +lemma cpxs_strap2 (G) (L): + ∀T1,T. ❪G,L❫ ⊢ T1 ⬈ T → + ∀T2. ❪G,L❫ ⊢ T ⬈* T2 → ❪G,L❫ ⊢ T1 ⬈* T2. normalize /2 width=3 by TC_strap/ qed-. (* Basic_2A1: was just: cpxs_sort *) -lemma cpxs_sort: ∀h,G,L,s,n. ❪G,L❫ ⊢ ⋆s ⬈*[h] ⋆((next h)^n s). -#h #G #L #s #n elim n -n /2 width=1 by cpx_cpxs/ -#n >iter_S /2 width=3 by cpxs_strap1/ -qed. - -lemma cpxs_bind_dx: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → - ∀I,T1,T2. ❪G,L. ⓑ[I]V1❫ ⊢ T1 ⬈*[h] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. -#h #G #L #V1 #V2 #HV12 #I #T1 #T2 #HT12 #a @(cpxs_ind_dx … HT12) -T1 +lemma cpxs_qu (G) (L): + ∀s1,s2. ❪G,L❫ ⊢ ⋆s1 ⬈* ⋆s2. +/2 width=1 by cpx_cpxs/ qed. + +lemma cpxs_bind_dx (G) (L): + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → + ∀I,T1,T2. ❪G,L. ⓑ[I]V1❫ ⊢ T1 ⬈* T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2. +#G #L #V1 #V2 #HV12 #I #T1 #T2 #HT12 #a @(cpxs_ind_dx … HT12) -T1 /3 width=3 by cpxs_strap2, cpx_cpxs, cpx_pair_sn, cpx_bind/ qed. -lemma cpxs_flat_dx: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → - ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈*[h] ⓕ[I]V2.T2. -#h #G #L #V1 #V2 #HV12 #T1 #T2 #HT12 @(cpxs_ind … HT12) -T2 +lemma cpxs_flat_dx (G) (L): + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → + ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2. +#G #L #V1 #V2 #HV12 #T1 #T2 #HT12 @(cpxs_ind … HT12) -T2 /3 width=5 by cpxs_strap1, cpx_cpxs, cpx_pair_sn, cpx_flat/ qed. -lemma cpxs_flat_sn: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → - ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 → - ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈*[h] ⓕ[I]V2.T2. -#h #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cpxs_ind … H) -V2 +lemma cpxs_flat_sn (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈* V2 → + ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2. +#G #L #T1 #T2 #HT12 #V1 #V2 #H @(cpxs_ind … H) -V2 /3 width=5 by cpxs_strap1, cpx_cpxs, cpx_pair_sn, cpx_flat/ qed. -lemma cpxs_pair_sn: ∀h,I,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 → - ∀T. ❪G,L❫ ⊢ ②[I]V1.T ⬈*[h] ②[I]V2.T. -#h #I #G #L #V1 #V2 #H @(cpxs_ind … H) -V2 +lemma cpxs_pair_sn (G) (L): + ∀I,V1,V2. ❪G,L❫ ⊢ V1 ⬈* V2 → + ∀T. ❪G,L❫ ⊢ ②[I]V1.T ⬈* ②[I]V2.T. +#G #L #I #V1 #V2 #H @(cpxs_ind … H) -V2 /3 width=3 by cpxs_strap1, cpx_pair_sn/ qed. -lemma cpxs_zeta (h) (G) (L) (V): - ∀T1,T. ⇧[1] T ≘ T1 → - ∀T2. ❪G,L❫ ⊢ T ⬈*[h] T2 → ❪G,L❫ ⊢ +ⓓV.T1 ⬈*[h] T2. -#h #G #L #V #T1 #T #HT1 #T2 #H @(cpxs_ind … H) -T2 +lemma cpxs_zeta (G) (L) (V): + ∀T1,T. ⇧[1] T ≘ T1 → + ∀T2. ❪G,L❫ ⊢ T ⬈* T2 → ❪G,L❫ ⊢ +ⓓV.T1 ⬈* T2. +#G #L #V #T1 #T #HT1 #T2 #H @(cpxs_ind … H) -T2 /3 width=3 by cpxs_strap1, cpx_cpxs, cpx_zeta/ qed. (* Basic_2A1: was: cpxs_zeta *) -lemma cpxs_zeta_dx (h) (G) (L) (V): - ∀T2,T. ⇧[1] T2 ≘ T → - ∀T1. ❪G,L.ⓓV❫ ⊢ T1 ⬈*[h] T → ❪G,L❫ ⊢ +ⓓV.T1 ⬈*[h] T2. -#h #G #L #V #T2 #T #HT2 #T1 #H @(cpxs_ind_dx … H) -T1 +lemma cpxs_zeta_dx (G) (L) (V): + ∀T2,T. ⇧[1] T2 ≘ T → + ∀T1. ❪G,L.ⓓV❫ ⊢ T1 ⬈* T → ❪G,L❫ ⊢ +ⓓV.T1 ⬈* T2. +#G #L #V #T2 #T #HT2 #T1 #H @(cpxs_ind_dx … H) -T1 /3 width=3 by cpxs_strap2, cpx_cpxs, cpx_bind, cpx_zeta/ qed. -lemma cpxs_eps: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → - ∀V. ❪G,L❫ ⊢ ⓝV.T1 ⬈*[h] T2. -#h #G #L #T1 #T2 #H @(cpxs_ind … H) -T2 +lemma cpxs_eps (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → + ∀V. ❪G,L❫ ⊢ ⓝV.T1 ⬈* T2. +#G #L #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=3 by cpxs_strap1, cpx_cpxs, cpx_eps/ qed. (* Basic_2A1: was: cpxs_ct *) -lemma cpxs_ee: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 → - ∀T. ❪G,L❫ ⊢ ⓝV1.T ⬈*[h] V2. -#h #G #L #V1 #V2 #H @(cpxs_ind … H) -V2 +lemma cpxs_ee (G) (L): + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈* V2 → + ∀T. ❪G,L❫ ⊢ ⓝV1.T ⬈* V2. +#G #L #V1 #V2 #H @(cpxs_ind … H) -V2 /3 width=3 by cpxs_strap1, cpx_cpxs, cpx_ee/ qed. -lemma cpxs_beta_dx: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → - ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈*[h] ⓓ[p]ⓝW2.V2.T2. -#h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 * -T2 +lemma cpxs_beta_dx (G) (L): + ∀p,V1,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈* T2 → ❪G,L❫ ⊢ W1 ⬈ W2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2. +#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 #HV12 * -T2 /4 width=7 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_beta/ qed. -lemma cpxs_theta_dx: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V → ⇧[1] V ≘ V2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈*[h] T2 → - ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈*[h] ⓓ[p]W2.ⓐV2.T2. -#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2 +lemma cpxs_theta_dx (G) (L): + ∀p,V1,V,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V → ⇧[1] V ≘ V2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈* T2 → + ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2. +#G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2 /4 width=9 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_theta/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: wa just: cpxs_inv_sort1 *) -lemma cpxs_inv_sort1: ∀h,G,L,X2,s. ❪G,L❫ ⊢ ⋆s ⬈*[h] X2 → - ∃n. X2 = ⋆((next h)^n s). -#h #G #L #X2 #s #H @(cpxs_ind … H) -X2 /2 width=2 by ex_intro/ -#X #X2 #_ #HX2 * #n #H destruct -elim (cpx_inv_sort1 … HX2) -HX2 #H destruct /2 width=2 by ex_intro/ -@(ex_intro … (↑n)) >iter_S // +lemma cpxs_inv_sort1 (G) (L): + ∀X2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈* X2 → + ∃s2. X2 = ⋆s2. +#G #L #X2 #s1 #H @(cpxs_ind … H) -X2 /2 width=2 by ex_intro/ +#X #X2 #_ #HX2 * #s #H destruct +elim (cpx_inv_sort1 … HX2) -HX2 #s2 #H destruct /2 width=2 by ex_intro/ qed-. -lemma cpxs_inv_cast1: ∀h,G,L,W1,T1,U2. ❪G,L❫ ⊢ ⓝW1.T1 ⬈*[h] U2 → - ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ⬈*[h] W2 & ❪G,L❫ ⊢ T1 ⬈*[h] T2 & U2 = ⓝW2.T2 - | ❪G,L❫ ⊢ T1 ⬈*[h] U2 - | ❪G,L❫ ⊢ W1 ⬈*[h] U2. -#h #G #L #W1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/ +lemma cpxs_inv_cast1 (G) (L): + ∀W1,T1,U2. ❪G,L❫ ⊢ ⓝW1.T1 ⬈* U2 → + ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ⬈* W2 & ❪G,L❫ ⊢ T1 ⬈* T2 & U2 = ⓝW2.T2 + | ❪G,L❫ ⊢ T1 ⬈* U2 + | ❪G,L❫ ⊢ W1 ⬈* U2. +#G #L #W1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/ #U2 #U #_ #HU2 * /3 width=3 by cpxs_strap1, or3_intro1, or3_intro2/ * #W #T #HW1 #HT1 #H destruct elim (cpx_inv_cast1 … HU2) -HU2 /3 width=3 by cpxs_strap1, or3_intro1, or3_intro2/ * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_aaa.ma index b69f83a24..f63b1416c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_aaa.ma @@ -15,10 +15,11 @@ include "basic_2/rt_transition/lpx_aaa.ma". include "basic_2/rt_computation/cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Properties with atomic arity assignment on terms *************************) -lemma cpxs_aaa_conf: ∀h,G,L. Conf3 … (aaa G L) (cpxs h G L). +lemma cpxs_aaa_conf (G) (L): + Conf3 … (aaa G L) (cpxs G L). #h #G #L @TC_Conf3 @cpx_aaa_conf (**) (* auto fails *) 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 a2dc4c885..4f107fec4 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 @@ -15,18 +15,18 @@ include "basic_2/rt_transition/cnx_cnx.ma". include "basic_2/rt_computation/cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Properties with normal forms *********************************************) -lemma cpxs_cnx (h) (G) (L) (T1): - (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → T1 ≛ T2) → ❪G,L❫ ⊢ ⬈𝐍[h] T1. +lemma cpxs_cnx (G) (L) (T1): + (∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → T1 ≛ T2) → ❪G,L❫ ⊢ ⬈𝐍 T1. /3 width=1 by cpx_cpxs/ qed. (* Inversion lemmas with normal terms ***************************************) -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 +lemma cpxs_inv_cnx1 (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → ❪G,L❫ ⊢ ⬈𝐍 T1 → T1 ≛ T2. +#G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 /5 width=9 by cnx_teqx_trans, teqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma index 87bf9f0b1..92146c7ee 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma @@ -16,66 +16,72 @@ include "ground/xoa/ex_4_5.ma". include "basic_2/rt_transition/cpx_lsubr.ma". include "basic_2/rt_computation/cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Main properties **********************************************************) -theorem cpxs_trans: ∀h,G,L. Transitive … (cpxs h G L). +theorem cpxs_trans (G) (L): + Transitive … (cpxs G L). normalize /2 width=3 by trans_TC/ qed-. -theorem cpxs_bind: ∀h,p,I,G,L,V1,V2,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈*[h] T2 → - ❪G,L❫ ⊢ V1 ⬈*[h] V2 → - ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. -#h #p #I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2 +theorem cpxs_bind (G) (L): + ∀p,I,V1,V2,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈* T2 → + ❪G,L❫ ⊢ V1 ⬈* V2 → + ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2. +#G #L #p #I #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2 /3 width=5 by cpxs_trans, cpxs_bind_dx/ qed. -theorem cpxs_flat: ∀h,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → - ❪G,L❫ ⊢ V1 ⬈*[h] V2 → - ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈*[h] ⓕ[I]V2.T2. -#h #I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2 +theorem cpxs_flat (G) (L): + ∀I,V1,V2,T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → + ❪G,L❫ ⊢ V1 ⬈* V2 → + ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2. +#G #L #I #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2 /3 width=5 by cpxs_trans, cpxs_flat_dx/ qed. -theorem cpxs_beta_rc: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → - ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈*[h] ⓓ[p]ⓝW2.V2.T2. -#h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HT12 #H @(cpxs_ind … H) -W2 +theorem cpxs_beta_rc (G) (L): + ∀p,V1,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈* T2 → ❪G,L❫ ⊢ W1 ⬈* W2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2. +#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HT12 #H @(cpxs_ind … H) -W2 /4 width=5 by cpxs_trans, cpxs_beta_dx, cpxs_bind_dx, cpx_pair_sn/ qed. -theorem cpxs_beta: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ❪G,L.ⓛW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → ❪G,L❫ ⊢ V1 ⬈*[h] V2 → - ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈*[h] ⓓ[p]ⓝW2.V2.T2. -#h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HT12 #HW12 #H @(cpxs_ind … H) -V2 +theorem cpxs_beta (G) (L): + ∀p,V1,V2,W1,W2,T1,T2. + ❪G,L.ⓛW1❫ ⊢ T1 ⬈* T2 → ❪G,L❫ ⊢ W1 ⬈* W2 → ❪G,L❫ ⊢ V1 ⬈* V2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2. +#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 #HT12 #HW12 #H @(cpxs_ind … H) -V2 /4 width=5 by cpxs_trans, cpxs_beta_rc, cpxs_bind_dx, cpx_flat/ qed. -theorem cpxs_theta_rc: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V → ⇧[1] V ≘ V2 → - ❪G,L.ⓓW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → - ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈*[h] ⓓ[p]W2.ⓐV2.T2. -#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cpxs_ind … H) -W2 +theorem cpxs_theta_rc (G) (L): + ∀p,V1,V,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V → ⇧[1] V ≘ V2 → + ❪G,L.ⓓW1❫ ⊢ T1 ⬈* T2 → ❪G,L❫ ⊢ W1 ⬈* W2 → + ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2. +#G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cpxs_ind … H) -W2 /3 width=5 by cpxs_trans, cpxs_theta_dx, cpxs_bind_dx/ qed. -theorem cpxs_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → - ❪G,L.ⓓW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ V1 ⬈*[h] V → - ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈*[h] ⓓ[p]W2.ⓐV2.T2. -#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(TC_ind_dx … V1 H) -V1 +theorem cpxs_theta (G) (L): + ∀p,V1,V,V2,W1,W2,T1,T2. + ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ⬈* W2 → + ❪G,L.ⓓW1❫ ⊢ T1 ⬈* T2 → ❪G,L❫ ⊢ V1 ⬈* V → + ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2. +#p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(TC_ind_dx … V1 H) -V1 /3 width=5 by cpxs_trans, cpxs_theta_rc, cpxs_flat_dx/ qed. (* Advanced inversion lemmas ************************************************) -lemma cpxs_inv_appl1: ∀h,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓐV1.T1 ⬈*[h] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 & ❪G,L❫ ⊢ T1 ⬈*[h] T2 & - U2 = ⓐV2.T2 - | ∃∃p,W,T. ❪G,L❫ ⊢ T1 ⬈*[h] ⓛ[p]W.T & ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ⬈*[h] U2 - | ∃∃p,V0,V2,V,T. ❪G,L❫ ⊢ V1 ⬈*[h] V0 & ⇧[1] V0 ≘ V2 & - ❪G,L❫ ⊢ T1 ⬈*[h] ⓓ[p]V.T & ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ⬈*[h] U2. -#h #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 [ /3 width=5 by or3_intro0, ex3_2_intro/ ] +lemma cpxs_inv_appl1 (G) (L): + ∀V1,T1,U2. ❪G,L❫ ⊢ ⓐV1.T1 ⬈* U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈* V2 & ❪G,L❫ ⊢ T1 ⬈* T2 & U2 = ⓐV2.T2 + | ∃∃p,W,T. ❪G,L❫ ⊢ T1 ⬈* ⓛ[p]W.T & ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ⬈* U2 + | ∃∃p,V0,V2,V,T. ❪G,L❫ ⊢ V1 ⬈* V0 & ⇧[1] V0 ≘ V2 & ❪G,L❫ ⊢ T1 ⬈* ⓓ[p]V.T & ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ⬈* U2. +#G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 [ /3 width=5 by or3_intro0, ex3_2_intro/ ] #U #U2 #_ #HU2 * * [ #V0 #T0 #HV10 #HT10 #H destruct elim (cpx_inv_appl1 … HU2) -HU2 * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma index 7f472e2ad..793a5184f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma @@ -16,13 +16,14 @@ include "static_2/relocation/drops_ctc.ma". include "basic_2/rt_transition/cpx_drops.ma". include "basic_2/rt_computation/cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Advanced properties ******************************************************) -lemma cpxs_delta: ∀h,I,G,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈*[h] V2 → - ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈*[h] W2. -#h #I #G #K #V1 #V2 #H @(cpxs_ind … H) -V2 +lemma cpxs_delta (G) (K): + ∀I,V1,V2. ❪G,K❫ ⊢ V1 ⬈* V2 → + ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈* W2. +#G #K #I #V1 #V2 #H @(cpxs_ind … H) -V2 [ /3 width=3 by cpx_cpxs, cpx_delta/ | #V #V2 #_ #HV2 #IH #W2 #HVW2 elim (lifts_total V (𝐔❨1❩)) @@ -30,9 +31,10 @@ lemma cpxs_delta: ∀h,I,G,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈*[h] V2 → ] qed. -lemma cpxs_lref: ∀h,I,G,K,T,i. ❪G,K❫ ⊢ #i ⬈*[h] T → - ∀U. ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈*[h] U. -#h #I #G #K #T #i #H @(cpxs_ind … H) -T +lemma cpxs_lref (G) (K): + ∀I,T,i. ❪G,K❫ ⊢ #i ⬈* T → + ∀U. ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈* U. +#G #K #I #T #i #H @(cpxs_ind … H) -T [ /3 width=3 by cpx_cpxs, cpx_lref/ | #T0 #T #_ #HT2 #IH #U #HTU elim (lifts_total T0 (𝐔❨1❩)) @@ -41,10 +43,10 @@ lemma cpxs_lref: ∀h,I,G,K,T,i. ❪G,K❫ ⊢ #i ⬈*[h] T → qed. (* Basic_2A1: was: cpxs_delta *) -lemma cpxs_delta_drops: ∀h,I,G,L,K,V1,V2,i. - ⇩[i] L ≘ K.ⓑ[I]V1 → ❪G,K❫ ⊢ V1 ⬈*[h] V2 → - ∀W2. ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬈*[h] W2. -#h #I #G #L #K #V1 #V2 #i #HLK #H @(cpxs_ind … H) -V2 +lemma cpxs_delta_drops (G) (L): + ∀I,K,V1,V2,i. ⇩[i] L ≘ K.ⓑ[I]V1 → ❪G,K❫ ⊢ V1 ⬈* V2 → + ∀W2. ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬈* W2. +#G #L #I #K #V1 #V2 #i #HLK #H @(cpxs_ind … H) -V2 [ /3 width=7 by cpx_cpxs, cpx_delta_drops/ | #V #V2 #_ #HV2 #IH #W2 #HVW2 elim (lifts_total V (𝐔❨↑i❩)) @@ -54,11 +56,11 @@ qed. (* Advanced inversion lemmas ************************************************) -lemma cpxs_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ⬈*[h] T2 → - T2 = #0 ∨ - ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈*[h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓑ[I]V1. -#h #G #L #T2 #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ +lemma cpxs_inv_zero1 (G) (L): + ∀T2. ❪G,L❫ ⊢ #0 ⬈* T2 → + ∨∨ T2 = #0 + | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈* V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1. +#G #L #T2 #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct elim (cpx_inv_zero1 … HT2) -HT2 /2 width=1 by or_introl/ @@ -69,10 +71,11 @@ lemma cpxs_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ⬈*[h] T2 → ] qed-. -lemma cpxs_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ⬈*[h] T2 → - T2 = #(↑i) ∨ - ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈*[h] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. -#h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ +lemma cpxs_inv_lref1 (G) (L): + ∀T2,i. ❪G,L❫ ⊢ #↑i ⬈* T2 → + ∨∨ T2 = #(↑i) + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈* T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. +#G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct elim (cpx_inv_lref1 … HT2) -HT2 /2 width=1 by or_introl/ @@ -84,11 +87,11 @@ lemma cpxs_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ⬈*[h] T2 → qed-. (* Basic_2A1: was: cpxs_inv_lref1 *) -lemma cpxs_inv_lref1_drops: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #i ⬈*[h] T2 → - T2 = #i ∨ - ∃∃I,K,V1,T1. ⇩[i] L ≘ K.ⓑ[I]V1 & ❪G,K❫ ⊢ V1 ⬈*[h] T1 & - ⇧[↑i] T1 ≘ T2. -#h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ +lemma cpxs_inv_lref1_drops (G) (L): + ∀T2,i. ❪G,L❫ ⊢ #i ⬈* T2 → + ∨∨ T2 = #i + | ∃∃I,K,V1,T1. ⇩[i] L ≘ K.ⓑ[I]V1 & ❪G,K❫ ⊢ V1 ⬈* T1 & ⇧[↑i] T1 ≘ T2. +#G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct elim (cpx_inv_lref1_drops … HT2) -HT2 /2 width=1 by or_introl/ @@ -103,17 +106,21 @@ qed-. (* Properties with generic relocation ***************************************) (* Basic_2A1: includes: cpxs_lift *) -lemma cpxs_lifts_sn: ∀h,G. d_liftable2_sn … lifts (cpxs h G). +lemma cpxs_lifts_sn (G): + d_liftable2_sn … lifts (cpxs G). /3 width=10 by cpx_lifts_sn, cpxs_strap1, d2_liftable_sn_CTC/ qed-. -lemma cpxs_lifts_bi: ∀h,G. d_liftable2_bi … lifts (cpxs h G). +lemma cpxs_lifts_bi (G): + d_liftable2_bi … lifts (cpxs G). /3 width=12 by cpxs_lifts_sn, d_liftable2_sn_bi, lifts_mono/ qed-. (* Inversion lemmas with generic relocation *********************************) (* Basic_2A1: includes: cpxs_inv_lift1 *) -lemma cpxs_inv_lifts_sn: ∀h,G. d_deliftable2_sn … lifts (cpxs h G). +lemma cpxs_inv_lifts_sn (G): + d_deliftable2_sn … lifts (cpxs G). /3 width=6 by d2_deliftable_sn_CTC, cpx_inv_lifts_sn/ qed-. -lemma cpxs_inv_lifts_bi: ∀h,G. d_deliftable2_bi … lifts (cpxs h G). +lemma cpxs_inv_lifts_bi (G): + d_deliftable2_bi … lifts (cpxs G). /3 width=12 by cpxs_inv_lifts_sn, d_deliftable2_sn_bi, lifts_inj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_ext.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_ext.ma index c3280871a..e942e64e5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_ext.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_ext.ma @@ -15,11 +15,11 @@ include "static_2/syntax/cext2.ma". include "basic_2/rt_computation/cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR BINDERS ************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR BINDERS ***********) -definition cpxs_ext (h) (G): relation3 lenv bind bind ≝ - cext2 (cpxs h G). +definition cpxs_ext (G): relation3 lenv bind bind ≝ + cext2 (cpxs G). interpretation - "unbound context-sensitive parallel rt-computation (binder)" - 'PRedTyStar h G L I1 I2 = (cpxs_ext h G L I1 I2). + "extended context-sensitive parallel rt-computation (binder)" + 'PRedTyStar G L I1 I2 = (cpxs_ext G L I1 I2). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma index abbddfab7..882543af4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma @@ -15,14 +15,15 @@ include "static_2/static/feqx.ma". include "basic_2/rt_computation/cpxs_reqx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Properties with sort-irrelevant equivalence for closures *****************) -lemma feqx_cpxs_trans: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛ ❪G2,L2,T❫ → - ∀T2. ❪G2,L2❫ ⊢ T ⬈*[h] T2 → - ∃∃T0. ❪G1,L1❫ ⊢ T1 ⬈*[h] T0 & ❪G1,L1,T0❫ ≛ ❪G2,L2,T2❫. -#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 +lemma feqx_cpxs_trans: + ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛ ❪G2,L2,T❫ → + ∀T2. ❪G2,L2❫ ⊢ T ⬈* T2 → + ∃∃T0. ❪G1,L1❫ ⊢ T1 ⬈* T0 & ❪G1,L1,T0❫ ≛ ❪G2,L2,T2❫. +#G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct elim (reqx_cpxs_trans … HT2 … HL12) #T0 #HT0 #HT02 lapply (cpxs_reqx_conf_dx … HT2 … HL12) -HL12 #HL12 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 1dd3b59db..778ba6681 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 @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) include "basic_2/rt_transition/cpx_fqus.ma". include "basic_2/rt_computation/cpxs_drops.ma". @@ -21,44 +21,49 @@ include "basic_2/rt_computation/cpxs_cpxs.ma". (* Properties on supclosure *************************************************) -lemma fqu_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → - ∀T1. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ +lemma fqu_cpxs_trans (b): + ∀G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → + ∀T1. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqu_cpx_trans … HT1 … HT2) -T #T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. -lemma fquq_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → - ∀T1. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ +lemma fquq_cpxs_trans (b): + ∀G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → + ∀T1. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fquq_cpx_trans … HT1 … HT2) -T #T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. -lemma fqup_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → - ∀T1. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ +lemma fqup_cpxs_trans (b): + ∀G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → + ∀T1. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqup_cpx_trans … HT1 … HT2) -T #U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. -lemma fqus_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → - ∀T1. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ +lemma fqus_cpxs_trans (b): + ∀G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → + ∀T1. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqus_cpx_trans … HT1 … HT2) -T #U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. (* Note: a proof based on fqu_cpx_trans_tneqx might exist *) (* Basic_2A1: uses: fqu_cpxs_trans_neq *) -lemma fqu_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 +lemma fqu_cpxs_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. +#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 +93,11 @@ lemma fqu_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G qed-. (* Basic_2A1: uses: fquq_cpxs_trans_neq *) -lemma fquq_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 +lemma fquq_cpxs_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 [ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ @@ -99,10 +105,11 @@ lemma fquq_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] qed-. (* Basic_2A1: uses: fqup_cpxs_trans_neq *) -lemma fqup_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 +lemma fqup_cpxs_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. +#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_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ | #G #G1 #L #L1 #T #T1 #H1 #_ #IH12 #U2 #HTU2 #H elim (IH12 … HTU2 H) -T2 @@ -112,10 +119,11 @@ lemma fqup_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] qed-. (* Basic_2A1: uses: fqus_cpxs_trans_neq *) -lemma fqus_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 +lemma fqus_cpxs_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈* U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈* U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 [ #H12 elim (fqup_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma index 43aee248d..52957ff1d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma @@ -17,14 +17,15 @@ include "basic_2/rt_transition/lpx_fquq.ma". include "basic_2/rt_computation/cpxs_drops.ma". include "basic_2/rt_computation/cpxs_cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) -(* Properties with unbound rt-transition for full local environments ********) +(* Properties with extended rt-transition for full local environments *******) -lemma lpx_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (λ_.lpx h G). -#h #G #L2 #T1 #T2 #H @(cpx_ind … H) -G -L2 -T1 -T2 +lemma lpx_cpx_trans (G): + s_r_transitive … (cpx G) (λ_.lpx G). +#G #L2 #T1 #T2 #H @(cpx_ind … H) -G -L2 -T1 -T2 [ /2 width=3 by/ -| /3 width=2 by cpx_cpxs, cpx_ess/ +| /3 width=2 by cpx_cpxs, cpx_qu/ | #I #G #K2 #V2 #V4 #W4 #_ #IH #HVW4 #L1 #H elim (lpx_inv_pair_dx … H) -H #K1 #V1 #HK12 #HV12 #H destruct /4 width=3 by cpxs_delta, cpxs_strap2/ @@ -38,29 +39,33 @@ lemma lpx_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (λ_.lpx h G). ] qed-. -lemma lpx_cpxs_trans: ∀h,G. s_rs_transitive … (cpx h G) (λ_.lpx h G). -#h #G @s_r_trans_CTC1 /2 width=3 by lpx_cpx_trans/ (**) (* full auto fails *) +lemma lpx_cpxs_trans (G): + s_rs_transitive … (cpx G) (λ_.lpx G). +#G @s_r_trans_CTC1 /2 width=3 by lpx_cpx_trans/ (**) (* full auto fails *) qed-. (* Advanced properties ******************************************************) -lemma cpx_bind2: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈[h] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. +lemma cpx_bind2 (G) (L): + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈ T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2. /4 width=5 by lpx_cpx_trans, cpxs_bind_dx, lpx_pair/ qed. -lemma cpxs_bind2_dx: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈*[h] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. +lemma cpxs_bind2_dx (G) (L): + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈* T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2. /4 width=5 by lpx_cpxs_trans, cpxs_bind_dx, lpx_pair/ qed. (* Properties with plus-iterated structural successor for closures **********) (* Basic_2A1: uses: lpx_fqup_trans *) -lemma lpx_fqup_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → - ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈*[h] T & ❪G1,K1,T❫ ⬂+[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 +lemma lpx_fqup_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈ L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈* T & ❪G1,K1,T❫ ⬂+[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈ L2. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 [ #G2 #L2 #T2 #H12 #K1 #HKL1 elim (lpx_fqu_trans … H12 … HKL1) -L1 /3 width=5 by cpx_cpxs, fqu_fqup, ex3_2_intro/ | #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #K1 #HLK1 elim (IH1 … HLK1) -L1 @@ -73,10 +78,11 @@ qed-. (* Properties with star-iterated structural successor for closures **********) (* Basic_2A1: uses: lpx_fqus_trans *) -lemma lpx_fqus_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → - ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈*[h] T & ❪G1,K1,T❫ ⬂*[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 elim (fqus_inv_fqup … H) -H +lemma lpx_fqus_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈ L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈* T & ❪G1,K1,T❫ ⬂*[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈ L2. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 elim (fqus_inv_fqup … H) -H [ #H12 elim (lpx_fqup_trans … H12 … HKL1) -L1 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma index a4b533b19..173da6adc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma @@ -15,10 +15,10 @@ include "basic_2/rt_transition/cpx_lsubr.ma". include "basic_2/rt_computation/cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Properties with restricted refinement for local environments *************) -lemma lsubr_cpxs_trans: ∀h,G. lsub_trans … (cpxs h G) lsubr. +lemma lsubr_cpxs_trans (G): lsub_trans … (cpxs G) lsubr. /3 width=5 by lsubr_cpx_trans, CTC_lsub_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma index 0e93ddb5b..b523f08b8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma @@ -15,15 +15,15 @@ include "basic_2/rt_transition/cpx_reqx.ma". include "basic_2/rt_computation/cpxs_teqx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: was just: lleq_cpxs_trans *) -lemma reqx_cpxs_trans: ∀h,G,L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈*[h] T1 → - ∀L2. L2 ≛[T0] L0 → - ∃∃T. ❪G,L2❫ ⊢ T0 ⬈*[h] T & T ≛ T1. -#h #G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/ +lemma reqx_cpxs_trans (G): + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈* T1 → ∀L2. L2 ≛[T0] L0 → + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈* T & T ≛ T1. +#G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/ #T0 #T #HT0 #_ #IH #L2 #HL2 elim (reqx_cpx_trans … HL2 … HT0) #U1 #H1 #H2 elim (IH L2) -IH /2 width=5 by cpx_reqx_conf_dx/ -L0 #U2 #H3 #H4 @@ -32,18 +32,20 @@ elim (teqx_cpxs_trans … H2 … H3) -T #U0 #H2 #H3 qed-. (* Basic_2A1: was just: cpxs_lleq_conf *) -lemma cpxs_reqx_conf: ∀h,G,L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈*[h] T1 → - ∀L2. L0 ≛[T0] L2 → - ∃∃T. ❪G,L2❫ ⊢ T0 ⬈*[h] T & T ≛ T1. +lemma cpxs_reqx_conf (G): + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈* T1 → ∀L2. L0 ≛[T0] L2 → + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈* T & T ≛ T1. /3 width=3 by reqx_cpxs_trans, reqx_sym/ qed-. (* Basic_2A1: was just: cpxs_lleq_conf_dx *) -lemma cpxs_reqx_conf_dx: ∀h,G,L2,T1,T2. ❪G,L2❫ ⊢ T1 ⬈*[h] T2 → - ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. -#h #G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_reqx_conf_dx/ +lemma cpxs_reqx_conf_dx (G): + ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ⬈* T2 → + ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. +#G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_reqx_conf_dx/ qed-. (* Basic_2A1: was just: lleq_conf_sn *) -lemma cpxs_reqx_conf_sn: ∀h,G,L1,T1,T2. ❪G,L1❫ ⊢ T1 ⬈*[h] T2 → - ∀L2. L1 ≛[T1] L2 → L1 ≛[T2] L2. +lemma cpxs_reqx_conf_sn (G): + ∀L1,T1,T2. ❪G,L1❫ ⊢ T1 ⬈* T2 → + ∀L2. L1 ≛[T1] L2 → L1 ≛[T2] L2. /4 width=6 by cpxs_reqx_conf_dx, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma index b71b21075..276d8c18f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma @@ -17,24 +17,24 @@ include "basic_2/rt_computation/cpxs_lsubr.ma". include "basic_2/rt_computation/cpxs_cnx.ma". include "basic_2/rt_computation/lpxs_cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Forward lemmas with sort-irrelevant outer equivalence for terms **********) -lemma cpxs_fwd_sort (h) (G) (L): - ∀X2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2. -#h #G #L #X2 #s1 #H +lemma cpxs_fwd_sort (G) (L): + ∀X2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈* X2 → ⋆s1 ⩳ X2. +#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) (I) (G) (L) (K): +lemma cpxs_fwd_delta_drops (I) (G) (L) (K): ∀V1,i. ⇩[i] L ≘ K.ⓑ[I]V1 → ∀V2. ⇧[↑i] V1 ≘ V2 → - ∀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 + ∀X2. ❪G,L❫ ⊢ #i ⬈* X2 → + ∨∨ #i ⩳ X2 | ❪G,L❫ ⊢ V2 ⬈* X2. +#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 @@ -42,10 +42,10 @@ lapply (drops_mono … HLK0 … HLK) -HLK0 #H destruct qed-. (* Basic_1: was just: pr3_iso_beta *) -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 * +lemma cpxs_fwd_beta (p) (G) (L): + ∀V,W,T,X2. ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ⬈* X2 → + ∨∨ ⓐV.ⓛ[p]W.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]ⓝW.V.T ⬈* X2. +#p #G #L #V #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H * [ #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/ | #b #W0 #T0 #HT0 #HU elim (cpxs_inv_abst1 … HT0) -HT0 #W1 #T1 #HW1 #HT1 #H destruct @@ -56,11 +56,11 @@ lemma cpxs_fwd_beta (h) (p) (G) (L): ] qed-. -lemma cpxs_fwd_theta (h) (p) (G) (L): - ∀V1,V,T,X2. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]V.T ⬈*[h] X2 → +lemma cpxs_fwd_theta (p) (G) (L): + ∀V1,V,T,X2. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]V.T ⬈* 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 + ∨∨ ⓐV1.ⓓ[p]V.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ⬈* X2. +#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 teqo_pair, or_introl/ | #q #W #T0 #HT0 #HU @@ -88,15 +88,15 @@ elim (cpxs_inv_appl1 … H) -H * ] qed-. -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 +lemma cpxs_fwd_cast (G) (L): + ∀W,T,X2. ❪G,L❫ ⊢ ⓝW.T ⬈* X2 → + ∨∨ ⓝW. T ⩳ X2 | ❪G,L❫ ⊢ T ⬈* X2 | ❪G,L❫ ⊢ W ⬈* X2. +#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 teqo_pair, or3_intro0/ qed-. -lemma cpxs_fwd_cnx (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈𝐍[h] T1 → - ∀X2. ❪G,L❫ ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2. +lemma cpxs_fwd_cnx (G) (L): + ∀T1. ❪G,L❫ ⊢ ⬈𝐍 T1 → + ∀X2. ❪G,L❫ ⊢ T1 ⬈* X2 → T1 ⩳ X2. /3 width=5 by cpxs_inv_cnx1, teqx_teqo/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma index 96e1fbb61..5bc7ef780 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma @@ -16,13 +16,13 @@ include "static_2/syntax/teqo_simple_vector.ma". include "static_2/relocation/lifts_vector.ma". include "basic_2/rt_computation/cpxs_teqo.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Vector form of forward lemmas with outer equivalence for terms ***********) -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/ +lemma cpxs_fwd_sort_vector (G) (L): + ∀s,Vs,X2. ❪G,L❫ ⊢ ⒶVs.⋆s ⬈* X2 → ⒶVs.⋆s ⩳ X2. +#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 teqo_pair/ @@ -36,12 +36,12 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_2A1: was: cpxs_fwd_delta_vector *) -lemma cpxs_fwd_delta_drops_vector (h) (I) (G) (L) (K): +lemma cpxs_fwd_delta_drops_vector (I) (G) (L) (K): ∀V1,i. ⇩[i] L ≘ K.ⓑ[I]V1 → ∀V2. ⇧[↑i] V1 ≘ V2 → - ∀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 + ∀Vs,X2. ❪G,L❫ ⊢ ⒶVs.#i ⬈* X2 → + ∨∨ ⒶVs.#i ⩳ X2 | ❪G,L❫ ⊢ ⒶVs.V2 ⬈* X2. +#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 * @@ -64,10 +64,10 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_1: was just: pr3_iso_appls_beta *) -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/ +lemma cpxs_fwd_beta_vector (p) (G) (L): + ∀Vs,V,W,T,X2. ❪G,L❫ ⊢ ⒶVs.ⓐV.ⓛ[p]W.T ⬈* X2 → + ∨∨ ⒶVs.ⓐV.ⓛ[p]W. T ⩳ X2 | ❪G,L❫ ⊢ ⒶVs.ⓓ[p]ⓝW.V.T ⬈* X2. +#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 teqo_pair, or_introl/ @@ -89,11 +89,11 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_1: was just: pr3_iso_appls_abbr *) -lemma cpxs_fwd_theta_vector (h) (G) (L): +lemma cpxs_fwd_theta_vector (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/ + ∀p,V,T,X2. ❪G,L❫ ⊢ ⒶV1b.ⓓ[p]V.T ⬈* X2 → + ∨∨ ⒶV1b.ⓓ[p]V.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]V.ⒶV2b.T ⬈* X2. +#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 @@ -139,12 +139,12 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_1: was just: pr3_iso_appls_cast *) -lemma cpxs_fwd_cast_vector (h) (G) (L): - ∀Vs,W,T,X2. ❪G,L❫ ⊢ ⒶVs.ⓝW.T ⬈*[h] X2 → +lemma cpxs_fwd_cast_vector (G) (L): + ∀Vs,W,T,X2. ❪G,L❫ ⊢ ⒶVs.ⓝW.T ⬈* 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/ + | ❪G,L❫ ⊢ ⒶVs.T ⬈* X2 + | ❪G,L❫ ⊢ ⒶVs.W ⬈* X2. +#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 teqo_pair, or3_intro0/ @@ -171,10 +171,10 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_1: was just: nf2_iso_appls_lref *) -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 *) +lemma cpxs_fwd_cnx_vector (G) (L): + ∀T. 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈𝐍 T → + ∀Vs,X2. ❪G,L❫ ⊢ ⒶVs.T ⬈* X2 → ⒶVs.T ⩳ X2. +#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 teqo_pair/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma index 5ccc22d53..f3164e75e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma @@ -15,22 +15,24 @@ include "basic_2/rt_transition/rpx_reqx.ma". include "basic_2/rt_computation/cpxs.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS *************) (* Properties with sort-irrelevant equivalence for terms ********************) -lemma teqx_cpxs_trans: ∀h,U1,T1. U1 ≛ T1 → ∀G,L,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → - ∃∃U2. ❪G,L❫ ⊢ U1 ⬈*[h] U2 & U2 ≛ T2. -#h #U1 #T1 #HUT1 #G #L #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/ +lemma teqx_cpxs_trans (G) (L): + ∀U1,T1. U1 ≛ T1 → ∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → + ∃∃U2. ❪G,L❫ ⊢ U1 ⬈* U2 & U2 ≛ T2. +#G #L #U1 #T1 #HUT1 #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/ #T #T2 #_ #HT2 * #U #HU1 #HUT elim (teqx_cpx_trans … HUT … HT2) -T -T1 /3 width=3 by ex2_intro, cpxs_strap1/ qed-. (* Note: this requires teqx to be symmetric *) (* Nasic_2A1: uses: cpxs_neq_inv_step_sn *) -lemma cpxs_tneqx_fwd_step_sn: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → - ∃∃T,T0. ❪G,L❫ ⊢ T1 ⬈[h] T & T1 ≛ T → ⊥ & ❪G,L❫ ⊢ T ⬈*[h] T0 & T0 ≛ T2. -#h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 +lemma cpxs_tneqx_fwd_step_sn (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → (T1 ≛ T2 → ⊥) → + ∃∃T,T0. ❪G,L❫ ⊢ T1 ⬈ T & T1 ≛ T → ⊥ & ❪G,L❫ ⊢ T ⬈* T0 & T0 ≛ T2. +#G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 [ #H elim H -H // | #T1 #T0 #HT10 #HT02 #IH #Hn12 elim (teqx_dec T1 T0) [ -HT10 -HT02 #H10 | -IH #Hn10 ] 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 31f2e017a..13db8d1f3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma @@ -12,91 +12,91 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtystrong_4.ma". +include "basic_2/notation/relations/predtystrong_3.ma". include "static_2/syntax/teqx.ma". include "basic_2/rt_transition/cpx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) -definition csx (h) (G) (L): predicate term ≝ - SN … (cpx h G L) teqx. +definition csx (G) (L): predicate term ≝ + SN … (cpx G L) teqx. interpretation - "strong normalization for unbound context-sensitive parallel rt-transition (term)" - 'PRedTyStrong h G L T = (csx h G L T). + "strong normalization for extended context-sensitive parallel rt-transition (term)" + 'PRedTyStrong G L T = (csx G L T). (* Basic eliminators ********************************************************) -lemma csx_ind (h) (G) (L) (Q:predicate …): - (∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → - (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → +lemma csx_ind (G) (L) (Q:predicate …): + (∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → + (∀T2. ❪G,L❫ ⊢ T1 ⬈ T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ❪G,L❫ ⊢ ⬈*𝐒[h] T → Q T. -#h #G #L #Q #H0 #T1 #H elim H -T1 + ∀T. ❪G,L❫ ⊢ ⬈*𝐒 T → Q T. +#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) (G) (L): - ∀T1. (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*𝐒[h] T2) → - ❪G,L❫ ⊢ ⬈*𝐒[h] T1. +lemma csx_intro (G) (L): + ∀T1. (∀T2. ❪G,L❫ ⊢ T1 ⬈ T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*𝐒 T2) → + ❪G,L❫ ⊢ ⬈*𝐒 T1. /4 width=1 by SN_intro/ qed. (* Basic forward lemmas *****************************************************) -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 +fact csx_fwd_pair_sn_aux (G) (L): + ∀U. ❪G,L❫ ⊢ ⬈*𝐒 U → + ∀I,V,T. U = ②[I]V.T → ❪G,L❫ ⊢ ⬈*𝐒 V. +#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 (teqx_inv_pair … H) -H /2 width=1 by/ +@(IH (②[I]V2.T)) -IH /2 width=3 by cpx_pair_sn/ -HLV2 #H +elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_head *) -lemma csx_fwd_pair_sn (h) (G) (L): - ∀I,V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ②[I]V.T → ❪G,L❫ ⊢ ⬈*𝐒[h] V. +lemma csx_fwd_pair_sn (G) (L): + ∀I,V,T. ❪G,L❫ ⊢ ⬈*𝐒 ②[I]V.T → ❪G,L❫ ⊢ ⬈*𝐒 V. /2 width=5 by csx_fwd_pair_sn_aux/ qed-. -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 +fact csx_fwd_bind_dx_aux (G) (L): + ∀U. ❪G,L❫ ⊢ ⬈*𝐒 U → + ∀p,I,V,T. U = ⓑ[p,I]V.T → ❪G,L.ⓑ[I]V❫ ⊢ ⬈*𝐒 T. +#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 (teqx_inv_pair … H) -H /2 width=1 by/ +@(IH (ⓑ[p, I]V.T2)) -IH /2 width=3 by cpx_bind/ -HLT2 #H +elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_bind *) -lemma csx_fwd_bind_dx (h) (G) (L): - ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓑ[p,I]V.T → ❪G,L.ⓑ[I]V❫ ⊢ ⬈*𝐒[h] T. +lemma csx_fwd_bind_dx (G) (L): + ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓑ[p,I]V.T → ❪G,L.ⓑ[I]V❫ ⊢ ⬈*𝐒 T. /2 width=4 by csx_fwd_bind_dx_aux/ qed-. -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 +fact csx_fwd_flat_dx_aux (G) (L): + ∀U. ❪G,L❫ ⊢ ⬈*𝐒 U → + ∀I,V,T. U = ⓕ[I]V.T → ❪G,L❫ ⊢ ⬈*𝐒 T. +#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 (teqx_inv_pair … H) -H /2 width=1 by/ +@(IH (ⓕ[I]V.T2)) -IH /2 width=3 by cpx_flat/ -HLT2 #H +elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_flat *) -lemma csx_fwd_flat_dx (h) (G) (L): - ∀I,V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓕ[I]V.T → ❪G,L❫ ⊢ ⬈*𝐒[h] T. +lemma csx_fwd_flat_dx (G) (L): + ∀I,V,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓕ[I]V.T → ❪G,L❫ ⊢ ⬈*𝐒 T. /2 width=5 by csx_fwd_flat_dx_aux/ qed-. -lemma csx_fwd_bind (h) (G) (L): - ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓑ[p,I]V.T → - ∧∧ ❪G,L❫ ⊢ ⬈*𝐒[h] V & ❪G,L.ⓑ[I]V❫ ⊢ ⬈*𝐒[h] T. +lemma csx_fwd_bind (G) (L): + ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓑ[p,I]V.T → + ∧∧ ❪G,L❫ ⊢ ⬈*𝐒 V & ❪G,L.ⓑ[I]V❫ ⊢ ⬈*𝐒 T. /3 width=3 by csx_fwd_pair_sn, csx_fwd_bind_dx, conj/ qed-. -lemma csx_fwd_flat (h) (G) (L): - ∀I,V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓕ[I]V.T → - ∧∧ ❪G,L❫ ⊢ ⬈*𝐒[h] V & ❪G,L❫ ⊢ ⬈*𝐒[h] T. +lemma csx_fwd_flat (G) (L): + ∀I,V,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓕ[I]V.T → + ∧∧ ❪G,L❫ ⊢ ⬈*𝐒 V & ❪G,L❫ ⊢ ⬈*𝐒 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 2f2544ad8..3e1beaa7b 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 @@ -17,49 +17,49 @@ include "basic_2/rt_computation/cpxs_aaa.ma". include "basic_2/rt_computation/csx_gcp.ma". include "basic_2/rt_computation/csx_gcr.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Main properties with atomic arity assignment *****************************) -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) +theorem aaa_csx (G) (L): + ∀T,A. ❪G,L❫ ⊢ T ⁝ A → ❪G,L❫ ⊢ ⬈*𝐒 T. +#G #L #T #A #H +@(gcr_aaa … csx_gcp csx_gcr … H) qed. (* Advanced eliminators *****************************************************) -fact aaa_ind_csx_aux (h) (G) (L): - ∀A. ∀Q:predicate term. +fact aaa_ind_csx_aux (G) (L): + ∀A. ∀Q:predicate …. (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → - (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T2. ❪G,L❫ ⊢ T1 ⬈ T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀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/ + ∀T. ❪G,L❫ ⊢ ⬈*𝐒 T → ❪G,L❫ ⊢ T ⁝ A → Q T. +#G #L #A #Q #IH #T #H @(csx_ind … H) -T /4 width=5 by cpx_aaa_conf/ qed-. -lemma aaa_ind_csx (h) (G) (L): - ∀A. ∀Q:predicate term. +lemma aaa_ind_csx (G) (L): + ∀A. ∀Q:predicate …. (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → - (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T2. ❪G,L❫ ⊢ T1 ⬈ 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) (G) (L): - ∀A. ∀Q:predicate term. +fact aaa_ind_csx_cpxs_aux (G) (L): + ∀A. ∀Q:predicate …. (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → - (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀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/ + ∀T. ❪G,L❫ ⊢ ⬈*𝐒 T → ❪G,L❫ ⊢ T ⁝ A → Q T. +#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) (G) (L): - ∀A. ∀Q:predicate term. +lemma aaa_ind_csx_cpxs (G) (L): + ∀A. ∀Q:predicate …. (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → - (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ❪G,L❫ ⊢ T ⁝ A → Q T. + ∀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 feee761c6..dfb86156a 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 @@ -12,20 +12,20 @@ (* *) (**************************************************************************) -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) - include "basic_2/rt_transition/cnx.ma". include "basic_2/rt_computation/csx.ma". -(* Properties with normal terms for unbound parallel rt-transition **********) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) + +(* Properties with normal terms for extended parallel rt-transition *********) (* Basic_1: was just: sn3_nf2 *) -lemma cnx_csx (h) (G) (L): - ∀T. ❪G,L❫ ⊢ ⬈𝐍[h] T → ❪G,L❫ ⊢ ⬈*𝐒[h] T. +lemma cnx_csx (G) (L): + ∀T. ❪G,L❫ ⊢ ⬈𝐍 T → ❪G,L❫ ⊢ ⬈*𝐒 T. /2 width=1 by NF_to_SN/ qed. (* Advanced properties ******************************************************) -lemma csx_sort (h) (G) (L): - ∀s. ❪G,L❫ ⊢ ⬈*𝐒[h] ⋆s. +lemma csx_sort (G) (L): + ∀s. ❪G,L❫ ⊢ ⬈*𝐒 ⋆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 a1f659355..6110714a1 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 @@ -12,22 +12,22 @@ (* *) (**************************************************************************) -(* STRONGLY NORMALIZING TERM VECTORS FOR UNBOUND PARALLEL RT-TRANSITION *****) - include "basic_2/rt_computation/cpxs_teqo_vector.ma". include "basic_2/rt_computation/csx_simple_teqo.ma". include "basic_2/rt_computation/csx_cnx.ma". include "basic_2/rt_computation/csx_cpxs.ma". include "basic_2/rt_computation/csx_vector.ma". -(* Properties with normal terms for unbound parallel rt-transition **********) +(* STRONGLY NORMALIZING TERM VECTORS FOR EXTENDED PARALLEL RT-TRANSITION ****) + +(* Properties with normal terms for extended parallel rt-transition *********) (* Basic_1: was just: sn3_appls_lref *) -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/ +lemma csx_applv_cnx (G) (L): + ∀T. 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈𝐍 T → + ∀Vs. ❪G,L❫ ⊢ ⬈*𝐒 Vs → ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.T. +#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_teqo /2 width=1 by applv_simple/ -IHV -HV -HVs @@ -40,6 +40,6 @@ qed. (* Advanced properties ******************************************************) (* Note: strong normalization does not depend on this any more *) -lemma csx_applv_sort (h) (G) (L): - ∀s,Vs. ❪G,L❫ ⊢ ⬈*𝐒[h] Vs → ❪G,L❫ ⊢ ⬈*𝐒[h] ⒶVs.⋆s. +lemma csx_applv_sort (G) (L): + ∀s,Vs. ❪G,L❫ ⊢ ⬈*𝐒 Vs → ❪G,L❫ ⊢ ⬈*𝐒 Ⓐ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 1fecc55e4..baba7a131 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 @@ -16,34 +16,34 @@ include "basic_2/rt_computation/cpxs_teqx.ma". include "basic_2/rt_computation/cpxs_cpxs.ma". include "basic_2/rt_computation/csx_csx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) -(* Properties with unbound context-sensitive rt-computation for terms *******) +(* Properties with extended context-sensitive rt-computation for terms ******) (* Basic_1: was just: sn3_intro *) -lemma csx_intro_cpxs (h) (G) (L): - ∀T1. (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*𝐒[h] T2) → - ❪G,L❫ ⊢ ⬈*𝐒[h] T1. +lemma csx_intro_cpxs (G) (L): + ∀T1. (∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*𝐒 T2) → + ❪G,L❫ ⊢ ⬈*𝐒 T1. /4 width=1 by cpx_cpxs, csx_intro/ qed-. (* Basic_1: was just: sn3_pr3_trans *) -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 +lemma csx_cpxs_trans (G) (L): + ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → + ∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → ❪G,L❫ ⊢ ⬈*𝐒 T2. +#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 ******) +(* Eliminators with extended context-sensitive rt-computation for terms *****) -lemma csx_ind_cpxs_teqx (h) (G) (L): +lemma csx_ind_cpxs_teqx (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❫ ⊢ ⬈*𝐒 T1 → + (∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q 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. ❪G,L❫ ⊢ ⬈*𝐒 T1 → + ∀T0. ❪G,L❫ ⊢ T1 ⬈* T0 → ∀T2. T0 ≛ T2 → Q T2. +#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_teqx_trans/ -HT1 #V2 #HTV2 #HnTV2 lapply (teqx_tneqx_trans … HT02 … HnTV2) -HnTV2 #H @@ -61,11 +61,11 @@ elim (teqx_dec T1 T0) #H qed-. (* Basic_2A1: was: csx_ind_alt *) -lemma csx_ind_cpxs (h) (G) (L) (Q:predicate …): - (∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → - (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 +lemma csx_ind_cpxs (G) (L) (Q:predicate …): + (∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → + (∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ❪G,L❫ ⊢ ⬈*𝐒[h] T → Q T. -#h #G #L #Q #IH #T #HT + ∀T. ❪G,L❫ ⊢ ⬈*𝐒 T → Q T. +#G #L #Q #IH #T #HT @(csx_ind_cpxs_teqx … IH … HT) -IH -HT // (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma index 4a89de6b3..86dc07b45 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 @@ -15,30 +15,30 @@ include "basic_2/rt_transition/lpx_reqx.ma". include "basic_2/rt_computation/csx_drops.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Advanced properties ******************************************************) -lemma csx_teqx_trans (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → - ∀T2. T1 ≛ T2 → ❪G,L❫ ⊢ ⬈*𝐒[h] T2. -#h #G #L #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2 +lemma csx_teqx_trans (G) (L): + ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → + ∀T2. T1 ≛ T2 → ❪G,L❫ ⊢ ⬈*𝐒 T2. +#G #L #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2 @csx_intro #T1 #HT21 #HnT21 elim (teqx_cpx_trans … HT2 … HT21) -HT21 /4 width=5 by teqx_repl/ qed-. -lemma csx_cpx_trans (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → - ∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → ❪G,L❫ ⊢ ⬈*𝐒[h] T2. -#h #G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12 +lemma csx_cpx_trans (G) (L): + ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → + ∀T2. ❪G,L❫ ⊢ T1 ⬈ T2 → ❪G,L❫ ⊢ ⬈*𝐒 T2. +#G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12 elim (teqx_dec T1 T2) /3 width=4 by csx_teqx_trans/ qed-. (* Basic_1: was just: sn3_cast *) -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 +lemma csx_cast (G) (L): + ∀W. ❪G,L❫ ⊢ ⬈*𝐒 W → + ∀T. ❪G,L❫ ⊢ ⬈*𝐒 T → ❪G,L❫ ⊢ ⬈*𝐒 ⓝW.T. +#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 @@ -54,10 +54,10 @@ qed. (* Basic_1: was just: sn3_abbr *) (* Basic_2A1: was: csx_lref_bind *) -lemma csx_lref_pair_drops (h) (G) (L): +lemma csx_lref_pair_drops (G) (L): ∀I,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → - ❪G,K❫ ⊢ ⬈*𝐒[h] V → ❪G,L❫ ⊢ ⬈*𝐒[h] #i. -#h #G #L #I #K #V #i #HLK #HV + ❪G,K❫ ⊢ ⬈*𝐒 V → ❪G,L❫ ⊢ ⬈*𝐒 #i. +#G #L #I #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 @@ -70,19 +70,19 @@ qed. (* Basic_1: was: sn3_gen_def *) (* Basic_2A1: was: csx_inv_lref_bind *) -lemma csx_inv_lref_pair_drops (h) (G) (L): +lemma csx_inv_lref_pair_drops (G) (L): ∀I,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → - ❪G,L❫ ⊢ ⬈*𝐒[h] #i → ❪G,K❫ ⊢ ⬈*𝐒[h] V. -#h #G #L #I #K #V #i #HLK #Hi + ❪G,L❫ ⊢ ⬈*𝐒 #i → ❪G,K❫ ⊢ ⬈*𝐒 V. +#G #L #I #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_drops (h) (G) (L): - ∀i. ❪G,L❫ ⊢ ⬈*𝐒[h] #i → +lemma csx_inv_lref_drops (G) (L): + ∀i. ❪G,L❫ ⊢ ⬈*𝐒 #i → ∨∨ ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ | ∃∃I,K. ⇩[i] L ≘ K.ⓤ[I] - | ∃∃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/ + | ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*𝐒 V. +#G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/ * * /4 width=9 by csx_inv_lref_pair_drops, 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 39779d75a..c5d14bbe2 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 @@ -18,15 +18,15 @@ include "basic_2/rt_computation/csx_lsubr.ma". include "basic_2/rt_computation/csx_lpx.ma". include "basic_2/rt_computation/csx_vector.ma". -(* STRONGLY NORMALIZING TERM VECTORS FOR UNBOUND PARALLEL RT-TRANSITION *****) +(* STRONGLY NORMALIZING TERM VECTORS FOR EXTENDED PARALLEL RT-TRANSITION ****) (* Advanced properties ************************************* ****************) (* Basic_1: was just: sn3_appls_beta *) -lemma csx_applv_beta (h) (G) (L): - ∀p,Vs,V,W,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⒶVs.ⓓ[p]ⓝW.V.T → - ❪G,L❫ ⊢ ⬈*𝐒[h] ⒶVs.ⓐV.ⓛ[p]W.T. -#h #G #L #p #Vs elim Vs -Vs /2 width=1 by csx_appl_beta/ +lemma csx_applv_beta (G) (L): + ∀p,Vs,V,W,T. ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.ⓓ[p]ⓝW.V.T → + ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.ⓐV.ⓛ[p]W.T. +#G #L #p #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 @@ -38,11 +38,11 @@ elim (cpxs_fwd_beta_vector … H) -H #H ] qed. -lemma csx_applv_delta_drops (h) (G) (L): +lemma csx_applv_delta_drops (G) (L): ∀I,K,V1,i. ⇩[i] L ≘ K.ⓑ[I]V1 → ∀V2. ⇧[↑i] V1 ≘ V2 → - ∀Vs. ❪G,L❫ ⊢ ⬈*𝐒[h] ⒶVs.V2 → ❪G,L❫ ⊢ ⬈*𝐒[h] ⒶVs.#i. -#h #G #L #I #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs + ∀Vs. ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.V2 → ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.#i. +#G #L #I #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs [ /4 width=11 by csx_inv_lifts, csx_lref_pair_drops, drops_isuni_fwd_drop2/ | #V #Vs #IHV #H1T lapply (csx_fwd_pair_sn … H1T) #HV @@ -57,10 +57,10 @@ lemma csx_applv_delta_drops (h) (G) (L): qed. (* Basic_1: was just: sn3_appls_abbr *) -lemma csx_applv_theta (h) (G) (L): +lemma csx_applv_theta (G) (L): ∀p,V1b,V2b. ⇧[1] V1b ≘ V2b → - ∀V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓓ[p]V.ⒶV2b.T → ❪G,L❫ ⊢ ⬈*𝐒[h] ⒶV1b.ⓓ[p]V.T. -#h #G #L #p #V1b #V2b * -V1b -V2b /2 width=1 by/ + ∀V,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓓ[p]V.ⒶV2b.T → ❪G,L❫ ⊢ ⬈*𝐒 ⒶV1b.ⓓ[p]V.T. +#G #L #p #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/ @@ -76,10 +76,10 @@ elim (cpxs_fwd_theta_vector … (V2⨮V2b) … H1) -H1 /2 width=1 by liftsv_cons qed. (* Basic_1: was just: sn3_appls_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/ +lemma csx_applv_cast (G) (L): + ∀Vs,U. ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.U → + ∀T. ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.T → ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.ⓝU.T. +#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 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 c9b3c1ebf..dbc631bb0 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 @@ -16,15 +16,15 @@ include "static_2/relocation/lifts_teqx.ma". include "basic_2/rt_transition/cpx_drops.ma". include "basic_2/rt_computation/csx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Properties with generic relocation ***************************************) (* Basic_1: was just: sn3_lift *) (* Basic_2A1: was just: csx_lift *) -lemma csx_lifts (h) (G): - d_liftable1 … (csx h G). -#h #G #K #T #H @(csx_ind … H) -T +lemma csx_lifts (G): + d_liftable1 … (csx G). +#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 @@ -35,9 +35,9 @@ qed-. (* Basic_1: was just: sn3_gen_lift *) (* Basic_2A1: was just: csx_inv_lift *) -lemma csx_inv_lifts (h) (G): - d_deliftable1 … (csx h G). -#h #G #L #U #H @(csx_ind … H) -U +lemma csx_inv_lifts (G): + d_deliftable1 … (csx G). +#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_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma index 5c8c2c00c..dc64354d0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma @@ -15,13 +15,13 @@ include "static_2/static/feqx.ma". include "basic_2/rt_computation/csx_reqx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Properties with sort-irrelevant equivalence for closures *****************) -lemma csx_feqx_conf (h): - ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*𝐒[h] T1 → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*𝐒[h] T2. -#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 +lemma csx_feqx_conf: + ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. +#G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 /3 width=3 by csx_reqx_conf, csx_teqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma index da10c5143..70f70453d 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 @@ -17,14 +17,14 @@ include "basic_2/rt_computation/csx_fqus.ma". include "basic_2/rt_computation/csx_feqx.ma". include "basic_2/rt_computation/csx_lpx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Properties with parallel rst-transition for closures *********************) (* Basic_2A1: was: csx_fpb_conf *) -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 * +lemma csx_fpbq_conf: + ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. +#G1 #L1 #T1 #HT1 #G2 #L2 #T2 * /2 width=6 by csx_cpx_trans, csx_fquq_conf, csx_lpx_conf, csx_feqx_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma index 811435f34..2c4c56027 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 @@ -15,14 +15,14 @@ include "static_2/s_computation/fqus.ma". include "basic_2/rt_computation/csx_lsubr.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Properties with extended supclosure **************************************) -lemma csx_fqu_conf (h) (b): +lemma csx_fqu_conf (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 + ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. +#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, drops_refl/ | /2 width=3 by csx_fwd_pair_sn/ | /2 width=2 by csx_fwd_bind_dx/ @@ -32,23 +32,23 @@ lemma csx_fqu_conf (h) (b): ] qed-. -lemma csx_fquq_conf (h) (b): +lemma csx_fquq_conf (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/ + ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. +#b #G1 #G2 #L1 #L2 #T1 #T2 * /2 width=6 by csx_fqu_conf/ * #HG #HL #HT destruct // qed-. -lemma csx_fqup_conf (h) (b): +lemma csx_fqup_conf (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 + ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. +#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) (b): +lemma csx_fqus_conf (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 + ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. +#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 e042402ea..c35b38731 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 @@ -16,13 +16,13 @@ include "static_2/static/gcp.ma". include "basic_2/rt_transition/cnx_drops.ma". include "basic_2/rt_computation/csx_drops.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Main properties with generic computation properties **********************) -theorem csx_gcp (h): - gcp (cpx h) teqx (csx h). -#h @mk_gcp +theorem csx_gcp: + gcp cpx teqx csx. +@mk_gcp [ normalize /3 width=13 by cnx_lifts/ | /2 width=4 by cnx_sort/ | /2 width=8 by csx_lifts/ 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 24ce3517d..c75fddb61 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 @@ -16,13 +16,13 @@ include "static_2/static/gcp_cr.ma". include "basic_2/rt_computation/csx_cnx_vector.ma". include "basic_2/rt_computation/csx_csx_vector.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Main properties with generic candidates of reducibility ******************) -theorem csx_gcr (h): - gcr (cpx h) teqx (csx h) (csx h). -#h @mk_gcr +theorem csx_gcr: + gcr cpx teqx csx csx. +@mk_gcr [ // | #G #L #Vs #Hvs #T #HT #H @(csx_applv_cnx … H) -H // (**) (* auto fails *) 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 04b75e3ea..bcb4dea88 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 @@ -15,23 +15,23 @@ include "basic_2/rt_computation/cpxs_lpx.ma". include "basic_2/rt_computation/csx_cpxs.ma". -(* CONTEXT-SENSITIVE EXTENDED STRONGLY NORMALIZING TERMS ********************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) -(* Properties with unbound parallel rt-transition on all entries ************) +(* Properties with extended parallel rt-transition on all entries ***********) -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 +lemma csx_lpx_conf (G) (L1): + ∀T. ❪G,L1❫ ⊢ ⬈*𝐒 T → + ∀L2. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L2❫ ⊢ ⬈*𝐒 T. +#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) (G) (L): - ∀p,W. ❪G,L❫ ⊢ ⬈*𝐒[h] W → - ∀T. ❪G,L.ⓛW❫ ⊢ ⬈*𝐒[h] T → ❪G,L❫ ⊢ ⬈*𝐒[h] ⓛ[p]W.T. -#h #G #L #p #W #HW +lemma csx_abst (G) (L): + ∀p,W. ❪G,L❫ ⊢ ⬈*𝐒 W → + ∀T. ❪G,L.ⓛW❫ ⊢ ⬈*𝐒 T → ❪G,L❫ ⊢ ⬈*𝐒 ⓛ[p]W.T. +#G #L #p #W #HW @(csx_ind … HW) -W #W #_ #IHW #T #HT @(csx_ind … HT) -T #T #HT #IHT @csx_intro #X #H1 #H2 @@ -44,10 +44,10 @@ elim (tneqx_inv_pair … H2) -H2 ] qed. -lemma csx_abbr (h) (G) (L): - ∀p,V. ❪G,L❫ ⊢ ⬈*𝐒[h] V → - ∀T. ❪G,L.ⓓV❫ ⊢ ⬈*𝐒[h] T → ❪G,L❫ ⊢ ⬈*𝐒[h] ⓓ[p]V.T. -#h #G #L #p #V #HV +lemma csx_abbr (G) (L): + ∀p,V. ❪G,L❫ ⊢ ⬈*𝐒 V → + ∀T. ❪G,L.ⓓV❫ ⊢ ⬈*𝐒 T → ❪G,L❫ ⊢ ⬈*𝐒 ⓓ[p]V.T. +#G #L #p #V #HV @(csx_ind … HV) -V #V #_ #IHV #T #HT @(csx_ind_cpxs … HT) -T #T #HT #IHT @csx_intro #X #H1 #H2 @@ -63,17 +63,17 @@ elim (cpx_inv_abbr1 … H1) -H1 * ] qed. -lemma csx_bind (h) (G) (L): - ∀p,I,V. ❪G,L❫ ⊢ ⬈*𝐒[h] V → - ∀T. ❪G,L.ⓑ[I]V❫ ⊢ ⬈*𝐒[h] T → ❪G,L❫ ⊢ ⬈*𝐒[h] ⓑ[p,I]V.T. -#h #G #L #p * #V #HV #T #HT +lemma csx_bind (G) (L): + ∀p,I,V. ❪G,L❫ ⊢ ⬈*𝐒 V → + ∀T. ❪G,L.ⓑ[I]V❫ ⊢ ⬈*𝐒 T → ❪G,L❫ ⊢ ⬈*𝐒 ⓑ[p,I]V.T. +#G #L #p * #V #HV #T #HT /2 width=1 by csx_abbr, csx_abst/ qed. -fact csx_appl_theta_aux (h) (G) (L): - ∀p,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 #G #L #p #X #H +fact csx_appl_theta_aux (G) (L): + ∀p,U. ❪G,L❫ ⊢ ⬈*𝐒 U → ∀V1,V2. ⇧[1] V1 ≘ V2 → + ∀V,T. U = ⓓ[p]V.ⓐV2.T → ❪G,L❫ ⊢ ⬈*𝐒 ⓐV1.ⓓ[p]V.T. +#G #L #p #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 @@ -105,7 +105,7 @@ elim (cpx_inv_appl1 … HL) -HL * ] qed-. -lemma csx_appl_theta (h) (G) (L): - ∀p,V,V2,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓓ[p]V.ⓐV2.T → - ∀V1. ⇧[1] V1 ≘ V2 → ❪G,L❫ ⊢ ⬈*𝐒[h] ⓐV1.ⓓ[p]V.T. +lemma csx_appl_theta (G) (L): + ∀p,V,V2,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓓ[p]V.ⓐV2.T → + ∀V1. ⇧[1] V1 ≘ V2 → ❪G,L❫ ⊢ ⬈*𝐒 ⓐ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 a8a930a31..fdc989cbc 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 @@ -15,12 +15,12 @@ include "basic_2/rt_computation/csx_lpx.ma". include "basic_2/rt_computation/lpxs_lpx.ma". -(* CONTEXT-SENSITIVE EXTENDED STRONGLY NORMALIZING TERMS ********************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) -(* Properties with unbound parallel rt-computation on all entries ***********) +(* Properties with extended parallel rt-computation on all entries **********) -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 +lemma csx_lpxs_conf (G) (L1): + ∀L2,T. ❪G,L1❫ ⊢ ⬈* L2 → ❪G,L1❫ ⊢ ⬈*𝐒 T → ❪G,L2❫ ⊢ ⬈*𝐒 T. +#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 2be0d7fdb..8dd554a95 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 @@ -15,14 +15,14 @@ include "basic_2/rt_transition/cpx_lsubr.ma". include "basic_2/rt_computation/csx_csx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Advanced properties ******************************************************) -fact csx_appl_beta_aux (h) (G) (L): - ∀p,U1. ❪G,L❫ ⊢ ⬈*𝐒[h] U1 → - ∀V,W,T1. U1 = ⓓ[p]ⓝW.V.T1 → ❪G,L❫ ⊢ ⬈*𝐒[h] ⓐV.ⓛ[p]W.T1. -#h #G #L #p #X #H @(csx_ind … H) -X +fact csx_appl_beta_aux (G) (L): + ∀p,U1. ❪G,L❫ ⊢ ⬈*𝐒 U1 → + ∀V,W,T1. U1 = ⓓ[p]ⓝW.V.T1 → ❪G,L❫ ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T1. +#G #L #p #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 * @@ -43,36 +43,36 @@ elim (cpx_inv_appl1 … H1) -H1 * qed-. (* Basic_1: was just: sn3_beta *) -lemma csx_appl_beta (h) (G) (L): - ∀p,V,W,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓓ[p]ⓝW.V.T → ❪G,L❫ ⊢ ⬈*𝐒[h] ⓐV.ⓛ[p]W.T. +lemma csx_appl_beta (G) (L): + ∀p,V,W,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓓ[p]ⓝW.V.T → ❪G,L❫ ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T. /2 width=3 by csx_appl_beta_aux/ qed. (* Advanced forward lemmas **************************************************) -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 +fact csx_fwd_bind_dx_unit_aux (G) (L): + ∀U. ❪G,L❫ ⊢ ⬈*𝐒 U → + ∀p,I,J,V,T. U = ⓑ[p,I]V.T → ❪G,L.ⓤ[J]❫ ⊢ ⬈*𝐒 T. +#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 (teqx_inv_pair … H) -H /2 width=1 by/ +@(IH (ⓑ[p, I]V.T2)) -IH /2 width=4 by cpx_bind_unit/ -HLT2 #H +elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. -lemma csx_fwd_bind_dx_unit (h) (G) (L): - ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓑ[p,I]V.T → - ∀J. ❪G,L.ⓤ[J]❫ ⊢ ⬈*𝐒[h] T. +lemma csx_fwd_bind_dx_unit (G) (L): + ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓑ[p,I]V.T → + ∀J. ❪G,L.ⓤ[J]❫ ⊢ ⬈*𝐒 T. /2 width=6 by csx_fwd_bind_dx_unit_aux/ qed-. -lemma csx_fwd_bind_unit (h) (G) (L): - ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒[h] ⓑ[p,I]V.T → - ∀J. ∧∧ ❪G,L❫ ⊢ ⬈*𝐒[h] V & ❪G,L.ⓤ[J]❫ ⊢ ⬈*𝐒[h] T. +lemma csx_fwd_bind_unit (G) (L): + ∀p,I,V,T. ❪G,L❫ ⊢ ⬈*𝐒 ⓑ[p,I]V.T → + ∀J. ∧∧ ❪G,L❫ ⊢ ⬈*𝐒 V & ❪G,L.ⓤ[J]❫ ⊢ ⬈*𝐒 T. /3 width=4 by csx_fwd_pair_sn, csx_fwd_bind_dx_unit, conj/ qed-. (* Properties with restricted refinement for local environments *************) -lemma csx_lsubr_conf (h) (G) (L1): - ∀T. ❪G,L1❫ ⊢ ⬈*𝐒[h] T → ∀L2. L1 ⫃ L2 → ❪G,L2❫ ⊢ ⬈*𝐒[h] T. -#h #G #L1 #T #H +lemma csx_lsubr_conf (G) (L1): + ∀T. ❪G,L1❫ ⊢ ⬈*𝐒 T → ∀L2. L1 ⫃ L2 → ❪G,L2❫ ⊢ ⬈*𝐒 T. +#G #L1 #T #H @(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 @csx_intro #T2 #HT12 #HnT12 /3 width=3 by lsubr_cpx_trans/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma index 59e5eb289..f6f8970e3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma @@ -15,15 +15,15 @@ include "basic_2/rt_transition/cpx_reqx.ma". include "basic_2/rt_computation/csx_csx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: uses: csx_lleq_conf *) -lemma csx_reqx_conf (h) (G) (L1): - ∀T. ❪G,L1❫ ⊢ ⬈*𝐒[h] T → - ∀L2. L1 ≛[T] L2 → ❪G,L2❫ ⊢ ⬈*𝐒[h] T. -#h #G #L1 #T #H +lemma csx_reqx_conf (G) (L1): + ∀T. ❪G,L1❫ ⊢ ⬈*𝐒 T → + ∀L2. L1 ≛[T] L2 → ❪G,L2❫ ⊢ ⬈*𝐒 T. +#G #L1 #T #H @(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 @csx_intro #T2 #HT12 #HnT12 elim (reqx_cpx_trans … HL12 … HT12) -HT12 @@ -31,6 +31,6 @@ elim (reqx_cpx_trans … HL12 … HT12) -HT12 qed-. (* Basic_2A1: uses: csx_lleq_trans *) -lemma csx_reqx_trans (h) (G) (L2): - ∀L1,T. L1 ≛[T] L2 → ❪G,L2❫ ⊢ ⬈*𝐒[h] T → ❪G,L1❫ ⊢ ⬈*𝐒[h] T. +lemma csx_reqx_trans (G) (L2): + ∀L1,T. L1 ≛[T] L2 → ❪G,L2❫ ⊢ ⬈*𝐒 T → ❪G,L1❫ ⊢ ⬈*𝐒 T. /3 width=3 by csx_reqx_conf, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma index 1fbc8de21..1f732d61d 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 @@ -15,15 +15,15 @@ include "basic_2/rt_transition/cpx_simple.ma". include "basic_2/rt_computation/csx_csx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Properties with simple terms *********************************************) -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 +lemma csx_appl_simple (G) (L): + ∀V. ❪G,L❫ ⊢ ⬈*𝐒 V → ∀T1. + (∀T2. ❪G,L❫ ⊢ T1 ⬈ T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*𝐒 ⓐV.T2) → + 𝐒❪T1❫ → ❪G,L❫ ⊢ ⬈*𝐒 ⓐV.T1. +#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_teqo.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma index 12815d38e..bb450e756 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma @@ -18,17 +18,17 @@ include "basic_2/rt_transition/cpx_simple.ma". include "basic_2/rt_computation/cpxs.ma". include "basic_2/rt_computation/csx_csx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Properties with outer equivalence for terms ******************************) (* Basic_1: was just: sn3_appl_appl *) (* Basic_2A1: was: csx_appl_simple_tsts *) -lemma csx_appl_simple_teqo (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 +lemma csx_appl_simple_teqo (G) (L): + ∀V. ❪G,L❫ ⊢ ⬈*𝐒 V → ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → + (∀T2. ❪G,L❫ ⊢ T1 ⬈* T2 → (T1 ⩳ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*𝐒 ⓐV.T2) → + 𝐒❪T1❫ → ❪G,L❫ ⊢ ⬈*𝐒 ⓐV.T1. +#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 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 ab7046fd1..faad2323a 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 @@ -15,28 +15,28 @@ include "static_2/syntax/term_vector.ma". include "basic_2/rt_computation/csx.ma". -(* STRONGLY NORMALIZING TERMS VECTORS FOR UNBOUND PARALLEL RT-TRANSITION ****) +(* STRONGLY NORMALIZING TERMS VECTORS FOR EXTENDED PARALLEL RT-TRANSITION ***) -definition csxv (h) (G) (L): predicate (list term) ≝ - all … (csx h G L). +definition csxv (G) (L): predicate (list term) ≝ + all … (csx G L). interpretation - "strong normalization for unbound context-sensitive parallel rt-transition (term vector)" - 'PRedTyStrong h G L Ts = (csxv h G L Ts). + "strong normalization for extended context-sensitive parallel rt-transition (term vector)" + 'PRedTyStrong G L Ts = (csxv G L Ts). (* Basic inversion lemmas ***************************************************) -lemma csxv_inv_cons (h) (G) (L): - ∀T,Ts. ❪G,L❫ ⊢ ⬈*𝐒[h] T⨮Ts → - ∧∧ ❪G,L❫ ⊢ ⬈*𝐒[h] T & ❪G,L❫ ⊢ ⬈*𝐒[h] Ts. +lemma csxv_inv_cons (G) (L): + ∀T,Ts. ❪G,L❫ ⊢ ⬈*𝐒 T⨮Ts → + ∧∧ ❪G,L❫ ⊢ ⬈*𝐒 T & ❪G,L❫ ⊢ ⬈*𝐒 Ts. normalize // qed-. (* Basic forward lemmas *****************************************************) -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/ +lemma csx_fwd_applv (G) (L): + ∀T,Vs. ❪G,L❫ ⊢ ⬈*𝐒 ⒶVs.T → + ∧∧ ❪G,L❫ ⊢ ⬈*𝐒 Vs & ❪G,L❫ ⊢ ⬈*𝐒 T. +#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 f58c55387..1a3d604e9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma @@ -13,55 +13,58 @@ (**************************************************************************) include "ground/xoa/ex_2_3.ma". -include "basic_2/notation/relations/predsubtystarproper_7.ma". +include "basic_2/notation/relations/predsubtystarproper_6.ma". include "basic_2/rt_transition/fpb.ma". include "basic_2/rt_computation/fpbs.ma". (* PROPER PARALLEL RST-COMPUTATION FOR CLOSURES *****************************) -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❫. +definition fpbg: tri_relation genv lenv term ≝ + λG1,L1,T1,G2,L2,T2. + ∃∃G,L,T. ❪G1,L1,T1❫ ≻ ❪G,L,T❫ & ❪G,L,T❫ ≥ ❪G2,L2,T2❫. interpretation "proper parallel rst-computation (closure)" - 'PRedSubTyStarProper h G1 L1 T1 G2 L2 T2 = (fpbg h G1 L1 T1 G2 L2 T2). + 'PRedSubTyStarProper G1 L1 T1 G2 L2 T2 = (fpbg G1 L1 T1 G2 L2 T2). (* Basic properties *********************************************************) -lemma fpb_fpbg: ∀h,G1,G2,L1,L2,T1,T2. - ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. +lemma fpb_fpbg: + ∀G1,G2,L1,L2,T1,T2. + ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. /2 width=5 by ex2_3_intro/ qed. -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 * +lemma fpbg_fpbq_trans: + ∀G1,G,G2,L1,L,L2,T1,T,T2. + ❪G1,L1,T1❫ > ❪G,L,T❫ → ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 * /3 width=9 by fpbs_strap1, ex2_3_intro/ qed-. -lemma fpbg_fqu_trans (h): ∀G1,G,G2,L1,L,L2,T1,T,T2. - ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G,L,T❫ ⬂ ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. -#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 +lemma fpbg_fqu_trans: + ∀G1,G,G2,L1,L,L2,T1,T,T2. + ❪G1,L1,T1❫ > ❪G,L,T❫ → ❪G,L,T❫ ⬂ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 /4 width=5 by fpbg_fpbq_trans, fpbq_fquq, fqu_fquq/ qed-. (* Note: this is used in the closure proof *) -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/ +lemma fpbg_fpbs_trans: + ∀G,G2,L,L2,T,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ > ❪G,L,T❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#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_feqx_trans: ∀h,G1,G,L1,L,T1,T. - ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. +lemma fpbg_feqx_trans: + ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ > ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. /3 width=5 by fpbg_fpbq_trans, fpbq_feqx/ qed-. (* Properties with t-bound rt-transition for terms **************************) lemma cpm_tneqx_cpm_fpbg (h) (G) (L): ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → (T1 ≛ T → ⊥) → - ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → ❪G,L,T1❫ >[h] ❪G,L,T2❫. + ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → ❪G,L,T1❫ > ❪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 e12dae651..335243516 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 @@ -18,16 +18,18 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* PROPER PARALLEL RST-COMPUTATION FOR CLOSURES *****************************) -(* Properties with unbound context-sensitive parallel rt-computation ********) +(* Properties with extended context-sensitive parallel rt-computation *******) (* Basic_2A1: was: cpxs_fpbg *) -lemma cpxs_tneqx_fpbg (h): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → - (T1 ≛ T2 → ⊥) → ❪G,L,T1❫ >[h] ❪G,L,T2❫. -#h #G #L #T1 #T2 #H #H0 +lemma cpxs_tneqx_fpbg: + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → + (T1 ≛ T2 → ⊥) → ❪G,L,T1❫ > ❪G,L,T2❫. +#G #L #T1 #T2 #H #H0 elim (cpxs_tneqx_fwd_step_sn … H … H0) -H -H0 /4 width=5 by cpxs_teqx_fpbs, fpb_cpx, ex2_3_intro/ qed. -lemma cpxs_fpbg_trans (h): ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → - ∀G2,L2,T2. ❪G1,L1,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. +lemma cpxs_fpbg_trans: + ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → + ∀G2,L2,T2. ❪G1,L1,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪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 6d511b7f4..499d08c5d 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,6 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Main properties **********************************************************) -theorem fpbg_trans: ∀h. tri_transitive … (fpbg h). +theorem fpbg_trans: + tri_transitive … fpbg. /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 888b96969..fcfcbc978 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,66 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced forward lemmas **************************************************) -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 * +lemma fpbg_fwd_fpbs: + ∀G1,G2,L1,L2,T1,T2. + ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#G1 #G2 #L1 #L2 #T1 #T2 * /3 width=5 by fpbs_strap2, fpb_fpbq/ qed-. (* Advanced properties with sort-irrelevant equivalence on closures *********) (* Basic_2A1: uses: fleq_fpbg_trans *) -lemma feqx_fpbg_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ >[h] ❪G2,L2,T2❫ → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. -#h #G #G2 #L #L2 #T #T2 * #G0 #L0 #T0 #H0 #H02 #G1 #L1 #T1 #H1 +lemma feqx_fpbg_trans: + ∀G,G2,L,L2,T,T2. ❪G,L,T❫ > ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#G #G2 #L #L2 #T #T2 * #G0 #L0 #T0 #H0 #H02 #G1 #L1 #T1 #H1 elim (feqx_fpb_trans … H1 … H0) -G -L -T /4 width=9 by fpbs_strap2, fpbq_feqx, ex2_3_intro/ qed-. (* Properties with parallel proper rst-reduction on closures ****************) -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❫. +lemma fpb_fpbg_trans: + ∀G1,G,G2,L1,L,L2,T1,T,T2. + ❪G1,L1,T1❫ ≻ ❪G,L,T❫ → ❪G,L,T❫ > ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ > ❪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,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 +lemma fpbq_fpbg_trans: + ∀G1,G,G2,L1,L,L2,T1,T,T2. + ❪G1,L1,T1❫ ≽ ❪G,L,T❫ → ❪G,L,T❫ > ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fpbq_inv_fpb … H1) -H1 /2 width=5 by feqx_fpbg_trans, fpb_fpbg_trans/ qed-. (* Properties with parallel rst-compuutation on closures ********************) -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/ +lemma fpbs_fpbg_trans: + ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#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): +lemma fqup_fpbg_trans: ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ⬂+ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. + ∀G2,L2,T2. ❪G,L,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪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,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 +lemma fpbs_inv_fpbg: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → + ∨∨ ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ + | ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#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 +95,11 @@ qed-. (* Advanced properties of parallel rst-computation on closures **************) -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 +lemma fpbs_fpb_trans: + ∀F1,F2,K1,K2,T1,T2. ❪F1,K1,T1❫ ≥ ❪F2,K2,T2❫ → + ∀G2,L2,U2. ❪F2,K2,T2❫ ≻ ❪G2,L2,U2❫ → + ∃∃G1,L1,U1. ❪F1,K1,T1❫ ≻ ❪G1,L1,U1❫ & ❪G1,L1,U1❫ ≥ ❪G2,L2,U2❫. +#F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H [ #H12 #G2 #L2 #U2 #H2 elim (feqx_fpb_trans … H12 … H2) -F2 -K2 -T2 /3 width=5 by feqx_fpbs, ex2_3_intro/ | * #H1 #H2 #H3 #H4 #H5 #H6 #H7 #H8 #H9 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 029c086d3..71451e886 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma @@ -19,14 +19,16 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced properties with sort-irrelevant equivalence for terms ***********) -lemma fpbg_teqx_div: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ >[h] ❪G2,L2,T❫ → - ∀T2. T2 ≛ T → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. +lemma fpbg_teqx_div: + ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ > ❪G2,L2,T❫ → + ∀T2. T2 ≛ T → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. /4 width=5 by fpbg_feqx_trans, teqx_feqx, teqx_sym/ qed-. (* Properties with plus-iterated structural successor for closures **********) (* Note: this is used in the closure proof *) -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 +lemma fqup_fpbg: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. +#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 2893e58e5..1864df4b3 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 @@ -17,12 +17,13 @@ include "basic_2/rt_computation/fpbg.ma". (* PROPER PARALLEL RST-COMPUTATION FOR CLOSURES *****************************) -(* Properties with unbound rt-computation on full local environments ********) +(* Properties with extended rt-computation on full local environments *******) (* Basic_2A1: uses: lpxs_fpbg *) -lemma lpxs_rneqx_fpbg: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈*[h] L2 → - (L1 ≛[T] L2 → ⊥) → ❪G,L1,T❫ >[h] ❪G,L2,T❫. -#h #G #L1 #L2 #T #H #H0 +lemma lpxs_rneqx_fpbg: + ∀G,L1,L2,T. ❪G,L1❫ ⊢ ⬈* L2 → + (L1 ≛[T] L2 → ⊥) → ❪G,L1,T❫ > ❪G,L2,T❫. +#G #L1 #L2 #T #H #H0 elim (lpxs_rneqx_inv_step_sn … H … H0) -H -H0 /4 width=7 by fpb_lpx, lpxs_feqx_fpbs, feqx_intro_sn, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma index a945cf34c..827912dfa 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,73 @@ (**************************************************************************) include "ground/lib/star.ma". -include "basic_2/notation/relations/predsubtystar_7.ma". +include "basic_2/notation/relations/predsubtystar_6.ma". include "basic_2/rt_transition/fpbq.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) -definition fpbs: ∀h. tri_relation genv lenv term ≝ - λh. tri_TC … (fpbq h). +definition fpbs: tri_relation genv lenv term ≝ + tri_TC … fpbq. -interpretation "parallel rst-computation (closure)" - 'PRedSubTyStar h G1 L1 T1 G2 L2 T2 = (fpbs h G1 L1 T1 G2 L2 T2). +interpretation + "parallel rst-computation (closure)" + 'PRedSubTyStar G1 L1 T1 G2 L2 T2 = (fpbs G1 L1 T1 G2 L2 T2). (* Basic eliminators ********************************************************) -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. +lemma fpbs_ind: + ∀G1,L1,T1. ∀Q:relation3 genv lenv term. Q G1 L1 T1 → + (∀G,G2,L,L2,T,T2. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → Q G2 L2 T2. /3 width=8 by tri_TC_star_ind/ qed-. -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. +lemma fpbs_ind_dx: + ∀G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 → + (∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≽ ❪G,L,T❫ → ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → Q G1 L1 T1. /3 width=8 by tri_TC_star_ind_dx/ qed-. (* Basic properties *********************************************************) -lemma fpbs_refl: ∀h. tri_reflexive … (fpbs h). +lemma fpbs_refl: + tri_reflexive … fpbs. /2 width=1 by tri_inj/ qed. -lemma fpbq_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma fpbq_fpbs: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /2 width=1 by tri_inj/ qed. -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❫. +lemma fpbs_strap1: + ∀G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → + ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /2 width=5 by tri_step/ qed-. -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❫. +lemma fpbs_strap2: + ∀G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ≽ ❪G,L,T❫ → + ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /2 width=5 by tri_TC_strap/ qed-. (* Basic_2A1: uses: lleq_fpbs fleq_fpbs *) -lemma feqx_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma feqx_fpbs: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=1 by fpbq_fpbs, fpbq_feqx/ qed. (* Basic_2A1: uses: fpbs_lleq_trans *) -lemma fpbs_feqx_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma fpbs_feqx_trans: + ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=9 by fpbs_strap1, fpbq_feqx/ qed-. (* Basic_2A1: uses: lleq_fpbs_trans *) -lemma feqx_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma feqx_fpbs_trans: + ∀G,G2,L,L2,T,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=5 by fpbs_strap2, fpbq_feqx/ qed-. -lemma teqx_reqx_lpx_fpbs: ∀h,T1,T2. T1 ≛ T2 → ∀L1,L0. L1 ≛[T2] L0 → - ∀G,L2. ❪G,L0❫ ⊢ ⬈[h] L2 → ❪G,L1,T1❫ ≥[h] ❪G,L2,T2❫. +lemma teqx_reqx_lpx_fpbs: + ∀T1,T2. T1 ≛ T2 → ∀L1,L0. L1 ≛[T2] L0 → + ∀G,L2. ❪G,L0❫ ⊢ ⬈ L2 → ❪G,L1,T1❫ ≥ ❪G,L2,T2❫. /4 width=5 by feqx_fpbs, fpbs_strap1, fpbq_lpx, feqx_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 9a54fb6c5..94a822999 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,10 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with atomic arity assignment for terms ************************) -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 #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 /2 width=2 by ex_intro/ +lemma fpbs_aaa_conf: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. +#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 536e532a4..5127496b1 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 @@ -18,13 +18,14 @@ include "basic_2/rt_computation/fpbs_lpxs.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) -(* Properties with unbound context-sensitive parallel rt-transition *********) +(* Properties with extended context-sensitive parallel rt-transition ********) (* Basic_2A1: uses: fpbs_cpx_trans_neq *) -lemma fpbs_cpx_tneqx_trans: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ≥[h] ❪G2,L2,U2❫. -#h #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2 +lemma fpbs_cpx_tneqx_trans: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ≥ ❪G2,L2,U2❫. +#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 (feqx_cpx_trans … H32 … HTU2) -HTU2 #T4 #HT34 #H42 lapply (feqx_tneqx_repl_dx … H32 … H42 … HnTU2) -T2 #HnT34 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 872882627..ec9cf1bb5 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 @@ -17,42 +17,48 @@ include "basic_2/rt_computation/fpbs_fqup.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) -(* Properties with unbound context-sensitive parallel rt-computation ********) +(* Properties with extended context-sensitive parallel rt-computation *******) -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 +lemma cpxs_fpbs: + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → ❪G,L,T1❫ ≥ ❪G,L,T2❫. +#G #L #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=5 by fpbq_cpx, fpbs_strap1/ qed. -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 +lemma fpbs_cpxs_trans: + ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → + ∀T2. ❪G,L❫ ⊢ T ⬈* T2 → ❪G1,L1,T1❫ ≥ ❪G,L,T2❫. +#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,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 +lemma cpxs_fpbs_trans: + ∀G1,G2,L1,L2,T,T2. ❪G1,L1,T❫ ≥ ❪G2,L2,T2❫ → + ∀T1. ❪G1,L1❫ ⊢ T1 ⬈* T → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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_teqx_fpbs_trans: ∀h,G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → - ∀T0. T ≛ T0 → - ∀G2,L2,T2. ❪G1,L1,T0❫ ≥[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma cpxs_teqx_fpbs_trans: + ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → ∀T0. T ≛ T0 → + ∀G2,L2,T2. ❪G1,L1,T0❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=3 by cpxs_fpbs_trans, teqx_fpbs_trans/ qed-. -lemma cpxs_teqx_fpbs: ∀h,G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈*[h] T → - ∀T2. T ≛ T2 → ❪G,L,T1❫ ≥[h] ❪G,L,T2❫. +lemma cpxs_teqx_fpbs: + ∀G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈* T → + ∀T2. T ≛ T2 → ❪G,L,T1❫ ≥ ❪G,L,T2❫. /4 width=3 by cpxs_fpbs_trans, feqx_fpbs, teqx_feqx/ qed. (* Properties with star-iterated structural successor for closures **********) -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❫. +lemma cpxs_fqus_fpbs: + ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → + ∀G2,L2,T2. ❪G1,L1,T❫ ⬂* ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪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,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❫. +lemma cpxs_fqup_fpbs: + ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → + ∀G2,L2,T2. ❪G1,L1,T❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪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 4a1349f1a..c68d3a661 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 @@ -17,11 +17,12 @@ include "basic_2/rt_computation/fpbs.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) -(* Properties with sn for unbound parallel rt-transition for terms **********) +(* Properties with sn for extended parallel rt-transition for terms *********) (* Basic_2A1: was: csx_fpbs_conf *) -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 +lemma fpbs_csx_conf: + ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. +#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 711bb73a7..73715fc3a 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,7 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with proper parallel rst-reduction on closures ****************) -lemma fpb_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma fpb_fpbs: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≥ ❪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 6e75949fc..7f0815322 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,6 @@ include "basic_2/rt_computation/fpbs.ma". (* Main properties **********************************************************) -theorem fpbs_trans: ∀h. tri_transitive … (fpbs h). +theorem fpbs_trans: + tri_transitive … fpbs. /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 72c12b91e..9cd35030d 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,30 @@ include "basic_2/rt_computation/fpbs_fqus.ma". (* Advanced properties ******************************************************) -lemma teqx_fpbs_trans: ∀h,T1,T. T1 ≛ T → - ∀G1,G2,L1,L2,T2. ❪G1,L1,T❫ ≥[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma teqx_fpbs_trans: + ∀T1,T. T1 ≛ T → + ∀G1,G2,L1,L2,T2. ❪G1,L1,T❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=5 by feqx_fpbs_trans, teqx_feqx/ qed-. -lemma fpbs_teqx_trans: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T❫ → - ∀T2. T ≛ T2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma fpbs_teqx_trans: + ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≥ ❪G2,L2,T❫ → + ∀T2. T ≛ T2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=5 by fpbs_feqx_trans, teqx_feqx/ qed-. (* Properties with plus-iterated structural successor for closures **********) -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 +lemma fqup_fpbs: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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,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❫. +lemma fpbs_fqup_trans: + ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=5 by fpbs_fqus_trans, fqup_fqus/ qed-. -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❫. +lemma fqup_fpbs_trans: + ∀G,G2,L,L2,T,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂+ ❪G,L,T❫ → ❪G1,L1,T1❫ ≥ ❪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 808c2615b..3476c11d5 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,23 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with star-iterated structural successor for closures **********) -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 +lemma fqus_fpbs: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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,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 +lemma fpbs_fqus_trans: + ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ⬂* ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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,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 +lemma fqus_fpbs_trans: + ∀G,G2,L,L2,T,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂* ❪G,L,T❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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 857f394d9..92fd0dd56 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 @@ -21,52 +21,60 @@ include "basic_2/rt_computation/fpbs_cpxs.ma". (* PARALLEL RST-COMPUTATION FOR CLOSURES ************************************) -(* Properties with unbound rt-computation on full local environments *******) +(* Properties with extended rt-computation on full local environments ******) -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 +lemma lpxs_fpbs: + ∀G,L1,L2,T. ❪G,L1❫ ⊢ ⬈* L2 → ❪G,L1,T❫ ≥ ❪G,L2,T❫. +#G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 /3 width=5 by fpbq_lpx, fpbs_strap1/ qed. -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 +lemma fpbs_lpxs_trans: + ∀G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L,T2❫ → + ∀L2. ❪G2,L❫ ⊢ ⬈* L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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,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 +lemma lpxs_fpbs_trans: + ∀G1,G2,L,L2,T1,T2. ❪G1,L,T1❫ ≥ ❪G2,L2,T2❫ → + ∀L1. ❪G1,L1❫ ⊢ ⬈* L → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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_feqx_fpbs: ∀h,G1,L1,L,T1. ❪G1,L1❫ ⊢ ⬈*[h] L → - ∀G2,L2,T2. ❪G1,L,T1❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma lpxs_feqx_fpbs: + ∀G1,L1,L,T1. ❪G1,L1❫ ⊢ ⬈* L → + ∀G2,L2,T2. ❪G1,L,T1❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=3 by lpxs_fpbs_trans, feqx_fpbs/ qed. -lemma fpbs_lpx_trans: ∀h,G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L,T2❫ → - ∀L2. ❪G2,L❫ ⊢ ⬈[h] L2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma fpbs_lpx_trans: + ∀G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L,T2❫ → + ∀L2. ❪G2,L❫ ⊢ ⬈ L2 → ❪G1,L1,T1❫ ≥ ❪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,G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L,T2❫ → - ∀L2. ❪G2,L❫ ⊢ ⬈*[h] L2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. +lemma fqus_lpxs_fpbs: + ∀G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L,T2❫ → + ∀L2. ❪G2,L❫ ⊢ ⬈* L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed. -(* Properties with unbound context-sensitive parallel rt-computation ********) +(* Properties with extended context-sensitive parallel rt-computation *******) -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] ❪G2,L2,T2❫. +lemma cpxs_fqus_lpxs_fpbs: + ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → + ∀G2,L,T2. ❪G1,L1,T❫ ⬂* ❪G2,L,T2❫ → + ∀L2.❪G2,L❫ ⊢ ⬈* L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. /3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed. -lemma fpbs_cpxs_teqx_fqup_lpx_trans: ∀h,G1,G3,L1,L3,T1,T3. ❪G1,L1,T1❫ ≥ [h] ❪G3,L3,T3❫ → - ∀T4. ❪G3,L3❫ ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 → - ∀G2,L4,T2. ❪G3,L3,T5❫ ⬂+ ❪G2,L4,T2❫ → - ∀L2. ❪G2,L4❫ ⊢ ⬈[h] L2 → ❪G1,L1,T1❫ ≥ [h] ❪G2,L2,T2❫. -#h #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42 +lemma fpbs_cpxs_teqx_fqup_lpx_trans: + ∀G1,G3,L1,L3,T1,T3. ❪G1,L1,T1❫ ≥ ❪G3,L3,T3❫ → + ∀T4. ❪G3,L3❫ ⊢ T3 ⬈* T4 → ∀T5. T4 ≛ T5 → + ∀G2,L4,T2. ❪G3,L3,T5❫ ⬂+ ❪G2,L4,T2❫ → + ∀L2. ❪G2,L4❫ ⊢ ⬈ L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. +#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_teqx_trans/ @@ -75,19 +83,20 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: fpbs_intro_alt *) -lemma fpbs_intro_star: ∀h,G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → - ∀G,L,T0. ❪G1,L1,T❫ ⬂* ❪G,L,T0❫ → - ∀L0. ❪G,L❫ ⊢ ⬈*[h] L0 → - ∀G2,L2,T2. ❪G,L0,T0❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ . +lemma fpbs_intro_star: + ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → + ∀G,L,T0. ❪G1,L1,T❫ ⬂* ❪G,L,T0❫ → + ∀L0. ❪G,L❫ ⊢ ⬈* L0 → + ∀G2,L2,T2. ❪G,L0,T0❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ . /3 width=5 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, fpbq_feqx/ qed. (* Advanced inversion lemmas *************************************************) (* Basic_2A1: uses: fpbs_inv_alt *) -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❫ ≛ ❪G2,L2,T2❫. -#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1 +lemma fpbs_inv_star: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → + ∃∃G,L,L0,T,T0. ❪G1,L1❫ ⊢ T1 ⬈* T & ❪G1,L1,T❫ ⬂* ❪G,L,T0❫ & ❪G,L❫ ⊢ ⬈* L0 & ❪G,L0,T0❫ ≛ ❪G2,L2,T2❫. +#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 72c73ae87..dc6cd6694 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_4.ma". +include "basic_2/notation/relations/predsubtystrong_3.ma". include "basic_2/rt_transition/fpb.ma". (* STRONGLY NORMALIZING CLOSURES FOR PARALLEL RST-TRANSITION ****************) -inductive fsb (h): relation3 genv lenv term ≝ -| fsb_intro: ∀G1,L1,T1. ( - ∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → fsb h G2 L2 T2 - ) → fsb h G1 L1 T1 +inductive fsb: relation3 genv lenv term ≝ +| fsb_intro: ∀G1,L1,T1. + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → fsb G2 L2 T2) → + fsb G1 L1 T1 . interpretation - "strong normalization for parallel rst-transition (closure)" - 'PRedSubTyStrong h G L T = (fsb h G L T). + "strong normalization for parallel rst-transition (closure)" + 'PRedSubTyStrong G L T = (fsb G L T). (* Basic eliminators ********************************************************) (* Note: eliminator with shorter ground hypothesis *) (* Note: to be named fsb_ind when fsb becomes a definition like csx, rsx ****) -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) → +lemma fsb_ind_alt (Q:relation3 …): + (∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ≥𝐒[h] ❪G,L,T❫ → Q G L T. -#h #Q #IH #G #L #T #H elim H -G -L -T + ∀G,L,T. ≥𝐒 ❪G,L,T❫ → Q G L T. +#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 a87de3b2b..b03c6a615 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 @@ -21,51 +21,51 @@ include "basic_2/rt_computation/fsb_csx.ma". (* Main properties with atomic arity assignment for terms *******************) -theorem aaa_fsb (h): - ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ≥𝐒[h] ❪G,L,T❫. +theorem aaa_fsb: + ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ≥𝐒 ❪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) (Q:relation3 …): +fact aaa_ind_fpb_aux (Q:relation3 …): (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀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 + ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → ∀A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. +#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 … G2 … L2 … T2 … HTA1) -A1 /2 width=2 by fpb_fpbs/ qed-. -lemma aaa_ind_fpb (h) (Q:relation3 …): +lemma aaa_ind_fpb (Q:relation3 …): (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪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) (Q:relation3 …): +fact aaa_ind_fpbg_aux (Q:relation3 …): (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀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 + ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → ∀A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. +#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 … G2 … L2 … T2 … HTA1) -A1 /2 width=2 by fpbg_fwd_fpbs/ qed-. -lemma aaa_ind_fpbg (h) (Q:relation3 …): +lemma aaa_ind_fpbg (Q:relation3 …): (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪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 0ee6c19fc..1839df0f8 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,17 +21,17 @@ include "basic_2/rt_computation/fsb_fpbg.ma". (* Inversion lemmas with context-sensitive stringly rt-normalizing terms ****) -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/ +lemma fsb_inv_csx: + ∀G,L,T. ≥𝐒 ❪G,L,T❫ → ❪G,L❫ ⊢ ⬈*𝐒 T. +#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): - ∀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 +lemma csx_fsb_fpbs: + ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫. +#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 @@ -58,26 +58,26 @@ generalize in match IHu; -IHu generalize in match H10; -H10 ] qed. -lemma csx_fsb (h): - ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒[h] T → ≥𝐒[h] ❪G,L,T❫. +lemma csx_fsb: + ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → ≥𝐒 ❪G,L,T❫. /2 width=5 by csx_fsb_fpbs/ qed. (* Advanced eliminators *****************************************************) -lemma csx_ind_fpb (h) (Q:relation3 …): +lemma csx_ind_fpb (Q:relation3 …): (∀G1,L1,T1. - ❪G1,L1❫ ⊢ ⬈*𝐒[h] T1 → - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒[h] T → Q G L T. + ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → Q G L T. /4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_alt/ qed-. -lemma csx_ind_fpbg (h) (Q:relation3 …): +lemma csx_ind_fpbg (Q:relation3 …): (∀G1,L1,T1. - ❪G1,L1❫ ⊢ ⬈*𝐒[h] T1 → - (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → + (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒[h] T → Q G L T. + ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 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_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma index 251fef0eb..159663b11 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma @@ -19,9 +19,10 @@ include "basic_2/rt_computation/fsb.ma". (* Properties with sort-irrelevant equivalence for closures *****************) -lemma fsb_feqx_trans: ∀h,G1,L1,T1. ≥𝐒[h] ❪G1,L1,T1❫ → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ≥𝐒[h] ❪G2,L2,T2❫. -#h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 +lemma fsb_feqx_trans: + ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫. +#G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #_ #IH #G2 #L2 #T2 #H12 @fsb_intro #G #L #T #H2 elim (feqx_fpb_trans … H12 … H2) -G2 -L2 -T2 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 20c010206..41138b8a5 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,10 @@ include "basic_2/rt_computation/fsb_feqx.ma". (* Properties with parallel rst-computation for closures ********************) -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 +lemma fsb_fpbs_trans: + ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫. +#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_feqx_trans/ @@ -31,21 +32,22 @@ qed-. (* Properties with proper parallel rst-computation for closures *************) -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❫. +lemma fsb_intro_fpbg: + ∀G1,L1,T1. + (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫) → + ≥𝐒 ❪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. ∀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] ❪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 +lemma fsb_ind_fpbg_fpbs (Q:relation3 …): + (∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → + (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → + Q G1 L1 T1 + ) → + ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → Q G2 L2 T2. +#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 +57,21 @@ lemma fsb_ind_fpbg_fpbs: ∀h. ∀Q:relation3 genv lenv term. ] qed-. -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] ❪G1,L1,T1❫ → Q G1 L1 T1. -#h #Q #IH #G1 #L1 #T1 #H @(fsb_ind_fpbg_fpbs … H) -H +lemma fsb_ind_fpbg (Q:relation3 …): + (∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → + (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → + Q G1 L1 T1 + ) → + ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → Q G1 L1 T1. +#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) (G) (L) (T): - ≥𝐒[h] ❪G,L,T❫ → ❪G,L,T❫ >[h] ❪G,L,T❫ → ⊥. -#h #G #L #T #H +lemma fsb_fpbg_refl_false (G) (L) (T): + ≥𝐒 ❪G,L,T❫ → ❪G,L,T❫ > ❪G,L,T❫ → ⊥. +#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/jsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma index 6ae05e944..fb21e76c9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma @@ -13,92 +13,93 @@ (**************************************************************************) include "ground/xoa/ex_4_3.ma". -include "basic_2/notation/relations/topredtysnstrong_4.ma". +include "basic_2/notation/relations/topredtysnstrong_3.ma". include "basic_2/rt_computation/rsx.ma". -(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********) +(* COMPATIBILITY OF STRONG NORMALIZATION FOR EXTENDED RT-TRANSITION *********) (* Note: this should be an instance of a more general sex *) (* Basic_2A1: uses: lcosx *) -inductive jsx (h) (G): relation lenv ≝ -| jsx_atom: jsx h G (⋆) (⋆) -| jsx_bind: ∀I,K1,K2. jsx h G K1 K2 → - jsx h G (K1.ⓘ[I]) (K2.ⓘ[I]) -| jsx_pair: ∀I,K1,K2,V. jsx h G K1 K2 → - G ⊢ ⬈*𝐒[h,V] K2 → jsx h G (K1.ⓑ[I]V) (K2.ⓧ) +inductive jsx (G): relation lenv ≝ +| jsx_atom: jsx G (⋆) (⋆) +| jsx_bind: ∀I,K1,K2. jsx G K1 K2 → + jsx G (K1.ⓘ[I]) (K2.ⓘ[I]) +| jsx_pair: ∀I,K1,K2,V. jsx G K1 K2 → + G ⊢ ⬈*𝐒[V] K2 → jsx G (K1.ⓑ[I]V) (K2.ⓧ) . interpretation - "strong normalization for unbound parallel rt-transition (compatibility)" - 'ToPRedTySNStrong h G L1 L2 = (jsx h G L1 L2). + "strong normalization for extended parallel rt-transition (compatibility)" + 'ToPRedTySNStrong G L1 L2 = (jsx G L1 L2). (* Basic inversion lemmas ***************************************************) -fact jsx_inv_atom_sn_aux (h) (G): - ∀L1,L2. G ⊢ L1 ⊒[h] L2 → L1 = ⋆ → L2 = ⋆. -#h #G #L1 #L2 * -L1 -L2 +fact jsx_inv_atom_sn_aux (G): + ∀L1,L2. G ⊢ L1 ⊒ L2 → L1 = ⋆ → L2 = ⋆. +#G #L1 #L2 * -L1 -L2 [ // | #I #K1 #K2 #_ #H destruct | #I #K1 #K2 #V #_ #_ #H destruct ] qed-. -lemma jsx_inv_atom_sn (h) (G): - ∀L2. G ⊢ ⋆ ⊒[h] L2 → L2 = ⋆. +lemma jsx_inv_atom_sn (G): + ∀L2. G ⊢ ⋆ ⊒ L2 → L2 = ⋆. /2 width=5 by jsx_inv_atom_sn_aux/ qed-. -fact jsx_inv_bind_sn_aux (h) (G): - ∀L1,L2. G ⊢ L1 ⊒[h] L2 → +fact jsx_inv_bind_sn_aux (G): + ∀L1,L2. G ⊢ L1 ⊒ L2 → ∀I,K1. L1 = K1.ⓘ[I] → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I] - | ∃∃J,K2,V. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*𝐒[h,V] K2 & I = BPair J V & L2 = K2.ⓧ. -#h #G #L1 #L2 * -L1 -L2 + ∨∨ ∃∃K2. G ⊢ K1 ⊒ K2 & L2 = K2.ⓘ[I] + | ∃∃J,K2,V. G ⊢ K1 ⊒ K2 & G ⊢ ⬈*𝐒[V] K2 & I = BPair J V & L2 = K2.ⓧ. +#G #L1 #L2 * -L1 -L2 [ #J #L1 #H destruct | #I #K1 #K2 #HK12 #J #L1 #H destruct /3 width=3 by ex2_intro, or_introl/ | #I #K1 #K2 #V #HK12 #HV #J #L1 #H destruct /3 width=7 by ex4_3_intro, or_intror/ ] qed-. -lemma jsx_inv_bind_sn (h) (G): - ∀I,K1,L2. G ⊢ K1.ⓘ[I] ⊒[h] L2 → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I] - | ∃∃J,K2,V. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*𝐒[h,V] K2 & I = BPair J V & L2 = K2.ⓧ. +lemma jsx_inv_bind_sn (G): + ∀I,K1,L2. G ⊢ K1.ⓘ[I] ⊒ L2 → + ∨∨ ∃∃K2. G ⊢ K1 ⊒ K2 & L2 = K2.ⓘ[I] + | ∃∃J,K2,V. G ⊢ K1 ⊒ K2 & G ⊢ ⬈*𝐒[V] K2 & I = BPair J V & L2 = K2.ⓧ. /2 width=3 by jsx_inv_bind_sn_aux/ qed-. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: uses: lcosx_inv_pair *) -lemma jsx_inv_pair_sn (h) (G): - ∀I,K1,L2,V. G ⊢ K1.ⓑ[I]V ⊒[h] L2 → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓑ[I]V - | ∃∃K2. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*𝐒[h,V] K2 & L2 = K2.ⓧ. -#h #G #I #K1 #L2 #V #H elim (jsx_inv_bind_sn … H) -H * +lemma jsx_inv_pair_sn (G): + ∀I,K1,L2,V. G ⊢ K1.ⓑ[I]V ⊒ L2 → + ∨∨ ∃∃K2. G ⊢ K1 ⊒ K2 & L2 = K2.ⓑ[I]V + | ∃∃K2. G ⊢ K1 ⊒ K2 & G ⊢ ⬈*𝐒[V] K2 & L2 = K2.ⓧ. +#G #I #K1 #L2 #V #H elim (jsx_inv_bind_sn … H) -H * [ /3 width=3 by ex2_intro, or_introl/ | #J #K2 #X #HK12 #HX #H1 #H2 destruct /3 width=4 by ex3_intro, or_intror/ ] qed-. -lemma jsx_inv_void_sn (h) (G): - ∀K1,L2. G ⊢ K1.ⓧ ⊒[h] L2 → - ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓧ. -#h #G #K1 #L2 #H elim (jsx_inv_bind_sn … H) -H * +lemma jsx_inv_void_sn (G): + ∀K1,L2. G ⊢ K1.ⓧ ⊒ L2 → + ∃∃K2. G ⊢ K1 ⊒ K2 & L2 = K2.ⓧ. +#G #K1 #L2 #H elim (jsx_inv_bind_sn … H) -H * /2 width=3 by ex2_intro/ qed-. (* Advanced forward lemmas **************************************************) -lemma jsx_fwd_bind_sn (h) (G): - ∀I1,K1,L2. G ⊢ K1.ⓘ[I1] ⊒[h] L2 → - ∃∃I2,K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I2]. -#h #G #I1 #K1 #L2 #H elim (jsx_inv_bind_sn … H) -H * +lemma jsx_fwd_bind_sn (G): + ∀I1,K1,L2. G ⊢ K1.ⓘ[I1] ⊒ L2 → + ∃∃I2,K2. G ⊢ K1 ⊒ K2 & L2 = K2.ⓘ[I2]. +#G #I1 #K1 #L2 #H elim (jsx_inv_bind_sn … H) -H * /2 width=4 by ex2_2_intro/ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: lcosx_O *) -lemma jsx_refl (h) (G): reflexive … (jsx h G). -#h #G #L elim L -L /2 width=1 by jsx_atom, jsx_bind/ +lemma jsx_refl (G): + reflexive … (jsx G). +#G #L elim L -L /2 width=1 by jsx_atom, jsx_bind/ qed. (* Basic_2A1: removed theorems 2: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma index 702869092..c11a6bfc9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma @@ -16,22 +16,22 @@ include "basic_2/rt_computation/rsx_csx.ma". include "basic_2/rt_computation/jsx_drops.ma". include "basic_2/rt_computation/jsx_lsubr.ma". -(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********) +(* COMPATIBILITY OF STRONG NORMALIZATION FOR EXTENDED RT-TRANSITION *********) (* Properties with strongly rt-normalizing terms ****************************) -lemma jsx_csx_conf (h) (G): - ∀L1,L2. G ⊢ L1 ⊒[h] L2 → - ∀T. ❪G,L1❫ ⊢ ⬈*𝐒[h] T → ❪G,L2❫ ⊢ ⬈*𝐒[h] T. +lemma jsx_csx_conf (G): + ∀L1,L2. G ⊢ L1 ⊒ L2 → + ∀T. ❪G,L1❫ ⊢ ⬈*𝐒 T → ❪G,L2❫ ⊢ ⬈*𝐒 T. /3 width=5 by jsx_fwd_lsubr, csx_lsubr_conf/ qed-. (* Properties with strongly rt-normalizing referred local environments ******) (* Note: Try by induction on the 2nd premise by generalizing V with f *) -lemma rsx_jsx_trans (h) (G): - ∀L1,V. G ⊢ ⬈*𝐒[h,V] L1 → - ∀L2. G ⊢ L1 ⊒[h] L2 → G ⊢ ⬈*𝐒[h,V] L2. -#h #G #L1 #V @(fqup_wf_ind_eq (Ⓕ) … G L1 V) -G -L1 -V +lemma rsx_jsx_trans (G): + ∀L1,V. G ⊢ ⬈*𝐒[V] L1 → + ∀L2. G ⊢ L1 ⊒ L2 → G ⊢ ⬈*𝐒[V] L2. +#G #L1 #V @(fqup_wf_ind_eq (Ⓕ) … G L1 V) -G -L1 -V #G0 #L0 #V0 #IH #G #L1 * * [ // | #i #HG #HL #HV #H #L2 #HL12 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma index 56148c3af..2fb26c5b5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma @@ -15,14 +15,14 @@ include "static_2/relocation/drops.ma". include "basic_2/rt_computation/jsx.ma". -(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********) +(* COMPATIBILITY OF STRONG NORMALIZATION FOR EXTENDED RT-TRANSITION *********) (* Forward lemmas with uniform slicing for local environments ***************) -lemma jsx_fwd_drops_atom_sn (h) (b) (G): - ∀L1,L2. G ⊢ L1 ⊒[h] L2 → +lemma jsx_fwd_drops_atom_sn (b) (G): + ∀L1,L2. G ⊢ L1 ⊒ L2 → ∀f. 𝐔❪f❫ → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆. -#h #b #G #L1 #L2 #H elim H -L1 -L2 +#b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #H // | #I #K1 #K2 #_ #IH #f #Hf #H | #I #K1 #K2 #V #_ #HV #IH #f #Hf #H @@ -33,11 +33,11 @@ elim (drops_inv_bind1_isuni … H) -H [3,6: // |*: * -Hf ] ] qed-. -lemma jsx_fwd_drops_unit_sn (h) (b) (G): - ∀L1,L2. G ⊢ L1 ⊒[h] L2 → +lemma jsx_fwd_drops_unit_sn (b) (G): + ∀L1,L2. G ⊢ L1 ⊒ L2 → ∀f. 𝐔❪f❫ → ∀I,K1. ⇩*[b,f]L1 ≘ K1.ⓤ[I] → - ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓤ[I]. -#h #b #G #L1 #L2 #H elim H -L1 -L2 + ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓤ[I]. +#b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #J #Y1 #H lapply (drops_inv_atom1 … H) -H * #H #_ destruct | #I #K1 #K2 #HK12 #IH #f #Hf #J #Y1 #H @@ -52,12 +52,12 @@ elim (drops_inv_bind1_isuni … H) -H [3,6: // |*: * -Hf ] ] qed-. -lemma jsx_fwd_drops_pair_sn (h) (b) (G): - ∀L1,L2. G ⊢ L1 ⊒[h] L2 → +lemma jsx_fwd_drops_pair_sn (b) (G): + ∀L1,L2. G ⊢ L1 ⊒ L2 → ∀f. 𝐔❪f❫ → ∀I,K1,V. ⇩*[b,f]L1 ≘ K1.ⓑ[I]V → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓑ[I]V - | ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*𝐒[h,V] K2. -#h #b #G #L1 #L2 #H elim H -L1 -L2 + ∨∨ ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓑ[I]V + | ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*𝐒[V] K2. +#b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #J #Y1 #X1 #H lapply (drops_inv_atom1 … H) -H * #H #_ destruct | #I #K1 #K2 #HK12 #IH #f #Hf #J #Y1 #X1 #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_jsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_jsx.ma index b53d0d6f7..0b93e69eb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_jsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_jsx.ma @@ -14,12 +14,12 @@ include "basic_2/rt_computation/jsx_csx.ma". -(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********) +(* COMPATIBILITY OF STRONG NORMALIZATION FOR EXTENDED RT-TRANSITION *********) (* Main properties **********************************************************) -theorem jsx_trans (h) (G): Transitive … (jsx h G). -#h #G #L1 #L #H elim H -L1 -L +theorem jsx_trans (G): Transitive … (jsx G). +#G #L1 #L #H elim H -L1 -L [ #L2 #H >(jsx_inv_atom_sn … H) -L2 // | #I #K1 #K #_ #IH #L2 #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_lsubr.ma index 4e048982b..a821861ed 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_lsubr.ma @@ -15,12 +15,12 @@ include "static_2/static/lsubr.ma". include "basic_2/rt_computation/jsx.ma". -(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********) +(* COMPATIBILITY OF STRONG NORMALIZATION FOR EXTENDED RT-TRANSITION *********) (* Forward lemmas with restricted refinement for local environments *********) -lemma jsx_fwd_lsubr (h) (G): - ∀L1,L2. G ⊢ L1 ⊒[h] L2 → L1 ⫃ L2. -#h #G #L1 #L2 #H elim H -L1 -L2 +lemma jsx_fwd_lsubr (G): + ∀L1,L2. G ⊢ L1 ⊒ L2 → L1 ⫃ L2. +#G #L1 #L2 #H elim H -L1 -L2 /2 width=1 by lsubr_bind, lsubr_unit/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma index 0137a4087..44d8ac029 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma @@ -16,15 +16,15 @@ include "basic_2/rt_computation/rsx_drops.ma". include "basic_2/rt_computation/rsx_lpxs.ma". include "basic_2/rt_computation/jsx.ma". -(* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********) +(* COMPATIBILITY OF STRONG NORMALIZATION FOR EXTENDED RT-TRANSITION *********) (* Properties with strongly normalizing referred local environments *********) (* Basic_2A1: uses: lsx_cpx_trans_lcosx *) -lemma rsx_cpx_trans_jsx (h) (G): - ∀L0,T1,T2. ❪G,L0❫ ⊢ T1 ⬈[h] T2 → - ∀L. G ⊢ L0 ⊒[h] L → G ⊢ ⬈*𝐒[h,T1] L → G ⊢ ⬈*𝐒[h,T2] L. -#h #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2 +lemma rsx_cpx_trans_jsx (G): + ∀L0,T1,T2. ❪G,L0❫ ⊢ T1 ⬈ T2 → + ∀L. G ⊢ L0 ⊒ L → G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L. +#G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2 [ // | // | #I0 #G #K0 #V1 #V2 #W2 #_ #IH #HVW2 #L #HK0 #HL @@ -63,15 +63,15 @@ qed-. (* Advanced properties of strongly normalizing referred local environments **) (* Basic_2A1: uses: lsx_cpx_trans_O *) -lemma rsx_cpx_trans (h) (G): - ∀L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → - G ⊢ ⬈*𝐒[h,T1] L → G ⊢ ⬈*𝐒[h,T2] L. +lemma rsx_cpx_trans (G): + ∀L,T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → + G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L. /3 width=6 by rsx_cpx_trans_jsx, jsx_refl/ qed-. -lemma rsx_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 // +lemma rsx_cpxs_trans (G): + ∀L,T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → + G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L. +#G #L #T1 #T2 #H +@(cpxs_ind_dx ??????? H) -T1 // /3 width=3 by rsx_cpx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma index b1ce9c242..0edc5d3b1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma @@ -32,7 +32,7 @@ lemma lprs_ind_dx (h) (G) (L1): ∀L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → Q L2. /4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_dx/ qed-. -(* Properties with unbound rt-transition for full local environments ********) +(* Properties with extended rt-transition for full local environments *******) lemma lpr_lprs (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ➡*[h,0] L2. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma index 17b127713..48d1d0d1f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma @@ -18,9 +18,10 @@ include "basic_2/rt_computation/lprs.ma". (* PARALLEL R-COMPUTATION FOR FULL LOCAL ENVIRONMENTS ***********************) -(* Forward lemmas with unbound rt-computation for full local environments ***) +(* Forward lemmas with extended rt-computation for full local environments **) (* Basic_2A1: was: lprs_lpxs *) (* Note: original proof uses lpr_fwd_lpx and monotonic_TC *) -lemma lprs_fwd_lpxs (h) (G) : ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. +lemma lprs_fwd_lpxs (h) (G): + ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L1❫ ⊢ ⬈* L2. /3 width=3 by cpms_fwd_cpxs, lex_co/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma index ade37fde5..17f352a9c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma @@ -12,70 +12,78 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtysnstar_4.ma". +include "basic_2/notation/relations/predtysnstar_3.ma". include "static_2/relocation/lex.ma". include "basic_2/rt_computation/cpxs_ext.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) -definition lpxs (h) (G): relation lenv ≝ - lex (cpxs h G). +definition lpxs (G): relation lenv ≝ + lex (cpxs G). interpretation - "unbound parallel rt-computation on all entries (local environment)" - 'PRedTySnStar h G L1 L2 = (lpxs h G L1 L2). + "extended parallel rt-computation on all entries (local environment)" + 'PRedTySnStar G L1 L2 = (lpxs G L1 L2). (* Basic properties *********************************************************) (* Basic_2A1: uses: lpxs_pair_refl *) -lemma lpxs_bind_refl_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → - ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ⬈*[h] L2.ⓘ[I]. +lemma lpxs_bind_refl_dx (G): + ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → + ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ⬈* L2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. -lemma lpxs_pair (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → - ∀V1,V2. ❪G,L1❫ ⊢ V1 ⬈*[h] V2 → - ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈*[h] L2.ⓑ[I]V2. +lemma lpxs_pair (G): + ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → + ∀V1,V2. ❪G,L1❫ ⊢ V1 ⬈* V2 → + ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈* L2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. -lemma lpxs_refl (h) (G): reflexive … (lpxs h G). +lemma lpxs_refl (G): + reflexive … (lpxs G). /2 width=1 by lex_refl/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: was: lpxs_inv_atom1 *) -lemma lpxs_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ⬈*[h] L2 → L2 = ⋆. +lemma lpxs_inv_atom_sn (G): + ∀L2. ❪G,⋆❫ ⊢ ⬈* L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. -lemma lpxs_inv_bind_sn (h) (G): ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈*[h] L2 → - ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈*[h] K2 & ❪G,K1❫ ⊢ I1 ⬈*[h] I2 & L2 = K2.ⓘ[I2]. +lemma lpxs_inv_bind_sn (G): + ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈* L2 → + ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈* K2 & ❪G,K1❫ ⊢ I1 ⬈* I2 & L2 = K2.ⓘ[I2]. /2 width=1 by lex_inv_bind_sn/ qed-. (* Basic_2A1: was: lpxs_inv_pair1 *) -lemma lpxs_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈*[h] L2 → - ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈*[h] K2 & ❪G,K1❫ ⊢ V1 ⬈*[h] V2 & L2 = K2.ⓑ[I]V2. +lemma lpxs_inv_pair_sn (G): + ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈* L2 → + ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈* K2 & ❪G,K1❫ ⊢ V1 ⬈* V2 & L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. (* Basic_2A1: was: lpxs_inv_atom2 *) -lemma lpxs_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ⬈*[h] ⋆ → L1 = ⋆. +lemma lpxs_inv_atom_dx (G): + ∀L1. ❪G,L1❫ ⊢ ⬈* ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. (* Basic_2A1: was: lpxs_inv_pair2 *) -lemma lpxs_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈*[h] K2.ⓑ[I]V2 → - ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈*[h] K2 & ❪G,K1❫ ⊢ V1 ⬈*[h] V2 & L1 = K1.ⓑ[I]V1. +lemma lpxs_inv_pair_dx (G): + ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈* K2.ⓑ[I]V2 → + ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈* K2 & ❪G,K1❫ ⊢ V1 ⬈* V2 & L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. (* Basic eliminators ********************************************************) (* Basic_2A1: was: lpxs_ind_alt *) -lemma lpxs_ind (h) (G): ∀Q:relation lenv. - Q (⋆) (⋆) → ( - ∀I,K1,K2. - ❪G,K1❫ ⊢ ⬈*[h] K2 → - Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I]) - ) → ( - ∀I,K1,K2,V1,V2. - ❪G,K1❫ ⊢ ⬈*[h] K2 → ❪G,K1❫ ⊢ V1 ⬈*[h] V2 → - Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2) - ) → - ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → Q L1 L2. +lemma lpxs_ind (G) (Q:relation …): + Q (⋆) (⋆) → ( + ∀I,K1,K2. + ❪G,K1❫ ⊢ ⬈* K2 → + Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I]) + ) → ( + ∀I,K1,K2,V1,V2. + ❪G,K1❫ ⊢ ⬈* K2 → ❪G,K1❫ ⊢ V1 ⬈* V2 → + Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2) + ) → + ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → Q L1 L2. /3 width=4 by lex_ind/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_aaa.ma index 3ec241468..a8f73eac9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_aaa.ma @@ -15,12 +15,13 @@ include "basic_2/rt_transition/lpx_aaa.ma". include "basic_2/rt_computation/lpxs_lpx.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) (* Properties with atomic arity assignment for terms ************************) -lemma lpxs_aaa_conf (h) (G) (T): Conf3 … (λL. aaa G L T) (lpxs h G). -#h #G #T #A #L1 #HT #L2 #H +lemma lpxs_aaa_conf (G) (T): + Conf3 … (λL. aaa G L T) (lpxs G). +#G #T #A #L1 #HT #L2 #H lapply (lex_inv_CTC … H) -H // @TC_Conf3 [4: // |*: /2 width=4 by lpx_aaa_conf/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma index d820662f6..99d72a494 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma @@ -14,23 +14,23 @@ include "basic_2/rt_computation/lpxs_lpx.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) (* Properties with context-sensitive extended rt-computation for terms ******) (* Basic_2A1: was: cpxs_bind2 *) -lemma cpxs_bind_alt (h) (G): - ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈*[h] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. +lemma cpxs_bind_alt (G): + ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈* V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈* T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2. /4 width=5 by lpxs_cpxs_trans, lpxs_pair, cpxs_bind/ qed. (* Inversion lemmas with context-sensitive ext rt-computation for terms *****) -lemma cpxs_inv_abst1 (h) (G): - ∀p,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈*[h] U2 → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈*[h] T2 & U2 = ⓛ[p]V2.T2. -#h #G #p #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /2 width=5 by ex3_2_intro/ +lemma cpxs_inv_abst1 (G): + ∀p,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈* U2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈* V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈* T2 & U2 = ⓛ[p]V2.T2. +#G #p #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /2 width=5 by ex3_2_intro/ #U0 #U2 #_ #HU02 * #V0 #T0 #HV10 #HT10 #H destruct elim (cpx_inv_abst1 … HU02) -HU02 #V2 #T2 #HV02 #HT02 #H destruct lapply (lpxs_cpx_trans … HT02 (L.ⓛV1) ?) @@ -38,11 +38,11 @@ lapply (lpxs_cpx_trans … HT02 (L.ⓛV1) ?) qed-. (* Basic_2A1: was: cpxs_inv_abbr1 *) -lemma cpxs_inv_abbr1_dx (h) (p) (G) (L): - ∀V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈*[h] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈*[h] T2 & U2 = ⓓ[p]V2.T2 - | ∃∃T2. ❪G,L.ⓓV1❫ ⊢ T1 ⬈*[h] T2 & ⇧[1] U2 ≘ T2 & p = Ⓣ. -#h #p #G #L #V1 #T1 #U2 #H +lemma cpxs_inv_abbr1_dx (p) (G) (L): + ∀V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈* U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈* V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈* T2 & U2 = ⓓ[p]V2.T2 + | ∃∃T2. ❪G,L.ⓓV1❫ ⊢ T1 ⬈* T2 & ⇧[1] U2 ≘ T2 & p = Ⓣ. +#p #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/ #U0 #U2 #_ #HU02 * * [ #V0 #T0 #HV10 #HT10 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_drops.ma index 9578dad4e..9af34d4fe 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_drops.ma @@ -15,20 +15,23 @@ include "static_2/relocation/drops_lex.ma". include "basic_2/rt_computation/cpxs_drops.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) (* Properties with generic slicing for local environments *******************) (* Basic_2A1: was: drop_lpxs_trans *) -lemma drops_lpxs_trans (h) (G): dedropable_sn (cpxs h G). +lemma drops_lpxs_trans (G): + dedropable_sn (cpxs G). /3 width=6 by lex_liftable_dedropable_sn, cpxs_lifts_sn/ qed-. (* Inversion lemmas with generic slicing for local environments *************) (* Basic_2A1: was: lpxs_drop_conf *) -lemma lpxs_drops_conf (h) (G): dropable_sn (cpxs h G). +lemma lpxs_drops_conf (G): + dropable_sn (cpxs G). /2 width=3 by lex_dropable_sn/ qed-. (* Basic_2A1: was: lpxs_drop_trans_O1 *) -lemma lpxs_drops_trans (h) (G): dropable_dx (cpxs h G). +lemma lpxs_drops_trans (G): + dropable_dx (cpxs G). /2 width=3 by lex_dropable_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma index 4c2a560db..04f5a2b29 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma @@ -15,14 +15,15 @@ include "static_2/static/feqx.ma". include "basic_2/rt_computation/lpxs_reqx.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) (* Properties with sort-irrelevant equivalence on closures ******************) -lemma feqx_lpxs_trans (h): ∀G1,G2,L1,L0,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L0,T2❫ → - ∀L2. ❪G2,L0❫ ⊢⬈*[h] L2 → - ∃∃L. ❪G1,L1❫ ⊢⬈*[h] L & ❪G1,L,T1❫ ≛ ❪G2,L2,T2❫. -#h #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 +lemma feqx_lpxs_trans: + ∀G1,G2,L1,L0,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L0,T2❫ → + ∀L2. ❪G2,L0❫ ⊢⬈* L2 → + ∃∃L. ❪G1,L1❫ ⊢⬈* L & ❪G1,L,T1❫ ≛ ❪G2,L2,T2❫. +#G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 elim (feqx_inv_gen_dx … H1) -H1 #HG #HL10 #HT12 destruct elim (reqx_lpxs_trans … HL02 … HL10) -L0 #L0 #HL10 #HL02 /3 width=3 by feqx_intro_dx, ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma index ec5b9dbe7..e851d511f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma @@ -15,9 +15,10 @@ include "static_2/relocation/lex_length.ma". include "basic_2/rt_computation/lpxs.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) (* Forward lemmas with length for local environments ************************) -lemma lpxs_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → |L1| = |L2|. +lemma lpxs_fwd_length (G): + ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma index 18c5bb7ee..3faf56bf8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma @@ -16,41 +16,47 @@ include "static_2/relocation/lex_tc.ma". include "basic_2/rt_computation/cpxs_lpx.ma". include "basic_2/rt_computation/lpxs.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) -(* Properties with unbound rt-transition for full local environments ********) +(* Properties with extended rt-transition for full local environments *******) -lemma lpx_lpxs (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. +lemma lpx_lpxs (G): + ∀L1,L2. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L1❫ ⊢ ⬈* L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_inj/ qed. (* Basic_2A1: was: lpxs_strap2 *) -lemma lpxs_step_sn (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ⬈[h] L → - ∀L2. ❪G,L❫ ⊢ ⬈*[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. +lemma lpxs_step_sn (G): + ∀L1,L. ❪G,L1❫ ⊢ ⬈ L → + ∀L2. ❪G,L❫ ⊢ ⬈* L2 → ❪G,L1❫ ⊢ ⬈* L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_step_sn/ qed-. (* Basic_2A1: was: lpxs_strap1 *) -lemma lpxs_step_dx (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ⬈*[h] L → - ∀L2. ❪G,L❫ ⊢ ⬈[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. +lemma lpxs_step_dx (G): + ∀L1,L. ❪G,L1❫ ⊢ ⬈* L → + ∀L2. ❪G,L❫ ⊢ ⬈ L2 → ❪G,L1❫ ⊢ ⬈* L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_step_dx/ qed-. -(* Eliminators with unbound rt-transition for full local environments *******) +(* Eliminators with extended rt-transition for full local environments ******) (* Basic_2A1: was: lpxs_ind_dx *) -lemma lpxs_ind_sn (h) (G) (L2): ∀Q:predicate lenv. Q L2 → - (∀L1,L. ❪G,L1❫ ⊢ ⬈[h] L → ❪G,L❫ ⊢ ⬈*[h] L2 → Q L → Q L1) → - ∀L1. ❪G,L1❫ ⊢ ⬈*[h] L2 → Q L1. +lemma lpxs_ind_sn (G) (L2) (Q:predicate …): + Q L2 → + (∀L1,L. ❪G,L1❫ ⊢ ⬈ L → ❪G,L❫ ⊢ ⬈* L2 → Q L → Q L1) → + ∀L1. ❪G,L1❫ ⊢ ⬈* L2 → Q L1. /3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_sn/ qed-. (* Basic_2A1: was: lpxs_ind *) -lemma lpxs_ind_dx (h) (G) (L1): ∀Q:predicate lenv. Q L1 → - (∀L,L2. ❪G,L1❫ ⊢ ⬈*[h] L → ❪G,L❫ ⊢ ⬈[h] L2 → Q L → Q L2) → - ∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → Q L2. +lemma lpxs_ind_dx (G) (L1) (Q:predicate …): + Q L1 → + (∀L,L2. ❪G,L1❫ ⊢ ⬈* L → ❪G,L❫ ⊢ ⬈ L2 → Q L → Q L2) → + ∀L2. ❪G,L1❫ ⊢ ⬈* L2 → Q L2. /3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_dx/ qed-. (* Properties with context-sensitive extended rt-transition for terms *******) -lemma lpxs_cpx_trans (h) (G): s_r_transitive … (cpx h G) (λ_.lpxs h G). -#h #G #L2 #T1 #T2 #HT12 #L1 #HL12 +lemma lpxs_cpx_trans (G): + s_r_transitive … (cpx G) (λ_.lpxs G). +#G #L2 #T1 #T2 #HT12 #L1 #HL12 @(s_r_trans_CTC2 ???????? HT12) -HT12 /2 width=4 by lpx_cpxs_trans, lex_inv_CTC/ qed-. @@ -58,14 +64,16 @@ qed-. (* Properties with context-sensitive extended rt-computation for terms ******) (* Note: alternative proof by s_r_to_s_rs_trans *) -lemma lpxs_cpxs_trans (h) (G): s_rs_transitive … (cpx h G) (λ_.lpxs h G). -#h #G @s_r_trans_CTC1 /2 width=3 by lpxs_cpx_trans/ +lemma lpxs_cpxs_trans (G): + s_rs_transitive … (cpx G) (λ_.lpxs G). +#G @s_r_trans_CTC1 /2 width=3 by lpxs_cpx_trans/ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: was: lpxs_pair2 *) -lemma lpxs_pair_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → - ∀V1,V2. ❪G,L2❫ ⊢ V1 ⬈*[h] V2 → - ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈*[h] L2.ⓑ[I]V2. +lemma lpxs_pair_dx (G): + ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → + ∀V1,V2. ❪G,L2❫ ⊢ V1 ⬈* V2 → + ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈* L2.ⓑ[I]V2. /3 width=3 by lpxs_pair, lpxs_cpxs_trans/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpxs.ma index e20b65982..6330bfc72 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpxs.ma @@ -15,9 +15,9 @@ include "static_2/relocation/lex_lex.ma". include "basic_2/rt_computation/lpxs_lpx.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) (* Main properties **********************************************************) -theorem lpxs_trans (h) (G): Transitive … (lpxs h G). +theorem lpxs_trans (G): Transitive … (lpxs G). /4 width=5 by lpxs_cpxs_trans, cpxs_trans, lex_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma index 29deb0239..886c4dffb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma @@ -15,16 +15,15 @@ include "basic_2/rt_transition/lpx_reqx.ma". include "basic_2/rt_computation/lpxs_lpx.ma". -(* UNBOUND PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS **************) +(* EXTENDED PARALLEL RT-COMPUTATION FOR FULL LOCAL ENVIRONMENTS *************) (* Properties with sort-irrelevant equivalence on referred entries **********) (* Basic_2A1: uses: lleq_lpxs_trans *) -lemma reqx_lpxs_trans (h) (G) (T:term): - ∀L2,K2. ❪G,L2❫ ⊢ ⬈*[h] K2 → - ∀L1. L1 ≛[T] L2 → - ∃∃K1. ❪G,L1❫ ⊢ ⬈*[h] K1 & K1 ≛[T] K2. -#h #G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ +lemma reqx_lpxs_trans (G) (T:term): + ∀L2,K2. ❪G,L2❫ ⊢ ⬈* K2 → ∀L1. L1 ≛[T] L2 → + ∃∃K1. ❪G,L1❫ ⊢ ⬈* K1 & K1 ≛[T] K2. +#G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ #L #L2 #HL2 #_ #IH #L1 #HT elim (reqx_lpx_trans … HL2 … HT) -L #L #HL1 #HT elim (IH … HT) -L2 #K #HLK #HT @@ -32,11 +31,10 @@ elim (IH … HT) -L2 #K #HLK #HT qed-. (* Basic_2A1: uses: lpxs_nlleq_inv_step_sn *) -lemma lpxs_rneqx_inv_step_sn (h) (G) (T:term): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → - ∃∃L,L0. ❪G,L1❫ ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ & - ❪G,L❫ ⊢ ⬈*[h] L0 & L0 ≛[T] L2. -#h #G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1 +lemma lpxs_rneqx_inv_step_sn (G) (T:term): + ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≛[T] L2 → ⊥) → + ∃∃L,L0. ❪G,L1❫ ⊢ ⬈ L & L1 ≛[T] L → ⊥ & ❪G,L❫ ⊢ ⬈* L0 & L0 ≛[T] L2. +#G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1 [ #H elim H -H // | #L1 #L #H1 #H2 #IH2 #H12 elim (reqx_dec L1 L T) #H [ -H1 -H2 elim IH2 -IH2 /3 width=3 by reqx_trans/ -H12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma index 35e326136..9d6248571 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma @@ -12,81 +12,81 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtysnstrong_4.ma". +include "basic_2/notation/relations/predtysnstrong_3.ma". include "static_2/static/reqx.ma". include "basic_2/rt_transition/lpx.ma". -(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) +(* STRONGLY NORMALIZING REFERRED LOCAL ENVS FOR EXTENDED RT-TRANSITION ******) -definition rsx (h) (G) (T): predicate lenv ≝ - SN … (lpx h G) (reqx T). +definition rsx (G) (T): predicate lenv ≝ + SN … (lpx G) (reqx T). interpretation - "strong normalization for unbound context-sensitive parallel rt-transition on referred entries (local environment)" - 'PRedTySNStrong h T G L = (rsx h G T L). + "strong normalization for extended context-sensitive parallel rt-transition on referred entries (local environment)" + 'PRedTySNStrong G T L = (rsx G T L). (* Basic eliminators ********************************************************) (* Basic_2A1: uses: lsx_ind *) -lemma rsx_ind (h) (G) (T) (Q:predicate …): - (∀L1. G ⊢ ⬈*𝐒[h,T] L1 → - (∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → +lemma rsx_ind (G) (T) (Q:predicate …): + (∀L1. G ⊢ ⬈*𝐒[T] L1 → + (∀L2. ❪G,L1❫ ⊢ ⬈ L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L. G ⊢ ⬈*𝐒[h,T] L → Q L. -#h #G #T #Q #H0 #L1 #H elim H -L1 + ∀L. G ⊢ ⬈*𝐒[T] L → Q L. +#G #T #Q #H0 #L1 #H elim H -L1 /5 width=1 by SN_intro/ qed-. (* Basic properties *********************************************************) (* Basic_2A1: uses: lsx_intro *) -lemma rsx_intro (h) (G) (T): +lemma rsx_intro (G) (T): ∀L1. - (∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*𝐒[h,T] L2) → - G ⊢ ⬈*𝐒[h,T] L1. + (∀L2. ❪G,L1❫ ⊢ ⬈ L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) → + G ⊢ ⬈*𝐒[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 rsx_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 +lemma rsx_fwd_pair_sn (G): + ∀I,L,V,T. G ⊢ ⬈*𝐒[②[I]V.T] L → + G ⊢ ⬈*𝐒[V] L. +#G #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IHL1 @rsx_intro #L2 #HL12 #HnL12 /4 width=3 by reqx_fwd_pair_sn/ qed-. (* Basic_2A1: uses: lsx_fwd_flat_dx *) -lemma rsx_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 +lemma rsx_fwd_flat_dx (G): + ∀I,L,V,T. G ⊢ ⬈*𝐒[ⓕ[I]V.T] L → + G ⊢ ⬈*𝐒[T] L. +#G #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IHL1 @rsx_intro #L2 #HL12 #HnL12 /4 width=3 by reqx_fwd_flat_dx/ qed-. -fact rsx_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 +fact rsx_fwd_pair_aux (G): + ∀L. G ⊢ ⬈*𝐒[#0] L → + ∀I,K,V. L = K.ⓑ[I]V → G ⊢ ⬈*𝐒[V] K. +#G #L #H @(rsx_ind … H) -L #L1 #_ #IH #I #K1 #V #H destruct /5 width=5 by lpx_pair, rsx_intro, reqx_fwd_zero_pair/ qed-. -lemma rsx_fwd_pair (h) (G): - ∀I,K,V. G ⊢ ⬈*𝐒[h,#0] K.ⓑ[I]V → G ⊢ ⬈*𝐒[h,V] K. +lemma rsx_fwd_pair (G): + ∀I,K,V. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V → G ⊢ ⬈*𝐒[V] K. /2 width=4 by rsx_fwd_pair_aux/ qed-. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: uses: lsx_inv_flat *) -lemma rsx_inv_flat (h) (G): - ∀I,L,V,T. G ⊢ ⬈*𝐒[h,ⓕ[I]V.T] L → - ∧∧ G ⊢ ⬈*𝐒[h,V] L & G ⊢ ⬈*𝐒[h,T] L. +lemma rsx_inv_flat (G): + ∀I,L,V,T. G ⊢ ⬈*𝐒[ⓕ[I]V.T] L → + ∧∧ G ⊢ ⬈*𝐒[V] L & G ⊢ ⬈*𝐒[T] L. /3 width=3 by rsx_fwd_pair_sn, rsx_fwd_flat_dx, conj/ qed-. (* Basic_2A1: removed theorems 9: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma index e9e5f5a37..c56d1c6cc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma @@ -16,14 +16,14 @@ include "basic_2/rt_computation/csx_lsubr.ma". include "basic_2/rt_computation/csx_cpxs.ma". include "basic_2/rt_computation/jsx_rsx.ma". -(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) +(* STRONGLY NORMALIZING REFERRED LOCAL ENVS FOR EXTENDED RT-TRANSITION ******) (* Forward lemmas with strongly rt-normalizing terms ************************) -fact rsx_fwd_lref_pair_csx_aux (h) (G): - ∀L. G ⊢ ⬈*𝐒[h,#0] L → - ∀I,K,V. L = K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*𝐒[h] V. -#h #G #L #H +fact rsx_fwd_lref_pair_csx_aux (G): + ∀L. G ⊢ ⬈*𝐒[#0] L → + ∀I,K,V. L = K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*𝐒 V. +#G #L #H @(rsx_ind … H) -L #L #_ #IH #I #K #V1 #H destruct @csx_intro #V2 #HV12 #HnV12 @(IH … I) -IH [1,4: // | -HnV12 | -G #H ] @@ -33,13 +33,13 @@ fact rsx_fwd_lref_pair_csx_aux (h) (G): ] qed-. -lemma rsx_fwd_lref_pair_csx (h) (G): - ∀I,K,V. G ⊢ ⬈*𝐒[h,#0] K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*𝐒[h] V. +lemma rsx_fwd_lref_pair_csx (G): + ∀I,K,V. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*𝐒 V. /2 width=4 by rsx_fwd_lref_pair_csx_aux/ qed-. -lemma rsx_fwd_lref_pair_csx_drops (h) (G): - ∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[h,#i] L → ❪G,K❫ ⊢ ⬈*𝐒[h] V. -#h #G #I #K #V #i elim i -i +lemma rsx_fwd_lref_pair_csx_drops (G): + ∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L → ❪G,K❫ ⊢ ⬈*𝐒 V. +#G #I #K #V #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=2 by rsx_fwd_lref_pair_csx/ | #i #IH #L #H1 #H2 @@ -51,22 +51,22 @@ qed-. (* Inversion lemmas with strongly rt-normalizing terms **********************) -lemma rsx_inv_lref_pair (h) (G): - ∀I,K,V. G ⊢ ⬈*𝐒[h,#0] K.ⓑ[I]V → - ∧∧ ❪G,K❫ ⊢ ⬈*𝐒[h] V & G ⊢ ⬈*𝐒[h,V] K. +lemma rsx_inv_lref_pair (G): + ∀I,K,V. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V → + ∧∧ ❪G,K❫ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. /3 width=2 by rsx_fwd_lref_pair_csx, rsx_fwd_pair, conj/ qed-. -lemma rsx_inv_lref_pair_drops (h) (G): - ∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[h,#i] L → - ∧∧ ❪G,K❫ ⊢ ⬈*𝐒[h] V & G ⊢ ⬈*𝐒[h,V] K. +lemma rsx_inv_lref_pair_drops (G): + ∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L → + ∧∧ ❪G,K❫ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. /3 width=5 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, conj/ qed-. -lemma rsx_inv_lref_drops (h) (G): - ∀L,i. G ⊢ ⬈*𝐒[h,#i] L → +lemma rsx_inv_lref_drops (G): + ∀L,i. G ⊢ ⬈*𝐒[#i] L → ∨∨ ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ | ∃∃I,K. ⇩[i] L ≘ K.ⓤ[I] - | ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*𝐒[h] V & G ⊢ ⬈*𝐒[h,V] K. -#h #G #L #i #H elim (drops_F_uni L i) + | ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. +#G #L #i #H elim (drops_F_uni L i) [ /2 width=1 by or3_intro0/ | * * /4 width=10 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, ex3_3_intro, ex1_2_intro, or3_intro2, or3_intro1/ ] @@ -76,11 +76,11 @@ qed-. (* Note: swapping the eliminations to avoid rsx_cpx_trans: no solution found *) (* Basic_2A1: uses: lsx_lref_be_lpxs *) -lemma rsx_lref_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 +lemma rsx_lref_pair_lpxs (G): + ∀K1,V. ❪G,K1❫ ⊢ ⬈*𝐒 V → + ∀K2. G ⊢ ⬈*𝐒[V] K2 → ❪G,K1❫ ⊢ ⬈* K2 → + ∀I. G ⊢ ⬈*𝐒[#0] K2.ⓑ[I]V. +#G #K1 #V #H @(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H @(rsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #I @rsx_intro #Y #HY #HnY @@ -95,15 +95,15 @@ elim (teqx_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] ] qed. -lemma rsx_lref_pair (h) (G): - ∀K,V. ❪G,K❫ ⊢ ⬈*𝐒[h] V → G ⊢ ⬈*𝐒[h,V] K → ∀I. G ⊢ ⬈*𝐒[h,#0] K.ⓑ[I]V. +lemma rsx_lref_pair (G): + ∀K,V. ❪G,K❫ ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → ∀I. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V. /2 width=3 by rsx_lref_pair_lpxs/ qed. (* Basic_2A1: uses: lsx_lref_be *) -lemma rsx_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 +lemma rsx_lref_pair_drops (G): + ∀K,V. ❪G,K❫ ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → + ∀I,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L. +#G #K #V #HV #HK #I #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=1 by rsx_lref_pair/ | #i #IH #L #H elim (drops_inv_bind2_isuni_next … H) -H // #J #Y #HY #H destruct @@ -114,9 +114,9 @@ qed. (* Main properties with strongly rt-normalizing terms ***********************) (* Basic_2A1: uses: csx_lsx *) -theorem csx_rsx (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 +theorem csx_rsx (G): + ∀L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → G ⊢ ⬈*𝐒[T] L. +#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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma index c4f6113ce..b8d78ca67 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma @@ -17,15 +17,15 @@ include "basic_2/rt_transition/lpx_drops.ma". include "basic_2/rt_computation/rsx_length.ma". include "basic_2/rt_computation/rsx_fqup.ma". -(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) +(* STRONGLY NORMALIZING REFERRED LOCAL ENVS FOR EXTENDED RT-TRANSITION ******) (* Properties with generic relocation ***************************************) (* Note: this uses length *) (* Basic_2A1: uses: lsx_lift_le lsx_lift_ge *) -lemma rsx_lifts (h) (G): - d_liftable1_isuni … (λL,T. G ⊢ ⬈*𝐒[h,T] L). -#h #G #K #T #H @(rsx_ind … H) -K +lemma rsx_lifts (G): + d_liftable1_isuni … (λL,T. G ⊢ ⬈*𝐒[T] L). +#G #K #T #H @(rsx_ind … H) -K #K1 #_ #IH #b #f #L1 #HLK1 #Hf #U #HTU @rsx_intro #L2 #HL12 #HnL12 elim (lpx_drops_conf … HLK1 … HL12) /5 width=9 by reqx_lifts_bi, lpx_fwd_length/ @@ -34,9 +34,9 @@ qed-. (* Inversion lemmas on relocation *******************************************) (* Basic_2A1: uses: lsx_inv_lift_le lsx_inv_lift_be lsx_inv_lift_ge *) -lemma rsx_inv_lifts (h) (G): - d_deliftable1_isuni … (λL,T. G ⊢ ⬈*𝐒[h,T] L). -#h #G #L #U #H @(rsx_ind … H) -L +lemma rsx_inv_lifts (G): + d_deliftable1_isuni … (λL,T. G ⊢ ⬈*𝐒[T] L). +#G #L #U #H @(rsx_ind … H) -L #L1 #_ #IH #b #f #K1 #HLK1 #Hf #T #HTU @rsx_intro #K2 #HK12 #HnK12 elim (drops_lpx_trans … HLK1 … HK12) -HK12 /4 width=10 by reqx_inv_lifts_bi/ @@ -45,26 +45,26 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lref_free *) -lemma rsx_lref_atom_drops (h) (G): - ∀L,i. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ → G ⊢ ⬈*𝐒[h,#i] L. -#h #G #L1 #i #HL1 +lemma rsx_lref_atom_drops (G): + ∀L,i. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ → G ⊢ ⬈*𝐒[#i] L. +#G #L1 #i #HL1 @(rsx_lifts … (#0) … HL1) -HL1 // qed. (* Basic_2A1: uses: lsx_lref_skip *) -lemma rsx_lref_unit_drops (h) (G): - ∀I,L,K,i. ⇩[i] L ≘ K.ⓤ[I] → G ⊢ ⬈*𝐒[h,#i] L. -#h #G #I #L1 #K1 #i #HL1 +lemma rsx_lref_unit_drops (G): + ∀I,L,K,i. ⇩[i] L ≘ K.ⓤ[I] → G ⊢ ⬈*𝐒[#i] L. +#G #I #L1 #K1 #i #HL1 @(rsx_lifts … (#0) … HL1) -HL1 // qed. (* Advanced forward lemmas **************************************************) (* Basic_2A1: uses: lsx_fwd_lref_be *) -lemma rsx_fwd_lref_pair_drops (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 +lemma rsx_fwd_lref_pair_drops (G): + ∀L,i. G ⊢ ⬈*𝐒[#i] L → + ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[V] K. +#G #L #i #HL #I #K #V #HLK lapply (rsx_inv_lifts … HL … HLK … (#0) ?) -L /2 width=2 by rsx_fwd_pair/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma index b638da30e..224ad7717 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma @@ -15,13 +15,13 @@ include "static_2/static/reqx_fqup.ma". include "basic_2/rt_computation/rsx.ma". -(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) +(* STRONGLY NORMALIZING REFERRED LOCAL ENVS FOR EXTENDED RT-TRANSITION ******) (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_atom *) -lemma lfsx_atom (h) (G) (T): G ⊢ ⬈*𝐒[h,T] ⋆. -#h #G #T +lemma lfsx_atom (G) (T): G ⊢ ⬈*𝐒[T] ⋆. +#G #T @rsx_intro #Y #H #HnT lapply (lpx_inv_atom_sn … H) -H #H destruct elim HnT -HnT // @@ -32,9 +32,9 @@ 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 rsx_fwd_bind_dx_void (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 +lemma rsx_fwd_bind_dx_void (G): + ∀p,I,L,V,T. G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L → G ⊢ ⬈*𝐒[T] L.ⓧ. +#G #p #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IH @rsx_intro #Y #H #HT elim (lpx_inv_unit_sn … H) -H #L2 #HL12 #H destruct @@ -44,7 +44,7 @@ qed-. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: uses: lsx_inv_bind *) -lemma rsx_inv_bind_void (h) (G): - ∀p,I,L,V,T. G ⊢ ⬈*𝐒[h,ⓑ[p,I]V.T] L → - ∧∧ G ⊢ ⬈*𝐒[h,V] L & G ⊢ ⬈*𝐒[h,T] L.ⓧ. +lemma rsx_inv_bind_void (G): + ∀p,I,L,V,T. G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L → + ∧∧ G ⊢ ⬈*𝐒[V] L & G ⊢ ⬈*𝐒[T] L.ⓧ. /3 width=4 by rsx_fwd_pair_sn, rsx_fwd_bind_dx_void, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma index 4a5a8a4e5..98951ee64 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma @@ -16,24 +16,24 @@ include "static_2/static/reqx_length.ma". include "basic_2/rt_transition/lpx_length.ma". include "basic_2/rt_computation/rsx.ma". -(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) +(* STRONGLY NORMALIZING REFERRED LOCAL ENVS FOR EXTENDED RT-TRANSITION ******) (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_sort *) -lemma rsx_sort (h) (G): ∀L,s. G ⊢ ⬈*𝐒[h,⋆s] L. -#h #G #L1 #s @rsx_intro #L2 #H #Hs +lemma rsx_sort (G): ∀L,s. G ⊢ ⬈*𝐒[⋆s] L. +#G #L1 #s @rsx_intro #L2 #H #Hs elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_sort_length/ qed. (* Basic_2A1: uses: lsx_gref *) -lemma rsx_gref (h) (G): ∀L,l. G ⊢ ⬈*𝐒[h,§l] L. -#h #G #L1 #s @rsx_intro #L2 #H #Hs +lemma rsx_gref (G): ∀L,l. G ⊢ ⬈*𝐒[§l] L. +#G #L1 #s @rsx_intro #L2 #H #Hs elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_gref_length/ qed. -lemma rsx_unit (h) (G): ∀I,L. G ⊢ ⬈*𝐒[h,#0] L.ⓤ[I]. -#h #G #I #L1 @rsx_intro +lemma rsx_unit (G): ∀I,L. G ⊢ ⬈*𝐒[#0] L.ⓤ[I]. +#G #I #L1 @rsx_intro #Y #HY #HnY elim HnY -HnY elim (lpx_inv_unit_sn … HY) -HY #L2 #HL12 #H destruct /3 width=3 by lpx_fwd_length, reqx_unit_length/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma index 5bbdcb180..2c8e0ccb0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma @@ -16,34 +16,34 @@ include "basic_2/rt_computation/lpxs_reqx.ma". include "basic_2/rt_computation/lpxs_lpxs.ma". include "basic_2/rt_computation/rsx_rsx.ma". -(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) +(* STRONGLY NORMALIZING REFERRED LOCAL ENVS FOR EXTENDED RT-TRANSITION ******) -(* Properties with unbound rt-computation for full local environments *******) +(* Properties with extended rt-computation for full local environments ******) (* Basic_2A1: uses: lsx_intro_alt *) -lemma rsx_intro_lpxs (h) (G): - ∀L1,T. (∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*𝐒[h,T] L2) → - G ⊢ ⬈*𝐒[h,T] L1. +lemma rsx_intro_lpxs (G): + ∀L1,T. (∀L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) → + G ⊢ ⬈*𝐒[T] L1. /4 width=1 by lpx_lpxs, rsx_intro/ qed-. (* Basic_2A1: uses: lsx_lpxs_trans *) -lemma rsx_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 +lemma rsx_lpxs_trans (G): + ∀L1,T. G ⊢ ⬈*𝐒[T] L1 → + ∀L2. ❪G,L1❫ ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[T] L2. +#G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2 /2 width=3 by rsx_lpx_trans/ qed-. -(* Eliminators with unbound rt-computation for full local environments ******) +(* Eliminators with extended rt-computation for full local environments *****) -lemma rsx_ind_lpxs_reqx (h) (G) (T) (Q:predicate lenv): - (∀L1. G ⊢ ⬈*𝐒[h,T] L1 → - (∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → +lemma rsx_ind_lpxs_reqx (G) (T) (Q:predicate lenv): + (∀L1. G ⊢ ⬈*𝐒[T] L1 → + (∀L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L1. G ⊢ ⬈*𝐒[h,T] L1 → - ∀L0. ❪G,L1❫ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2. -#h #G #T #Q #IH #L1 #H @(rsx_ind … H) -L1 + ∀L1. G ⊢ ⬈*𝐒[T] L1 → + ∀L0. ❪G,L1❫ ⊢ ⬈* L0 → ∀L2. L0 ≛[T] L2 → Q L2. +#G #T #Q #IH #L1 #H @(rsx_ind … H) -L1 #L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02 @IH -IH /3 width=3 by rsx_lpxs_trans, rsx_reqx_trans/ -HL1 #K2 #HLK2 #HnLK2 lapply (reqx_rneqx_trans … HL02 … HnLK2) -HnLK2 #H @@ -61,24 +61,24 @@ elim (reqx_dec L1 L0 T) #H qed-. (* Basic_2A1: uses: lsx_ind_alt *) -lemma rsx_ind_lpxs (h) (G) (T) (Q:predicate lenv): - (∀L1. G ⊢ ⬈*𝐒[h,T] L1 → - (∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → +lemma rsx_ind_lpxs (G) (T) (Q:predicate lenv): + (∀L1. G ⊢ ⬈*𝐒[T] L1 → + (∀L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L. G ⊢ ⬈*𝐒[h,T] L → Q L. -#h #G #T #Q #IH #L #HL + ∀L. G ⊢ ⬈*𝐒[T] L → Q L. +#G #T #Q #IH #L #HL @(rsx_ind_lpxs_reqx … IH … HL) -IH -HL // (**) (* full auto fails *) qed-. (* Advanced properties ******************************************************) -fact rsx_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,ⓑ[p,I]V.T] L2. -#h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 +fact rsx_bind_lpxs_aux (G): + ∀p,I,L1,V. G ⊢ ⬈*𝐒[V] L1 → + ∀Y,T. G ⊢ ⬈*𝐒[T] Y → + ∀L2. Y = L2.ⓑ[I]V → ❪G,L1❫ ⊢ ⬈* L2 → + G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L2. +#G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y #Y #HY #IHY #L2 #H #HL12 destruct @rsx_intro_lpxs #L0 #HL20 @@ -94,18 +94,18 @@ elim (rneqx_inv_bind … H) -H [ -IHY | -HY -IHL1 -HL12 ] qed-. (* Basic_2A1: uses: lsx_bind *) -lemma rsx_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. +lemma rsx_bind (G): + ∀p,I,L,V. G ⊢ ⬈*𝐒[V] L → + ∀T. G ⊢ ⬈*𝐒[T] L.ⓑ[I]V → + G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L. /2 width=3 by rsx_bind_lpxs_aux/ qed. (* Basic_2A1: uses: lsx_flat_lpxs *) -lemma rsx_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 @(rsx_ind_lpxs … H) -L1 +lemma rsx_flat_lpxs (G): + ∀I,L1,V. G ⊢ ⬈*𝐒[V] L1 → + ∀L2,T. G ⊢ ⬈*𝐒[T] L2 → ❪G,L1❫ ⊢ ⬈* L2 → + G ⊢ ⬈*𝐒[ⓕ[I]V.T] L2. +#G #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #HL1 #IHL1 #L2 #T #H @(rsx_ind_lpxs … H) -L2 #L2 #HL2 #IHL2 #HL12 @rsx_intro_lpxs #L0 #HL20 lapply (lpxs_trans … HL12 … HL20) @@ -120,17 +120,17 @@ lemma rsx_flat_lpxs (h) (G): qed-. (* Basic_2A1: uses: lsx_flat *) -lemma rsx_flat (h) (G): - ∀I,L,V. G ⊢ ⬈*𝐒[h,V] L → - ∀T. G ⊢ ⬈*𝐒[h,T] L → G ⊢ ⬈*𝐒[h,ⓕ[I]V.T] L. +lemma rsx_flat (G): + ∀I,L,V. G ⊢ ⬈*𝐒[V] L → + ∀T. G ⊢ ⬈*𝐒[T] L → G ⊢ ⬈*𝐒[ⓕ[I]V.T] L. /2 width=3 by rsx_flat_lpxs/ qed. -fact rsx_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,ⓑ[p,I]V.T] L2. -#h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 +fact rsx_bind_lpxs_void_aux (G): + ∀p,I,L1,V. G ⊢ ⬈*𝐒[V] L1 → + ∀Y,T. G ⊢ ⬈*𝐒[T] Y → + ∀L2. Y = L2.ⓧ → ❪G,L1❫ ⊢ ⬈* L2 → + G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L2. +#G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y #Y #HY #IHY #L2 #H #HL12 destruct @rsx_intro_lpxs #L0 #HL20 @@ -145,8 +145,8 @@ elim (rneqx_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ] ] qed-. -lemma rsx_bind_void (h) (G): - ∀p,I,L,V. G ⊢ ⬈*𝐒[h,V] L → - ∀T. G ⊢ ⬈*𝐒[h,T] L.ⓧ → - G ⊢ ⬈*𝐒[h,ⓑ[p,I]V.T] L. +lemma rsx_bind_void (G): + ∀p,I,L,V. G ⊢ ⬈*𝐒[V] L → + ∀T. G ⊢ ⬈*𝐒[T] L.ⓧ → + G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L. /2 width=3 by rsx_bind_lpxs_void_aux/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma index 5e594b775..e9e8d7a8b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma @@ -15,24 +15,24 @@ include "basic_2/rt_transition/lpx_reqx.ma". include "basic_2/rt_computation/rsx.ma". -(* STRONGLY NORMALIZING REFERRED LOCAL ENV.S FOR UNBOUND RT-TRANSITION ******) +(* STRONGLY NORMALIZING REFERRED LOCAL ENVS FOR EXTENDED RT-TRANSITION ******) (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lleq_trans *) -lemma rsx_reqx_trans (h) (G): - ∀L1,T. G ⊢ ⬈*𝐒[h,T] L1 → - ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*𝐒[h,T] L2. -#h #G #L1 #T #H @(rsx_ind … H) -L1 +lemma rsx_reqx_trans (G): + ∀L1,T. G ⊢ ⬈*𝐒[T] L1 → + ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*𝐒[T] L2. +#G #L1 #T #H @(rsx_ind … H) -L1 #L1 #_ #IHL1 #L2 #HL12 @rsx_intro #L #HL2 #HnL2 elim (reqx_lpx_trans … HL2 … HL12) -HL2 /4 width=5 by reqx_repl/ qed-. (* Basic_2A1: uses: lsx_lpx_trans *) -lemma rsx_lpx_trans (h) (G): - ∀L1,T. G ⊢ ⬈*𝐒[h,T] L1 → - ∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → G ⊢ ⬈*𝐒[h,T] L2. -#h #G #L1 #T #H @(rsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12 +lemma rsx_lpx_trans (G): + ∀L1,T. G ⊢ ⬈*𝐒[T] L1 → + ∀L2. ❪G,L1❫ ⊢ ⬈ L2 → G ⊢ ⬈*𝐒[T] L2. +#G #L1 #T #H @(rsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12 elim (reqx_dec L1 L2 T) /3 width=4 by rsx_reqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma index 465871f60..777d5ecd7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma @@ -18,15 +18,15 @@ include "basic_2/rt_equivalence/cpcs_cprs.ma". (* CONTEXT-SENSITIVE PARALLEL R-EQUIVALENCE FOR TERMS ***********************) -(* Properties with strongly normalizing terms for unbound rt-transition *****) +(* Properties with strongly normalizing terms for extended rt-transition ****) (* Basic_1: was: cpcs_dec *) lemma csx_cpcs_dec (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒[h] T1 → ∀T2. ❪G,L❫ ⊢ ⬈*𝐒[h] T2 → + ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → ∀T2. ❪G,L❫ ⊢ ⬈*𝐒 T2 → Decidable … (❪G,L❫ ⊢ T1 ⬌*[h] T2). #h #G #L #T1 #HT1 #T2 #HT2 -elim (cprre_total_csx … HT1) -HT1 #U1 #HTU1 -elim (cprre_total_csx … HT2) -HT2 #U2 #HTU2 +elim (cprre_total_csx h … HT1) -HT1 #U1 #HTU1 +elim (cprre_total_csx h … HT2) -HT2 #U2 #HTU2 elim (eq_term_dec U1 U2) [ #H destruct | #HnU12 ] [ cases HTU1 -HTU1 #HTU1 #_ cases HTU2 -HTU2 #HTU2 #_ 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 1aa7d1daa..f958591d4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma @@ -12,24 +12,25 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtynormal_4.ma". +include "basic_2/notation/relations/predtynormal_3.ma". include "static_2/syntax/teqx.ma". include "basic_2/rt_transition/cpx.ma". -(* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) +(* NORMAL TERMS FOR EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION *******) -definition cnx: ∀h. relation3 genv lenv term ≝ - λh,G,L. NF … (cpx h G L) teqx. +definition cnx: relation3 genv lenv term ≝ + λG,L. NF … (cpx G L) teqx. interpretation - "normality for unbound context-sensitive parallel rt-transition (term)" - 'PRedTyNormal h G L T = (cnx h G L T). + "normality for extended context-sensitive parallel rt-transition (term)" + 'PRedTyNormal G L T = (cnx G L T). (* Basic inversion lemmas ***************************************************) -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 +lemma cnx_inv_abst (G) (L): + ∀p,V,T. ❪G,L❫ ⊢ ⬈𝐍 ⓛ[p]V.T → + ∧∧ ❪G,L❫ ⊢ ⬈𝐍 V & ❪G,L.ⓛV❫ ⊢ ⬈𝐍 T. +#G #L #p #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 ] @@ -37,9 +38,10 @@ lemma cnx_inv_abst: ∀h,p,G,L,V,T. ❪G,L❫ ⊢ ⬈𝐍[h] ⓛ[p]V.T → qed-. (* Basic_2A1: was: cnx_inv_abbr *) -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 +lemma cnx_inv_abbr_neg (G) (L): + ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 -ⓓV.T → + ∧∧ ❪G,L❫ ⊢ ⬈𝐍 V & ❪G,L.ⓓV❫ ⊢ ⬈𝐍 T. +#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 ] @@ -47,21 +49,23 @@ lemma cnx_inv_abbr_neg: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈𝐍[h] -ⓓV.T → qed-. (* Basic_2A1: was: cnx_inv_eps *) -lemma cnx_inv_cast: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈𝐍[h] ⓝV.T → ⊥. -#h #G #L #V #T #H lapply (H T ?) -H +lemma cnx_inv_cast (G) (L): + ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 ⓝV.T → ⊥. +#G #L #V #T #H lapply (H T ?) -H /2 width=6 by cpx_eps, teqx_inv_pair_xy_y/ qed-. (* Basic properties *********************************************************) -lemma cnx_sort: ∀h,G,L,s. ❪G,L❫ ⊢ ⬈𝐍[h] ⋆s. -#h #G #L #s #X #H elim (cpx_inv_sort1 … H) -H +lemma cnx_sort (G) (L): + ∀s. ❪G,L❫ ⊢ ⬈𝐍 ⋆s. +#G #L #s #X #H elim (cpx_inv_sort1 … H) -H /2 width=1 by teqx_sort/ qed. -lemma cnx_abst: ∀h,p,G,L,W,T. ❪G,L❫ ⊢ ⬈𝐍[h] W → ❪G,L.ⓛW❫ ⊢ ⬈𝐍[h] T → - ❪G,L❫ ⊢ ⬈𝐍[h] ⓛ[p]W.T. -#h #p #G #L #W #T #HW #HT #X #H +lemma cnx_abst (G) (L): + ∀p,W,T. ❪G,L❫ ⊢ ⬈𝐍 W → ❪G,L.ⓛW❫ ⊢ ⬈𝐍 T → ❪G,L❫ ⊢ ⬈𝐍 ⓛ[p]W.T. +#G #L #p #W #T #HW #HT #X #H elim (cpx_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct @teqx_pair [ @HW | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma index b99b444cc..1532cfcf6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma @@ -16,14 +16,14 @@ include "static_2/relocation/lifts_teqx.ma". include "basic_2/rt_transition/cpx_drops_basic.ma". include "basic_2/rt_transition/cnx.ma". -(* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) +(* NORMAL TERMS FOR EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION *******) (* Advanced inversion lemmas ************************************************) -lemma cnx_inv_abbr_pos (h) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ⬈𝐍[h] +ⓓV.T → ⊥. -#h #G #L #V #U1 #H -elim (cpx_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 +lemma cnx_inv_abbr_pos (G) (L): + ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 +ⓓV.T → ⊥. +#G #L #V #U1 #H +elim (cpx_subst G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 elim (teqx_dec U1 U2) #HnU12 [ -HU12 | -HTU2 ] [ elim (teqx_inv_lifts_dx … HnU12 … HTU2) -U2 #T1 #HTU1 #_ -T2 lapply (H T1 ?) -H [ /2 width=3 by cpx_zeta/ ] #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma index a93454c7d..810fb85f3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma @@ -15,13 +15,13 @@ include "basic_2/rt_transition/rpx_reqx.ma". include "basic_2/rt_transition/cnx.ma". -(* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) +(* NORMAL TERMS FOR EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION *******) (* Advanced properties ******************************************************) -lemma cnx_teqx_trans: ∀h,G,L,T1. ❪G,L❫ ⊢ ⬈𝐍[h] T1 → - ∀T2. T1 ≛ T2 → ❪G,L❫ ⊢ ⬈𝐍[h] T2. -#h #G #L #T1 #HT1 #T2 #HT12 #T #HT2 +lemma cnx_teqx_trans (G) (L): + ∀T1. ❪G,L❫ ⊢ ⬈𝐍 T1 → ∀T2. T1 ≛ T2 → ❪G,L❫ ⊢ ⬈𝐍 T2. +#G #L #T1 #HT1 #T2 #HT12 #T #HT2 elim (teqx_cpx_trans … HT12 … HT2) -HT2 #T0 #HT10 #HT0 lapply (HT1 … HT10) -HT1 -HT10 /2 width=5 by teqx_repl/ (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma index 0f57cbb00..57cb5d216 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma @@ -16,23 +16,25 @@ include "static_2/relocation/lifts_teqx.ma". include "basic_2/rt_transition/cpx_drops.ma". include "basic_2/rt_transition/cnx.ma". -(* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) +(* NORMAL TERMS FOR EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION *******) (* Properties with generic slicing ******************************************) -lemma cnx_lref_atom: ∀h,G,L,i. ⇩[i] L ≘ ⋆ → ❪G,L❫ ⊢ ⬈𝐍[h] #i. -#h #G #L #i #Hi #X #H elim (cpx_inv_lref1_drops … H) -H // * +lemma cnx_lref_atom (G) (L): + ∀i. ⇩[i] L ≘ ⋆ → ❪G,L❫ ⊢ ⬈𝐍 #i. +#G #L #i #Hi #X #H elim (cpx_inv_lref1_drops … H) -H // * #I #K #V1 #V2 #HLK lapply (drops_mono … Hi … HLK) -L #H destruct qed. -lemma cnx_lref_unit: ∀h,I,G,L,K,i. ⇩[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ⬈𝐍[h] #i. -#h #I #G #L #K #i #HLK #X #H elim (cpx_inv_lref1_drops … H) -H // * +lemma cnx_lref_unit (G) (L): + ∀I,K,i. ⇩[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ⬈𝐍 #i. +#G #L #I #K #i #HLK #X #H elim (cpx_inv_lref1_drops … H) -H // * #Z #Y #V1 #V2 #HLY lapply (drops_mono … HLK … HLY) -L #H destruct qed. (* Basic_2A1: includes: cnx_lift *) -lemma cnx_lifts: ∀h,G. d_liftable1 … (cnx h G). -#h #G #K #T #HT #b #f #L #HLK #U #HTU #U0 #H +lemma cnx_lifts (G): d_liftable1 … (cnx G). +#G #K #T #HT #b #f #L #HLK #U #HTU #U0 #H elim (cpx_inv_lifts_sn … H … HLK … HTU) -b -L #T0 #HTU0 #HT0 lapply (HT … HT0) -G -K /2 width=6 by teqx_lifts_bi/ qed-. @@ -40,9 +42,9 @@ qed-. (* Inversion lemmas with generic slicing ************************************) (* Basic_2A1: was: cnx_inv_delta *) -lemma cnx_inv_lref_pair: - ∀h,I,G,L,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ ⬈𝐍[h] #i → ⊥. -#h #I #G #L #K #V #i #HLK #H +lemma cnx_inv_lref_pair (G) (L): + ∀I,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ ⬈𝐍 #i → ⊥. +#G #L #I #K #V #i #HLK #H elim (lifts_total V (𝐔❨↑i❩)) #W #HVW lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK #H lapply (teqx_inv_lref1 … H) -H #H destruct @@ -50,8 +52,8 @@ lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK qed-. (* Basic_2A1: includes: cnx_inv_lift *) -lemma cnx_inv_lifts: ∀h,G. d_deliftable1 … (cnx h G). -#h #G #L #U #HU #b #f #K #HLK #T #HTU #T0 #H +lemma cnx_inv_lifts (G): d_deliftable1 … (cnx G). +#G #L #U #HU #b #f #K #HLK #T #HTU #T0 #H elim (cpx_lifts_sn … H … HLK … HTU) -b -K #U0 #HTU0 #HU0 lapply (HU … HU0) -G -L /2 width=6 by teqx_inv_lifts_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma index dfee9d0e0..261a220aa 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma @@ -15,13 +15,14 @@ include "basic_2/rt_transition/cpx_simple.ma". include "basic_2/rt_transition/cnx.ma". -(* NORMAL TERMS FOR UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ********) +(* NORMAL TERMS FOR EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION *******) (* Inversion lemmas with simple terms ***************************************) -lemma cnx_inv_appl: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈𝐍[h] ⓐV.T → - ∧∧ ❪G,L❫ ⊢ ⬈𝐍[h] V & ❪G,L❫ ⊢ ⬈𝐍[h] T & 𝐒❪T❫. -#h #G #L #V1 #T1 #HVT1 @and3_intro +lemma cnx_inv_appl (G) (L): + ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 ⓐV.T → + ∧∧ ❪G,L❫ ⊢ ⬈𝐍 V & ❪G,L❫ ⊢ ⬈𝐍 T & 𝐒❪T❫. +#G #L #V1 #T1 #HVT1 @and3_intro [ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpx_pair_sn/ -HV2 #H elim (teqx_inv_pair … H) -H // | #T2 #HT2 lapply (HVT1 (ⓐV1.T2) ?) -HVT1 /2 width=1 by cpx_flat/ -HT2 @@ -39,9 +40,9 @@ qed-. (* Properties with simple terms *********************************************) -lemma cnx_appl_simple: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈𝐍[h] V → ❪G,L❫ ⊢ ⬈𝐍[h] T → 𝐒❪T❫ → - ❪G,L❫ ⊢ ⬈𝐍[h] ⓐV.T. -#h #G #L #V #T #HV #HT #HS #X #H elim (cpx_inv_appl1_simple … H) -H // +lemma cnx_appl_simple (G) (L): + ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 V → ❪G,L❫ ⊢ ⬈𝐍 T → 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈𝐍 ⓐV.T. +#G #L #V #T #HV #HT #HS #X #H elim (cpx_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct @teqx_pair [ @HV | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma index 36b69f4c5..ad020929b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma @@ -23,7 +23,6 @@ include "ground/steps/rtc_shift.ma". include "ground/steps/rtc_plus.ma". include "ground/steps/rtc_max.ma". include "basic_2/notation/relations/predty_7.ma". -include "static_2/syntax/sh.ma". include "static_2/syntax/lenv.ma". include "static_2/syntax/genv.ma". include "static_2/relocation/lifts.ma". @@ -31,63 +30,62 @@ include "static_2/relocation/lifts.ma". (* BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS *****************) (* avtivate genv *) -inductive cpg (Rt:relation rtc) (h): rtc → relation4 genv lenv term term ≝ -| cpg_atom : ∀I,G,L. cpg Rt h (𝟘𝟘) G L (⓪[I]) (⓪[I]) -| cpg_ess : ∀G,L,s. cpg Rt h (𝟘𝟙) G L (⋆s) (⋆(⫯[h]s)) -| cpg_delta: ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 → - ⇧[1] V2 ≘ W2 → cpg Rt h c G (L.ⓓV1) (#0) W2 -| cpg_ell : ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 → - ⇧[1] V2 ≘ W2 → cpg Rt h (c+𝟘𝟙) G (L.ⓛV1) (#0) W2 -| cpg_lref : ∀c,I,G,L,T,U,i. cpg Rt h c G L (#i) T → - ⇧[1] T ≘ U → cpg Rt h c G (L.ⓘ[I]) (#↑i) U +inductive cpg (Rs:relation nat) (Rk:relation rtc): rtc → relation4 genv lenv term term ≝ +| cpg_atom : ∀I,G,L. cpg Rs Rk (𝟘𝟘) G L (⓪[I]) (⓪[I]) +| cpg_ess : ∀G,L,s1,s2. Rs s1 s2 → cpg Rs Rk (𝟘𝟙) G L (⋆s1) (⋆s2) +| cpg_delta: ∀c,G,L,V1,V2,W2. cpg Rs Rk c G L V1 V2 → + ⇧[1] V2 ≘ W2 → cpg Rs Rk c G (L.ⓓV1) (#0) W2 +| cpg_ell : ∀c,G,L,V1,V2,W2. cpg Rs Rk c G L V1 V2 → + ⇧[1] V2 ≘ W2 → cpg Rs Rk (c+𝟘𝟙) G (L.ⓛV1) (#0) W2 +| cpg_lref : ∀c,I,G,L,T,U,i. cpg Rs Rk c G L (#i) T → + ⇧[1] T ≘ U → cpg Rs Rk c G (L.ⓘ[I]) (#↑i) U | cpg_bind : ∀cV,cT,p,I,G,L,V1,V2,T1,T2. - cpg Rt h cV G L V1 V2 → cpg Rt h cT G (L.ⓑ[I]V1) T1 T2 → - cpg Rt h ((↕*cV)∨cT) G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) + cpg Rs Rk cV G L V1 V2 → cpg Rs Rk cT G (L.ⓑ[I]V1) T1 T2 → + cpg Rs Rk ((↕*cV)∨cT) G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) | cpg_appl : ∀cV,cT,G,L,V1,V2,T1,T2. - cpg Rt h cV G L V1 V2 → cpg Rt h cT G L T1 T2 → - cpg Rt h ((↕*cV)∨cT) G L (ⓐV1.T1) (ⓐV2.T2) -| cpg_cast : ∀cU,cT,G,L,U1,U2,T1,T2. Rt cU cT → - cpg Rt h cU G L U1 U2 → cpg Rt h cT G L T1 T2 → - cpg Rt h (cU∨cT) G L (ⓝU1.T1) (ⓝU2.T2) -| cpg_zeta : ∀c,G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → cpg Rt h c G L T T2 → - cpg Rt h (c+𝟙𝟘) G L (+ⓓV.T1) T2 -| cpg_eps : ∀c,G,L,V,T1,T2. cpg Rt h c G L T1 T2 → cpg Rt h (c+𝟙𝟘) G L (ⓝV.T1) T2 -| cpg_ee : ∀c,G,L,V1,V2,T. cpg Rt h c G L V1 V2 → cpg Rt h (c+𝟘𝟙) G L (ⓝV1.T) V2 + cpg Rs Rk cV G L V1 V2 → cpg Rs Rk cT G L T1 T2 → + cpg Rs Rk ((↕*cV)∨cT) G L (ⓐV1.T1) (ⓐV2.T2) +| cpg_cast : ∀cU,cT,G,L,U1,U2,T1,T2. Rk cU cT → + cpg Rs Rk cU G L U1 U2 → cpg Rs Rk cT G L T1 T2 → + cpg Rs Rk (cU∨cT) G L (ⓝU1.T1) (ⓝU2.T2) +| cpg_zeta : ∀c,G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → cpg Rs Rk c G L T T2 → + cpg Rs Rk (c+𝟙𝟘) G L (+ⓓV.T1) T2 +| cpg_eps : ∀c,G,L,V,T1,T2. cpg Rs Rk c G L T1 T2 → cpg Rs Rk (c+𝟙𝟘) G L (ⓝV.T1) T2 +| cpg_ee : ∀c,G,L,V1,V2,T. cpg Rs Rk c G L V1 V2 → cpg Rs Rk (c+𝟘𝟙) G L (ⓝV1.T) V2 | cpg_beta : ∀cV,cW,cT,p,G,L,V1,V2,W1,W2,T1,T2. - cpg Rt h cV G L V1 V2 → cpg Rt h cW G L W1 W2 → cpg Rt h cT G (L.ⓛW1) T1 T2 → - cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) + cpg Rs Rk cV G L V1 V2 → cpg Rs Rk cW G L W1 W2 → cpg Rs Rk cT G (L.ⓛW1) T1 T2 → + cpg Rs Rk (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) | cpg_theta: ∀cV,cW,cT,p,G,L,V1,V,V2,W1,W2,T1,T2. - cpg Rt h cV G L V1 V → ⇧[1] V ≘ V2 → cpg Rt h cW G L W1 W2 → - cpg Rt h cT G (L.ⓓW1) T1 T2 → - cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) + cpg Rs Rk cV G L V1 V → ⇧[1] V ≘ V2 → cpg Rs Rk cW G L W1 W2 → + cpg Rs Rk cT G (L.ⓓW1) T1 T2 → + cpg Rs Rk (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) . interpretation "bound context-sensitive parallel rt-transition (term)" - 'PRedTy Rt c h G L T1 T2 = (cpg Rt h c G L T1 T2). + 'PRedTy Rs Rk c G L T1 T2 = (cpg Rs Rk c G L T1 T2). (* Basic properties *********************************************************) -(* Note: this is "∀Rt. reflexive … Rt → ∀h,g,L. reflexive … (cpg Rt h (𝟘𝟘) L)" *) -lemma cpg_refl: ∀Rt. reflexive … Rt → ∀h,G,T,L. ❪G,L❫ ⊢ T ⬈[Rt,𝟘𝟘,h] T. -#Rt #HRt #h #G #T elim T -T // * /2 width=1 by cpg_bind/ +(* Note: this is "∀Rs,Rk. reflexive … Rk → ∀G,L. reflexive … (cpg Rs Rk (𝟘𝟘) G L)" *) +lemma cpg_refl (Rs) (Rk): + reflexive … Rk → ∀G,T,L. ❪G,L❫ ⊢ T ⬈[Rs,Rk,𝟘𝟘] T. +#Rk #HRk #h #G #T elim T -T // * /2 width=1 by cpg_bind/ * /2 width=1 by cpg_appl, cpg_cast/ qed. (* Basic inversion lemmas ***************************************************) -fact cpg_inv_atom1_aux: ∀Rt,c,h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rt,c,h] T2 → ∀J. T1 = ⓪[J] → - ∨∨ T2 = ⓪[J] ∧ c = 𝟘𝟘 - | ∃∃s. J = Sort s & T2 = ⋆(⫯[h]s) & c = 𝟘𝟙 - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓓV1 & J = LRef 0 & c = cV - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧[1] T ≘ T2 & - L = K.ⓘ[I] & J = LRef (↑i). -#Rt #c #h #G #L #T1 #T2 * -c -G -L -T1 -T2 +fact cpg_inv_atom1_aux (Rs) (Rk) (c) (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rs,Rk,c] T2 → ∀J. T1 = ⓪[J] → + ∨∨ ∧∧ T2 = ⓪[J] & c = 𝟘𝟘 + | ∃∃s1,s2. Rs s1 s2 & J = Sort s1 & T2 = ⋆s2 & c = 𝟘𝟙 + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). +#Rs #Rk #c #G #L #T1 #T2 * -c -G -L -T1 -T2 [ #I #G #L #J #H destruct /3 width=1 by or5_intro0, conj/ -| #G #L #s #J #H destruct /3 width=3 by or5_intro1, ex3_intro/ +| #G #L #s1 #s2 #HRs #J #H destruct /3 width=5 by or5_intro1, ex4_2_intro/ | #c #G #L #V1 #V2 #W2 #HV12 #VW2 #J #H destruct /3 width=8 by or5_intro2, ex5_4_intro/ | #c #G #L #V1 #V2 #W2 #HV12 #VW2 #J #H destruct /3 width=8 by or5_intro3, ex5_4_intro/ | #c #I #G #L #T #U #i #HT #HTU #J #H destruct /3 width=8 by or5_intro4, ex4_4_intro/ @@ -102,70 +100,70 @@ fact cpg_inv_atom1_aux: ∀Rt,c,h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rt,c,h] T2 → ] qed-. -lemma cpg_inv_atom1: ∀Rt,c,h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ⬈[Rt,c,h] T2 → - ∨∨ T2 = ⓪[J] ∧ c = 𝟘𝟘 - | ∃∃s. J = Sort s & T2 = ⋆(⫯[h]s) & c = 𝟘𝟙 - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓓV1 & J = LRef 0 & c = cV - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧[1] T ≘ T2 & - L = K.ⓘ[I] & J = LRef (↑i). +lemma cpg_inv_atom1 (Rs) (Rk) (c) (G) (L): + ∀J,T2. ❪G,L❫ ⊢ ⓪[J] ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = ⓪[J] & c = 𝟘𝟘 + | ∃∃s1,s2. Rs s1 s2 & J = Sort s1 & T2 = ⋆s2 & c = 𝟘𝟙 + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). /2 width=3 by cpg_inv_atom1_aux/ qed-. -lemma cpg_inv_sort1: ∀Rt,c,h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ⬈[Rt,c,h] T2 → - ∨∨ T2 = ⋆s ∧ c = 𝟘𝟘 | T2 = ⋆(⫯[h]s) ∧ c = 𝟘𝟙. -#Rt #c #h #G #L #T2 #s #H +lemma cpg_inv_sort1 (Rs) (Rk) (c) (G) (L): + ∀T2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = ⋆s1 & c = 𝟘𝟘 + | ∃∃s2. Rs s1 s2 & T2 = ⋆s2 & c = 𝟘𝟙. +#Rs #Rk #c #G #L #T2 #s #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ -[ #s0 #H destruct /3 width=1 by or_intror, conj/ +[ #s1 #s2 #HRs #H1 #H2 #H3 destruct /3 width=3 by ex3_intro, or_intror/ |2,3: #cV #K #V1 #V2 #_ #_ #_ #H destruct | #I #K #T #i #_ #_ #_ #H destruct ] qed-. -lemma cpg_inv_zero1: ∀Rt,c,h,G,L,T2. ❪G,L❫ ⊢ #0 ⬈[Rt,c,h] T2 → - ∨∨ T2 = #0 ∧ c = 𝟘𝟘 - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓓV1 & c = cV - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓛV1 & c = cV+𝟘𝟙. -#Rt #c #h #G #L #T2 #H +lemma cpg_inv_zero1 (Rs) (Rk) (c) (G) (L): + ∀T2. ❪G,L❫ ⊢ #0 ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = #0 & c = 𝟘𝟘 + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & c = cV + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & c = cV+𝟘𝟙. +#Rs #Rk #c #G #L #T2 #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/ -[ #s #H destruct +[ #s1 #s2 #_ #H destruct |2,3: #cV #K #V1 #V2 #HV12 #HVT2 #H1 #_ #H2 destruct /3 width=8 by or3_intro1, or3_intro2, ex4_4_intro/ | #I #K #T #i #_ #_ #_ #H destruct ] qed-. -lemma cpg_inv_lref1: ∀Rt,c,h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ⬈[Rt,c,h] T2 → - ∨∨ T2 = #(↑i) ∧ c = 𝟘𝟘 - | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. -#Rt #c #h #G #L #T2 #i #H +lemma cpg_inv_lref1 (Rs) (Rk) (c) (G) (L): + ∀T2,i. ❪G,L❫ ⊢ #↑i ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = #(↑i) & c = 𝟘𝟘 + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. +#Rs #Rk #c #G #L #T2 #i #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ -[ #s #H destruct +[ #s1 #s2 #_ #H destruct |2,3: #cV #K #V1 #V2 #_ #_ #_ #H destruct | #I #K #T #j #HT #HT2 #H1 #H2 destruct /3 width=6 by ex3_3_intro, or_intror/ ] qed-. -lemma cpg_inv_gref1: ∀Rt,c,h,G,L,T2,l. ❪G,L❫ ⊢ §l ⬈[Rt,c,h] T2 → T2 = §l ∧ c = 𝟘𝟘. -#Rt #c #h #G #L #T2 #l #H +lemma cpg_inv_gref1 (Rs) (Rk) (c) (G) (L): + ∀T2,l. ❪G,L❫ ⊢ §l ⬈[Rs,Rk,c] T2 → ∧∧ T2 = §l & c = 𝟘𝟘. +#Rs #Rk #c #G #L #T2 #l #H elim (cpg_inv_atom1 … H) -H * /2 width=1 by conj/ -[ #s #H destruct +[ #s1 #s2 #_ #H destruct |2,3: #cV #K #V1 #V2 #_ #_ #_ #H destruct | #I #K #T #i #_ #_ #_ #H destruct ] qed-. -fact cpg_inv_bind1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → - ∀p,J,V1,U1. U = ⓑ[p,J]V1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓑ[J]V1❫ ⊢ U1 ⬈[Rt,cT,h] T2 & - U2 = ⓑ[p,J]V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧[1] T ≘ U1 & ❪G,L❫ ⊢ T ⬈[Rt,cT,h] U2 & - p = true & J = Abbr & c = cT+𝟙𝟘. -#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2 +fact cpg_inv_bind1_aux (Rs) (Rk) (c) (G) (L): + ∀U,U2. ❪G,L❫ ⊢ U ⬈[Rs,Rk,c] U2 → + ∀p,J,V1,U1. U = ⓑ[p,J]V1.U1 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓑ[J]V1❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,J]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧[1] T ≘ U1 & ❪G,L❫ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & J = Abbr & c = cT+𝟙𝟘. +#Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #q #J #W #U1 #H destruct -| #G #L #s #q #J #W #U1 #H destruct +| #G #L #s1 #s2 #_ #q #J #W #U1 #H destruct | #c #G #L #V1 #V2 #W2 #_ #_ #q #J #W #U1 #H destruct | #c #G #L #V1 #V2 #W2 #_ #_ #q #J #W #U1 #H destruct | #c #I #G #L #T #U #i #_ #_ #q #J #W #U1 #H destruct @@ -180,42 +178,38 @@ fact cpg_inv_bind1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → ] qed-. -lemma cpg_inv_bind1: ∀Rt,c,h,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U2 = ⓑ[p,I]V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rt,cT,h] U2 & - p = true & I = Abbr & c = cT+𝟙𝟘. +lemma cpg_inv_bind1 (Rs) (Rk) (c) (G) (L): + ∀p,I,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,I]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & I = Abbr & c = cT+𝟙𝟘. /2 width=3 by cpg_inv_bind1_aux/ qed-. -lemma cpg_inv_abbr1: ∀Rt,c,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rt,cT,h] U2 & - p = true & c = cT+𝟙𝟘. -#Rt #c #h #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * +lemma cpg_inv_abbr1 (Rs) (Rk) (c) (G) (L): + ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & c = cT+𝟙𝟘. +#Rs #Rk #c #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * /3 width=8 by ex4_4_intro, ex4_2_intro, or_introl, or_intror/ qed-. -lemma cpg_inv_abst1: ∀Rt,c,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈[Rt,c,h] U2 → - ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT). -#Rt #c #h #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * +lemma cpg_inv_abst1 (Rs) (Rk) (c) (G) (L): + ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈[Rs,Rk,c] U2 → + ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT). +#Rs #Rk #c #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * [ /3 width=8 by ex4_4_intro/ | #c #T #_ #_ #_ #H destruct ] qed-. -fact cpg_inv_appl1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → - ∀V1,U1. U = ⓐV1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & - U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) - | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 - | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. -#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2 +fact cpg_inv_appl1_aux (Rs) (Rk) (c) (G) (L): + ∀U,U2. ❪G,L❫ ⊢ U ⬈[Rs,Rk,c] U2 → + ∀V1,U1. U = ⓐV1.U1 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) + | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 + | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. +#Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #W #U1 #H destruct -| #G #L #s #W #U1 #H destruct +| #G #L #s1 #s2 #_ #W #U1 #H destruct | #c #G #L #V1 #V2 #W2 #_ #_ #W #U1 #H destruct | #c #G #L #V1 #V2 #W2 #_ #_ #W #U1 #H destruct | #c #I #G #L #T #U #i #_ #_ #W #U1 #H destruct @@ -230,30 +224,28 @@ fact cpg_inv_appl1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → ] qed-. -lemma cpg_inv_appl1: ∀Rt,c,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐV1.U1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & - U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) - | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 - | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. +lemma cpg_inv_appl1 (Rs) (Rk) (c) (G) (L): + ∀V1,U1,U2. ❪G,L❫ ⊢ ⓐV1.U1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) + | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 + | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. /2 width=3 by cpg_inv_appl1_aux/ qed-. -fact cpg_inv_cast1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → - ∀V1,U1. U = ⓝV1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & - Rt cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) - | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘 - | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙. -#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2 +fact cpg_inv_cast1_aux (Rs) (Rk) (c) (G) (L): + ∀U,U2. ❪G,L❫ ⊢ U ⬈[Rs,Rk,c] U2 → + ∀V1,U1. U = ⓝV1.U1 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) + | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘 + | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙. +#Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #W #U1 #H destruct -| #G #L #s #W #U1 #H destruct +| #G #L #s1 #s2 #_ #W #U1 #H destruct | #c #G #L #V1 #V2 #W2 #_ #_ #W #U1 #H destruct | #c #G #L #V1 #V2 #W2 #_ #_ #W #U1 #H destruct | #c #I #G #L #T #U #i #_ #_ #W #U1 #H destruct | #cV #cT #p #I #G #L #V1 #V2 #T1 #T2 #_ #_ #W #U1 #H destruct | #cV #cT #G #L #V1 #V2 #T1 #T2 #_ #_ #W #U1 #H destruct -| #cV #cT #G #L #V1 #V2 #T1 #T2 #HRt #HV12 #HT12 #W #U1 #H destruct /3 width=9 by or3_intro0, ex5_4_intro/ +| #cV #cT #G #L #V1 #V2 #T1 #T2 #HRk #HV12 #HT12 #W #U1 #H destruct /3 width=9 by or3_intro0, ex5_4_intro/ | #c #G #L #V #T1 #T #T2 #_ #_ #W #U1 #H destruct | #c #G #L #V #T1 #T2 #HT12 #W #U1 #H destruct /3 width=3 by or3_intro1, ex2_intro/ | #c #G #L #V1 #V2 #T #HV12 #W #U1 #H destruct /3 width=3 by or3_intro2, ex2_intro/ @@ -262,38 +254,38 @@ fact cpg_inv_cast1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → ] qed-. -lemma cpg_inv_cast1: ∀Rt,c,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & - Rt cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) - | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘 - | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙. +lemma cpg_inv_cast1 (Rs) (Rk) (c) (G) (L): + ∀V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) + | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘 + | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙. /2 width=3 by cpg_inv_cast1_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma cpg_inv_zero1_pair: ∀Rt,c,h,I,G,K,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[Rt,c,h] T2 → - ∨∨ T2 = #0 ∧ c = 𝟘𝟘 - | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - I = Abbr & c = cV - | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧[1] V2 ≘ T2 & - I = Abst & c = cV+𝟘𝟙. -#Rt #c #h #I #G #K #V1 #T2 #H elim (cpg_inv_zero1 … H) -H /2 width=1 by or3_intro0/ +lemma cpg_inv_zero1_pair (Rs) (Rk) (c) (G) (K): + ∀I,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = #0 & c = 𝟘𝟘 + | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abbr & c = cV + | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abst & c = cV+𝟘𝟙. +#Rs #Rk #c #G #K #I #V1 #T2 #H elim (cpg_inv_zero1 … H) -H /2 width=1 by or3_intro0/ * #z #Y #X1 #X2 #HX12 #HXT2 #H1 #H2 destruct /3 width=5 by or3_intro1, or3_intro2, ex4_2_intro/ qed-. -lemma cpg_inv_lref1_bind: ∀Rt,c,h,I,G,K,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[Rt,c,h] T2 → - ∨∨ T2 = #(↑i) ∧ c = 𝟘𝟘 - | ∃∃T. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧[1] T ≘ T2. -#Rt #c #h #I #G #L #T2 #i #H elim (cpg_inv_lref1 … H) -H /2 width=1 by or_introl/ +lemma cpg_inv_lref1_bind (Rs) (Rk) (c) (G) (K): + ∀I,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = #(↑i) & c = 𝟘𝟘 + | ∃∃T. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2. +#Rs #Rk #c #G #K #I #T2 #i #H elim (cpg_inv_lref1 … H) -H /2 width=1 by or_introl/ * #Z #Y #T #HT #HT2 #H destruct /3 width=3 by ex2_intro, or_intror/ qed-. (* Basic forward lemmas *****************************************************) -lemma cpg_fwd_bind1_minus: ∀Rt,c,h,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈[Rt,c,h] T → ∀p. - ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rt,c,h] ⓑ[p,I]V2.T2 & - T = -ⓑ[I]V2.T2. -#Rt #c #h #I #G #L #V1 #T1 #T #H #p elim (cpg_inv_bind1 … H) -H * +lemma cpg_fwd_bind1_minus (Rs) (Rk) (c) (G) (L): + ∀I,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈[Rs,Rk,c] T → ∀p. + ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2. +#Rs #Rk #c #G #L #I #V1 #T1 #T #H #p elim (cpg_inv_bind1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct /3 width=4 by cpg_bind, ex2_2_intro/ | #c #T2 #_ #_ #H destruct ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma index 9908844c8..4e66d137d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma @@ -22,9 +22,10 @@ include "basic_2/rt_transition/cpg.ma". (* Advanced properties ******************************************************) -lemma cpg_delta_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⇩[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ⬈[Rt,c,h] V2 → - ⇧[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rt,c,h] T2. -#Rt #c #h #G #K #V #V2 #i elim i -i +lemma cpg_delta_drops (Rs) (Rk) (c) (G) (K): + ∀V,V2,i,L,T2. ⇩[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ⬈[Rs,Rk,c] V2 → + ⇧[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rs,Rk,c] T2. +#Rs #Rk #c #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_delta/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct @@ -32,9 +33,10 @@ lemma cpg_delta_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⇩[i] L ≘ K.ⓓV → ❪G,K ] qed. -lemma cpg_ell_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⇩[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ⬈[Rt,c,h] V2 → - ⇧[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rt,c+𝟘𝟙,h] T2. -#Rt #c #h #G #K #V #V2 #i elim i -i +lemma cpg_ell_drops (Rs) (Rk) (c) (G) (K): + ∀V,V2,i,L,T2. ⇩[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ⬈[Rs,Rk,c] V2 → + ⇧[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rs,Rk,c+𝟘𝟙] T2. +#Rs #Rk #c #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_ell/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct @@ -44,13 +46,12 @@ qed. (* Advanced inversion lemmas ************************************************) -lemma cpg_inv_lref1_drops: ∀Rt,c,h,G,i,L,T2. ❪G,L❫ ⊢ #i ⬈[Rt,c,h] T2 → - ∨∨ T2 = #i ∧ c = 𝟘𝟘 - | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & - ⇧[↑i] V2 ≘ T2 & c = cV - | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & - ⇧[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙. -#Rt #c #h #G #i elim i -i +lemma cpg_inv_lref1_drops (Rs) (Rk) (c) (G): + ∀i,L,T2. ❪G,L❫ ⊢ #i ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = #i & c = 𝟘𝟘 + | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV + | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙. +#Rs #Rk #c #G #i elim i -i [ #L #T2 #H elim (cpg_inv_zero1 … H) -H * /3 width=1 by or3_intro0, conj/ /4 width=8 by drops_refl, ex4_4_intro, or3_intro2, or3_intro1/ | #i #IH #L #T2 #H elim (cpg_inv_lref1 … H) -H * /3 width=1 by or3_intro0, conj/ @@ -65,16 +66,15 @@ lemma cpg_inv_lref1_drops: ∀Rt,c,h,G,i,L,T2. ❪G,L❫ ⊢ #i ⬈[Rt,c,h] T2 ] qed-. -lemma cpg_inv_atom1_drops: ∀Rt,c,h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ⬈[Rt,c,h] T2 → - ∨∨ T2 = ⓪[I] ∧ c = 𝟘𝟘 - | ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & c = 𝟘𝟙 - | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & - ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV - | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & - ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙. -#Rt #c #h * #n #G #L #T2 #H +lemma cpg_inv_atom1_drops (Rs) (Rk) (c) (G) (L): + ∀I,T2. ❪G,L❫ ⊢ ⓪[I] ⬈[Rs,Rk,c] T2 → + ∨∨ ∧∧ T2 = ⓪[I] & c = 𝟘𝟘 + | ∃∃s1,s2. Rs s1 s2 & T2 = ⋆s2 & I = Sort s1 & c = 𝟘𝟙 + | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙. +#Rs #Rk #c #G #L * #x #T2 #H [ elim (cpg_inv_sort1 … H) -H * - /3 width=3 by or4_intro0, or4_intro1, ex3_intro, conj/ + /3 width=5 by or4_intro0, or4_intro1, ex4_2_intro, conj/ | elim (cpg_inv_lref1_drops … H) -H * /3 width=10 by or4_intro0, or4_intro2, or4_intro3, ex5_5_intro, conj/ | elim (cpg_inv_gref1 … H) -H @@ -85,14 +85,16 @@ qed-. (* Properties with generic slicing for local environments *******************) (* Note: it should use drops_split_trans_pair2 *) -lemma cpg_lifts_sn: ∀Rt. reflexive … Rt → - ∀c,h,G. d_liftable2_sn … lifts (cpg Rt h c G). -#Rt #HRt #c #h #G #K #T generalize in match c; -c +lemma cpg_lifts_sn (Rs) (Rk) (c) (G): reflexive … Rk → + d_liftable2_sn … lifts (cpg Rs Rk c G). +#Rs #Rk #c #G #HRk #K #T generalize in match c; -c @(fqup_wf_ind_eq (Ⓣ) … G K T) -G -K -T #G0 #K0 #T0 #IH #G #K * * -[ #s #HG #HK #HT #c #X2 #H2 #b #f #L #HLK #X1 #H1 destruct -IH +[ #s1 #HG #HK #HT #c #X2 #H2 #b #f #L #HLK #X1 #H1 destruct -IH lapply (lifts_inv_sort1 … H1) -H1 #H destruct - elim (cpg_inv_sort1 … H2) -H2 * #H1 #H2 destruct - /2 width=3 by cpg_atom, cpg_ess, lifts_sort, ex2_intro/ + elim (cpg_inv_sort1 … H2) -H2 * + [ #H1 #H2 destruct /2 width=3 by cpg_atom, lifts_sort, ex2_intro/ + | #s2 #HRs #H1 #H2 destruct /3 width=3 by cpg_ess, lifts_sort, ex2_intro/ + ] | #i1 #HG #HK #HT #c #T2 #H2 #b #f #L #HLK #X1 #H1 destruct elim (cpg_inv_lref1_drops … H2) -H2 * [ #H1 #H2 destruct /3 width=3 by cpg_refl, ex2_intro/ ] @@ -163,20 +165,22 @@ lemma cpg_lifts_sn: ∀Rt. reflexive … Rt → ] qed-. -lemma cpg_lifts_bi: ∀Rt. reflexive … Rt → - ∀c,h,G. d_liftable2_bi … lifts (cpg Rt h c G). +lemma cpg_lifts_bi (Rs) (Rk) (c) (G): reflexive … Rk → + d_liftable2_bi … lifts (cpg Rs Rk c G). /3 width=12 by cpg_lifts_sn, d_liftable2_sn_bi, lifts_mono/ qed-. (* Inversion lemmas with generic slicing for local environments *************) -lemma cpg_inv_lifts_sn: ∀Rt. reflexive … Rt → - ∀c,h,G. d_deliftable2_sn … lifts (cpg Rt h c G). -#Rt #HRt #c #h #G #L #U generalize in match c; -c +lemma cpg_inv_lifts_sn (Rs) (Rk) (c) (G): reflexive … Rk → + d_deliftable2_sn … lifts (cpg Rs Rk c G). +#Rs #Rk #c #G #HRk #L #U generalize in match c; -c @(fqup_wf_ind_eq (Ⓣ) … G L U) -G -L -U #G0 #L0 #U0 #IH #G #L * * -[ #s #HG #HL #HU #c #X2 #H2 #b #f #K #HLK #X1 #H1 destruct -IH +[ #s1 #HG #HL #HU #c #X2 #H2 #b #f #K #HLK #X1 #H1 destruct -IH lapply (lifts_inv_sort2 … H1) -H1 #H destruct - elim (cpg_inv_sort1 … H2) -H2 * #H1 #H2 destruct - /2 width=3 by cpg_atom, cpg_ess, lifts_sort, ex2_intro/ + elim (cpg_inv_sort1 … H2) -H2 * + [ #H1 #H2 destruct /2 width=3 by cpg_atom, lifts_sort, ex2_intro/ + | #s2 #HRs #H1 #H2 destruct /3 width=3 by cpg_ess, lifts_sort, ex2_intro/ + ] | #i2 #HG #HL #HU #c #U2 #H2 #b #f #K #HLK #X1 #H1 destruct elim (cpg_inv_lref1_drops … H2) -H2 * [ #H1 #H2 destruct /3 width=3 by cpg_refl, ex2_intro/ ] @@ -245,6 +249,6 @@ lemma cpg_inv_lifts_sn: ∀Rt. reflexive … Rt → ] qed-. -lemma cpg_inv_lifts_bi: ∀Rt. reflexive … Rt → - ∀c,h,G. d_deliftable2_bi … lifts (cpg Rt h c G). +lemma cpg_inv_lifts_bi (Rs) (Rk) (c) (G): reflexive … Rk → + d_deliftable2_bi … lifts (cpg Rs Rk c G). /3 width=12 by cpg_inv_lifts_sn, d_deliftable2_sn_bi, lifts_inj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_lsubr.ma index ed99d317a..4ca10e1a3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_lsubr.ma @@ -19,8 +19,9 @@ include "basic_2/rt_transition/cpg.ma". (* Properties with restricted refinement for local environments *************) -lemma lsubr_cpg_trans: ∀Rt,c,h,G. lsub_trans … (cpg Rt h c G) lsubr. -#Rt #c #h #G #L1 #T1 #T2 #H elim H -c -G -L1 -T1 -T2 +lemma lsubr_cpg_trans (Rs) (Rk) (c) (G): + lsub_trans … (cpg Rs Rk c G) lsubr. +#Rs #Rk #c #G #L1 #T1 #T2 #H elim H -c -G -L1 -T1 -T2 [ // | /2 width=2 by cpg_ess/ | #c #G #L1 #V1 #V2 #W2 #_ #HVW2 #IH #X #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma index 4785791d0..47277708a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma @@ -20,10 +20,10 @@ include "basic_2/rt_transition/cpg.ma". (* Properties with simple terms *********************************************) (* Note: the main property of simple terms *) -lemma cpg_inv_appl1_simple: ∀Rt,c,h,G,L,V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈[Rt,c,h] U → 𝐒❪T1❫ → - ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ T1 ⬈[Rt,cT,h] T2 & - U = ⓐV2.T2 & c = ((↕*cV)∨cT). -#Rt #c #h #G #L #V1 #T1 #U #H #HT1 elim (cpg_inv_appl1 … H) -H * +lemma cpg_inv_appl1_simple (Rs) (Rk) (c) (G) (L): + ∀V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈[Rs,Rk,c] U → 𝐒❪T1❫ → + ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U = ⓐV2.T2 & c = ((↕*cV)∨cT). +#Rs #Rk #c #G #L #V1 #T1 #U #H #HT1 elim (cpg_inv_appl1 … H) -H * [ /2 width=8 by ex4_4_intro/ | #cV #cW #cT #p #V2 #W1 #W2 #U1 #U2 #_ #_ #_ #H destruct elim (simple_inv_bind … HT1) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma index 30b04dc62..ac451b66c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma @@ -19,6 +19,7 @@ include "ground/xoa/ex_6_7.ma". include "ground/steps/rtc_max_shift.ma". include "ground/steps/rtc_isrt_plus.ma". include "ground/steps/rtc_isrt_max_shift.ma". +include "static_2/syntax/sh.ma". include "basic_2/notation/relations/pred_6.ma". include "basic_2/rt_transition/cpg.ma". @@ -26,90 +27,100 @@ include "basic_2/rt_transition/cpg.ma". (* Basic_2A1: includes: cpr *) definition cpm (h) (G) (L) (n): relation2 term term ≝ - λT1,T2. ∃∃c. 𝐑𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[eq_t,c,h] T2. + λT1,T2. ∃∃c. 𝐑𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[sh_is_next h,rtc_eq_t,c] T2. interpretation - "t-bound context-sensitive parallel rt-transition (term)" - 'PRed h n G L T1 T2 = (cpm h G L n T1 T2). + "t-bound context-sensitive parallel rt-transition (term)" + 'PRed h n G L T1 T2 = (cpm h G L n T1 T2). (* Basic properties *********************************************************) -lemma cpm_ess: ∀h,G,L,s. ❪G,L❫ ⊢ ⋆s ➡[h,1] ⋆(⫯[h]s). -/2 width=3 by cpg_ess, ex2_intro/ qed. +lemma cpm_ess (h) (G) (L): + ∀s. ❪G,L❫ ⊢ ⋆s ➡[h,1] ⋆(⫯[h]s). +/3 width=3 by cpg_ess, ex2_intro/ qed. -lemma cpm_delta: ∀h,n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → - ⇧[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ➡[h,n] W2. +lemma cpm_delta (h) (n) (G) (K): + ∀V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → + ⇧[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ➡[h,n] W2. #h #n #G #K #V1 #V2 #W2 * /3 width=5 by cpg_delta, ex2_intro/ qed. -lemma cpm_ell: ∀h,n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → - ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡[h,↑n] W2. +lemma cpm_ell (h) (n) (G) (K): + ∀V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → + ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡[h,↑n] W2. #h #n #G #K #V1 #V2 #W2 * /3 width=5 by cpg_ell, ex2_intro, isrt_succ/ qed. -lemma cpm_lref: ∀h,n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h,n] T → - ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡[h,n] U. -#h #n #I #G #K #T #U #i * +lemma cpm_lref (h) (n) (G) (K): + ∀I,T,U,i. ❪G,K❫ ⊢ #i ➡[h,n] T → + ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡[h,n] U. +#h #n #G #K #I #T #U #i * /3 width=5 by cpg_lref, ex2_intro/ qed. (* Basic_2A1: includes: cpr_bind *) -lemma cpm_bind: ∀h,n,p,I,G,L,V1,V2,T1,T2. - ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 → - ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2. -#h #n #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 * +lemma cpm_bind (h) (n) (G) (L): + ∀p,I,V1,V2,T1,T2. + ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 → + ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2. +#h #n #G #L #p #I #V1 #V2 #T1 #T2 * #cV #HcV #HV12 * /5 width=5 by cpg_bind, isrt_max_O1, isr_shift, ex2_intro/ qed. -lemma cpm_appl: ∀h,n,G,L,V1,V2,T1,T2. - ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → - ❪G,L❫ ⊢ ⓐV1.T1 ➡[h,n] ⓐV2.T2. +lemma cpm_appl (h) (n) (G) (L): + ∀V1,V2,T1,T2. + ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → + ❪G,L❫ ⊢ ⓐV1.T1 ➡[h,n] ⓐV2.T2. #h #n #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 * /5 width=5 by isrt_max_O1, isr_shift, cpg_appl, ex2_intro/ qed. -lemma cpm_cast: ∀h,n,G,L,U1,U2,T1,T2. - ❪G,L❫ ⊢ U1 ➡[h,n] U2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → - ❪G,L❫ ⊢ ⓝU1.T1 ➡[h,n] ⓝU2.T2. +lemma cpm_cast (h) (n) (G) (L): + ∀U1,U2,T1,T2. + ❪G,L❫ ⊢ U1 ➡[h,n] U2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → + ❪G,L❫ ⊢ ⓝU1.T1 ➡[h,n] ⓝU2.T2. #h #n #G #L #U1 #U2 #T1 #T2 * #cU #HcU #HU12 * /4 width=6 by cpg_cast, isrt_max_idem1, isrt_mono, ex2_intro/ qed. (* Basic_2A1: includes: cpr_zeta *) lemma cpm_zeta (h) (n) (G) (L): - ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h,n] T2 → - ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h,n] T2. + ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h,n] T2 → + ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h,n] T2. #h #n #G #L #T1 #T #HT1 #T2 * /3 width=5 by cpg_zeta, isrt_plus_O2, ex2_intro/ qed. (* Basic_2A1: includes: cpr_eps *) -lemma cpm_eps: ∀h,n,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ ⓝV.T1 ➡[h,n] T2. +lemma cpm_eps (h) (n) (G) (L): + ∀V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ ⓝV.T1 ➡[h,n] T2. #h #n #G #L #V #T1 #T2 * /3 width=3 by cpg_eps, isrt_plus_O2, ex2_intro/ qed. -lemma cpm_ee: ∀h,n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → ❪G,L❫ ⊢ ⓝV1.T ➡[h,↑n] V2. +lemma cpm_ee (h) (n) (G) (L): + ∀V1,V2,T. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → ❪G,L❫ ⊢ ⓝV1.T ➡[h,↑n] V2. #h #n #G #L #V1 #V2 #T * /3 width=3 by cpg_ee, isrt_succ, ex2_intro/ qed. (* Basic_2A1: includes: cpr_beta *) -lemma cpm_beta: ∀h,n,p,G,L,V1,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 → - ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡[h,n] ⓓ[p]ⓝW2.V2.T2. -#h #n #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV12 * #riW #rhW #HW12 * +lemma cpm_beta (h) (n) (G) (L): + ∀p,V1,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡[h,n] ⓓ[p]ⓝW2.V2.T2. +#h #n #G #L #p #V1 #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV12 * #riW #rhW #HW12 * /6 width=7 by cpg_beta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/ qed. (* Basic_2A1: includes: cpr_theta *) -lemma cpm_theta: ∀h,n,p,G,L,V1,V,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ➡[h,0] V → ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → - ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 → - ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡[h,n] ⓓ[p]W2.ⓐV2.T2. -#h #n #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV1 #HV2 * #riW #rhW #HW12 * +lemma cpm_theta (h) (n) (G) (L): + ∀p,V1,V,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ➡[h,0] V → ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → + ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡[h,n] ⓓ[p]W2.ⓐV2.T2. +#h #n #G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV1 #HV2 * #riW #rhW #HW12 * /6 width=9 by cpg_theta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/ qed. @@ -118,31 +129,29 @@ qed. (* Note: this is needed by cpms_ind_sn and cpms_ind_dx *) (* Basic_1: includes by definition: pr0_refl *) (* Basic_2A1: includes: cpr_atom *) -lemma cpr_refl: ∀h,G,L. reflexive … (cpm h G L 0). +lemma cpr_refl (h) (G) (L): reflexive … (cpm h G L 0). /3 width=3 by cpg_refl, ex2_intro/ qed. (* Advanced properties ******************************************************) -lemma cpm_sort (h) (G) (L): - ∀n. n ≤ 1 → ∀s. ❪G,L❫ ⊢ ⋆s ➡[h,n] ⋆((next h)^n s). -#h #G #L * // -#n #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/ +lemma cpm_sort (h) (n) (G) (L): n ≤ 1 → + ∀s. ❪G,L❫ ⊢ ⋆s ➡[h,n] ⋆((next h)^n s). +#h * // +#n #G #L #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/ qed. (* Basic inversion lemmas ***************************************************) -lemma cpm_inv_atom1: ∀h,n,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h,n] T2 → - ∨∨ T2 = ⓪[J] ∧ n = 0 - | ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s & n = 1 - | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓓV1 & J = LRef 0 - | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓛV1 & J = LRef 0 & n = ↑m - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & - L = K.ⓘ[I] & J = LRef (↑i). -#h #n #J #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * +lemma cpm_inv_atom1 (h) (n) (G) (L): + ∀J,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h,n] T2 → + ∨∨ ∧∧ T2 = ⓪[J] & n = 0 + | ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s & n = 1 + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 + | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). +#h #n #G #L #J #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/ -| #s #H1 #H2 #H3 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/ +| #s1 #s2 #H1 #H2 #H3 #H4 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 #H3 destruct /4 width=6 by or5_intro2, ex4_3_intro, ex2_intro/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 #H3 destruct @@ -153,20 +162,24 @@ lemma cpm_inv_atom1: ∀h,n,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h,n] T2 → ] qed-. -lemma cpm_inv_sort1: ∀h,n,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[h,n] T2 → - ∧∧ T2 = ⋆(((next h)^n) s) & n ≤ 1. -#h #n #G #L #T2 #s * #c #Hc #H -elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct -[ lapply (isrt_inv_00 … Hc) | lapply (isrt_inv_01 … Hc) ] -Hc +lemma cpm_inv_sort1 (h) (n) (G) (L): + ∀T2,s1. ❪G,L❫ ⊢ ⋆s1 ➡[h,n] T2 → + ∧∧ T2 = ⋆(((next h)^n) s1) & n ≤ 1. +#h #n #G #L #T2 #s1 * #c #Hc #H +elim (cpg_inv_sort1 … H) -H * +[ #H1 #H2 destruct + lapply (isrt_inv_00 … Hc) +| #s2 #H1 #H2 #H3 destruct + lapply (isrt_inv_01 … Hc) +] -Hc #H destruct /2 width=1 by conj/ qed-. -lemma cpm_inv_zero1: ∀h,n,G,L,T2. ❪G,L❫ ⊢ #0 ➡[h,n] T2 → - ∨∨ T2 = #0 ∧ n = 0 - | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓓV1 - | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓛV1 & n = ↑m. +lemma cpm_inv_zero1 (h) (n) (G) (L): + ∀T2. ❪G,L❫ ⊢ #0 ➡[h,n] T2 → + ∨∨ ∧∧ T2 = #0 & n = 0 + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 + | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & n = ↑m. #h #n #G #L #T2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or3_intro0, conj/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 destruct @@ -187,9 +200,10 @@ elim (cpm_inv_zero1 … H) -H * ] qed. -lemma cpm_inv_lref1: ∀h,n,G,L,T2,i. ❪G,L❫ ⊢ #↑i ➡[h,n] T2 → - ∨∨ T2 = #(↑i) ∧ n = 0 - | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. +lemma cpm_inv_lref1 (h) (n) (G) (L): + ∀T2,i. ❪G,L❫ ⊢ #↑i ➡[h,n] T2 → + ∨∨ ∧∧ T2 = #(↑i) & n = 0 + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. #h #n #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or_introl, conj/ | #I #K #V2 #HV2 #HVT2 #H destruct @@ -212,18 +226,18 @@ lemma cpm_inv_lref1_ctop (h) (n) (G): ] qed. -lemma cpm_inv_gref1: ∀h,n,G,L,T2,l. ❪G,L❫ ⊢ §l ➡[h,n] T2 → T2 = §l ∧ n = 0. +lemma cpm_inv_gref1 (h) (n) (G) (L): + ∀T2,l. ❪G,L❫ ⊢ §l ➡[h,n] T2 → ∧∧ T2 = §l & n = 0. #h #n #G #L #T2 #l * #c #Hc #H elim (cpg_inv_gref1 … H) -H #H1 #H2 destruct /3 width=1 by isrt_inv_00, conj/ qed-. (* Basic_2A1: includes: cpr_inv_bind1 *) -lemma cpm_inv_bind1: ∀h,n,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 & - U2 = ⓑ[p,I]V2.T2 - | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[h,n] U2 & - p = true & I = Abbr. -#h #n #p #I #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H * +lemma cpm_inv_bind1 (h) (n) (G) (L): + ∀p,I,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 & U2 = ⓑ[p,I]V2.T2 + | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[h,n] U2 & p = true & I = Abbr. +#h #n #G #L #p #I #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct elim (isrt_inv_shift … HcV) -HcV #HcV #H destruct @@ -235,11 +249,11 @@ qed-. (* Basic_1: includes: pr0_gen_abbr pr2_gen_abbr *) (* Basic_2A1: includes: cpr_inv_abbr1 *) -lemma cpm_inv_abbr1: ∀h,n,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ➡[h,n] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ➡[h,n] T2 & - U2 = ⓓ[p]V2.T2 - | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[h,n] U2 & p = true. -#h #n #p #G #L #V1 #T1 #U2 #H +lemma cpm_inv_abbr1 (h) (n) (G) (L): + ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ➡[h,n] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ➡[h,n] T2 & U2 = ⓓ[p]V2.T2 + | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[h,n] U2 & p = true. +#h #n #G #L #p #V1 #T1 #U2 #H elim (cpm_inv_bind1 … H) -H [ /3 width=1 by or_introl/ | * /3 width=3 by ex3_intro, or_intror/ @@ -248,34 +262,31 @@ qed-. (* Basic_1: includes: pr0_gen_abst pr2_gen_abst *) (* Basic_2A1: includes: cpr_inv_abst1 *) -lemma cpm_inv_abst1: ∀h,n,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ➡[h,n] U2 → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[h,n] T2 & - U2 = ⓛ[p]V2.T2. -#h #n #p #G #L #V1 #T1 #U2 #H +lemma cpm_inv_abst1 (h) (n) (G) (L): + ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ➡[h,n] U2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[h,n] T2 & U2 = ⓛ[p]V2.T2. +#h #n #G #L #p #V1 #T1 #U2 #H elim (cpm_inv_bind1 … H) -H [ /3 width=1 by or_introl/ | * #T #_ #_ #_ #H destruct ] qed-. -lemma cpm_inv_abst_bi: ∀h,n,p1,p2,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]V1.T1 ➡[h,n] ⓛ[p2]V2.T2 → - ∧∧ ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[h,n] T2 & p1 = p2. -#h #n #p1 #p2 #G #L #V1 #V2 #T1 #T2 #H +lemma cpm_inv_abst_bi (h) (n) (G) (L): + ∀p1,p2,V1,V2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]V1.T1 ➡[h,n] ⓛ[p2]V2.T2 → + ∧∧ ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[h,n] T2 & p1 = p2. +#h #n #G #L #p1 #p2 #V1 #V2 #T1 #T2 #H elim (cpm_inv_abst1 … H) -H #XV #XT #HV #HT #H destruct /2 width=1 by and3_intro/ qed-. (* Basic_1: includes: pr0_gen_appl pr2_gen_appl *) (* Basic_2A1: includes: cpr_inv_appl1 *) -lemma cpm_inv_appl1: ∀h,n,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ➡[h,n] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ U1 ➡[h,n] T2 & - U2 = ⓐV2.T2 - | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ W1 ➡[h,0] W2 & - ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 & - U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 - | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V & ⇧[1] V ≘ V2 & - ❪G,L❫ ⊢ W1 ➡[h,0] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 & - U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. +lemma cpm_inv_appl1 (h) (n) (G) (L): + ∀V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ➡[h,n] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ U1 ➡[h,n] T2 & U2 = ⓐV2.T2 + | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ W1 ➡[h,0] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 + | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ➡[h,0] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. #h #n #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct @@ -298,11 +309,11 @@ lemma cpm_inv_appl1: ∀h,n,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ➡[h,n] U2 ] qed-. -lemma cpm_inv_cast1: ∀h,n,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ➡[h,n] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,n] V2 & ❪G,L❫ ⊢ U1 ➡[h,n] T2 & - U2 = ⓝV2.T2 - | ❪G,L❫ ⊢ U1 ➡[h,n] U2 - | ∃∃m. ❪G,L❫ ⊢ V1 ➡[h,m] U2 & n = ↑m. +lemma cpm_inv_cast1 (h) (n) (G) (L): + ∀V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ➡[h,n] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,n] V2 & ❪G,L❫ ⊢ U1 ➡[h,n] T2 & U2 = ⓝV2.T2 + | ❪G,L❫ ⊢ U1 ➡[h,n] U2 + | ∃∃m. ❪G,L❫ ⊢ V1 ➡[h,m] U2 & n = ↑m. #h #n #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct @@ -320,49 +331,49 @@ qed-. (* Basic forward lemmas *****************************************************) (* Basic_2A1: includes: cpr_fwd_bind1_minus *) -lemma cpm_fwd_bind1_minus: ∀h,n,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ➡[h,n] T → ∀p. - ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2 & - T = -ⓑ[I]V2.T2. -#h #n #I #G #L #V1 #T1 #T * #c #Hc #H #p elim (cpg_fwd_bind1_minus … H p) -H +lemma cpm_fwd_bind1_minus (h) (n) (G) (L): + ∀I,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ➡[h,n] T → ∀p. + ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2. +#h #n #G #L #I #V1 #T1 #T * #c #Hc #H #p elim (cpg_fwd_bind1_minus … H p) -H /3 width=4 by ex2_2_intro, ex2_intro/ qed-. (* Basic eliminators ********************************************************) -lemma cpm_ind (h): ∀Q:relation5 nat genv lenv term term. - (∀I,G,L. Q 0 G L (⓪[I]) (⓪[I])) → - (∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) → - (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 → - ⇧[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2 - ) → (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 → - ⇧[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2 - ) → (∀n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h,n] T → Q n G K (#i) T → - ⇧[1] T ≘ U → Q n G (K.ⓘ[I]) (#↑i) (U) - ) → (∀n,p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 → - Q 0 G L V1 V2 → Q n G (L.ⓑ[I]V1) T1 T2 → Q n G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) - ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → - Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2) - ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → - Q n G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓝV1.T1) (ⓝV2.T2) - ) → (∀n,G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[h,n] T2 → - Q n G L T T2 → Q n G L (+ⓓV.T1) T2 - ) → (∀n,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → - Q n G L T1 T2 → Q n G L (ⓝV.T1) T2 - ) → (∀n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → - Q n G L V1 V2 → Q (↑n) G L (ⓝV1.T) V2 - ) → (∀n,p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 → - Q 0 G L V1 V2 → Q 0 G L W1 W2 → Q n G (L.ⓛW1) T1 T2 → - Q n G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) - ) → (∀n,p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 → - Q 0 G L V1 V → Q 0 G L W1 W2 → Q n G (L.ⓓW1) T1 T2 → - ⇧[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) - ) → - ∀n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → Q n G L T1 T2. +lemma cpm_ind (h) (Q:relation5 …): + (∀I,G,L. Q 0 G L (⓪[I]) (⓪[I])) → + (∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) → + (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 → + ⇧[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2 + ) → (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 → + ⇧[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2 + ) → (∀n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h,n] T → Q n G K (#i) T → + ⇧[1] T ≘ U → Q n G (K.ⓘ[I]) (#↑i) (U) + ) → (∀n,p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 → + Q 0 G L V1 V2 → Q n G (L.ⓑ[I]V1) T1 T2 → Q n G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) + ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → + Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2) + ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → + Q n G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓝV1.T1) (ⓝV2.T2) + ) → (∀n,G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[h,n] T2 → + Q n G L T T2 → Q n G L (+ⓓV.T1) T2 + ) → (∀n,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → + Q n G L T1 T2 → Q n G L (ⓝV.T1) T2 + ) → (∀n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → + Q n G L V1 V2 → Q (↑n) G L (ⓝV1.T) V2 + ) → (∀n,p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 → + Q 0 G L V1 V2 → Q 0 G L W1 W2 → Q n G (L.ⓛW1) T1 T2 → + Q n G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) + ) → (∀n,p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 → + Q 0 G L V1 V → Q 0 G L W1 W2 → Q n G (L.ⓓW1) T1 T2 → + ⇧[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) + ) → + ∀n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → Q n G L T1 T2. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #IH12 #IH13 #n #G #L #T1 #T2 * #c #HC #H generalize in match HC; -HC generalize in match n; -n elim H -c -G -L -T1 -T2 [ #I #G #L #n #H <(isrt_inv_00 … H) -H // -| #G #L #s #n #H <(isrt_inv_01 … H) -H // +| #G #L #s1 #s2 #HRs #n #H <(isrt_inv_01 … H) -H destruct // | /3 width=4 by ex2_intro/ | #c #G #L #V1 #V2 #W2 #HV12 #HVW2 #IH #x #H elim (isrt_inv_plus_SO_dx … H) -H // #n #Hc #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma index 6586e600c..5251ac507 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma @@ -17,10 +17,11 @@ include "basic_2/rt_transition/cpm.ma". (* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) -(* Forward lemmas with unbound context-sensitive rt-transition for terms ****) +(* Forward lemmas with extended context-sensitive rt-transition for terms ***) (* Basic_2A1: includes: cpr_cpx *) -lemma cpm_fwd_cpx: ∀h,n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T1 ⬈[h] T2. -#h #n #G #L #T1 #T2 * #c #Hc #H elim H -L -T1 -T2 -/2 width=3 by cpx_theta, cpx_beta, cpx_ee, cpx_eps, cpx_zeta, cpx_flat, cpx_bind, cpx_lref, cpx_delta/ +lemma cpm_fwd_cpx (h) (n) (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T1 ⬈ T2. +#h #n #G #L #T1 #T2 * #c #_ #HT12 +/2 width=4 by cpg_cpx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma index 91544044c..38c78dea6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma @@ -21,13 +21,13 @@ include "basic_2/rt_transition/cpm.ma". (* Basic_1: includes: pr0_lift pr2_lift *) (* Basic_2A1: includes: cpr_lift *) -lemma cpm_lifts_sn: ∀h,n,G. d_liftable2_sn … lifts (λL. cpm h G L n). +lemma cpm_lifts_sn (h) (n) (G): d_liftable2_sn … lifts (λL. cpm h G L n). #h #n #G #K #T1 #T2 * #c #Hc #HT12 #b #f #L #HLK #U1 #HTU1 elim (cpg_lifts_sn … HT12 … HLK … HTU1) -K -T1 /3 width=5 by ex2_intro/ qed-. -lemma cpm_lifts_bi: ∀h,n,G. d_liftable2_bi … lifts (λL. cpm h G L n). +lemma cpm_lifts_bi (h) (n) (G): d_liftable2_bi … lifts (λL. cpm h G L n). #h #n #G #K #T1 #T2 * /3 width=11 by cpg_lifts_bi, ex2_intro/ qed-. @@ -35,13 +35,13 @@ qed-. (* Basic_1: includes: pr0_gen_lift pr2_gen_lift *) (* Basic_2A1: includes: cpr_inv_lift1 *) -lemma cpm_inv_lifts_sn: ∀h,n,G. d_deliftable2_sn … lifts (λL. cpm h G L n). +lemma cpm_inv_lifts_sn (h) (n) (G): d_deliftable2_sn … lifts (λL. cpm h G L n). #h #n #G #L #U1 #U2 * #c #Hc #HU12 #b #f #K #HLK #T1 #HTU1 elim (cpg_inv_lifts_sn … HU12 … HLK … HTU1) -L -U1 /3 width=5 by ex2_intro/ qed-. -lemma cpm_inv_lifts_bi: ∀h,n,G. d_deliftable2_bi … lifts (λL. cpm h G L n). +lemma cpm_inv_lifts_bi (h) (n) (G): d_deliftable2_bi … lifts (λL. cpm h G L n). #h #n #G #L #U1 #U2 * /3 width=11 by cpg_inv_lifts_bi, ex2_intro/ qed-. @@ -49,33 +49,34 @@ qed-. (* Basic_1: includes: pr2_delta1 *) (* Basic_2A1: includes: cpr_delta *) -lemma cpm_delta_drops: ∀h,n,G,L,K,V,V2,W2,i. - ⇩[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ➡[h,n] V2 → - ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[h,n] W2. +lemma cpm_delta_drops (h) (n) (G) (L): + ∀K,V,V2,W2,i. + ⇩[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ➡[h,n] V2 → + ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[h,n] W2. #h #n #G #L #K #V #V2 #W2 #i #HLK * /3 width=8 by cpg_delta_drops, ex2_intro/ qed. -lemma cpm_ell_drops: ∀h,n,G,L,K,V,V2,W2,i. - ⇩[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ➡[h,n] V2 → - ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[h,↑n] W2. +lemma cpm_ell_drops (h) (n) (G) (L): + ∀K,V,V2,W2,i. + ⇩[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ➡[h,n] V2 → + ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[h,↑n] W2. #h #n #G #L #K #V #V2 #W2 #i #HLK * /3 width=8 by cpg_ell_drops, isrt_succ, ex2_intro/ qed. (* Advanced inversion lemmas ************************************************) -lemma cpm_inv_atom1_drops: ∀h,n,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h,n] T2 → - ∨∨ T2 = ⓪[I] ∧ n = 0 - | ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & n = 1 - | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h,n] V2 & - ⇧[↑i] V2 ≘ T2 & I = LRef i - | ∃∃m,K,V,V2,i. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡[h,m] V2 & - ⇧[↑i] V2 ≘ T2 & I = LRef i & n = ↑m. -#h #n #I #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H * +lemma cpm_inv_atom1_drops (h) (n) (G) (L): + ∀I,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h,n] T2 → + ∨∨ ∧∧ T2 = ⓪[I] & n = 0 + | ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & n = 1 + | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h,n] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i + | ∃∃m,K,V,V2,i. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & n = ↑m. +#h #n #G #L #I #T2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H * [ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc /3 width=1 by or4_intro0, conj/ -| #s #H1 #H2 #H3 destruct lapply (isrt_inv_01 … Hc) -Hc +| #s1 #s2 #H1 #H2 #H3 #H4 destruct lapply (isrt_inv_01 … Hc) -Hc /4 width=3 by or4_intro1, ex3_intro, sym_eq/ (**) (* sym_eq *) | #cV #i #K #V1 #V2 #HLK #HV12 #HVT2 #H1 #H2 destruct /4 width=8 by ex4_4_intro, ex2_intro, or4_intro2/ @@ -85,12 +86,11 @@ lemma cpm_inv_atom1_drops: ∀h,n,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h,n] T2 → ] qed-. -lemma cpm_inv_lref1_drops: ∀h,n,G,L,T2,i. ❪G,L❫ ⊢ #i ➡[h,n] T2 → - ∨∨ T2 = #i ∧ n = 0 - | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h,n] V2 & - ⇧[↑i] V2 ≘ T2 - | ∃∃m,K,V,V2. ⇩[i] L ≘ K. ⓛV & ❪G,K❫ ⊢ V ➡[h,m] V2 & - ⇧[↑i] V2 ≘ T2 & n = ↑m. +lemma cpm_inv_lref1_drops (h) (n) (G) (L): + ∀T2,i. ❪G,L❫ ⊢ #i ➡[h,n] T2 → + ∨∨ ∧∧ T2 = #i & n = 0 + | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h,n] V2 & ⇧[↑i] V2 ≘ T2 + | ∃∃m,K,V,V2. ⇩[i] L ≘ K. ⓛV & ❪G,K❫ ⊢ V ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & n = ↑m. #h #n #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H * [ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc /3 width=1 by or3_intro0, conj/ @@ -104,9 +104,10 @@ qed-. (* Advanced forward lemmas **************************************************) -fact cpm_fwd_plus_aux (h) (n): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → - ∀n1,n2. n1+n2 = n → - ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,n1] T & ❪G,L❫ ⊢ T ➡[h,n2] T2. +fact cpm_fwd_plus_aux (h) (n) (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → + ∀n1,n2. n1+n2 = n → + ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,n1] T & ❪G,L❫ ⊢ T ➡[h,n2] T2. #h #n #G #L #T1 #T2 #H @(cpm_ind … H) -G -L -T1 -T2 -n [ #I #G #L #n1 #n2 #H elim (plus_inv_O3 … H) -H #H1 #H2 destruct @@ -165,6 +166,7 @@ fact cpm_fwd_plus_aux (h) (n): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ] qed-. -lemma cpm_fwd_plus (h) (G) (L): ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n1+n2] T2 → - ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,n1] T & ❪G,L❫ ⊢ T ➡[h,n2] T2. +lemma cpm_fwd_plus (h) (G) (L): + ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n1+n2] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,n1] T & ❪G,L❫ ⊢ T ➡[h,n2] T2. /2 width=3 by cpm_fwd_plus_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma index b3fb715e5..4f41f762d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma @@ -16,13 +16,14 @@ include "ground/xoa/ex_4_3.ma". include "ground/steps/rtc_ist_shift.ma". include "ground/steps/rtc_ist_plus.ma". include "ground/steps/rtc_ist_max.ma". +include "static_2/syntax/sh.ma". include "basic_2/notation/relations/pty_6.ma". include "basic_2/rt_transition/cpg.ma". (* T-BOUND CONTEXT-SENSITIVE PARALLEL T-TRANSITION FOR TERMS ****************) definition cpt (h) (G) (L) (n): relation2 term term ≝ - λT1,T2. ∃∃c. 𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[eq …,c,h] T2. + λT1,T2. ∃∃c. 𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[sh_is_next h,eq …,c] T2. interpretation "t-bound context-sensitive parallel t-transition (term)" @@ -32,7 +33,7 @@ interpretation lemma cpt_ess (h) (G) (L): ∀s. ❪G,L❫ ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s). -/2 width=3 by cpg_ess, ex2_intro/ qed. +/3 width=3 by cpg_ess, ex2_intro/ qed. lemma cpt_delta (h) (n) (G) (K): ∀V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 → @@ -105,7 +106,7 @@ lemma cpt_inv_atom_sn (h) (n) (J) (G) (L): #h #n #J #G #L #X2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * [ #H1 #H2 destruct /3 width=1 by or5_intro0, conj/ -| #s #H1 #H2 #H3 destruct /3 width=3 by or5_intro1, ex3_intro/ +| #s1 #s2 #H1 #H2 #H3 #H4 destruct /3 width=3 by or5_intro1, ex3_intro/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 #H3 destruct /4 width=6 by or5_intro2, ex4_3_intro, ex2_intro/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 #H3 destruct @@ -121,7 +122,9 @@ lemma cpt_inv_sort_sn (h) (n) (G) (L) (s): ∧∧ X2 = ⋆(((next h)^n) s) & n ≤ 1. #h #n #G #L #s #X2 * #c #Hc #H elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct -/2 width=1 by conj/ +[ /2 width=1 by conj/ +| #H1 #H2 destruct /2 width=1 by conj/ +] qed-. lemma cpt_inv_zero_sn (h) (n) (G) (L): diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma index 1d4e8b33a..29cbdfc0d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma @@ -72,7 +72,7 @@ lemma cpt_inv_atom_sn_drops (h) (n) (I) (G) (L): #h #n #I #G #L #X2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H * [ #H1 #H2 destruct /3 width=1 by or4_intro0, conj/ -| #s #H1 #H2 #H3 destruct +| #s1 #s2 #H1 #H2 #H3 #H4 destruct /3 width=3 by or4_intro1, ex3_intro/ | #cV #i #K #V1 #V2 #HLK #HV12 #HVT2 #H1 #H2 destruct /4 width=8 by ex4_4_intro, ex2_intro, or4_intro2/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma index 2da498aa0..13e3a4230 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma @@ -19,214 +19,217 @@ include "ground/xoa/ex_6_6.ma". include "ground/xoa/ex_6_7.ma". include "ground/xoa/ex_7_7.ma". include "ground/xoa/or_4.ma". -include "basic_2/notation/relations/predty_5.ma". +include "basic_2/notation/relations/predty_4.ma". include "basic_2/rt_transition/cpg.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) -definition cpx (h): relation4 genv lenv term term ≝ - λG,L,T1,T2. ∃c. ❪G,L❫ ⊢ T1 ⬈[eq_f,c,h] T2. +definition sort_eq_f: relation nat ≝ λs1,s2. ⊤. + +definition cpx (G) (L): relation2 term term ≝ + λT1,T2. ∃c. ❪G,L❫ ⊢ T1 ⬈[sort_eq_f,rtc_eq_f,c] T2. interpretation - "unbound context-sensitive parallel rt-transition (term)" - 'PRedTy h G L T1 T2 = (cpx h G L T1 T2). + "extended context-sensitive parallel rt-transition (term)" + 'PRedTy G L T1 T2 = (cpx G L T1 T2). (* Basic properties *********************************************************) -(* Basic_2A1: was: cpx_st *) -lemma cpx_ess: ∀h,G,L,s. ❪G,L❫ ⊢ ⋆s ⬈[h] ⋆(⫯[h]s). -/2 width=2 by cpg_ess, ex_intro/ qed. +(* Basic_2A1: uses: cpx_st *) +lemma cpx_qu (G) (L): ∀s1,s2. ❪G,L❫ ⊢ ⋆s1 ⬈ ⋆s2. +/3 width=2 by cpg_ess, ex_intro/ qed. -lemma cpx_delta: ∀h,I,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈[h] V2 → - ⇧[1] V2 ≘ W2 → ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[h] W2. -#h * #G #K #V1 #V2 #W2 * +lemma cpx_delta (G) (K): + ∀I,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈ V2 → + ⇧[1] V2 ≘ W2 → ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈ W2. +#G #K * #V1 #V2 #W2 * /3 width=4 by cpg_delta, cpg_ell, ex_intro/ qed. -lemma cpx_lref: ∀h,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ⬈[h] T → - ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[h] U. -#h #I #G #K #T #U #i * +lemma cpx_lref (G) (K): + ∀I,T,U,i. ❪G,K❫ ⊢ #i ⬈ T → + ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈ U. +#G #K #I #T #U #i * /3 width=4 by cpg_lref, ex_intro/ qed. -lemma cpx_bind: ∀h,p,I,G,L,V1,V2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[h] T2 → - ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] ⓑ[p,I]V2.T2. -#h #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HV12 * +lemma cpx_bind (G) (L): + ∀p,I,V1,V2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈ T2 → + ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2. +#G #L #p #I #V1 #V2 #T1 #T2 * #cV #HV12 * /3 width=2 by cpg_bind, ex_intro/ qed. -lemma cpx_flat: ∀h,I,G,L,V1,V2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ T1 ⬈[h] T2 → - ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈[h] ⓕ[I]V2.T2. -#h * #G #L #V1 #V2 #T1 #T2 * #cV #HV12 * +lemma cpx_flat (G) (L): + ∀I,V1,V2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ T1 ⬈ T2 → + ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈ ⓕ[I]V2.T2. +#G #L * #V1 #V2 #T1 #T2 * #cV #HV12 * /3 width=5 by cpg_appl, cpg_cast, ex_intro/ qed. -lemma cpx_zeta (h) (G) (L): - ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ⬈[h] T2 → - ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ⬈[h] T2. -#h #G #L #T1 #T #HT1 #T2 * +lemma cpx_zeta (G) (L): + ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ⬈ T2 → + ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ⬈ T2. +#G #L #T1 #T #HT1 #T2 * /3 width=4 by cpg_zeta, ex_intro/ qed. -lemma cpx_eps: ∀h,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → ❪G,L❫ ⊢ ⓝV.T1 ⬈[h] T2. -#h #G #L #V #T1 #T2 * +lemma cpx_eps (G) (L): + ∀V,T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → ❪G,L❫ ⊢ ⓝV.T1 ⬈ T2. +#G #L #V #T1 #T2 * /3 width=2 by cpg_eps, ex_intro/ qed. (* Basic_2A1: was: cpx_ct *) -lemma cpx_ee: ∀h,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ ⓝV1.T ⬈[h] V2. -#h #G #L #V1 #V2 #T * +lemma cpx_ee (G) (L): + ∀V1,V2,T. ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ ⓝV1.T ⬈ V2. +#G #L #V1 #V2 #T * /3 width=2 by cpg_ee, ex_intro/ qed. -lemma cpx_beta: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 → - ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈[h] ⓓ[p]ⓝW2.V2.T2. -#h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 * #cV #HV12 * #cW #HW12 * +lemma cpx_beta (G) (L): + ∀p,V1,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈ ⓓ[p]ⓝW2.V2.T2. +#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 * #cV #HV12 * #cW #HW12 * /3 width=2 by cpg_beta, ex_intro/ qed. -lemma cpx_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈[h] V → ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → - ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 → - ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈[h] ⓓ[p]W2.ⓐV2.T2. -#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #cV #HV1 #HV2 * #cW #HW12 * +lemma cpx_theta (G) (L): + ∀p,V1,V,V2,W1,W2,T1,T2. + ❪G,L❫ ⊢ V1 ⬈ V → ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 → + ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈ ⓓ[p]W2.ⓐV2.T2. +#G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 * #cV #HV1 #HV2 * #cW #HW12 * /3 width=4 by cpg_theta, ex_intro/ qed. (* Basic_2A1: includes: cpx_atom *) -lemma cpx_refl: ∀h,G,L. reflexive … (cpx h G L). +lemma cpx_refl (G) (L): reflexive … (cpx G L). /3 width=2 by cpg_refl, ex_intro/ qed. (* Advanced properties ******************************************************) -lemma cpx_pair_sn: ∀h,I,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → - ∀T. ❪G,L❫ ⊢ ②[I]V1.T ⬈[h] ②[I]V2.T. -#h * /2 width=2 by cpx_flat, cpx_bind/ +lemma cpx_pair_sn (G) (L): + ∀I,V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → + ∀T. ❪G,L❫ ⊢ ②[I]V1.T ⬈ ②[I]V2.T. +#G #L * /2 width=2 by cpx_flat, cpx_bind/ qed. -lemma cpg_cpx (h) (Rt) (c) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rt,c,h] T2 → ❪G,L❫ ⊢ T1 ⬈[h] T2. -#h #Rt #c #G #L #T1 #T2 #H elim H -c -G -L -T1 -T2 +lemma cpg_cpx (Rs) (Rk) (c) (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rs,Rk,c] T2 → ❪G,L❫ ⊢ T1 ⬈ T2. +#Rs #Rk #c #G #L #T1 #T2 #H elim H -c -G -L -T1 -T2 /2 width=3 by cpx_theta, cpx_beta, cpx_ee, cpx_eps, cpx_zeta, cpx_flat, cpx_bind, cpx_lref, cpx_delta/ qed. (* Basic inversion lemmas ***************************************************) -lemma cpx_inv_atom1: ∀h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ⬈[h] T2 → - ∨∨ T2 = ⓪[J] - | ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s - | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓑ[I]V1 & J = LRef 0 - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[h] T & ⇧[1] T ≘ T2 & - L = K.ⓘ[I] & J = LRef (↑i). -#h #J #G #L #T2 * #c #H elim (cpg_inv_atom1 … H) -H * -/4 width=8 by or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex4_4_intro, ex2_intro, ex_intro/ +lemma cpx_inv_atom1 (G) (L): + ∀J,T2. ❪G,L❫ ⊢ ⓪[J] ⬈ T2 → + ∨∨ T2 = ⓪[J] + | ∃∃s1,s2. T2 = ⋆s2 & J = Sort s1 + | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1 & J = LRef 0 + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). +#G #L #J #T2 * #c #H elim (cpg_inv_atom1 … H) -H * +/4 width=8 by or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex4_4_intro, ex2_2_intro, ex_intro/ qed-. -lemma cpx_inv_sort1: ∀h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ⬈[h] T2 → - ∨∨ T2 = ⋆s | T2 = ⋆(⫯[h]s). -#h #G #L #T2 #s * #c #H elim (cpg_inv_sort1 … H) -H * -/2 width=1 by or_introl, or_intror/ +lemma cpx_inv_sort1 (G) (L): + ∀T2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈ T2 → + ∃s2. T2 = ⋆s2. +#G #L #T2 #s1 * #c #H elim (cpg_inv_sort1 … H) -H * +/2 width=2 by ex_intro/ qed-. -lemma cpx_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ⬈[h] T2 → - ∨∨ T2 = #0 - | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[h] V2 & ⇧[1] V2 ≘ T2 & - L = K.ⓑ[I]V1. -#h #G #L #T2 * #c #H elim (cpg_inv_zero1 … H) -H * +lemma cpx_inv_zero1 (G) (L): + ∀T2. ❪G,L❫ ⊢ #0 ⬈ T2 → + ∨∨ T2 = #0 + | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1. +#G #L #T2 * #c #H elim (cpg_inv_zero1 … H) -H * /4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ⬈[h] T2 → - ∨∨ T2 = #(↑i) - | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈[h] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. -#h #G #L #T2 #i * #c #H elim (cpg_inv_lref1 … H) -H * +lemma cpx_inv_lref1 (G) (L): + ∀T2,i. ❪G,L❫ ⊢ #↑i ⬈ T2 → + ∨∨ T2 = #(↑i) + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. +#G #L #T2 #i * #c #H elim (cpg_inv_lref1 … H) -H * /4 width=6 by ex3_3_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_gref1: ∀h,G,L,T2,l. ❪G,L❫ ⊢ §l ⬈[h] T2 → T2 = §l. -#h #G #L #T2 #l * #c #H elim (cpg_inv_gref1 … H) -H // +lemma cpx_inv_gref1 (G) (L): + ∀T2,l. ❪G,L❫ ⊢ §l ⬈ T2 → T2 = §l. +#G #L #T2 #l * #c #H elim (cpg_inv_gref1 … H) -H // qed-. -lemma cpx_inv_bind1: ∀h,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[h] T2 & - U2 = ⓑ[p,I]V2.T2 - | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[h] U2 & - p = true & I = Abbr. -#h #p #I #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_bind1 … H) -H * +lemma cpx_inv_bind1 (G) (L): + ∀p,I,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈ T2 & U2 = ⓑ[p,I]V2.T2 + | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈ U2 & p = true & I = Abbr. +#G #L #p #I #V1 #T1 #U2 * #c #H elim (cpg_inv_bind1 … H) -H * /4 width=5 by ex4_intro, ex3_2_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_abbr1: ∀h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈[h] T2 & - U2 = ⓓ[p]V2.T2 - | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[h] U2 & p = true. -#h #p #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_abbr1 … H) -H * +lemma cpx_inv_abbr1 (G) (L): + ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈ T2 & U2 = ⓓ[p]V2.T2 + | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈ U2 & p = true. +#G #L #p #V1 #T1 #U2 * #c #H elim (cpg_inv_abbr1 … H) -H * /4 width=5 by ex3_2_intro, ex3_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_abst1: ∀h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈[h] U2 → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈[h] T2 & - U2 = ⓛ[p]V2.T2. -#h #p #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_abst1 … H) -H +lemma cpx_inv_abst1 (G) (L): + ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈ U2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈ T2 & U2 = ⓛ[p]V2.T2. +#G #L #p #V1 #T1 #U2 * #c #H elim (cpg_inv_abst1 … H) -H /3 width=5 by ex3_2_intro, ex_intro/ qed-. -lemma cpx_inv_appl1: ∀h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ U1 ⬈[h] T2 & - U2 = ⓐV2.T2 - | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ W1 ⬈[h] W2 & - ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 & - U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 - | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V & ⇧[1] V ≘ V2 & - ❪G,L❫ ⊢ W1 ⬈[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 & - U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. -#h #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_appl1 … H) -H * +lemma cpx_inv_appl1 (G) (L): + ∀V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ U1 ⬈ T2 & U2 = ⓐV2.T2 + | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 + | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. +#G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_appl1 … H) -H * /4 width=13 by or3_intro0, or3_intro1, or3_intro2, ex6_7_intro, ex5_6_intro, ex3_2_intro, ex_intro/ qed-. -lemma cpx_inv_cast1: ∀h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ U1 ⬈[h] T2 & - U2 = ⓝV2.T2 - | ❪G,L❫ ⊢ U1 ⬈[h] U2 - | ❪G,L❫ ⊢ V1 ⬈[h] U2. -#h #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_cast1 … H) -H * +lemma cpx_inv_cast1 (G) (L): + ∀V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ U1 ⬈ T2 & U2 = ⓝV2.T2 + | ❪G,L❫ ⊢ U1 ⬈ U2 + | ❪G,L❫ ⊢ V1 ⬈ U2. +#G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_cast1 … H) -H * /4 width=5 by or3_intro0, or3_intro1, or3_intro2, ex3_2_intro, ex_intro/ qed-. (* Advanced inversion lemmas ************************************************) -lemma cpx_inv_zero1_pair: ∀h,I,G,K,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[h] T2 → - ∨∨ T2 = #0 - | ∃∃V2. ❪G,K❫ ⊢ V1 ⬈[h] V2 & ⇧[1] V2 ≘ T2. -#h #I #G #L #V1 #T2 * #c #H elim (cpg_inv_zero1_pair … H) -H * +lemma cpx_inv_zero1_pair (G) (K): + ∀I,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈ T2 → + ∨∨ T2 = #0 + | ∃∃V2. ❪G,K❫ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2. +#G #K #I #V1 #T2 * #c #H elim (cpg_inv_zero1_pair … H) -H * /4 width=3 by ex2_intro, ex_intro, or_intror, or_introl/ qed-. -lemma cpx_inv_lref1_bind: ∀h,I,G,K,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[h] T2 → - ∨∨ T2 = #(↑i) - | ∃∃T. ❪G,K❫ ⊢ #i ⬈[h] T & ⇧[1] T ≘ T2. -#h #I #G #L #T2 #i * #c #H elim (cpg_inv_lref1_bind … H) -H * +lemma cpx_inv_lref1_bind (G) (K): + ∀I,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈ T2 → + ∨∨ T2 = #(↑i) + | ∃∃T. ❪G,K❫ ⊢ #i ⬈ T & ⇧[1] T ≘ T2. +#G #K #I #T2 #i * #c #H elim (cpg_inv_lref1_bind … H) -H * /4 width=3 by ex2_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_flat1: ∀h,I,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓕ[I]V1.U1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ U1 ⬈[h] T2 & - U2 = ⓕ[I]V2.T2 - | (❪G,L❫ ⊢ U1 ⬈[h] U2 ∧ I = Cast) - | (❪G,L❫ ⊢ V1 ⬈[h] U2 ∧ I = Cast) - | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ W1 ⬈[h] W2 & - ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 & - U1 = ⓛ[p]W1.T1 & - U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl - | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V & ⇧[1] V ≘ V2 & - ❪G,L❫ ⊢ W1 ⬈[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 & - U1 = ⓓ[p]W1.T1 & - U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl. -#h * #G #L #V1 #U1 #U2 #H +lemma cpx_inv_flat1 (G) (L): + ∀I,V1,U1,U2. ❪G,L❫ ⊢ ⓕ[I]V1.U1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ U1 ⬈ T2 & U2 = ⓕ[I]V2.T2 + | (❪G,L❫ ⊢ U1 ⬈ U2 ∧ I = Cast) + | (❪G,L❫ ⊢ V1 ⬈ U2 ∧ I = Cast) + | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl + | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl. +#G #L * #V1 #U1 #U2 #H [ elim (cpx_inv_appl1 … H) -H * /3 width=14 by or5_intro0, or5_intro3, or5_intro4, ex7_7_intro, ex6_6_intro, ex3_2_intro/ | elim (cpx_inv_cast1 … H) -H [ * ] @@ -236,40 +239,40 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma cpx_fwd_bind1_minus: ∀h,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈[h] T → ∀p. - ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] ⓑ[p,I]V2.T2 & - T = -ⓑ[I]V2.T2. -#h #I #G #L #V1 #T1 #T * #c #H #p elim (cpg_fwd_bind1_minus … H p) -H +lemma cpx_fwd_bind1_minus (G) (L): + ∀I,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈ T → ∀p. + ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2. +#G #L #I #V1 #T1 #T * #c #H #p elim (cpg_fwd_bind1_minus … H p) -H /3 width=4 by ex2_2_intro, ex_intro/ qed-. (* Basic eliminators ********************************************************) -lemma cpx_ind: ∀h. ∀Q:relation4 genv lenv term term. - (∀I,G,L. Q G L (⓪[I]) (⓪[I])) → - (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → - (∀I,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈[h] V2 → Q G K V1 V2 → - ⇧[1] V2 ≘ W2 → Q G (K.ⓑ[I]V1) (#0) W2 - ) → (∀I,G,K,T,U,i. ❪G,K❫ ⊢ #i ⬈[h] T → Q G K (#i) T → - ⇧[1] T ≘ U → Q G (K.ⓘ[I]) (#↑i) (U) - ) → (∀p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[h] T2 → - Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) - ) → (∀I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ T1 ⬈[h] T2 → - Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ[I]V1.T1) (ⓕ[I]V2.T2) - ) → (∀G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ⬈[h] T2 → Q G L T T2 → - Q G L (+ⓓV.T1) T2 - ) → (∀G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → Q G L T1 T2 → - Q G L (ⓝV.T1) T2 - ) → (∀G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ⬈[h] V2 → Q G L V1 V2 → - Q G L (ⓝV1.T) V2 - ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 → - Q G L V1 V2 → Q G L W1 W2 → Q G (L.ⓛW1) T1 T2 → - Q G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) - ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V → ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 → - Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 → - ⇧[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) - ) → - ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → Q G L T1 T2. -#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2 +lemma cpx_ind (Q:relation4 …): + (∀I,G,L. Q G L (⓪[I]) (⓪[I])) → + (∀G,L,s1,s2. Q G L (⋆s1) (⋆s2)) → + (∀I,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈ V2 → Q G K V1 V2 → + ⇧[1] V2 ≘ W2 → Q G (K.ⓑ[I]V1) (#0) W2 + ) → (∀I,G,K,T,U,i. ❪G,K❫ ⊢ #i ⬈ T → Q G K (#i) T → + ⇧[1] T ≘ U → Q G (K.ⓘ[I]) (#↑i) (U) + ) → (∀p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈ T2 → + Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) + ) → (∀I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ T1 ⬈ T2 → + Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ[I]V1.T1) (ⓕ[I]V2.T2) + ) → (∀G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ⬈ T2 → Q G L T T2 → + Q G L (+ⓓV.T1) T2 + ) → (∀G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → Q G L T1 T2 → + Q G L (ⓝV.T1) T2 + ) → (∀G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ⬈ V2 → Q G L V1 V2 → + Q G L (ⓝV1.T) V2 + ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 → + Q G L V1 V2 → Q G L W1 W2 → Q G (L.ⓛW1) T1 T2 → + Q G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) + ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 → + Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 → + ⇧[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) + ) → + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → Q G L T1 T2. +#Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2 * #c #H elim H -c -G -L -T1 -T2 /3 width=4 by ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma index 5b9970d0f..686dfe0ad 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma @@ -16,61 +16,62 @@ include "ground/xoa/ex_4_5.ma". include "basic_2/rt_transition/cpg_drops.ma". include "basic_2/rt_transition/cpx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) (* Advanced properties ******************************************************) (* Basic_2A1: was: cpx_delta *) -lemma cpx_delta_drops: ∀h,I,G,L,K,V,V2,W2,i. - ⇩[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⬈[h] V2 → - ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬈[h] W2. -#h * #G #L #K #V #V2 #W2 #i #HLK * +lemma cpx_delta_drops (G) (L): + ∀I,K,V,V2,W2,i. + ⇩[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⬈ V2 → + ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬈ W2. +#G #L * #K #V #V2 #W2 #i #HLK * /3 width=7 by cpg_ell_drops, cpg_delta_drops, ex_intro/ qed. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: was: cpx_inv_atom1 *) -lemma cpx_inv_atom1_drops: ∀h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ⬈[h] T2 → - ∨∨ T2 = ⓪[I] - | ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s - | ∃∃J,K,V,V2,i. ⇩[i] L ≘ K.ⓑ[J]V & ❪G,K❫ ⊢ V ⬈[h] V2 & - ⇧[↑i] V2 ≘ T2 & I = LRef i. -#h #I #G #L #T2 * #c #H elim (cpg_inv_atom1_drops … H) -H * -/4 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex2_intro, ex_intro/ +lemma cpx_inv_atom1_drops (G) (L): + ∀I,T2. ❪G,L❫ ⊢ ⓪[I] ⬈ T2 → + ∨∨ T2 = ⓪[I] + | ∃∃s1,s2. T2 = ⋆s2 & I = Sort s1 + | ∃∃J,K,V,V2,i. ⇩[i] L ≘ K.ⓑ[J]V & ❪G,K❫ ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i. +#G #L #I #T2 * #c #H elim (cpg_inv_atom1_drops … H) -H * +/4 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex2_2_intro, ex_intro/ qed-. (* Basic_2A1: was: cpx_inv_lref1 *) -lemma cpx_inv_lref1_drops: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #i ⬈[h] T2 → - T2 = #i ∨ - ∃∃J,K,V,V2. ⇩[i] L ≘ K. ⓑ[J]V & ❪G,K❫ ⊢ V ⬈[h] V2 & - ⇧[↑i] V2 ≘ T2. -#h #G #L #T1 #i * #c #H elim (cpg_inv_lref1_drops … H) -H * +lemma cpx_inv_lref1_drops (G) (L): + ∀T2,i. ❪G,L❫ ⊢ #i ⬈ T2 → + ∨∨ T2 = #i + | ∃∃J,K,V,V2. ⇩[i] L ≘ K. ⓑ[J]V & ❪G,K❫ ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2. +#G #L #T1 #i * #c #H elim (cpg_inv_lref1_drops … H) -H * /4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/ qed-. (* Properties with generic slicing for local environments *******************) (* Basic_2A1: includes: cpx_lift *) -lemma cpx_lifts_sn: ∀h,G. d_liftable2_sn … lifts (cpx h G). -#h #G #K #T1 #T2 * #cT #HT12 #b #f #L #HLK #U1 #HTU1 +lemma cpx_lifts_sn (G): d_liftable2_sn … lifts (cpx G). +#G #K #T1 #T2 * #cT #HT12 #b #f #L #HLK #U1 #HTU1 elim (cpg_lifts_sn … HT12 … HLK … HTU1) -K -T1 /3 width=4 by ex2_intro, ex_intro/ qed-. -lemma cpx_lifts_bi: ∀h,G. d_liftable2_bi … lifts (cpx h G). -#h #G #K #T1 #T2 * /3 width=10 by cpg_lifts_bi, ex_intro/ +lemma cpx_lifts_bi (G): d_liftable2_bi … lifts (cpx G). +#G #K #T1 #T2 * /3 width=10 by cpg_lifts_bi, ex_intro/ qed-. (* Inversion lemmas with generic slicing for local environments *************) (* Basic_2A1: includes: cpx_inv_lift1 *) -lemma cpx_inv_lifts_sn: ∀h,G. d_deliftable2_sn … lifts (cpx h G). -#h #G #L #U1 #U2 * #cU #HU12 #b #f #K #HLK #T1 #HTU1 +lemma cpx_inv_lifts_sn (G): d_deliftable2_sn … lifts (cpx G). +#G #L #U1 #U2 * #cU #HU12 #b #f #K #HLK #T1 #HTU1 elim (cpg_inv_lifts_sn … HU12 … HLK … HTU1) -L -U1 /3 width=4 by ex2_intro, ex_intro/ qed-. -lemma cpx_inv_lifts_bi: ∀h,G. d_deliftable2_bi …lifts (cpx h G). -#h #G #L #U1 #U2 * /3 width=10 by cpg_inv_lifts_bi, ex_intro/ +lemma cpx_inv_lifts_bi (G): d_deliftable2_bi …lifts (cpx G). +#G #L #U1 #U2 * /3 width=10 by cpg_inv_lifts_bi, ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma index b01b5d58d..37551625d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma @@ -15,14 +15,14 @@ include "static_2/relocation/lifts_basic.ma". include "basic_2/rt_transition/cpx_drops.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) (* Properties with basic relocation *****************************************) -lemma cpx_subst (h) (G) (L) (U1) (i): - ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → - ∃∃U2,T2. ❪G,L❫ ⊢ U1 ⬈[h] U2 & ⇧[i,1] T2 ≘ U2. -#h #G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1 +lemma cpx_subst (G) (L) (U1) (i): + ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → + ∃∃U2,T2. ❪G,L❫ ⊢ U1 ⬈ U2 & ⇧[i,1] T2 ≘ U2. +#G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1 #G0 #L0 #U0 #IH #G #L * * [ #s #HG #HL #HT #i #I #K #V #_ destruct -IH /2 width=4 by lifts_sort, ex2_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_ext.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_ext.ma index 9e6020a22..ad3014288 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_ext.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_ext.ma @@ -15,11 +15,11 @@ include "static_2/syntax/cext2.ma". include "basic_2/rt_transition/cpx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR BINDERS *************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR BINDERS ************) -definition cpx_ext (h) (G): relation3 lenv bind bind ≝ - cext2 (cpx h G). +definition cpx_ext (G): relation3 lenv bind bind ≝ + cext2 (cpx G). interpretation - "unbound context-sensitive parallel rt-transition (binder)" - 'PRedTy h G L I1 I2 = (cpx_ext h G L I1 I2). + "extended context-sensitive parallel rt-transition (binder)" + 'PRedTy G L I1 I2 = (cpx_ext G L I1 I2). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma index fc7a7d631..a0ec5d8f8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma @@ -16,14 +16,15 @@ include "static_2/static/feqx.ma". include "basic_2/rt_transition/cpx_reqx.ma". include "basic_2/rt_transition/rpx_reqx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) (* Properties with sort-irrelevant equivalence for closures *****************) -lemma feqx_cpx_trans: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛ ❪G2,L2,T❫ → - ∀T2. ❪G2,L2❫ ⊢ T ⬈[h] T2 → - ∃∃T0. ❪G1,L1❫ ⊢ T1 ⬈[h] T0 & ❪G1,L1,T0❫ ≛ ❪G2,L2,T2❫. -#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 +lemma feqx_cpx_trans: + ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛ ❪G2,L2,T❫ → + ∀T2. ❪G2,L2❫ ⊢ T ⬈ T2 → + ∃∃T0. ❪G1,L1❫ ⊢ T1 ⬈ T0 & ❪G1,L1,T0❫ ≛ ❪G2,L2,T2❫. +#G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct elim (reqx_cpx_trans … HL12 … HT2) #T0 #HT0 #HT02 lapply (cpx_reqx_conf_dx … HT2 … HL12) -HL12 #HL12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma index 18a502335..31dffbb2a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) include "static_2/relocation/lifts_teqx.ma". include "static_2/s_computation/fqus_fqup.ma". @@ -21,10 +21,11 @@ include "basic_2/rt_transition/cpx_lsubr.ma". (* Properties on supclosure *************************************************) -lemma fqu_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] 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 +lemma fqu_cpx_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 /3 width=3 by cpx_pair_sn, cpx_bind, cpx_flat, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, ex2_intro/ [ #I #G #L2 #V2 #X2 #HVX2 elim (lifts_total X2 (𝐔❨1❩)) @@ -36,19 +37,21 @@ lemma fqu_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2 ] qed-. -lemma fquq_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H +lemma fquq_cpx_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [ #HT12 #U2 #HTU2 elim (fqu_cpx_trans … HT12 … HTU2) /3 width=3 by fqu_fquq, ex2_intro/ | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/ ] qed-. -lemma fqup_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 +lemma fqup_cpx_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 [ #G2 #L2 #T2 #H12 #U2 #HTU2 elim (fqu_cpx_trans … H12 … HTU2) -T2 /3 width=3 by fqu_fqup, ex2_intro/ | #G #G2 #L #L2 #T #T2 #_ #HT2 #IHT1 #U2 #HTU2 @@ -57,19 +60,21 @@ lemma fqup_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2, ] qed-. -lemma fqus_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H +lemma fqus_cpx_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H [ #HT12 #U2 #HTU2 elim (fqup_cpx_trans … HT12 … HTU2) /3 width=3 by fqup_fqus, ex2_intro/ | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/ ] qed-. -lemma fqu_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 +lemma fqu_cpx_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❨1❩) #U2 #HVU2 @(ex3_intro … U2) [1,3: /3 width=7 by cpx_delta, fqu_drop/ @@ -98,20 +103,22 @@ lemma fqu_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2 ] qed-. -lemma fquq_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 +lemma fquq_cpx_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 [ #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ ] qed-. -lemma fqup_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 +lemma fqup_cpx_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 [ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ | #G #G1 #L #L1 #T #T1 #H1 #_ #IH12 #U2 #HTU2 #H elim (IH12 … HTU2 H) -T2 @@ -120,10 +127,11 @@ lemma fqup_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪ ] qed-. -lemma fqus_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 +lemma fqus_cpx_trans_tneqx (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 [ #H12 elim (fqup_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ | * #HG #HL #HT destruct /3 width=4 by ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma index ecc4cf82e..42fd64fa1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma @@ -15,16 +15,16 @@ include "basic_2/rt_transition/cpg_lsubr.ma". include "basic_2/rt_transition/cpx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) (* Properties with restricted refinement for local environments *************) -lemma lsubr_cpx_trans (h) (G): lsub_trans … (cpx h G) lsubr. -#h #G #L1 #T1 #T2 * /3 width=4 by lsubr_cpg_trans, ex_intro/ +lemma lsubr_cpx_trans (G): lsub_trans … (cpx G) lsubr. +#G #L1 #T1 #T2 * /3 width=4 by lsubr_cpg_trans, ex_intro/ qed-. -lemma cpx_bind_unit (h) (G): ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → - ∀J,T1,T2. ❪G,L.ⓤ[J]❫ ⊢ T1 ⬈[h] T2 → - ∀p,I. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] ⓑ[p,I]V2.T2. +lemma cpx_bind_unit (G) (L): + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → + ∀J,T1,T2. ❪G,L.ⓤ[J]❫ ⊢ T1 ⬈ T2 → + ∀p,I. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2. /4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit/ qed. - diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_req.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_req.ma index 3379c6e23..f74d42bab 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_req.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_req.ma @@ -15,13 +15,13 @@ include "static_2/static/req_drops.ma". include "basic_2/rt_transition/rpx_fsle.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) (* Properties with syntactic equivalence for lenvs on referred entries ******) (* Basic_2A1: was: lleq_cpx_trans *) -lemma req_cpx_trans (h) (G): req_transitive (cpx h G). -#h #G #L2 #T1 #T2 #H @(cpx_ind … H) -G -L2 -T1 -T2 /2 width=2 by cpx_ess/ +lemma req_cpx_trans (G): req_transitive (cpx G). +#G #L2 #T1 #T2 #H @(cpx_ind … H) -G -L2 -T1 -T2 /2 width=2 by cpx_qu/ [ #I #G #K2 #V1 #V2 #W2 #_ #IH #HVW2 #L1 #H elim (req_inv_zero_pair_dx … H) -H #K1 #HK12 #H destruct /3 width=3 by cpx_delta/ @@ -50,5 +50,5 @@ lemma req_cpx_trans (h) (G): req_transitive (cpx h G). qed-. (* Basic_2A1: was: cpx_lleq_conf_sn *) -lemma cpx_req_conf_sn (h) (G): s_r_confluent1 … (cpx h G) req. +lemma cpx_req_conf_sn (G): s_r_confluent1 … (cpx G) req. /2 width=5 by cpx_rex_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma index d3cbfa45e..7c05f8b2c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma @@ -15,15 +15,17 @@ include "static_2/static/reqx_reqx.ma". include "basic_2/rt_transition/rpx_fsle.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) (* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: was just: cpx_lleq_conf_sn *) -lemma cpx_reqx_conf_sn: ∀h,G. s_r_confluent1 … (cpx h G) reqx. +lemma cpx_reqx_conf_sn (G): + s_r_confluent1 … (cpx G) reqx. /3 width=6 by cpx_rex_conf/ qed-. (* Basic_2A1: was just: cpx_lleq_conf_dx *) -lemma cpx_reqx_conf_dx: ∀h,G,L2,T1,T2. ❪G,L2❫ ⊢ T1 ⬈[h] T2 → - ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. +lemma cpx_reqx_conf_dx (G) (L2): + ∀T1,T2. ❪G,L2❫ ⊢ T1 ⬈ T2 → + ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. /4 width=5 by cpx_reqx_conf_sn, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma index d0b3e453e..02146309f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma @@ -15,13 +15,13 @@ include "basic_2/rt_transition/cpg_simple.ma". include "basic_2/rt_transition/cpx.ma". -(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) +(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) (* Inversion lemmas with simple terms ***************************************) -lemma cpx_inv_appl1_simple: ∀h,G,L,V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈[h] U → 𝐒❪T1❫ → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ T1 ⬈[h] T2 & - U = ⓐV2.T2. -#h #G #L #V1 #T1 #U * #c #H #HT1 elim (cpg_inv_appl1_simple … H) -H +lemma cpx_inv_appl1_simple (G) (L): + ∀V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈ U → 𝐒❪T1❫ → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ T1 ⬈ T2 & U = ⓐV2.T2. +#G #L #V1 #T1 #U * #c #H #HT1 elim (cpg_inv_appl1_simple … H) -H /3 width=5 by ex3_2_intro, ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma index 3e31edb7e..a648ae0e9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma @@ -12,30 +12,30 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predsubtyproper_7.ma". +include "basic_2/notation/relations/predsubtyproper_6.ma". include "static_2/s_transition/fqu.ma". include "static_2/static/reqx.ma". include "basic_2/rt_transition/lpr_lpx.ma". (* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************) -inductive fpb (h) (G1) (L1) (T1): relation3 genv lenv term ≝ -| fpb_fqu: ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → fpb h G1 L1 T1 G2 L2 T2 -| fpb_cpx: ∀T2. ❪G1,L1❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → fpb h G1 L1 T1 G1 L1 T2 -| fpb_lpx: ∀L2. ❪G1,L1❫ ⊢ ⬈[h] L2 → (L1 ≛[T1] L2 → ⊥) → fpb h G1 L1 T1 G1 L2 T1 +inductive fpb (G1) (L1) (T1): relation3 genv lenv term ≝ +| fpb_fqu: ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → fpb G1 L1 T1 G2 L2 T2 +| fpb_cpx: ∀T2. ❪G1,L1❫ ⊢ T1 ⬈ T2 → (T1 ≛ T2 → ⊥) → fpb G1 L1 T1 G1 L1 T2 +| fpb_lpx: ∀L2. ❪G1,L1❫ ⊢ ⬈ L2 → (L1 ≛[T1] L2 → ⊥) → fpb G1 L1 T1 G1 L2 T1 . interpretation - "proper parallel rst-transition (closure)" - 'PRedSubTyProper h G1 L1 T1 G2 L2 T2 = (fpb h G1 L1 T1 G2 L2 T2). + "proper parallel rst-transition (closure)" + 'PRedSubTyProper G1 L1 T1 G2 L2 T2 = (fpb G1 L1 T1 G2 L2 T2). (* Basic properties *********************************************************) (* Basic_2A1: includes: cpr_fpb *) -lemma cpm_fpb (h) (n) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → (T1 ≛ T2 → ⊥) → - ❪G,L,T1❫ ≻[h] ❪G,L,T2❫. -/3 width=2 by fpb_cpx, cpm_fwd_cpx/ qed. +lemma cpm_fpb (h) (n) (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → (T1 ≛ T2 → ⊥) → ❪G,L,T1❫ ≻ ❪G,L,T2❫. +/3 width=3 by fpb_cpx, cpm_fwd_cpx/ qed. -lemma lpr_fpb (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → (L1 ≛[T] L2 → ⊥) → - ❪G,L1,T❫ ≻[h] ❪G,L2,T❫. -/3 width=1 by fpb_lpx, lpr_fwd_lpx/ qed. +lemma lpr_fpb (h) (G) (T): + ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → (L1 ≛[T] L2 → ⊥) → ❪G,L1,T❫ ≻ ❪G,L2,T❫. +/3 width=2 by fpb_lpx, lpr_fwd_lpx/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma index 633b7c43c..04989deb0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma @@ -21,10 +21,11 @@ include "basic_2/rt_transition/fpb_reqx.ma". (* Properties with degree-based equivalence for closures ********************) (* Basic_2A1: uses: fleq_fpb_trans *) -lemma feqx_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ❪F1,K1,T1❫ ≛ ❪F2,K2,T2❫ → - ∀G2,L2,U2. ❪F2,K2,T2❫ ≻[h] ❪G2,L2,U2❫ → - ∃∃G1,L1,U1. ❪F1,K1,T1❫ ≻[h] ❪G1,L1,U1❫ & ❪G1,L1,U1❫ ≛ ❪G2,L2,U2❫. -#h #F1 #F2 #K1 #K2 #T1 #T2 * -F2 -K2 -T2 +lemma feqx_fpb_trans: + ∀F1,F2,K1,K2,T1,T2. ❪F1,K1,T1❫ ≛ ❪F2,K2,T2❫ → + ∀G2,L2,U2. ❪F2,K2,T2❫ ≻ ❪G2,L2,U2❫ → + ∃∃G1,L1,U1. ❪F1,K1,T1❫ ≻ ❪G1,L1,U1❫ & ❪G1,L1,U1❫ ≛ ❪G2,L2,U2❫. +#F1 #F2 #K1 #K2 #T1 #T2 * -F2 -K2 -T2 #K2 #T2 #HK12 #HT12 #G2 #L2 #U2 #H12 elim (teqx_fpb_trans … HT12 … H12) -T2 #K0 #T0 #H #HT0 #HK0 elim (reqx_fpb_trans … HK12 … H) -K2 #L0 #U0 #H #HUT0 #HLK0 @@ -35,9 +36,10 @@ qed-. (* Inversion lemmas with degree-based equivalence for closures **************) (* Basic_2A1: uses: fpb_inv_fleq *) -lemma fpb_inv_feqx: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥. -#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +lemma fpb_inv_feqx: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 [ #G2 #L2 #T2 #H12 #H elim (feqx_inv_gen_sn … H) -H /3 width=11 by reqx_fwd_length, fqu_inv_teqx/ | #T2 #_ #HnT #H elim (feqx_inv_gen_sn … H) -H /2 width=1 by/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma index 0cc359e48..9e75e8f96 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma @@ -21,10 +21,11 @@ include "basic_2/rt_transition/fpb.ma". (* Properties with sort-irrelevant equivalence for local environments *******) -lemma teqx_fpb_trans: ∀h,U2,U1. U2 ≛ U1 → - ∀G1,G2,L1,L2,T1. ❪G1,L1,U1❫ ≻[h] ❪G2,L2,T1❫ → - ∃∃L,T2. ❪G1,L1,U2❫ ≻[h] ❪G2,L,T2❫ & T2 ≛ T1 & L ≛[T1] L2. -#h #U2 #U1 #HU21 #G1 #G2 #L1 #L2 #T1 * -G2 -L2 -T1 +lemma teqx_fpb_trans: + ∀U2,U1. U2 ≛ U1 → + ∀G1,G2,L1,L2,T1. ❪G1,L1,U1❫ ≻ ❪G2,L2,T1❫ → + ∃∃L,T2. ❪G1,L1,U2❫ ≻ ❪G2,L,T2❫ & T2 ≛ T1 & L ≛[T1] L2. +#U2 #U1 #HU21 #G1 #G2 #L1 #L2 #T1 * -G2 -L2 -T1 [ #G2 #L2 #T1 #H elim (teqx_fqu_trans … H … HU21) -H /3 width=5 by fpb_fqu, ex3_2_intro/ @@ -36,10 +37,11 @@ lemma teqx_fpb_trans: ∀h,U2,U1. U2 ≛ U1 → qed-. (* Basic_2A1: was just: lleq_fpb_trans *) -lemma reqx_fpb_trans: ∀h,F,K1,K2,T. K1 ≛[T] K2 → - ∀G,L2,U. ❪F,K2,T❫ ≻[h] ❪G,L2,U❫ → - ∃∃L1,U0. ❪F,K1,T❫ ≻[h] ❪G,L1,U0❫ & U0 ≛ U & L1 ≛[U] L2. -#h #F #K1 #K2 #T #HT #G #L2 #U * -G -L2 -U +lemma reqx_fpb_trans: + ∀F,K1,K2,T. K1 ≛[T] K2 → + ∀G,L2,U. ❪F,K2,T❫ ≻ ❪G,L2,U❫ → + ∃∃L1,U0. ❪F,K1,T❫ ≻ ❪G,L1,U0❫ & U0 ≛ U & L1 ≛[U] L2. +#F #K1 #K2 #T #HT #G #L2 #U * -G -L2 -U [ #G #L2 #U #H2 elim (reqx_fqu_trans … H2 … HT) -K2 /3 width=5 by fpb_fqu, ex3_2_intro/ | #U #HTU #HnTU elim (reqx_cpx_trans … HT … HTU) -HTU diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma index 3e3472135..1290c2970 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predsubty_7.ma". +include "basic_2/notation/relations/predsubty_6.ma". include "static_2/static/feqx.ma". include "static_2/s_transition/fquq.ma". include "basic_2/rt_transition/lpr_lpx.ma". @@ -20,28 +20,30 @@ include "basic_2/rt_transition/lpr_lpx.ma". (* PARALLEL RST-TRANSITION FOR CLOSURES *************************************) (* Basic_2A1: includes: fleq_fpbq fpbq_lleq *) -inductive fpbq (h) (G1) (L1) (T1): relation3 genv lenv term ≝ -| fpbq_fquq: ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → fpbq h G1 L1 T1 G2 L2 T2 -| fpbq_cpx : ∀T2. ❪G1,L1❫ ⊢ T1 ⬈[h] T2 → fpbq h G1 L1 T1 G1 L1 T2 -| fpbq_lpx : ∀L2. ❪G1,L1❫ ⊢ ⬈[h] L2 → fpbq h G1 L1 T1 G1 L2 T1 -| fpbq_feqx: ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → fpbq h G1 L1 T1 G2 L2 T2 +inductive fpbq (G1) (L1) (T1): relation3 genv lenv term ≝ +| fpbq_fquq: ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → fpbq G1 L1 T1 G2 L2 T2 +| fpbq_cpx : ∀T2. ❪G1,L1❫ ⊢ T1 ⬈ T2 → fpbq G1 L1 T1 G1 L1 T2 +| fpbq_lpx : ∀L2. ❪G1,L1❫ ⊢ ⬈ L2 → fpbq G1 L1 T1 G1 L2 T1 +| fpbq_feqx: ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → fpbq G1 L1 T1 G2 L2 T2 . interpretation - "parallel rst-transition (closure)" - 'PRedSubTy h G1 L1 T1 G2 L2 T2 = (fpbq h G1 L1 T1 G2 L2 T2). + "parallel rst-transition (closure)" + 'PRedSubTy G1 L1 T1 G2 L2 T2 = (fpbq G1 L1 T1 G2 L2 T2). (* Basic properties *********************************************************) -lemma fpbq_refl (h): tri_reflexive … (fpbq h). +lemma fpbq_refl: tri_reflexive … fpbq. /2 width=1 by fpbq_cpx/ qed. (* Basic_2A1: includes: cpr_fpbq *) -lemma cpm_fpbq (h) (n) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L,T1❫ ≽[h] ❪G,L,T2❫. -/3 width=2 by fpbq_cpx, cpm_fwd_cpx/ qed. +lemma cpm_fpbq (h) (n) (G) (L): + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L,T1❫ ≽ ❪G,L,T2❫. +/3 width=3 by fpbq_cpx, cpm_fwd_cpx/ qed. -lemma lpr_fpbq (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1,T❫ ≽[h] ❪G,L2,T❫. -/3 width=1 by fpbq_lpx, lpr_fwd_lpx/ qed. +lemma lpr_fpbq (h) (G) (T): + ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1,T❫ ≽ ❪G,L2,T❫. +/3 width=2 by fpbq_lpx, lpr_fwd_lpx/ qed. (* Basic_2A1: removed theorems 2: fpbq_fpbqa fpbqa_inv_fpbq diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma index 8f3a348ac..5df72f4af 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma @@ -21,8 +21,9 @@ include "basic_2/rt_transition/fpbq.ma". (* Properties with atomic arity assignment for terms ************************) -lemma fpbq_aaa_conf: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → - ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. -#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +lemma fpbq_aaa_conf: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /3 width=8 by lpx_aaa_conf, cpx_aaa_conf, aaa_feqx_conf, aaa_fquq_conf, ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma index 0ec2597f1..e49faa0eb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma @@ -19,24 +19,27 @@ include "basic_2/rt_transition/fpbq.ma". (* Properties with proper parallel rst-transition for closures **************) -lemma fpb_fpbq: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫. -#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +lemma fpb_fpbq: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /3 width=1 by fpbq_fquq, fpbq_cpx, fpbq_lpx, fqu_fquq/ qed. (* Basic_2A1: fpb_fpbq_alt *) -lemma fpb_fpbq_fneqx: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → - ∧∧ ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ & (❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥). +lemma fpb_fpbq_fneqx: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → + ∧∧ ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ & (❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥). /3 width=10 by fpb_fpbq, fpb_inv_feqx, conj/ qed-. (* Inversrion lemmas with proper parallel rst-transition for closures *******) (* Basic_2A1: uses: fpbq_ind_alt *) -lemma fpbq_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → - ∨∨ ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ - | ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫. -#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 +lemma fpbq_inv_fpb: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → + ∨∨ ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ + | ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫. +#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 [ #G2 #L2 #T2 * [2: * #H1 #H2 #H3 destruct ] /3 width=1 by fpb_fqu, feqx_intro_sn, or_intror, or_introl/ | #T2 #H elim (teqx_dec T1 T2) @@ -48,8 +51,9 @@ lemma fpbq_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ qed-. (* Basic_2A1: fpbq_inv_fpb_alt *) -lemma fpbq_fneqx_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → - (❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥) → ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫. -#h #G1 #G2 #L1 #L2 #T1 #T2 #H #H0 +lemma fpbq_fneqx_inv_fpb: + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → + (❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥) → ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫. +#G1 #G2 #L1 #L2 #T1 #T2 #H #H0 elim (fpbq_inv_fpb … H) -H // #H elim H0 -H0 // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma index 65bc4fa37..ac7a93d62 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma @@ -18,8 +18,9 @@ include "basic_2/rt_transition/lpr.ma". (* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************) -(* Forward lemmas with unbound parallel rt-transition for ref local envs ****) +(* Forward lemmas with extended parallel rt-transition for ref local envs ***) (* Basic_2A1: was: lpr_lpx *) -lemma lpr_fwd_lpx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ⬈[h] L2. +lemma lpr_fwd_lpx (h) (G): + ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ⬈ L2. /3 width=3 by cpm_fwd_cpx, lex_co/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma index 4363fb103..3878acfd8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma @@ -12,80 +12,87 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtysn_4.ma". +include "basic_2/notation/relations/predtysn_3.ma". include "static_2/relocation/lex.ma". include "basic_2/rt_transition/cpx_ext.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS ***************) +(* EXTENDED PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS **************) -definition lpx (h) (G): relation lenv ≝ - lex (cpx h G). +definition lpx (G): relation lenv ≝ lex (cpx G). interpretation - "unbound parallel rt-transition on all entries (local environment)" - 'PRedTySn h G L1 L2 = (lpx h G L1 L2). + "extended parallel rt-transition on all entries (local environment)" + 'PRedTySn G L1 L2 = (lpx G L1 L2). (* Basic properties *********************************************************) -lemma lpx_bind (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ⬈[h] K2 → - ∀I1,I2. ❪G,K1❫ ⊢ I1 ⬈[h] I2 → ❪G,K1.ⓘ[I1]❫ ⊢ ⬈[h] K2.ⓘ[I2]. +lemma lpx_bind (G): + ∀K1,K2. ❪G,K1❫ ⊢ ⬈ K2 → ∀I1,I2. ❪G,K1❫ ⊢ I1 ⬈ I2 → + ❪G,K1.ⓘ[I1]❫ ⊢ ⬈ K2.ⓘ[I2]. /2 width=1 by lex_bind/ qed. -lemma lpx_refl (h) (G): reflexive … (lpx h G). +lemma lpx_refl (G): reflexive … (lpx G). /2 width=1 by lex_refl/ qed. (* Advanced properties ******************************************************) -lemma lpx_bind_refl_dx (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ⬈[h] K2 → - ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ⬈[h] K2.ⓘ[I]. +lemma lpx_bind_refl_dx (G): + ∀K1,K2. ❪G,K1❫ ⊢ ⬈ K2 → + ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ⬈ K2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. -lemma lpx_pair (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ⬈[h] K2 → ∀V1,V2. ❪G,K1❫ ⊢ V1 ⬈[h] V2 → - ∀I.❪G,K1.ⓑ[I]V1❫ ⊢ ⬈[h] K2.ⓑ[I]V2. +lemma lpx_pair (G): + ∀K1,K2. ❪G,K1❫ ⊢ ⬈ K2 → ∀V1,V2. ❪G,K1❫ ⊢ V1 ⬈ V2 → + ∀I.❪G,K1.ⓑ[I]V1❫ ⊢ ⬈ K2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: was: lpx_inv_atom1 *) -lemma lpx_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ⬈[h] L2 → L2 = ⋆. +lemma lpx_inv_atom_sn (G): + ∀L2. ❪G,⋆❫ ⊢ ⬈ L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. -lemma lpx_inv_bind_sn (h) (G): ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈[h] L2 → - ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ I1 ⬈[h] I2 & - L2 = K2.ⓘ[I2]. +lemma lpx_inv_bind_sn (G): + ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈ L2 → + ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ I1 ⬈ I2 & L2 = K2.ⓘ[I2]. /2 width=1 by lex_inv_bind_sn/ qed-. (* Basic_2A1: was: lpx_inv_atom2 *) -lemma lpx_inv_atom_dx: ∀h,G,L1. ❪G,L1❫ ⊢ ⬈[h] ⋆ → L1 = ⋆. +lemma lpx_inv_atom_dx (G): + ∀L1. ❪G,L1❫ ⊢ ⬈ ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. -lemma lpx_inv_bind_dx (h) (G): ∀I2,L1,K2. ❪G,L1❫ ⊢ ⬈[h] K2.ⓘ[I2] → - ∃∃I1,K1. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ I1 ⬈[h] I2 & - L1 = K1.ⓘ[I1]. +lemma lpx_inv_bind_dx (G): + ∀I2,L1,K2. ❪G,L1❫ ⊢ ⬈ K2.ⓘ[I2] → + ∃∃I1,K1. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ I1 ⬈ I2 & L1 = K1.ⓘ[I1]. /2 width=1 by lex_inv_bind_dx/ qed-. (* Advanced inversion lemmas ************************************************) -lemma lpx_inv_unit_sn (h) (G): ∀I,L2,K1. ❪G,K1.ⓤ[I]❫ ⊢ ⬈[h] L2 → - ∃∃K2. ❪G,K1❫ ⊢ ⬈[h] K2 & L2 = K2.ⓤ[I]. +lemma lpx_inv_unit_sn (G): + ∀I,L2,K1. ❪G,K1.ⓤ[I]❫ ⊢ ⬈ L2 → + ∃∃K2. ❪G,K1❫ ⊢ ⬈ K2 & L2 = K2.ⓤ[I]. /2 width=1 by lex_inv_unit_sn/ qed-. (* Basic_2A1: was: lpx_inv_pair1 *) -lemma lpx_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈[h] L2 → - ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ V1 ⬈[h] V2 & - L2 = K2.ⓑ[I]V2. +lemma lpx_inv_pair_sn (G): + ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈ L2 → + ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ V1 ⬈ V2 & L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. -lemma lpx_inv_unit_dx (h) (G): ∀I,L1,K2. ❪G,L1❫ ⊢ ⬈[h] K2.ⓤ[I] → - ∃∃K1. ❪G,K1❫ ⊢ ⬈[h] K2 & L1 = K1.ⓤ[I]. +lemma lpx_inv_unit_dx (G): + ∀I,L1,K2. ❪G,L1❫ ⊢ ⬈ K2.ⓤ[I] → + ∃∃K1. ❪G,K1❫ ⊢ ⬈ K2 & L1 = K1.ⓤ[I]. /2 width=1 by lex_inv_unit_dx/ qed-. (* Basic_2A1: was: lpx_inv_pair2 *) -lemma lpx_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈[h] K2.ⓑ[I]V2 → - ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ V1 ⬈[h] V2 & - L1 = K1.ⓑ[I]V1. +lemma lpx_inv_pair_dx (G): + ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈ K2.ⓑ[I]V2 → + ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ V1 ⬈ V2 & L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. -lemma lpx_inv_pair (h) (G): ∀I1,I2,L1,L2,V1,V2. ❪G,L1.ⓑ[I1]V1❫ ⊢ ⬈[h] L2.ⓑ[I2]V2 → - ∧∧ ❪G,L1❫ ⊢ ⬈[h] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V2 & I1 = I2. +lemma lpx_inv_pair (G): + ∀I1,I2,L1,L2,V1,V2. ❪G,L1.ⓑ[I1]V1❫ ⊢ ⬈ L2.ⓑ[I2]V2 → + ∧∧ ❪G,L1❫ ⊢ ⬈ L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & I1 = I2. /2 width=1 by lex_inv_pair/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma index 4cb7cbe86..2652783e7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma @@ -16,18 +16,19 @@ include "static_2/static/aaa_drops.ma". include "static_2/static/lsuba_aaa.ma". include "basic_2/rt_transition/lpx_drops.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS ***************) +(* EXTENDED PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS **************) (* Properties with atomic arity assignment for terms ************************) (* Note: lemma 500 *) (* Basic_2A1: was: cpx_lpx_aaa_conf *) -lemma cpx_aaa_conf_lpx (h): ∀G,L1,T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → - ∀T2. ❪G,L1❫ ⊢ T1 ⬈[h] T2 → - ∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → ❪G,L2❫ ⊢ T2 ⁝ A. -#h #G #L1 #T1 #A #H elim H -G -L1 -T1 -A -[ #G #L1 #s #X #H - elim (cpx_inv_sort1 … H) -H #H destruct // +lemma cpx_aaa_conf_lpx (G) (L1): + ∀T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → + ∀T2. ❪G,L1❫ ⊢ T1 ⬈ T2 → + ∀L2. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L2❫ ⊢ T2 ⁝ A. +#G #L1 #T1 #A #H elim H -G -L1 -T1 -A +[ #G #L1 #s1 #X #H + elim (cpx_inv_sort1 … H) -H #s2 #H destruct // | #I #G #K1 #V1 #B #_ #IH #X #HX #Y #HY elim (lpx_inv_pair_sn … HY) -HY #K2 #V2 #HK12 #HV12 #H destruct elim (cpx_inv_zero1_pair … HX) -HX @@ -74,8 +75,9 @@ lemma cpx_aaa_conf_lpx (h): ∀G,L1,T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → ] qed-. -lemma cpx_aaa_conf (h): ∀G,L. Conf3 … (aaa G L) (cpx h G L). +lemma cpx_aaa_conf (G) (L): Conf3 … (aaa G L) (cpx G L). /2 width=7 by cpx_aaa_conf_lpx/ qed-. -lemma lpx_aaa_conf (h): ∀G,T. Conf3 … (λL. aaa G L T) (lpx h G). +lemma lpx_aaa_conf (G): + ∀T. Conf3 … (λL. aaa G L T) (lpx G). /2 width=7 by cpx_aaa_conf_lpx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_drops.ma index 21577aab4..9c6a060b8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_drops.ma @@ -21,15 +21,15 @@ include "basic_2/rt_transition/lpx.ma". (* Properties with generic slicing for local environments *******************) (* Basic_2A1: was: drop_lpx_trans *) -lemma drops_lpx_trans (h) (G): dedropable_sn (cpx h G). +lemma drops_lpx_trans (G): dedropable_sn (cpx G). /3 width=6 by lex_liftable_dedropable_sn, cpx_lifts_sn/ qed-. (* Inversion lemmas with generic slicing for local environments *************) (* Basic_2A1: was: lpx_drop_conf *) -lemma lpx_drops_conf (h) (G): dropable_sn (cpx h G). +lemma lpx_drops_conf (G): dropable_sn (cpx G). /2 width=3 by lex_dropable_sn/ qed-. (* Basic_2A1: was: lpx_drop_trans_O1 *) -lemma lpx_drops_trans (h) (G): dropable_dx (cpx h G). +lemma lpx_drops_trans (G): dropable_dx (cpx G). /2 width=3 by lex_dropable_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma index 23e08858c..1198a5fed 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma @@ -19,10 +19,11 @@ include "basic_2/rt_transition/lpx.ma". (* Properties with extended structural successor for closures ***************) -lemma lpx_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → - ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 +lemma lpx_fqu_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈ L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈ L2. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #K #V #K1 #H elim (lpx_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct elim (lifts_total V (𝐔❨1❩)) #T #HVT @@ -37,10 +38,11 @@ lemma lpx_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L ] qed-. -lemma fqu_lpx_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀K2. ❪G2,L2❫ ⊢ ⬈[h] K2 → - ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈[h] K1 & ❪G1,L1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 +lemma fqu_lpx_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀K2. ❪G2,L2❫ ⊢ ⬈ K2 → + ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈ K1 & ❪G1,L1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by lpx_bind_refl_dx, fqu_lref_O, ex3_2_intro/ | /3 width=5 by cpx_pair_sn, fqu_pair_sn, ex3_2_intro/ | #p #I #G2 #L2 #V2 #T2 #Hb #X #H @@ -56,19 +58,21 @@ qed-. (* Properties with extended optional structural successor for closures ******) -lemma lpx_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → - ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H +lemma lpx_fquq_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈ L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈ L2. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H [ #H12 elim (lpx_fqu_trans … H12 … HKL1) -L1 /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma fquq_lpx_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀K2. ❪G2,L2❫ ⊢ ⬈[h] K2 → - ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈[h] K1 & ❪G1,L1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫. -#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H +lemma fquq_lpx_trans (b): + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀K2. ❪G2,L2❫ ⊢ ⬈ K2 → + ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈ K1 & ❪G1,L1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫. +#b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H [ #H12 elim (fqu_lpx_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma index 4f90ed805..14a30512f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma @@ -14,15 +14,17 @@ include "basic_2/rt_transition/rpx_lpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS ***************) +(* EXTENDED PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS **************) (* Forward lemmas with free variables inclusion for restricted closures *****) (* Basic_2A1: uses: lpx_cpx_frees_trans *) -lemma lpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → - ∀L2. ❪G,L0❫ ⊢ ⬈[h] L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. +lemma lpx_cpx_conf_fsge (G): + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → + ∀L2. ❪G,L0❫ ⊢ ⬈ L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. /3 width=4 by rpx_cpx_conf_fsge, lpx_rpx/ qed-. (* Basic_2A1: uses: lpx_frees_trans *) -lemma lpx_fsge_comp (h) (G): ∀L0,L2,T0. ❪G,L0❫ ⊢ ⬈[h] L2 → ❪L2,T0❫ ⊆ ❪L0,T0❫. +lemma lpx_fsge_comp (G): + ∀L0,L2,T0. ❪G,L0❫ ⊢ ⬈ L2 → ❪L2,T0❫ ⊆ ❪L0,T0❫. /2 width=4 by lpx_cpx_conf_fsge/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma index 2332d68aa..aae2d8972 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma @@ -15,9 +15,10 @@ include "static_2/relocation/lex_length.ma". include "basic_2/rt_transition/lpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS ***************) +(* EXTENDED PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS **************) (* Forward lemmas with length for local environments ************************) -lemma lpx_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈[h] L2 → |L1| = |L2|. +lemma lpx_fwd_length (G): + ∀L1,L2. ❪G,L1❫ ⊢ ⬈ L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma index 36c97f983..f75050ec6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma @@ -16,15 +16,15 @@ include "static_2/static/reqx_req.ma". include "basic_2/rt_transition/rpx_reqx.ma". include "basic_2/rt_transition/rpx_lpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS ***************) +(* EXTENDED PARALLEL RT-TRANSITION FOR FULL LOCAL ENVIRONMENTS **************) (* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: uses: lleq_lpx_trans *) -lemma reqx_lpx_trans (h) (G): ∀L2,K2. ❪G,L2❫ ⊢ ⬈[h] K2 → - ∀L1. ∀T:term. L1 ≛[T] L2 → - ∃∃K1. ❪G,L1❫ ⊢ ⬈[h] K1 & K1 ≛[T] K2. -#h #G #L2 #K2 #HLK2 #L1 #T #HL12 +lemma reqx_lpx_trans (G): + ∀L2,K2. ❪G,L2❫ ⊢ ⬈ K2 → ∀L1. ∀T:term. L1 ≛[T] L2 → + ∃∃K1. ❪G,L1❫ ⊢ ⬈ K1 & K1 ≛[T] K2. +#G #L2 #K2 #HLK2 #L1 #T #HL12 lapply (lpx_rpx … T HLK2) -HLK2 #HLK2 elim (reqx_rpx_trans … HLK2 … HL12) -L2 #K #H #HK2 elim (rpx_inv_lpx_req … H) -H #K1 #HLK1 #HK1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma index b3c8ba2fd..c12780161 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma @@ -12,126 +12,140 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/predtysn_5.ma". +include "basic_2/notation/relations/predtysn_4.ma". include "static_2/static/rex.ma". include "basic_2/rt_transition/cpx_ext.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) +(* EXTENDED PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS **********) -definition rpx (h) (G): relation3 term lenv lenv ≝ - rex (cpx h G). +definition rpx (G): relation3 term lenv lenv ≝ + rex (cpx G). interpretation - "unbound parallel rt-transition on referred entries (local environment)" - 'PRedTySn h T G L1 L2 = (rpx h G T L1 L2). + "extended parallel rt-transition on referred entries (local environment)" + 'PRedTySn T G L1 L2 = (rpx G T L1 L2). (* Basic properties ***********************************************************) -lemma rpx_atom: ∀h,I,G. ❪G,⋆❫ ⊢ ⬈[h,⓪[I]] ⋆. +lemma rpx_atom (G): + ∀I. ❪G,⋆❫ ⊢ ⬈[⓪[I]] ⋆. /2 width=1 by rex_atom/ qed. -lemma rpx_sort: ∀h,I1,I2,G,L1,L2,s. - ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,⋆s] L2.ⓘ[I2]. +lemma rpx_sort (G): + ∀I1,I2,L1,L2,s. + ❪G,L1❫ ⊢ ⬈[⋆s] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[⋆s] L2.ⓘ[I2]. /2 width=1 by rex_sort/ qed. -lemma rpx_pair: ∀h,I,G,L1,L2,V1,V2. - ❪G,L1❫ ⊢ ⬈[h,V1] L2 → ❪G,L1❫ ⊢ V1 ⬈[h] V2 → ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,#0] L2.ⓑ[I]V2. +lemma rpx_pair (G): + ∀I,L1,L2,V1,V2. + ❪G,L1❫ ⊢ ⬈[V1] L2 → ❪G,L1❫ ⊢ V1 ⬈ V2 → ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[#0] L2.ⓑ[I]V2. /2 width=1 by rex_pair/ qed. -lemma rpx_lref: ∀h,I1,I2,G,L1,L2,i. - ❪G,L1❫ ⊢ ⬈[h,#i] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,#↑i] L2.ⓘ[I2]. +lemma rpx_lref (G): + ∀I1,I2,L1,L2,i. + ❪G,L1❫ ⊢ ⬈[#i] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[#↑i] L2.ⓘ[I2]. /2 width=1 by rex_lref/ qed. -lemma rpx_gref: ∀h,I1,I2,G,L1,L2,l. - ❪G,L1❫ ⊢ ⬈[h,§l] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,§l] L2.ⓘ[I2]. +lemma rpx_gref (G): + ∀I1,I2,L1,L2,l. + ❪G,L1❫ ⊢ ⬈[§l] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[§l] L2.ⓘ[I2]. /2 width=1 by rex_gref/ qed. -lemma rpx_bind_repl_dx: ∀h,I,I1,G,L1,L2,T. - ❪G,L1.ⓘ[I]❫ ⊢ ⬈[h,T] L2.ⓘ[I1] → - ∀I2. ❪G,L1❫ ⊢ I ⬈[h] I2 → - ❪G,L1.ⓘ[I]❫ ⊢ ⬈[h,T] L2.ⓘ[I2]. +lemma rpx_bind_repl_dx (G): + ∀I,I1,L1,L2,T. ❪G,L1.ⓘ[I]❫ ⊢ ⬈[T] L2.ⓘ[I1] → + ∀I2. ❪G,L1❫ ⊢ I ⬈ I2 → ❪G,L1.ⓘ[I]❫ ⊢ ⬈[T] L2.ⓘ[I2]. /2 width=2 by rex_bind_repl_dx/ qed-. (* Basic inversion lemmas ***************************************************) -lemma rpx_inv_atom_sn: ∀h,G,Y2,T. ❪G,⋆❫ ⊢ ⬈[h,T] Y2 → Y2 = ⋆. +lemma rpx_inv_atom_sn (G): + ∀Y2,T. ❪G,⋆❫ ⊢ ⬈[T] Y2 → Y2 = ⋆. /2 width=3 by rex_inv_atom_sn/ qed-. -lemma rpx_inv_atom_dx: ∀h,G,Y1,T. ❪G,Y1❫ ⊢ ⬈[h,T] ⋆ → Y1 = ⋆. +lemma rpx_inv_atom_dx (G): + ∀Y1,T. ❪G,Y1❫ ⊢ ⬈[T] ⋆ → Y1 = ⋆. /2 width=3 by rex_inv_atom_dx/ qed-. -lemma rpx_inv_sort: ∀h,G,Y1,Y2,s. ❪G,Y1❫ ⊢ ⬈[h,⋆s] Y2 → - ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 & - Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. +lemma rpx_inv_sort (G): + ∀Y1,Y2,s. ❪G,Y1❫ ⊢ ⬈[⋆s] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_sort/ qed-. -lemma rpx_inv_lref: ∀h,G,Y1,Y2,i. ❪G,Y1❫ ⊢ ⬈[h,#↑i] Y2 → - ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[h,#i] L2 & - Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. +lemma rpx_inv_lref (G): + ∀Y1,Y2,i. ❪G,Y1❫ ⊢ ⬈[#↑i] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_lref/ qed-. -lemma rpx_inv_gref: ∀h,G,Y1,Y2,l. ❪G,Y1❫ ⊢ ⬈[h,§l] Y2 → - ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[h,§l] L2 & - Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. +lemma rpx_inv_gref (G): + ∀Y1,Y2,l. ❪G,Y1❫ ⊢ ⬈[§l] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_gref/ qed-. -lemma rpx_inv_bind: ∀h,p,I,G,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → - ∧∧ ❪G,L1❫ ⊢ ⬈[h,V] L2 & ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[h,T] L2.ⓑ[I]V. +lemma rpx_inv_bind (G): + ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → + ∧∧ ❪G,L1❫ ⊢ ⬈[V] L2 & ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[T] L2.ⓑ[I]V. /2 width=2 by rex_inv_bind/ qed-. -lemma rpx_inv_flat: ∀h,I,G,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L2 → - ∧∧ ❪G,L1❫ ⊢ ⬈[h,V] L2 & ❪G,L1❫ ⊢ ⬈[h,T] L2. +lemma rpx_inv_flat (G): + ∀I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L2 → + ∧∧ ❪G,L1❫ ⊢ ⬈[V] L2 & ❪G,L1❫ ⊢ ⬈[T] L2. /2 width=2 by rex_inv_flat/ qed-. (* Advanced inversion lemmas ************************************************) -lemma rpx_inv_sort_bind_sn: ∀h,I1,G,Y2,L1,s. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,⋆s] Y2 → - ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 & Y2 = L2.ⓘ[I2]. +lemma rpx_inv_sort_bind_sn (G): + ∀I1,Y2,L1,s. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[⋆s] Y2 → + ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[⋆s] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_sort_bind_sn/ qed-. -lemma rpx_inv_sort_bind_dx: ∀h,I2,G,Y1,L2,s. ❪G,Y1❫ ⊢ ⬈[h,⋆s] L2.ⓘ[I2] → - ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 & Y1 = L1.ⓘ[I1]. +lemma rpx_inv_sort_bind_dx (G): + ∀I2,Y1,L2,s. ❪G,Y1❫ ⊢ ⬈[⋆s] L2.ⓘ[I2] → + ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_sort_bind_dx/ qed-. -lemma rpx_inv_zero_pair_sn: ∀h,I,G,Y2,L1,V1. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,#0] Y2 → - ∃∃L2,V2. ❪G,L1❫ ⊢ ⬈[h,V1] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V2 & - Y2 = L2.ⓑ[I]V2. +lemma rpx_inv_zero_pair_sn (G): + ∀I,Y2,L1,V1. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[#0] Y2 → + ∃∃L2,V2. ❪G,L1❫ ⊢ ⬈[V1] L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & Y2 = L2.ⓑ[I]V2. /2 width=1 by rex_inv_zero_pair_sn/ qed-. -lemma rpx_inv_zero_pair_dx: ∀h,I,G,Y1,L2,V2. ❪G,Y1❫ ⊢ ⬈[h,#0] L2.ⓑ[I]V2 → - ∃∃L1,V1. ❪G,L1❫ ⊢ ⬈[h,V1] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V2 & - Y1 = L1.ⓑ[I]V1. +lemma rpx_inv_zero_pair_dx (G): + ∀I,Y1,L2,V2. ❪G,Y1❫ ⊢ ⬈[#0] L2.ⓑ[I]V2 → + ∃∃L1,V1. ❪G,L1❫ ⊢ ⬈[V1] L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1. /2 width=1 by rex_inv_zero_pair_dx/ qed-. -lemma rpx_inv_lref_bind_sn: ∀h,I1,G,Y2,L1,i. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,#↑i] Y2 → - ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[h,#i] L2 & Y2 = L2.ⓘ[I2]. +lemma rpx_inv_lref_bind_sn (G): + ∀I1,Y2,L1,i. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[#↑i] Y2 → + ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[#i] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_lref_bind_sn/ qed-. -lemma rpx_inv_lref_bind_dx: ∀h,I2,G,Y1,L2,i. ❪G,Y1❫ ⊢ ⬈[h,#↑i] L2.ⓘ[I2] → - ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[h,#i] L2 & Y1 = L1.ⓘ[I1]. +lemma rpx_inv_lref_bind_dx (G): + ∀I2,Y1,L2,i. ❪G,Y1❫ ⊢ ⬈[#↑i] L2.ⓘ[I2] → + ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_lref_bind_dx/ qed-. -lemma rpx_inv_gref_bind_sn: ∀h,I1,G,Y2,L1,l. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,§l] Y2 → - ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[h,§l] L2 & Y2 = L2.ⓘ[I2]. +lemma rpx_inv_gref_bind_sn (G): + ∀I1,Y2,L1,l. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[§l] Y2 → + ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[§l] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_gref_bind_sn/ qed-. -lemma rpx_inv_gref_bind_dx: ∀h,I2,G,Y1,L2,l. ❪G,Y1❫ ⊢ ⬈[h,§l] L2.ⓘ[I2] → - ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[h,§l] L2 & Y1 = L1.ⓘ[I1]. +lemma rpx_inv_gref_bind_dx (G): + ∀I2,Y1,L2,l. ❪G,Y1❫ ⊢ ⬈[§l] L2.ⓘ[I2] → + ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_gref_bind_dx/ qed-. (* Basic forward lemmas *****************************************************) -lemma rpx_fwd_pair_sn: ∀h,I,G,L1,L2,V,T. - ❪G,L1❫ ⊢ ⬈[h,②[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[h,V] L2. +lemma rpx_fwd_pair_sn (G): + ∀I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[②[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[V] L2. /2 width=3 by rex_fwd_pair_sn/ qed-. -lemma rpx_fwd_bind_dx: ∀h,p,I,G,L1,L2,V,T. - ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[h,T] L2.ⓑ[I]V. +lemma rpx_fwd_bind_dx (G): + ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[T] L2.ⓑ[I]V. /2 width=2 by rex_fwd_bind_dx/ qed-. -lemma rpx_fwd_flat_dx: ∀h,I,G,L1,L2,V,T. - ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[h,T] L2. +lemma rpx_fwd_flat_dx (G): + ∀I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. /2 width=3 by rex_fwd_flat_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma index ae9319282..5e37a7213 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma @@ -16,23 +16,23 @@ include "static_2/static/rex_drops.ma". include "basic_2/rt_transition/cpx_drops.ma". include "basic_2/rt_transition/rpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) +(* EXTENDED PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS **********) (* Properties with generic slicing for local environments *******************) -lemma rpx_lifts_sn (h) (G): f_dedropable_sn (cpx h G). +lemma rpx_lifts_sn (G): f_dedropable_sn (cpx G). /3 width=6 by rex_liftable_dedropable_sn, cpx_lifts_sn/ qed-. (* Inversion lemmas with generic slicing for local environments *************) -lemma rpx_inv_lifts_sn (h) (G): f_dropable_sn (cpx h G). +lemma rpx_inv_lifts_sn (G): f_dropable_sn (cpx G). /2 width=5 by rex_dropable_sn/ qed-. -lemma rpx_inv_lifts_dx (h) (G): f_dropable_dx (cpx h G). +lemma rpx_inv_lifts_dx (G): f_dropable_dx (cpx G). /2 width=5 by rex_dropable_dx/ qed-. -lemma rpx_inv_lifts_bi (h) (G): - ∀L1,L2,U. ❪G,L1❫ ⊢ ⬈[h,U] L2 → ∀b,f. 𝐔❪f❫ → - ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → - ∀T. ⇧*[f]T ≘ U → ❪G,K1❫ ⊢ ⬈[h,T] K2. +lemma rpx_inv_lifts_bi (G): + ∀L1,L2,U. ❪G,L1❫ ⊢ ⬈[U] L2 → ∀b,f. 𝐔❪f❫ → + ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → + ∀T. ⇧*[f]T ≘ U → ❪G,K1❫ ⊢ ⬈[T] K2. /2 width=10 by rex_inv_lifts_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma index 29e81b1dd..e98884c8b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma @@ -15,25 +15,28 @@ include "static_2/static/rex_fqup.ma". include "basic_2/rt_transition/rpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) +(* EXTENDED PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS **********) (* Advanced properties ******************************************************) -lemma rpx_refl: ∀h,G,T. reflexive … (rpx h G T). +lemma rpx_refl (G): + ∀T. reflexive … (rpx G T). /2 width=1 by rex_refl/ qed. -lemma rpx_pair_refl: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → - ∀I,T. ❪G,L.ⓑ[I]V1❫ ⊢ ⬈[h,T] L.ⓑ[I]V2. +lemma rpx_pair_refl (G): + ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → + ∀I,T. ❪G,L.ⓑ[I]V1❫ ⊢ ⬈[T] L.ⓑ[I]V2. /2 width=1 by rex_pair_refl/ qed. (* Advanced inversion lemmas ************************************************) -lemma rpx_inv_bind_void: ∀h,p,I,G,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → - ∧∧ ❪G,L1❫ ⊢ ⬈[h,V] L2 & ❪G,L1.ⓧ❫ ⊢ ⬈[h,T] L2.ⓧ. +lemma rpx_inv_bind_void (G): + ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → + ∧∧ ❪G,L1❫ ⊢ ⬈[V] L2 & ❪G,L1.ⓧ❫ ⊢ ⬈[T] L2.ⓧ. /2 width=3 by rex_inv_bind_void/ qed-. (* Advanced forward lemmas **************************************************) -lemma rpx_fwd_bind_dx_void: ∀h,p,I,G,L1,L2,V,T. - ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → ❪G,L1.ⓧ❫ ⊢ ⬈[h,T] L2.ⓧ. +lemma rpx_fwd_bind_dx_void (G): + ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → ❪G,L1.ⓧ❫ ⊢ ⬈[T] L2.ⓧ. /2 width=4 by rex_fwd_bind_dx_void/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma index 3bce5e5cc..d4769c838 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma @@ -24,13 +24,14 @@ include "basic_2/rt_transition/rpx_fqup.ma". (* Note: "❪L2, T1❫ ⊆ ❪L2, T0❫" does not hold *) (* Note: Take L0 = K0.ⓓ(ⓝW.V), L2 = K0.ⓓW, T0 = #0, T1 = ⇧[1]V *) -(* Note: This invalidates rpxs_cpx_conf: "∀h, G. s_r_confluent1 … (cpx h G) (rpxs h G)" *) -lemma rpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → - ∀L2. ❪G,L0❫ ⊢⬈[h,T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. -#h #G0 #L0 #T0 @(fqup_wf_ind_eq (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 +(* Note: This invalidates rpxs_cpx_conf: "∀G. s_r_confluent1 … (cpx G) (rpxs G)" *) +lemma rpx_cpx_conf_fsge (G): + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → + ∀L2. ❪G,L0❫ ⊢⬈[T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. +#G0 #L0 #T0 @(fqup_wf_ind_eq (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G #L #T #IH #G0 #L0 * * -[ #s #HG #HL #HT #X #HX #Y #HY destruct -IH - elim (cpx_inv_sort1 … HX) -HX #H destruct +[ #s0 #HG #HL #HT #X #HX #Y #HY destruct -IH + elim (cpx_inv_sort1 … HX) -HX #s1 #H destruct lapply (rpx_fwd_length … HY) -HY #H0 /2 width=1 by fsle_sort_bi/ | * [| #i ] #HG #HL #HT #X #HX #Y #HY destruct @@ -113,26 +114,27 @@ lemma rpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → ] qed-. -lemma rpx_fsge_comp (h) (G): rex_fsge_compatible (cpx h G). +lemma rpx_fsge_comp (G): rex_fsge_compatible (cpx G). /2 width=4 by rpx_cpx_conf_fsge/ qed-. (**) (* this section concerns cpx *) (* Properties with generic extension on referred entries ********************) (* Basic_2A1: uses: cpx_frees_trans *) -lemma cpx_fsge_comp (h) (G): R_fsge_compatible (cpx h G). +lemma cpx_fsge_comp (G): R_fsge_compatible (cpx G). /2 width=4 by rpx_cpx_conf_fsge/ qed-. (* Note: lemma 1000 *) (* Basic_2A1: uses: cpx_llpx_sn_conf *) -lemma cpx_rex_conf (R) (h) (G): s_r_confluent1 … (cpx h G) (rex R). +lemma cpx_rex_conf (R) (G): s_r_confluent1 … (cpx G) (rex R). /3 width=3 by fsge_rex_trans, cpx_fsge_comp/ qed-. (* Advanced properties ******************************************************) -lemma rpx_cpx_conf (h) (G): s_r_confluent1 … (cpx h G) (rpx h G). +lemma rpx_cpx_conf (G): s_r_confluent1 … (cpx G) (rpx G). /2 width=5 by cpx_rex_conf/ qed-. -lemma rpx_cpx_conf_fsge_dx (h) (G): ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → - ∀L2. ❪G,L0❫ ⊢⬈[h,T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T1❫. +lemma rpx_cpx_conf_fsge_dx (G): + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → + ∀L2. ❪G,L0❫ ⊢⬈[T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T1❫. /3 width=5 by rpx_cpx_conf, rpx_fsge_comp/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma index 7f3bdc40d..58034f157 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma @@ -15,19 +15,19 @@ include "static_2/static/rex_length.ma". include "basic_2/rt_transition/rpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) +(* EXTENDED PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS **********) (* Forward lemmas with length for local environments ************************) -lemma rpx_fwd_length: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → |L1| = |L2|. +lemma rpx_fwd_length (G): + ∀L1,L2,T. ❪G,L1❫ ⊢ ⬈[T] L2 → |L1| = |L2|. /2 width=3 by rex_fwd_length/ qed-. (* Inversion lemmas with length for local environments **********************) -lemma rpx_inv_zero_length: ∀h,G,Y1,Y2. ❪G,Y1❫ ⊢ ⬈[h,#0] Y2 → - ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I,L1,L2,V1,V2. ❪G,L1❫ ⊢ ⬈[h,V1] L2 & - ❪G,L1❫ ⊢ V1 ⬈[h] V2 & - Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 - | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. +lemma rpx_inv_zero_length (G): + ∀Y1,Y2. ❪G,Y1❫ ⊢ ⬈[#0] Y2 → + ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ + | ∃∃I,L1,L2,V1,V2. ❪G,L1❫ ⊢ ⬈[V1] L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 + | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. /2 width=1 by rex_inv_zero_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma index 7c8a4ae99..cede8bf52 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma @@ -16,20 +16,23 @@ include "static_2/static/rex_lex.ma". include "basic_2/rt_transition/rpx_fsle.ma". include "basic_2/rt_transition/lpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) +(* EXTENDED PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS **********) (* Properties with syntactic equivalence for referred local environments ****) -lemma fleq_rpx (h) (G): ∀L1,L2,T. L1 ≡[T] L2 → ❪G,L1❫ ⊢ ⬈[h,T] L2. +lemma fleq_rpx (G): + ∀L1,L2,T. L1 ≡[T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. /2 width=1 by req_fwd_rex/ qed. -(* Properties with unbound parallel rt-transition for full local envs *******) +(* Properties with extended rt-transition for full local envs ***************) -lemma lpx_rpx: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h] L2 → ❪G,L1❫ ⊢ ⬈[h,T] L2. +lemma lpx_rpx (G): + ∀L1,L2,T. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L1❫ ⊢ ⬈[T] L2. /2 width=1 by rex_lex/ qed. -(* Inversion lemmas with unbound parallel rt-transition for full local envs *) +(* Inversion lemmas with extended rt-transition for full local envs *********) -lemma rpx_inv_lpx_req: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → - ∃∃L. ❪G,L1❫ ⊢ ⬈[h] L & L ≡[T] L2. +lemma rpx_inv_lpx_req (G): + ∀L1,L2,T. ❪G,L1❫ ⊢ ⬈[T] L2 → + ∃∃L. ❪G,L1❫ ⊢ ⬈ L & L ≡[T] L2. /3 width=3 by rpx_fsge_comp, rex_inv_lex_req/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma index 725ddde9a..19fc79235 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma @@ -17,37 +17,41 @@ include "static_2/static/reqx_fqup.ma". include "static_2/static/reqx_reqx.ma". include "basic_2/rt_transition/rpx_fsle.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) +(* EXTENDED PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS **********) (* Properties with sort-irrelevant equivalence for local environments *******) -lemma rpx_pair_sn_split: ∀h,G,L1,L2,V. ❪G,L1❫ ⊢ ⬈[h,V] L2 → ∀I,T. - ∃∃L. ❪G,L1❫ ⊢ ⬈[h,②[I]V.T] L & L ≛[V] L2. +lemma rpx_pair_sn_split (G): + ∀L1,L2,V. ❪G,L1❫ ⊢ ⬈[V] L2 → ∀I,T. + ∃∃L. ❪G,L1❫ ⊢ ⬈[②[I]V.T] L & L ≛[V] L2. /3 width=5 by rpx_fsge_comp, rex_pair_sn_split/ qed-. -lemma rpx_flat_dx_split: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → ∀I,V. - ∃∃L. ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L & L ≛[T] L2. +lemma rpx_flat_dx_split (G): + ∀L1,L2,T. ❪G,L1❫ ⊢ ⬈[T] L2 → ∀I,V. + ∃∃L. ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L & L ≛[T] L2. /3 width=5 by rpx_fsge_comp, rex_flat_dx_split/ qed-. -lemma rpx_bind_dx_split: ∀h,I,G,L1,L2,V1,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,T] L2 → ∀p. - ∃∃L,V. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V1.T] L & L.ⓑ[I]V ≛[T] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V. +lemma rpx_bind_dx_split (G): + ∀I,L1,L2,V1,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[T] L2 → ∀p. + ∃∃L,V. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V1.T] L & L.ⓑ[I]V ≛[T] L2 & ❪G,L1❫ ⊢ V1 ⬈ V. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split/ qed-. -lemma rpx_bind_dx_split_void: ∀h,G,K1,L2,T. ❪G,K1.ⓧ❫ ⊢ ⬈[h,T] L2 → ∀p,I,V. - ∃∃K2. ❪G,K1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[T] L2. +lemma rpx_bind_dx_split_void (G): + ∀K1,L2,T. ❪G,K1.ⓧ❫ ⊢ ⬈[T] L2 → ∀p,I,V. + ∃∃K2. ❪G,K1❫ ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[T] L2. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void/ qed-. -lemma rpx_teqx_conf: ∀h,G. s_r_confluent1 … cdeq (rpx h G). +lemma rpx_teqx_conf (G): s_r_confluent1 … cdeq (rpx G). /2 width=5 by teqx_rex_conf/ qed-. -lemma rpx_teqx_div: ∀h,T1,T2. T1 ≛ T2 → - ∀G,L1,L2. ❪G,L1❫ ⊢ ⬈[h,T2] L2 → ❪G,L1❫ ⊢ ⬈[h,T1] L2. +lemma rpx_teqx_div (G): + ∀T1,T2. T1 ≛ T2 → ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T2] L2 → ❪G,L1❫ ⊢ ⬈[T1] L2. /2 width=5 by teqx_rex_div/ qed-. -lemma cpx_teqx_conf_rex: ∀h,G. R_confluent2_rex … (cpx h G) cdeq (cpx h G) cdeq. -#h #G #L0 #T0 #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1 /2 width=3 by ex2_intro/ -[ #G #L0 #s0 #X0 #H0 #L1 #HL01 #L2 #HL02 - elim (teqx_inv_sort1 … H0) -H0 #s1 #H destruct +lemma cpx_teqx_conf_rex (G): R_confluent2_rex … (cpx G) cdeq (cpx G) cdeq. +#G #L0 #T0 #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1 /2 width=3 by ex2_intro/ +[ #G #L0 #s0 #s1 #X0 #H0 #L1 #HL01 #L2 #HL02 + elim (teqx_inv_sort1 … H0) -H0 #s2 #H destruct /3 width=3 by teqx_sort, ex2_intro/ | #I #G #K0 #V0 #V1 #W1 #_ #IH #HVW1 #T2 #H0 #L1 #H1 #L2 #H2 >(teqx_inv_lref1 … H0) -H0 @@ -125,46 +129,46 @@ lemma cpx_teqx_conf_rex: ∀h,G. R_confluent2_rex … (cpx h G) cdeq (cpx h G) c ] qed-. -lemma cpx_teqx_conf: ∀h,G,L. ∀T0:term. ∀T1. ❪G,L❫ ⊢ T0 ⬈[h] T1 → - ∀T2. T0 ≛ T2 → - ∃∃T. T1 ≛ T & ❪G,L❫ ⊢ T2 ⬈[h] T. -#h #G #L #T0 #T1 #HT01 #T2 #HT02 +lemma cpx_teqx_conf (G) (L): + ∀T0:term. ∀T1. ❪G,L❫ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛ T2 → + ∃∃T. T1 ≛ T & ❪G,L❫ ⊢ T2 ⬈ T. +#G #L #T0 #T1 #HT01 #T2 #HT02 elim (cpx_teqx_conf_rex … HT01 … HT02 L … L) -HT01 -HT02 /2 width=3 by rex_refl, ex2_intro/ qed-. -lemma teqx_cpx_trans: ∀h,G,L,T2. ∀T0:term. T2 ≛ T0 → - ∀T1. ❪G,L❫ ⊢ T0 ⬈[h] T1 → - ∃∃T. ❪G,L❫ ⊢ T2 ⬈[h] T & T ≛ T1. -#h #G #L #T2 #T0 #HT20 #T1 #HT01 +lemma teqx_cpx_trans (G) (L): + ∀T2. ∀T0:term. T2 ≛ T0 → ∀T1. ❪G,L❫ ⊢ T0 ⬈ T1 → + ∃∃T. ❪G,L❫ ⊢ T2 ⬈ T & T ≛ T1. +#G #L #T2 #T0 #HT20 #T1 #HT01 elim (cpx_teqx_conf … HT01 T2) -HT01 /3 width=3 by teqx_sym, ex2_intro/ qed-. (* Basic_2A1: uses: cpx_lleq_conf *) -lemma cpx_reqx_conf: ∀h,G,L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → - ∀L2. L0 ≛[T0] L2 → - ∃∃T. ❪G,L2❫ ⊢ T0 ⬈[h] T & T1 ≛ T. -#h #G #L0 #T0 #T1 #HT01 #L2 #HL02 +lemma cpx_reqx_conf (G): + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → ∀L2. L0 ≛[T0] L2 → + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈ T & T1 ≛ T. +#G #L0 #T0 #T1 #HT01 #L2 #HL02 elim (cpx_teqx_conf_rex … HT01 T0 … L0 … HL02) -HT01 -HL02 /2 width=3 by rex_refl, ex2_intro/ qed-. (* Basic_2A1: uses: lleq_cpx_trans *) -lemma reqx_cpx_trans: ∀h,G,L2,L0,T0. L2 ≛[T0] L0 → - ∀T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → - ∃∃T. ❪G,L2❫ ⊢ T0 ⬈[h] T & T ≛ T1. -#h #G #L2 #L0 #T0 #HL20 #T1 #HT01 +lemma reqx_cpx_trans (G): + ∀L2,L0,T0. L2 ≛[T0] L0 → ∀T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈ T & T ≛ T1. +#G #L2 #L0 #T0 #HL20 #T1 #HT01 elim (cpx_reqx_conf … HT01 L2) -HT01 /3 width=3 by reqx_sym, teqx_sym, ex2_intro/ qed-. -lemma rpx_reqx_conf: ∀h,G,T. confluent2 … (rpx h G T) (reqx T). +lemma rpx_reqx_conf (G) (T): confluent2 … (rpx G T) (reqx T). /3 width=6 by rpx_fsge_comp, reqx_fsge_comp, cpx_teqx_conf_rex, rex_conf/ qed-. -lemma reqx_rpx_trans: ∀h,G,T,L2,K2. ❪G,L2❫ ⊢ ⬈[h,T] K2 → - ∀L1. L1 ≛[T] L2 → - ∃∃K1. ❪G,L1❫ ⊢ ⬈[h,T] K1 & K1 ≛[T] K2. -#h #G #T #L2 #K2 #HLK2 #L1 #HL12 +lemma reqx_rpx_trans (G) (T): + ∀L2,K2. ❪G,L2❫ ⊢ ⬈[T] K2 → ∀L1. L1 ≛[T] L2 → + ∃∃K1. ❪G,L1❫ ⊢ ⬈[T] K1 & K1 ≛[T] K2. +#G #T #L2 #K2 #HLK2 #L1 #HL12 elim (rpx_reqx_conf … HLK2 L1) /3 width=3 by reqx_sym, ex2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma index 85261b95a..ea6d4cf94 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma @@ -15,20 +15,23 @@ include "static_2/static/rex_rex.ma". include "basic_2/rt_transition/rpx.ma". -(* UNBOUND PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS ***********) +(* EXTENDED PARALLEL RT-TRANSITION FOR REFERRED LOCAL ENVIRONMENTS **********) (* Main properties **********************************************************) -theorem rpx_bind: ∀h,G,L1,L2,V1. ❪G,L1❫ ⊢ ⬈[h,V1] L2 → - ∀I,V2,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,T] L2.ⓑ[I]V2 → - ∀p. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V1.T] L2. +theorem rpx_bind (G): + ∀L1,L2,V1. ❪G,L1❫ ⊢ ⬈[V1] L2 → + ∀I,V2,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[T] L2.ⓑ[I]V2 → + ∀p. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V1.T] L2. /2 width=2 by rex_bind/ qed. -theorem rpx_flat: ∀h,G,L1,L2,V. ❪G,L1❫ ⊢ ⬈[h,V] L2 → - ∀I,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L2. +theorem rpx_flat (G): + ∀L1,L2,V. ❪G,L1❫ ⊢ ⬈[V] L2 → + ∀I,T. ❪G,L1❫ ⊢ ⬈[T] L2 → ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L2. /2 width=1 by rex_flat/ qed. -theorem rpx_bind_void: ∀h,G,L1,L2,V. ❪G,L1❫ ⊢ ⬈[h,V] L2 → - ∀T. ❪G,L1.ⓧ❫ ⊢ ⬈[h,T] L2.ⓧ → - ∀p,I. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2. +theorem rpx_bind_void (G): + ∀L1,L2,V. ❪G,L1❫ ⊢ ⬈[V] L2 → + ∀T. ❪G,L1.ⓧ❫ ⊢ ⬈[T] L2.ⓧ → + ∀p,I. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2. /2 width=1 by rex_bind_void/ 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 76f5373de..fcabdb760 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 @@ -26,6 +26,10 @@ + + Sort hierarchy parameter removed from unbound rt-transition + (anniversary milestone). + λδ-2B is repackaged without λδ-ground_2. 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 385fa7433..28eae7ce9 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 @@ -78,20 +78,20 @@ table { [ [ "for terms" ] "cpms" + "( ❪?,?❫ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqx" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ] } ] - [ { "unbound context-sensitive parallel rst-computation" * } { - [ [ "strongly normalizing for closures" ] "fsb" + "( ≥𝐒[?] ❪?,?,?❫ )" "fsb_feqx" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] - [ [ "proper for closures" ] "fpbg" + "( ❪?,?,?❫ >[?] ❪?,?,?❫ )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] - [ [ "for closures" ] "fpbs" + "( ❪?,?,?❫ ≥[?] ❪?,?,?❫ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] + [ { "extended context-sensitive parallel rst-computation" * } { + [ [ "strongly normalizing for closures" ] "fsb" + "( ≥𝐒 ❪?,?,?❫ )" "fsb_feqx" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] + [ [ "proper for closures" ] "fpbg" + "( ❪?,?,?❫ > ❪?,?,?❫ )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] + [ [ "for closures" ] "fpbs" + "( ❪?,?,?❫ ≥ ❪?,?,?❫ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] } ] - [ { "unbound context-sensitive parallel rt-computation" * } { - [ [ "compatibility for lenvs" ] "jsx" + "( ? ⊢ ? ⊒[?] ? )" "jsx_drops" + "jsx_lsubr" + "jsx_csx" + "jsx_rsx" + "jsx_jsx" * ] - [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*𝐒[?,?] ? )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ] - [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ❪?,?❫ ⊢ ⬈*𝐒[?] ? )" "csx_cnx_vector" + "csx_csx_vector" * ] - [ [ "strongly normalizing for terms" ] "csx" + "( ❪?,?❫ ⊢ ⬈*𝐒[?] ? )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqx" + "csx_feqx" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] - [ [ "for lenvs on all entries" ] "lpxs" + "( ❪?,?❫ ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqx" + "lpxs_feqx" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] - [ [ "for binders" ] "cpxs_ext" + "( ❪?,?❫ ⊢ ? ⬈*[?] ? )" * ] - [ [ "for terms" ] "cpxs" + "( ❪?,?❫ ⊢ ? ⬈*[?] ? )" "cpxs_teqx" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqx" + "cpxs_feqx" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] + [ { "extended context-sensitive parallel rt-computation" * } { + [ [ "compatibility for lenvs" ] "jsx" + "( ? ⊢ ? ⊒ ? )" "jsx_drops" + "jsx_lsubr" + "jsx_csx" + "jsx_rsx" + "jsx_jsx" * ] + [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*𝐒[?] ? )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ] + [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ❪?,?❫ ⊢ ⬈*𝐒 ? )" "csx_cnx_vector" + "csx_csx_vector" * ] + [ [ "strongly normalizing for terms" ] "csx" + "( ❪?,?❫ ⊢ ⬈*𝐒 ? )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqx" + "csx_feqx" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] + [ [ "for lenvs on all entries" ] "lpxs" + "( ❪?,?❫ ⊢ ⬈* ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqx" + "lpxs_feqx" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] + [ [ "for binders" ] "cpxs_ext" + "( ❪?,?❫ ⊢ ? ⬈* ? )" * ] + [ [ "for terms" ] "cpxs" + "( ❪?,?❫ ⊢ ? ⬈* ? )" "cpxs_teqx" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqx" + "cpxs_feqx" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] } ] } @@ -113,17 +113,17 @@ table { [ [ "for terms" ] "cpm" + "( ❪?,?❫ ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" * ] } ] - [ { "unbound parallel rst-transition" * } { - [ [ "for closures" ] "fpbq" + "( ❪?,?,?❫ ≽[?] ❪?,?,?❫ )" "fpbq_aaa" + "fpbq_fpb" * ] - [ [ "proper for closures" ] "fpb" + "( ❪?,?,?❫ ≻[?] ❪?,?,?❫ )" "fpb_reqx" + "fpb_feqx" * ] + [ { "extended parallel rst-transition" * } { + [ [ "for closures" ] "fpbq" + "( ❪?,?,?❫ ≽ ❪?,?,?❫ )" "fpbq_aaa" + "fpbq_fpb" * ] + [ [ "proper for closures" ] "fpb" + "( ❪?,?,?❫ ≻ ❪?,?,?❫ )" "fpb_reqx" + "fpb_feqx" * ] } ] - [ { "unbound context-sensitive parallel rt-transition" * } { - [ [ "normal form for terms" ] "cnx" + "( ❪?,?❫ ⊢ ⬈𝐍[?] ? )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] - [ [ "for lenvs on referred entries" ] "rpx" + "( ❪?,?❫ ⊢ ⬈[?,?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ] - [ [ "for lenvs on all entries" ] "lpx" + "( ❪?,?❫ ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqx" + "lpx_aaa" * ] - [ [ "for binders" ] "cpx_ext" + "( ❪?,?❫ ⊢ ? ⬈[?] ? )" * ] - [ [ "for terms" ] "cpx" + "( ❪?,?❫ ⊢ ? ⬈[?] ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqx" + "cpx_feqx" * ] + [ { "extended context-sensitive parallel rt-transition" * } { + [ [ "normal form for terms" ] "cnx" + "( ❪?,?❫ ⊢ ⬈𝐍 ? )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] + [ [ "for lenvs on referred entries" ] "rpx" + "( ❪?,?❫ ⊢ ⬈[?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ] + [ [ "for lenvs on all entries" ] "lpx" + "( ❪?,?❫ ⊢ ⬈ ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqx" + "lpx_aaa" * ] + [ [ "for binders" ] "cpx_ext" + "( ❪?,?❫ ⊢ ? ⬈ ? )" * ] + [ [ "for terms" ] "cpx" + "( ❪?,?❫ ⊢ ? ⬈ ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqx" + "cpx_feqx" * ] } ] [ { "bound context-sensitive parallel rt-transition" * } { diff --git a/matita/matita/contribs/lambdadelta/ground/lib/arith.ma b/matita/matita/contribs/lambdadelta/ground/lib/arith.ma index e11ea724d..6cbf86985 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/arith.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/arith.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basics/core_notation/exp_2.ma". include "arithmetics/nat.ma". include "ground/xoa/ex_3_1.ma". include "ground/xoa/or_3.ma". diff --git a/matita/matita/contribs/lambdadelta/ground/lib/relations.ma b/matita/matita/contribs/lambdadelta/ground/lib/relations.ma index 98e14be38..3d67a576c 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/relations.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/relations.ma @@ -72,6 +72,9 @@ definition transitive2 (A) (R1,R2:relation A): Prop ≝ ∀a1,a0. R1 a1 a0 → ∀a2. R2 a0 a2 → ∃∃a. R2 a1 a & R1 a a2. +definition confluent1 (A) (B): relation2 (relation2 A B) (relation A) ≝ + λR1,R2. ∀a1,b. R1 a1 b → ∀a2. R2 a1 a2 → R1 a2 b. + definition bi_confluent (A) (B) (R: bi_relation A B): Prop ≝ ∀a0,a1,b0,b1. R a0 b0 a1 b1 → ∀a2,b2. R a0 b0 a2 b2 → ∃∃a,b. R a1 b1 a b & R a2 b2 a b. diff --git a/matita/matita/contribs/lambdadelta/ground/steps/rtc.ma b/matita/matita/contribs/lambdadelta/ground/steps/rtc.ma index 56ced165b..8a81ab6f7 100644 --- a/matita/matita/contribs/lambdadelta/ground/steps/rtc.ma +++ b/matita/matita/contribs/lambdadelta/ground/steps/rtc.ma @@ -40,28 +40,30 @@ interpretation "one r-step (rtc)" interpretation "one t-step (rtc)" 'ZeroOne = (mk_rtc O O O (S O)). -definition eq_f: relation rtc ≝ λc1,c2. ⊤. +definition rtc_eq_f: relation rtc ≝ λc1,c2. ⊤. -inductive eq_t: relation rtc ≝ +inductive rtc_eq_t: relation rtc ≝ | eq_t_intro: ∀ri1,ri2,rs1,rs2,ti,ts. - eq_t (〈ri1,rs1,ti,ts〉) (〈ri2,rs2,ti,ts〉) + rtc_eq_t (〈ri1,rs1,ti,ts〉) (〈ri2,rs2,ti,ts〉) . (* Basic properties *********************************************************) -lemma eq_t_refl: reflexive … eq_t. +lemma rtc_eq_t_refl: reflexive … rtc_eq_t. * // qed. (* Basic inversion lemmas ***************************************************) -fact eq_t_inv_dx_aux: ∀x,y. eq_t x y → - ∀ri1,rs1,ti,ts. x = 〈ri1,rs1,ti,ts〉 → - ∃∃ri2,rs2. y = 〈ri2,rs2,ti,ts〉. +fact rtc_eq_t_inv_dx_aux: + ∀x,y. rtc_eq_t x y → + ∀ri1,rs1,ti,ts. x = 〈ri1,rs1,ti,ts〉 → + ∃∃ri2,rs2. y = 〈ri2,rs2,ti,ts〉. #x #y * -x -y #ri1 #ri #rs1 #rs #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H destruct -ri2 -rs2 /2 width=3 by ex1_2_intro/ qed-. -lemma eq_t_inv_dx: ∀ri1,rs1,ti,ts,y. eq_t (〈ri1,rs1,ti,ts〉) y → - ∃∃ri2,rs2. y = 〈ri2,rs2,ti,ts〉. -/2 width=5 by eq_t_inv_dx_aux/ qed-. +lemma rtc_eq_t_inv_dx: + ∀ri1,rs1,ti,ts,y. rtc_eq_t (〈ri1,rs1,ti,ts〉) y → + ∃∃ri2,rs2. y = 〈ri2,rs2,ti,ts〉. +/2 width=5 by rtc_eq_t_inv_dx_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt.ma b/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt.ma index 17bba1496..7f9f2f74a 100644 --- a/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt.ma +++ b/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt.ma @@ -34,9 +34,9 @@ lemma isrt_10: 𝐑𝐓❪0,𝟙𝟘❫. lemma isrt_01: 𝐑𝐓❪1,𝟘𝟙❫. /2 width=3 by ex1_2_intro/ qed. -lemma isrt_eq_t_trans: ∀n,c1,c2. 𝐑𝐓❪n,c1❫ → eq_t c1 c2 → 𝐑𝐓❪n,c2❫. +lemma isrt_eq_t_trans: ∀n,c1,c2. 𝐑𝐓❪n,c1❫ → rtc_eq_t c1 c2 → 𝐑𝐓❪n,c2❫. #n #c1 #c2 * #ri1 #rs1 #H destruct -#H elim (eq_t_inv_dx … H) -H /2 width=3 by ex1_2_intro/ +#H elim (rtc_eq_t_inv_dx … H) -H /2 width=3 by ex1_2_intro/ qed-. (* Basic inversion properties ***********************************************) @@ -59,6 +59,6 @@ theorem isrt_inj: ∀n1,n2,c. 𝐑𝐓❪n1,c❫ → 𝐑𝐓❪n2,c❫ → n1 = #n1 #n2 #c * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct // qed-. -theorem isrt_mono: ∀n,c1,c2. 𝐑𝐓❪n,c1❫ → 𝐑𝐓❪n,c2❫ → eq_t c1 c2. +theorem isrt_mono: ∀n,c1,c2. 𝐑𝐓❪n,c1❫ → 𝐑𝐓❪n,c2❫ → rtc_eq_t c1 c2. #n #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt_max.ma b/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt_max.ma index 27b5d84f3..ed314bb22 100644 --- a/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt_max.ma +++ b/matita/matita/contribs/lambdadelta/ground/steps/rtc_isrt_max.ma @@ -58,7 +58,7 @@ elim (isrt_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (isrt_inj … Hn2 H2) -c2 #H destruct // qed-. -lemma isrt_inv_max_eq_t: ∀n,c1,c2. 𝐑𝐓❪n,c1 ∨ c2❫ → eq_t c1 c2 → +lemma isrt_inv_max_eq_t: ∀n,c1,c2. 𝐑𝐓❪n,c1 ∨ c2❫ → rtc_eq_t c1 c2 → ∧∧ 𝐑𝐓❪n,c1❫ & 𝐑𝐓❪n,c2❫. #n #c1 #c2 #H #Hc12 elim (isrt_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_lex.ma b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_lex.ma index 46d28f330..a5a1a42dc 100644 --- a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_lex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_lex.ma @@ -21,26 +21,24 @@ include "static_2/i_static/rexs_fqup.ma". (* Properties with generic extension of a context sensitive relation ********) -lemma rexs_lex: ∀R. c_reflexive … R → - ∀L1,L2,T. L1 ⪤[CTC … R] L2 → L1 ⪤*[R,T] L2. +lemma rexs_lex (R): c_reflexive … R → + ∀L1,L2,T. L1 ⪤[CTC … R] L2 → L1 ⪤*[R,T] L2. #R #HR #L1 #L2 #T * /5 width=7 by rexs_tc, sex_inv_tc_dx, sex_co, ext2_inv_tc, ext2_refl/ qed. -lemma rexs_lex_req: ∀R. c_reflexive … R → - ∀L1,L. L1 ⪤[CTC … R] L → ∀L2,T. L ≡[T] L2 → - L1 ⪤*[R,T] L2. +lemma rexs_lex_req (R): c_reflexive … R → + ∀L1,L. L1 ⪤[CTC … R] L → ∀L2,T. L ≡[T] L2 → L1 ⪤*[R,T] L2. /3 width=3 by rexs_lex, rexs_step_dx, req_fwd_rex/ qed. (* Inversion lemmas with generic extension of a context sensitive relation **) (* Note: s_rs_transitive_lex_inv_isid could be invoked in the last auto but makes it too slow *) -lemma rexs_inv_lex_req: ∀R. c_reflexive … R → - rex_fsge_compatible R → - s_rs_transitive … R (λ_.lex R) → - req_transitive R → - ∀L1,L2,T. L1 ⪤*[R,T] L2 → - ∃∃L. L1 ⪤[CTC … R] L & L ≡[T] L2. +lemma rexs_inv_lex_req (R): + c_reflexive … R → rex_fsge_compatible R → + s_rs_transitive … R (λ_.lex R) → req_transitive R → + ∀L1,L2,T. L1 ⪤*[R,T] L2 → + ∃∃L. L1 ⪤[CTC … R] L & L ≡[T] L2. #R #H1R #H2R #H3R #H4R #L1 #L2 #T #H lapply (s_rs_transitive_lex_inv_isid … H3R) -H3R #H3R @(rexs_ind_sn … H1R … H) -H -L2 @@ -50,7 +48,7 @@ lapply (s_rs_transitive_lex_inv_isid … H3R) -H3R #H3R elim (sex_sdj_split … ceq_ext … HL2 f0 ?) -HL2 [ #L0 #HL0 #HL02 |*: /2 width=1 by ext2_refl, sdj_isid_dx/ ] lapply (sex_sdj … HL0 f1 ?) /2 width=1 by sdj_isid_sn/ #H - elim (frees_sex_conf … Hf1 … H) // -H2R -H #f2 #Hf2 #Hf21 + elim (frees_sex_conf_fsge … Hf1 … H) // -H2R -H #f2 #Hf2 #Hf21 lapply (sle_sex_trans … HL02 … Hf21) -f1 // #HL02 lapply (sex_co ?? cfull (CTC … (cext2 R)) … HL1) -HL1 /2 width=1 by ext2_inv_tc/ #HL1 /8 width=11 by sex_inv_tc_dx, sex_tc_dx, sex_co, ext2_tc, ext2_refl, step, ex2_intro/ (**) (* full auto too slow *) diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma index 49010d330..3fba7476a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma @@ -32,6 +32,14 @@ inductive sex (RN,RP:relation3 lenv bind bind): rtmap → relation lenv ≝ interpretation "generic entrywise extension (local environment)" 'Relation RN RP f L1 L2 = (sex RN RP f L1 L2). +definition sex_transitive: relation3 lenv bind bind → relation3 lenv bind bind → + relation3 lenv bind bind → + relation3 lenv bind bind → relation3 lenv bind bind → + relation3 rtmap lenv bind ≝ + λR1,R2,R3,RN,RP,f,L1,I1. + ∀I. R1 L1 I1 I → ∀L2. L1 ⪤[RN,RP,f] L2 → + ∀I2. R2 L2 I I2 → R3 L1 I1 I2. + definition R_pw_confluent2_sex: relation3 lenv bind bind → relation3 lenv bind bind → relation3 lenv bind bind → relation3 lenv bind bind → relation3 lenv bind bind → relation3 lenv bind bind → @@ -41,13 +49,14 @@ definition R_pw_confluent2_sex: relation3 lenv bind bind → relation3 lenv bind ∀L1. L0 ⪤[RN1,RP1,f] L1 → ∀L2. L0 ⪤[RN2,RP2,f] L2 → ∃∃I. R2 L1 I1 I & R1 L2 I2 I. -definition sex_transitive: relation3 lenv bind bind → relation3 lenv bind bind → - relation3 lenv bind bind → - relation3 lenv bind bind → relation3 lenv bind bind → - relation3 rtmap lenv bind ≝ - λR1,R2,R3,RN,RP,f,L1,I1. - ∀I. R1 L1 I1 I → ∀L2. L1 ⪤[RN,RP,f] L2 → - ∀I2. R2 L2 I I2 → R3 L1 I1 I2. +definition R_pw_replace3_sex: relation3 lenv bind bind → relation3 lenv bind bind → + relation3 lenv bind bind → relation3 lenv bind bind → + relation3 lenv bind bind → relation3 lenv bind bind → + relation3 rtmap lenv bind ≝ + λR1,R2,RN1,RP1,RN2,RP2,f,L0,I0. + ∀I1. R1 L0 I0 I1 → ∀I2. R2 L0 I0 I2 → + ∀L1. L0 ⪤[RN1,RP1,f] L1 → ∀L2. L0 ⪤[RN2,RP2,f] L2 → + ∀I. R2 L1 I1 I → R1 L2 I2 I. (* Basic inversion lemmas ***************************************************) diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma index 01e0f16fd..342530903 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma @@ -82,6 +82,30 @@ theorem sex_conf (RN1) (RP1) (RN2) (RP2): ] qed-. +lemma sex_repl (RN) (RP) (SN) (SP) (L1) (f): + (∀g,I,K1,n. ⇩[n] L1 ≘ K1.ⓘ[I] → ↑g = ⫱*[n] f → R_pw_replace3_sex … RN SN RN RP SN SP g K1 I) → + (∀g,I,K1,n. ⇩[n] L1 ≘ K1.ⓘ[I] → ⫯g = ⫱*[n] f → R_pw_replace3_sex … RP SP RN RP SN SP g K1 I) → + ∀L2. L1 ⪤[RN,RP,f] L2 → ∀K1. L1 ⪤[SN,SP,f] K1 → + ∀K2. L2 ⪤[SN,SP,f] K2 → K1 ⪤[RN,RP,f] K2. +#RN #RP #SN #SP #L1 elim L1 -L1 +[ #f #_ #_ #Y #HY #Y1 #HY1 #Y2 #HY2 + lapply (sex_inv_atom1 … HY) -HY #H destruct + lapply (sex_inv_atom1 … HY1) -HY1 #H destruct + lapply (sex_inv_atom1 … HY2) -HY2 #H destruct // +| #L1 #I1 #IH #f elim (pn_split f) * #g #H destruct + #HN #HP #Y #HY #Y1 #HY1 #Y2 #HY2 + [ elim (sex_inv_push1 … HY) -HY #I2 #L2 #HL12 #HI12 #H destruct + elim (sex_inv_push1 … HY1) -HY1 #J1 #K1 #HLK1 #HIJ1 #H destruct + elim (sex_inv_push1 … HY2) -HY2 #J2 #K2 #HLK2 #HIJ2 #H destruct + /5 width=13 by sex_push, drops_refl, drops_drop/ + | elim (sex_inv_next1 … HY) -HY #I2 #L2 #HL12 #HI12 #H destruct + elim (sex_inv_next1 … HY1) -HY1 #J1 #K1 #HLK1 #HIJ1 #H destruct + elim (sex_inv_next1 … HY2) -HY2 #J2 #K2 #HLK2 #HIJ2 #H destruct + /5 width=13 by sex_next, drops_refl, drops_drop/ + ] +] +qed-. + theorem sex_canc_sn: ∀RN,RP,f. Transitive … (sex RN RP f) → symmetric … (sex RN RP f) → left_cancellable … (sex RN RP f). diff --git a/matita/matita/contribs/lambdadelta/static_2/static/fsle_fsle.ma b/matita/matita/contribs/lambdadelta/static_2/static/fsle_fsle.ma index 73de6fcd6..abbee2fdc 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/fsle_fsle.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/fsle_fsle.ma @@ -50,6 +50,27 @@ elim (fsle_frees_trans_eq … H2L … Hf2) // -L2 -T2 /3 width=6 by frees_mono, sle_eq_repl_back1/ qed-. +lemma fsle_frees_conf: + ∀L1,L2,T1,T2. ❪L1,T1❫ ⊆ ❪L2,T2❫ → + ∀f1. L1 ⊢ 𝐅+❪T1❫ ≘ f1 → + ∃∃n1,n2,f2. L2 ⊢ 𝐅+❪T2❫ ≘ f2 & L1 ≋ⓧ*[n1,n2] L2 & ⫱*[n1]f1 ⊆ ⫱*[n2]f2. +#L1 #L2 #T1 #T2 * #n1 #n2 #g1 #g2 #Hg1 #Hg2 #HL #Hn #f1 #Hf1 +lapply (frees_mono … Hg1 … Hf1) -Hg1 -Hf1 #Hgf1 +lapply (tls_eq_repl n1 … Hgf1) -Hgf1 #Hgf1 +lapply (sle_eq_repl_back1 … Hn … Hgf1) -g1 +/2 width=6 by ex3_3_intro/ +qed-. + +lemma fsle_frees_conf_eq: + ∀L1,L2. |L1| = |L2| → + ∀T1,T2. ❪L1,T1❫ ⊆ ❪L2,T2❫ → ∀f1. L1 ⊢ 𝐅+❪T1❫ ≘ f1 → + ∃∃f2. L2 ⊢ 𝐅+❪T2❫ ≘ f2 & f1 ⊆ f2. +#L1 #L2 #H1L #T1 #T2 #H2L #f1 #Hf1 +elim (fsle_frees_conf … H2L … Hf1) -T1 #n1 #n2 #f2 #Hf2 #H2L #Hf12 +elim (lveq_inj_length … H2L) // -L1 #H1 #H2 destruct +/2 width=3 by ex2_intro/ +qed-. + (* Main properties **********************************************************) theorem fsle_trans_sn: diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex.ma index d4c727123..4d10fb256 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex.ma @@ -30,22 +30,31 @@ definition rex (R) (T): relation lenv ≝ interpretation "generic extension on referred entries (local environment)" 'Relation R T L1 L2 = (rex R T L1 L2). -definition R_confluent2_rex: relation4 (relation3 lenv term term) - (relation3 lenv term term) … ≝ - λR1,R2,RP1,RP2. - ∀L0,T0,T1. R1 L0 T0 T1 → ∀T2. R2 L0 T0 T2 → - ∀L1. L0 ⪤[RP1,T0] L1 → ∀L2. L0 ⪤[RP2,T0] L2 → - ∃∃T. R2 L1 T1 T & R1 L2 T2 T. +definition R_confluent2_rex: + relation4 (relation3 lenv term term) + (relation3 lenv term term) … ≝ + λR1,R2,RP1,RP2. + ∀L0,T0,T1. R1 L0 T0 T1 → ∀T2. R2 L0 T0 T2 → + ∀L1. L0 ⪤[RP1,T0] L1 → ∀L2. L0 ⪤[RP2,T0] L2 → + ∃∃T. R2 L1 T1 T & R1 L2 T2 T. + +definition R_replace3_rex: + relation4 (relation3 lenv term term) + (relation3 lenv term term) … ≝ + λR1,R2,RP1,RP2. + ∀L0,T0,T1. R1 L0 T0 T1 → ∀T2. R2 L0 T0 T2 → + ∀L1. L0 ⪤[RP1,T0] L1 → ∀L2. L0 ⪤[RP2,T0] L2 → + ∀T. R2 L1 T1 T → R1 L2 T2 T. definition rex_confluent: relation … ≝ - λR1,R2. - ∀K1,K,V1. K1 ⪤[R1,V1] K → ∀V. R1 K1 V1 V → - ∀K2. K ⪤[R2,V] K2 → K ⪤[R2,V1] K2. + λR1,R2. + ∀K1,K,V1. K1 ⪤[R1,V1] K → ∀V. R1 K1 V1 V → + ∀K2. K ⪤[R2,V] K2 → K ⪤[R2,V1] K2. definition rex_transitive: relation3 ? (relation3 ?? term) … ≝ - λR1,R2,R3. - ∀K1,K,V1. K1 ⪤[R1,V1] K → - ∀V. R1 K1 V1 V → ∀V2. R2 K V V2 → R3 K1 V1 V2. + λR1,R2,R3. + ∀K1,K,V1. K1 ⪤[R1,V1] K → + ∀V. R1 K1 V1 V → ∀V2. R2 K V V2 → R3 K1 V1 V2. (* Basic inversion lemmas ***************************************************) diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma index 641fc459d..ff6588270 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma @@ -20,17 +20,17 @@ include "static_2/static/rex_rex.ma". (* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****) definition R_fsge_compatible: predicate (relation3 …) ≝ λRN. - ∀L,T1,T2. RN L T1 T2 → ❪L,T2❫ ⊆ ❪L,T1❫. + ∀L,T1,T2. RN L T1 T2 → ❪L,T2❫ ⊆ ❪L,T1❫. definition rex_fsge_compatible: predicate (relation3 …) ≝ λRN. - ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L2,T❫ ⊆ ❪L1,T❫. + ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L2,T❫ ⊆ ❪L1,T❫. definition rex_fsle_compatible: predicate (relation3 …) ≝ λRN. - ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L1,T❫ ⊆ ❪L2,T❫. + ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L1,T❫ ⊆ ❪L2,T❫. (* Basic inversions with free variables inclusion for restricted closures ***) -lemma frees_sex_conf (R): +lemma frees_sex_conf_fsge (R): rex_fsge_compatible R → ∀L1,T,f1. L1 ⊢ 𝐅+❪T❫ ≘ f1 → ∀L2. L1 ⪤[cext2 R,cfull,f1] L2 → @@ -40,6 +40,16 @@ lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L @(fsle_frees_trans_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/ qed-. +lemma frees_sex_conf_fsle (R): + rex_fsle_compatible R → + ∀L1,T,f1. L1 ⊢ 𝐅+❪T❫ ≘ f1 → + ∀L2. L1 ⪤[cext2 R,cfull,f1] L2 → + ∃∃f2. L2 ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⊆ f2. +#R #HR #L1 #T #f1 #Hf1 #L2 #H1L +lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L +@(fsle_frees_conf_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/ +qed-. + (* Properties with free variables inclusion for restricted closures *********) (* Note: we just need lveq_inv_refl: ∀L, n1, n2. L ≋ⓧ*[n1, n2] L → ∧∧ 0 = n1 & 0 = n2 *) @@ -57,7 +67,7 @@ lemma rex_sym (R): ∀T. symmetric … (rex R T). #R #H1R #H2R #T #L1 #L2 * #f1 #Hf1 #HL12 -elim (frees_sex_conf … Hf1 … HL12) -Hf1 // +elim (frees_sex_conf_fsge … Hf1 … HL12) -Hf1 // /5 width=5 by sle_sex_trans, sex_sym, cext2_sym, ex2_intro/ qed-. @@ -77,7 +87,7 @@ lapply (sor_eq_repl_back1 … Hy … H1) -y1 #Hy lapply (sor_inv_sle_sn … Hy) -y2 #Hfg elim (sex_sle_split (cext2 R1) (cext2 R2) … HL12 … Hfg) -HL12 /2 width=1 by ext2_refl/ #L #HL1 #HL2 lapply (sle_sex_trans … HL1 … Hfg) // #H -elim (frees_sex_conf … Hf … H) -Hf -H +elim (frees_sex_conf_fsge … Hf … H) -Hf -H /4 width=7 by sle_sex_trans, ex2_intro/ qed-. @@ -94,7 +104,7 @@ lapply (sor_eq_repl_back2 … Hy … H2) -y2 #Hy lapply (sor_inv_sle_dx … Hy) -y1 #Hfg elim (sex_sle_split (cext2 R1) (cext2 R2) … HL12 … Hfg) -HL12 /2 width=1 by ext2_refl/ #L #HL1 #HL2 lapply (sle_sex_trans … HL1 … Hfg) // #H -elim (frees_sex_conf … Hf … H) -Hf -H +elim (frees_sex_conf_fsge … Hf … H) -Hf -H /4 width=7 by sle_sex_trans, ex2_intro/ qed-. @@ -115,7 +125,7 @@ elim (sex_sle_split (cext2 R1) (cext2 R2) … HL12 … Hfg) -HL12 /2 width=1 by lapply (sle_sex_trans … H … Hfg) // #H0 elim (sex_inv_next1 … H) -H #Z #L #HL1 #H elim (ext2_inv_pair_sn … H) -H #V #HV #H1 #H2 destruct -elim (frees_sex_conf … Hf … H0) -Hf -H0 +elim (frees_sex_conf_fsge … Hf … H0) -Hf -H0 /4 width=7 by sle_sex_trans, ex3_2_intro, ex2_intro/ qed-. @@ -136,12 +146,39 @@ elim (sex_sle_split (cext2 R1) (cext2 R2) … HL12 … Hfg) -HL12 /2 width=1 by lapply (sle_sex_trans … H … Hfg) // #H0 elim (sex_inv_next1 … H) -H #Z #L #HL1 #H elim (ext2_inv_unit_sn … H) -H #H destruct -elim (frees_sex_conf … Hf … H0) -Hf -H0 +elim (frees_sex_conf_fsge … Hf … H0) -Hf -H0 /4 width=7 by sle_sex_trans, ex2_intro/ (* note: 2 ex2_intro *) qed-. (* Main properties with free variables inclusion for restricted closures ****) +theorem rex_conf1 (R1) (R2): + rex_fsge_compatible R2 → (c_reflexive … R2) → + R_replace3_rex R1 R2 R1 R2 → + ∀T. confluent1 … (rex R1 T) (rex R2 T). +#R1 #R2 #H1R #H2R #H3R #T #L1 #L * #f1 #Hf1 #HL1 #L2 * #f2 #Hf2 #HL12 +lapply (frees_mono … Hf1 … Hf2) -Hf1 #Hf12 +lapply (sex_eq_repl_back … HL1 … Hf12) -f1 #HL1 +elim (frees_sex_conf_fsge … Hf2 … HL12) // #g2 #Hg2 #Hfg2 +lapply (sex_repl … HL1 … HL12 L ?) // +[ /3 width=1 by sex_refl, ext2_refl/ +| -g2 #g2 * #I1 [| #V1 ] #K1 #n #HLK1 #Hgf2 #Z1 #H1 #Z2 #H2 #Y1 #HY1 #Y2 #HY2 #Z #HZ + [ lapply (ext2_inv_unit_sn … H1) -H1 #H destruct + lapply (ext2_inv_unit_sn … H2) -H2 #H destruct + lapply (ext2_inv_unit_sn … HZ) -HZ #H destruct + /2 width=1 by ext2_unit/ + | elim (ext2_inv_pair_sn … H1) -H1 #W1 #HW1 #H destruct + elim (ext2_inv_pair_sn … H2) -H2 #W2 #HW2 #H destruct + elim (ext2_inv_pair_sn … HZ) -HZ #W #HW #H destruct + elim (frees_inv_drops_next … Hf2 … HLK1 … Hgf2) -Hf2 -HLK1 -Hgf2 #g0 #Hg0 #Hg02 + lapply (sle_sex_trans … HY1 … Hg02) // -HY1 #HY1 + lapply (sle_sex_trans … HY2 … Hg02) // -HY2 #HY2 + /4 width=9 by ext2_pair, ex2_intro/ + ] +| /3 width=5 by sle_sex_trans, ex2_intro/ +] +qed-. + theorem rex_conf (R1) (R2): rex_fsge_compatible R1 → rex_fsge_compatible R2 → R_confluent2_rex R1 R2 R1 R2 → @@ -151,21 +188,21 @@ lapply (frees_mono … Hf1 … Hf) -Hf1 #Hf12 lapply (sex_eq_repl_back … HL01 … Hf12) -f1 #HL01 elim (sex_conf … HL01 … HL02) /2 width=3 by ex2_intro/ [ | -HL01 -HL02 ] [ #L #HL1 #HL2 - elim (frees_sex_conf … Hf … HL01) // -HR1 -HL01 #f1 #Hf1 #H1 - elim (frees_sex_conf … Hf … HL02) // -HR2 -HL02 #f2 #Hf2 #H2 + elim (frees_sex_conf_fsge … Hf … HL01) // -HR1 -HL01 #f1 #Hf1 #H1 + elim (frees_sex_conf_fsge … Hf … HL02) // -HR2 -HL02 #f2 #Hf2 #H2 lapply (sle_sex_trans … HL1 … H1) // -HL1 -H1 #HL1 lapply (sle_sex_trans … HL2 … H2) // -HL2 -H2 #HL2 /3 width=5 by ex2_intro/ -| #g * #I0 [2: #V0 ] #K0 #n #HLK0 #Hgf #Z1 #H1 #Z2 #H2 #K1 #HK01 #K2 #HK02 - [ elim (ext2_inv_pair_sn … H1) -H1 #V1 #HV01 #H destruct +| #g * #I0 [| #V0 ] #K0 #n #HLK0 #Hgf #Z1 #H1 #Z2 #H2 #K1 #HK01 #K2 #HK02 + [ lapply (ext2_inv_unit_sn … H1) -H1 #H destruct + lapply (ext2_inv_unit_sn … H2) -H2 #H destruct + /3 width=3 by ext2_unit, ex2_intro/ + | elim (ext2_inv_pair_sn … H1) -H1 #V1 #HV01 #H destruct elim (ext2_inv_pair_sn … H2) -H2 #V2 #HV02 #H destruct elim (frees_inv_drops_next … Hf … HLK0 … Hgf) -Hf -HLK0 -Hgf #g0 #Hg0 #H0 lapply (sle_sex_trans … HK01 … H0) // -HK01 #HK01 lapply (sle_sex_trans … HK02 … H0) // -HK02 #HK02 elim (HR12 … HV01 … HV02 K1 … K2) /3 width=3 by ext2_pair, ex2_intro/ - | lapply (ext2_inv_unit_sn … H1) -H1 #H destruct - lapply (ext2_inv_unit_sn … H2) -H2 #H destruct - /3 width=3 by ext2_unit, ex2_intro/ ] ] qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_lex.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_lex.ma index dd074c1c4..9329d7f84 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_lex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_lex.ma @@ -37,6 +37,6 @@ lemma rex_inv_lex_req (R): elim (sex_sdj_split … ceq_ext … HL 𝐈𝐝 ?) -HL [ #L0 #HL10 #HL02 |*: /2 width=1 by ext2_refl, sdj_isid_dx/ ] -H1R lapply (sex_sdj … HL10 f1 ?) /2 width=1 by sdj_isid_sn/ #H -elim (frees_sex_conf … Hf1 … H) // -H2R -H #f0 #Hf0 #Hf01 +elim (frees_sex_conf_fsge … Hf1 … H) // -H2R -H #f0 #Hf0 #Hf01 /4 width=7 by sle_sex_trans, (* 2x *) ex2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/sh.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/sh.ma index 815924202..812947375 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/sh.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/sh.ma @@ -24,3 +24,6 @@ record sh: Type[0] ≝ { interpretation "next sort (sort hierarchy)" 'UpSpoon h s = (next h s). + +definition sh_is_next (h): relation nat ≝ + λs1,s2. ⫯[h]s1 = s2.