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/rt_transition/cpx_lsubr.ma".
16 include "basic_2/rt_computation/csx_csx.ma".
18 (* STRONGLY NORMALIZING TERMS FOR UNBOUND PARALLEL RT-TRANSITION ************)
20 (* Advanced properties ******************************************************)
22 fact csx_appl_beta_aux (h) (G):
23 ∀p,L,U1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U1⦄ →
24 ∀V,W,T1. U1 = ⓓ{p}ⓝW.V.T1 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.ⓛ{p}W.T1⦄.
25 #h #G #p #L #X #H @(csx_ind … H) -X
26 #X #HT1 #IHT1 #V #W #T1 #H1 destruct
28 elim (cpx_inv_appl1 … H1) -H1 *
29 [ -HT1 #V0 #Y #HLV0 #H #H0 destruct
30 elim (cpx_inv_abst1 … H) -H #W0 #T0 #HLW0 #HLT0 #H destruct
31 @IHT1 -IHT1 [4: // | skip ]
32 [ lapply (lsubr_cpx_trans … HLT0 (L.ⓓⓝW.V) ?) -HLT0 -H2
33 /3 width=1 by cpx_bind, cpx_flat, lsubr_beta/
34 | #H elim (tdeq_inv_pair … H) -H
35 #_ #H elim (tdeq_inv_pair … H) -H
36 #_ /4 width=1 by tdeq_pair/
38 | -IHT1 -H2 #q #V0 #W0 #W2 #T0 #T2 #HLV0 #HLW02 #HLT02 #H1 #H3 destruct
39 lapply (lsubr_cpx_trans … HLT02 (L.ⓓⓝW0.V) ?) -HLT02
40 /4 width=5 by csx_cpx_trans, cpx_bind, cpx_flat, lsubr_beta/
41 | -HT1 -IHT1 -H2 #q #V0 #V1 #W0 #W1 #T0 #T3 #_ #_ #_ #_ #H destruct
45 (* Basic_1: was just: sn3_beta *)
46 lemma csx_appl_beta (h) (G):
47 ∀p,L,V,W,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}ⓝW.V.T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.ⓛ{p}W.T⦄.
48 /2 width=3 by csx_appl_beta_aux/ qed.
50 (* Advanced forward lemmas **************************************************)
52 fact csx_fwd_bind_dx_unit_aux (h) (G):
53 ∀L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ →
54 ∀p,I,J,V,T. U = ⓑ{p,I}V.T → ⦃G,L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄.
55 #h #G #L #U #H elim H -H #U0 #_ #IH #p #I #J #V #T #H destruct
56 @csx_intro #T2 #HLT2 #HT2
57 @(IH (ⓑ{p, I}V.T2)) -IH /2 width=4 by cpx_bind_unit/ -HLT2
58 #H elim (tdeq_inv_pair … H) -H /2 width=1 by/
61 lemma csx_fwd_bind_dx_unit (h) (G):
62 ∀p,I,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ →
63 ∀J. ⦃G,L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄.
64 /2 width=6 by csx_fwd_bind_dx_unit_aux/ qed-.
66 lemma csx_fwd_bind_unit (h) (G):
67 ∀p,I,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ →
68 ∀J. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ ∧ ⦃G,L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄.
69 /3 width=4 by csx_fwd_pair_sn, csx_fwd_bind_dx_unit, conj/ qed-.
71 (* Properties with restricted refinement for local environments *************)
73 lemma csx_lsubr_conf (h) (G):
74 ∀L1,T. ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ∀L2. L1 ⫃ L2 → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄.
76 @(csx_ind … H) -T #T1 #_ #IH #L2 #HL12
77 @csx_intro #T2 #HT12 #HnT12
78 /3 width=3 by lsubr_cpx_trans/