(* Basic_1: includes: pr2_delta1 *)
definition cpr: lenv → relation term ≝
- λL,T1,T2. â\88\83â\88\83T. T1 â\87\92 T & L â\8a¢ T [0, |L|] â\89«* T2.
+ λL,T1,T2. â\88\83â\88\83T. T1 â\9e¡ T & L â\8a¢ T [0, |L|] â\96¶* T2.
interpretation
"context-sensitive parallel reduction (term)"
(* Basic properties *********************************************************)
+lemma cpr_intro: ∀L,T1,T,T2,d,e. T1 ➡ T → L ⊢ T [d, e] ▶* T2 → L ⊢ T1 ➡ T2.
+/4 width=3/ qed-.
+
(* Basic_1: was by definition: pr2_free *)
-lemma cpr_pr: â\88\80T1,T2. T1 â\87\92 T2 â\86\92 â\88\80L. L â\8a¢ T1 â\87\92 T2.
-/2/ qed.
+lemma cpr_pr: â\88\80T1,T2. T1 â\9e¡ T2 â\86\92 â\88\80L. L â\8a¢ T1 â\9e¡ T2.
+/2 width=3/ qed.
-lemma cpr_tpss: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89«* T2 â\86\92 L â\8a¢ T1 â\87\92 T2.
+lemma cpr_tpss: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶* T2 â\86\92 L â\8a¢ T1 â\9e¡ T2.
/3 width=5/ qed.
-lemma cpr_refl: â\88\80L,T. L â\8a¢ T â\87\92 T.
-/2/ qed.
+lemma cpr_refl: â\88\80L,T. L â\8a¢ T â\9e¡ T.
+/2 width=1/ qed.
(* Note: new property *)
(* Basic_1: was only: pr2_thin_dx *)
lemma cpr_flat: ∀I,L,V1,V2,T1,T2.
- L â\8a¢ V1 â\87\92 V2 â\86\92 L â\8a¢ T1 â\87\92 T2 â\86\92 L â\8a¢ ð\9d\95\97{I} V1. T1 â\87\92 ð\9d\95\97{I} V2. T2.
+ L â\8a¢ V1 â\9e¡ V2 â\86\92 L â\8a¢ T1 â\9e¡ T2 â\86\92 L â\8a¢ â\93\95{I} V1. T1 â\9e¡ â\93\95{I} V2. T2.
#I #L #V1 #V2 #T1 #T2 * #V #HV1 #HV2 * /3 width=5/
qed.
lemma cpr_cast: ∀L,V,T1,T2.
- L â\8a¢ T1 â\87\92 T2 â\86\92 L â\8a¢ ð\9d\95\94{Cast} V. T1 â\87\92 T2.
-#L #V #T1 #T2 * /3/
+ L â\8a¢ T1 â\9e¡ T2 â\86\92 L â\8a¢ â\93£V. T1 â\9e¡ T2.
+#L #V #T1 #T2 * /3 width=3/
qed.
(* Note: it does not hold replacing |L1| with |L2| *)
(* Basic_1: was only: pr2_change *)
-lemma cpr_lsubs_conf: â\88\80L1,T1,T2. L1 â\8a¢ T1 â\87\92 T2 →
- â\88\80L2. L1 [0, |L1|] â\89¼ L2 â\86\92 L2 â\8a¢ T1 â\87\92 T2.
+lemma cpr_lsubs_conf: â\88\80L1,T1,T2. L1 â\8a¢ T1 â\9e¡ T2 →
+ â\88\80L2. L1 [0, |L1|] â\89¼ L2 â\86\92 L2 â\8a¢ T1 â\9e¡ T2.
#L1 #T1 #T2 * #T #HT1 #HT2 #L2 #HL12
-lapply (tpss_lsubs_conf … HT2 … HL12) -HT2 HL12 /3/
+lapply (tpss_lsubs_conf … HT2 … HL12) -HT2 -HL12 /3 width=4/
qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_1: was: pr2_gen_csort *)
-lemma cpr_inv_atom: â\88\80T1,T2. â\8b\86 â\8a¢ T1 â\87\92 T2 â\86\92 T1 â\87\92 T2.
+lemma cpr_inv_atom: â\88\80T1,T2. â\8b\86 â\8a¢ T1 â\9e¡ T2 â\86\92 T1 â\9e¡ T2.
#T1 #T2 * #T #HT normalize #HT2
<(tpss_inv_refl_O2 … HT2) -HT2 //
-qed.
+qed-.
(* Basic_1: was: pr2_gen_sort *)
-lemma cpr_inv_sort1: â\88\80L,T2,k. L â\8a¢ â\8b\86k â\87\92 T2 → T2 = ⋆k.
+lemma cpr_inv_sort1: â\88\80L,T2,k. L â\8a¢ â\8b\86k â\9e¡ T2 → T2 = ⋆k.
#L #T2 #k * #X #H
>(tpr_inv_atom1 … H) -H #H
>(tpss_inv_sort1 … H) -H //
-qed.
+qed-.
+
+(* Basic_1: was pr2_gen_abbr *)
+lemma cpr_inv_abbr1: ∀L,V1,T1,U2. L ⊢ ⓓV1. T1 ➡ U2 →
+ (∃∃V,V2,T2. V1 ➡ V & L ⊢ V [O, |L|] ▶* V2 &
+ L. ⓓV ⊢ T1 ➡ T2 &
+ U2 = ⓓV2. T2
+ ) ∨
+ ∃∃T. ⇧[0,1] T ≡ T1 & L ⊢ T ➡ U2.
+#L #V1 #T1 #Y * #X #H1 #H2
+elim (tpr_inv_abbr1 … H1) -H1 *
+[ #V #T0 #T #HV1 #HT10 #HT0 #H destruct
+ elim (tpss_inv_bind1 … H2) -H2 #V2 #T2 #HV2 #HT2 #H destruct
+ lapply (tps_lsubs_conf … HT0 (L. ⓓV) ?) -HT0 /2 width=1/ #HT0
+ lapply (tps_weak_all … HT0) -HT0 #HT0
+ lapply (tpss_lsubs_conf … HT2 (L. ⓓV) ?) -HT2 /2 width=1/ #HT2
+ lapply (tpss_weak_all … HT2) -HT2 #HT2
+ lapply (tpss_strap … HT0 HT2) -T /4 width=7/
+| /4 width=5/
+]
+qed-.
(* Basic_1: was: pr2_gen_cast *)
-lemma cpr_inv_cast1: ∀L,V1,T1,U2. L ⊢ 𝕔{Cast} V1. T1 ⇒ U2 → (
- â\88\83â\88\83V2,T2. L â\8a¢ V1 â\87\92 V2 & L â\8a¢ T1 â\87\92 T2 &
- U2 = 𝕔{Cast} V2. T2
- ) â\88¨ L â\8a¢ T1 â\87\92 U2.
+lemma cpr_inv_cast1: ∀L,V1,T1,U2. L ⊢ ⓣV1. T1 ➡ U2 → (
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 â\9e¡ V2 & L â\8a¢ T1 â\9e¡ T2 &
+ U2 = ⓣV2. T2
+ ) â\88¨ L â\8a¢ T1 â\9e¡ U2.
#L #V1 #T1 #U2 * #X #H #HU2
-elim (tpr_inv_cast1 … H) -H /3/
-* #V #T #HV1 #HT1 #H destruct -X;
-elim (tpss_inv_flat1 … HU2) -HU2 #V2 #T2 #HV2 #HT2 #H destruct -U2 /4 width=5/
-qed.
+elim (tpr_inv_cast1 … H) -H /3 width=3/
+* #V #T #HV1 #HT1 #H destruct
+elim (tpss_inv_flat1 … HU2) -HU2 #V2 #T2 #HV2 #HT2 #H destruct /4 width=5/
+qed-.
-(* Basic_1: removed theorems 5:
- pr2_head_1 pr2_head_2 pr2_cflat pr2_gen_cflat clear_pr2_trans
+(* Basic_1: removed theorems 4:
+ pr2_head_2 pr2_cflat pr2_gen_cflat clear_pr2_trans
Basic_1: removed local theorems 3:
pr2_free_free pr2_free_delta pr2_delta_delta
*)
-
-(*
-pr2/fwd pr2_gen_appl
-pr2/fwd pr2_gen_abbr
-*)