1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 include "Basic-2/grammar/cl_shift.ma".
16 include "Basic-2/reduction/tpr.ma".
18 (* CONTEXT-SENSITIVE PARALLEL REDUCTION ON TERMS ****************************)
20 definition cpr: lenv → term → term → Prop ≝
21 λL,T1,T2. ∃∃T. T1 ⇒ T & L ⊢ T [0, |L|] ≫ T2.
24 "context-sensitive parallel reduction (term)"
25 'PRed L T1 T2 = (cpr L T1 T2).
27 (* Basic properties *********************************************************)
29 lemma cpr_pr: ∀T1,T2. T1 ⇒ T2 → ∀L. L ⊢ T1 ⇒ T2.
32 lemma cpr_tps: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → L ⊢ T1 ⇒ T2.
35 lemma cpr_refl: ∀L,T. L ⊢ T ⇒ T.
38 lemma cpr_bind_sn: ∀I,L,V1,V2,T1,T2. L ⊢ V1 ⇒ V2 → T1 ⇒ T2 →
39 L ⊢ 𝕓{I} V1. T1 ⇒ 𝕓{I} V2. T2.
40 #I #L #V1 #V2 #T1 #T2 * /3 width=5/
43 lemma cpr_bind_dx: ∀I,L,V1,V2,T1,T2. V1 ⇒ V2 → L. 𝕓{I} V2 ⊢ T1 ⇒ T2 →
44 L ⊢ 𝕓{I} V1. T1 ⇒ 𝕓{I} V2. T2.
45 #I #L #V1 #V2 #T1 #T2 #HV12 * #T #HT1 normalize #HT2
46 elim (tps_split_up … HT2 1 ? ?) -HT2 // #T0 <minus_n_O #HT0 normalize <minus_plus_m_m #HT02
47 lapply (tps_leq_repl … HT0 (⋆. 𝕓{I} V2) ?) -HT0 /2/ #HT0 /3 width=5/
50 (* NOTE: new property *)
51 lemma cpr_flat: ∀I,L,V1,V2,T1,T2.
52 L ⊢ V1 ⇒ V2 → L ⊢ T1 ⇒ T2 → L ⊢ 𝕗{I} V1. T1 ⇒ 𝕗{I} V2. T2.
53 #I #L #V1 #V2 #T1 #T2 * #V #HV1 #HV2 * /3 width=5/
56 lemma cpr_delta: ∀L,K,V,W,i.
57 ↓[0, i] L ≡ K. 𝕓{Abbr} V → ↑[0, i + 1] V ≡ W → L ⊢ #i ⇒ W.
61 lemma cpr_cast: ∀L,V,T1,T2.
62 L ⊢ T1 ⇒ T2 → L ⊢ 𝕗{Cast} V. T1 ⇒ T2.
66 (* Basic inversion lemmas ***************************************************)
68 lemma cpr_inv_lsort: ∀T1,T2. ⋆ ⊢ T1 ⇒ T2 → T1 ⇒ T2.
69 #T1 #T2 * #T #HT normalize #HT2
70 <(tps_inv_refl0 … HT2) -HT2 //
73 (* Basic forward lemmas *****************************************************)
75 lemma cpr_shift_fwd: ∀L,T1,T2. L ⊢ T1 ⇒ T2 → L @ T1 ⇒ L @ T2.