(* *)
(**************************************************************************)
-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 *****************************************************************)
⇧*[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.
/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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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_O_n <minus_n_O #T #HT2 #HT1 #V #HV1 #HV2
-elim (IH1 … HV1 … HT2 … HL02 … HL01) [|*: /2 width=4 by fqup_cpms_fwd_fpbg/ ]
+elim (IH1 … HV1 … HT2 … HL02 … HL01) [|*: /2 width=5 by fqup_cpms_fwd_fpbg/ ]
-L0 -V0 -T0 -X0 #U #HVU #HTU
lapply (cpms_trans … HV2 … HVU) -V <plus_O_n >minus_plus #H2
lapply (cpms_trans … HT1 … HTU) -T <arith_l2 #H1
qed-.
fact cnv_cpm_conf_lpr_epsilon_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,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 →
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 →
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_O_n <minus_n_O #T #HT2 #HT1 #V #HV1 #HV2
-elim (IH1 … HV1 … HT2 … HL02 … HL01) [|*: /2 width=4 by fqup_cpms_fwd_fpbg/ ]
+elim (IH1 … HV1 … HT2 … HL02 … HL01) [|*: /2 width=5 by fqup_cpms_fwd_fpbg/ ]
-L0 -V0 -T0 -X0 #U #HVU #HTU
lapply (cpms_trans … HV2 … HVU) -V <plus_O_n >minus_plus #H2
lapply (cpms_trans … HT1 … HTU) -T <arith_l2 #H1
qed-.
fact cnv_cpm_conf_lpr_ee_ee_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 →
∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
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
| #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 #_
| #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-.
(* 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 * [| * [| * ]]
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
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
<minus_n_O <minus_O_n #XW1 #HXUW1 #HXW21
elim (cnv_cpms_strip_lpr_sub … IH2 … HTU1 … HT12 … L1 … HL12) [|*: /2 width=2 by fqup_fpbg/ ] -HTU1 -HT12
#XT1 #HXUT1 #HXT21
- elim (IH2 … HXUW1 … HXUT1 … HL12 … HL12) [|*: /2 width=4 by fqup_cpms_fwd_fpbg/ ] -HXUW1 -HXUT1 -HWU1
+ elim (IH2 … HXUW1 … HXUT1 … HL12 … HL12) [|*: /2 width=5 by fqup_cpms_fwd_fpbg/ ] -HXUW1 -HXUT1 -HWU1
>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 <arith_l1 #H2
(* Sub confluence propery with t-bound rt-computation for terms *************)
fact cnv_cpms_conf_lpr_teqx_teqx_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) →
❪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 →
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 →
lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX02 … L0 ?) // #HX2
elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … HX02 … 0 T0 … L0 … HL01) //
<minus_n_O <minus_O_n #Y1 #HXY1 #HTY1
-elim (cnv_cpms_strip_lpr_sub … IH1 … HXT2 0 X2 … HL02 L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ]
+elim (cnv_cpms_strip_lpr_sub … IH1 … HXT2 0 X2 … HL02 L0) [|*: /4 width=3 by fpb_fpbg, cpm_fpb/ ]
<minus_n_O <minus_O_n #Y2 #HTY2 #HXY2 -HXT2
-elim (IH1 … HXY1 … HXY2 … HL01 … HL02) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ]
+elim (IH1 … HXY1 … HXY2 … HL01 … HL02) [|*: /4 width=3 by fpb_fpbg, cpm_fpb/ ]
-a -L0 -X2 <minus_n_O <minus_O_n #Y #HY1 #HY2
lapply (cpms_trans … HTY1 … HY1) -Y1 #HT0Y
lapply (cpms_trans … HTY2 … HY2) -Y2 #HT2Y
qed-.
fact cnv_cpms_conf_lpr_step_tneqx_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22):
- (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
- (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
+ (∀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 →
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
qed-.
fact cnv_cpms_conf_lpr_teqx_tneqx_aux (h) (a) (G0) (L0) (T0) (n1) (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] →
∀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 →
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 →
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 <arith_l4 #HT1Z
lapply (cpms_trans … HTZ2 … HZ02) -Z2 <arith_l4 #HT2Z
qed-.
fact cnv_cpms_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) →
∀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
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
(❪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
/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-.
(* 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 →
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 →
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 **)
(* 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-.
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/
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-.
(* 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-.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
(* 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
(* 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The 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 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The 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 }.
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-.
(* 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-.
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-.
(* 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-.
(* 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)
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-.
(* 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-.
(**************************************************************************)
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/ *
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-.
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-.
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 *
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❩))
]
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❩))
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❩))
(* 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/
]
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/
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/
(* 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-.
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).
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
(* *)
(**************************************************************************)
-(* 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".
(* 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/
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/
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
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/
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/
]
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
(* 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/
]
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-.
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
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-.
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
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
]
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
]
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-.
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/
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 *
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/
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
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/
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/
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 ]
(* *)
(**************************************************************************)
-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:
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-.
(* *)
(**************************************************************************)
-(* 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.
(* *)
(**************************************************************************)
-(* 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
(* 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.
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
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-.
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
(* 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
(* 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-.
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
]
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
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/
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
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
(* 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
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-.
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-.
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/
]
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-.
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/
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 *)
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
]
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
]
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
]
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.
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-.
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 *
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/
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
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-.
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
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
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
(**************************************************************************)
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.
- â\9dªG,L,Tâ\9d« â\89¥[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:
+ â\88\80G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« â\89¥ ❪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.
- â\9dªG1,L1,T1â\9d« >[h] ❪G,L,T❫ →
- ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+lemma fpbg_feqx_trans:
+ â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« > ❪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.
(* 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-.
(* 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-.
(* 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
(* 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
(* 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.
(* 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.
(**************************************************************************)
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:
(* 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-.
(* 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
(* 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.
(* 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-.
(* 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.
(* Main properties **********************************************************)
-theorem fpbs_trans: ∀h. tri_transitive … (fpbs h).
+theorem fpbs_trans:
+ tri_transitive … fpbs.
/2 width=5 by tri_TC_transitive/ qed-.
(* 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-.
(* 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-.
(* 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/
(* 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
(* *)
(**************************************************************************)
-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-.
(* 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.
(* 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
]
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-.
(* 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
(* 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/
(* 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/
]
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-.
(**************************************************************************)
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:
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
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
]
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
]
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
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
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-.
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
(* 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-.
∀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.
(* 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-.
(* *)
(**************************************************************************)
-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-.
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-.
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) ?)
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
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-.
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/
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-.
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-.
(* 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.
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-.
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
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
(* *)
(**************************************************************************)
-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:
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 ]
]
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
(* 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/
]
(* 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
]
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
(* 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
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/
(* 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/
(* 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-.
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 //
(* 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
(* 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-.
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/
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
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
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)
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
]
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.
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-.
(* 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 #_
(* *)
(**************************************************************************)
-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
]
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
]
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.
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
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-.
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-.
(* 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
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-.
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
(* 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.
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".
(* 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/
]
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
]
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
]
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/
]
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
]
(* 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
]
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
(* 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/
]
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
(* 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/ ]
]
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/ ]
]
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-.
(* 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
(* 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)
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".
(* 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.
(* 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
]
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
]
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
]
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
(* 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/
(* 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
]
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
(* 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
(* 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-.
(* 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-.
(* 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-.
(* 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/
]
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/
(* 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
]
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-.
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)"
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 →
#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
∧∧ 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):
#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/
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 [ * ]
(* 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-.
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-.
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/
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).
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
(* *)
(**************************************************************************)
-(* 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".
(* 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❩))
]
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
]
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/
]
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
]
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/
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.
-
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/
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-.
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-.
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-.
(* *)
(**************************************************************************)
-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.
(* 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
(* 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/
(* 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/
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
(* *)
(**************************************************************************)
-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".
(* 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
(* 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-.
(* 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)
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-.
(* 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-.
(* *)
(**************************************************************************)
-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-.
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
]
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-.
(* 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-.
(* 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
]
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
(* 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/
]
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-.
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-.
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
(* *)
(**************************************************************************)
-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-.
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-.
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-.
(* 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
]
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-.
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-.
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-.
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
]
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-.
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.
</body>
<table name="basic_2_sum"/>
+ <news class="gamma" date="2020-04-16.">
+ Sort hierarchy parameter removed from unbound rt-transition
+ (anniversary milestone).
+ </news>
<news class="gamma" date="2020-02-27.">
λδ-2B is repackaged without λδ-ground_2.
</news>
[ [ "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" * ]
}
]
}
[ [ "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" * } {
(* *)
(**************************************************************************)
+include "basics/core_notation/exp_2.ma".
include "arithmetics/nat.ma".
include "ground/xoa/ex_3_1.ma".
include "ground/xoa/or_3.ma".
∀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.
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-.
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 ***********************************************)
#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-.
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
(* 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
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 *)
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 →
∀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 ***************************************************)
]
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).
/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:
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 ***************************************************)
(* 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 →
@(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 *)
∀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-.
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-.
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-.
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-.
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 →
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-.
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-.
interpretation "next sort (sort hierarchy)"
'UpSpoon h s = (next h s).
+
+definition sh_is_next (h): relation nat ≝
+ λs1,s2. ⫯[h]s1 = s2.