]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma
70286909217d9da41406616e08a1944582dc83ed
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / rt_computation / jsx_csx.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 include "basic_2/rt_computation/rsx_csx.ma".
16 include "basic_2/rt_computation/jsx_drops.ma".
17 include "basic_2/rt_computation/jsx_lsubr.ma".
18
19 (* COMPATIBILITY OF STRONG NORMALIZATION FOR UNBOUND RT-TRANSITION **********)
20
21 (* Properties with strongly rt-normalizing terms ****************************)
22
23 lemma jsx_csx_conf (h) (G):
24       ∀L1,L2. G ⊢ L1 ⊒[h] L2 →
25       ∀T. ❪G,L1❫ ⊢ ⬈*𝐒[h] T → ❪G,L2❫ ⊢ ⬈*𝐒[h] T.
26 /3 width=5 by jsx_fwd_lsubr, csx_lsubr_conf/ qed-.
27
28 (* Properties with strongly rt-normalizing referred local environments ******)
29
30 (* Note: Try by induction on the 2nd premise by generalizing V with f *)
31 lemma rsx_jsx_trans (h) (G):
32       ∀L1,V. G ⊢ ⬈*𝐒[h,V] L1 →
33       ∀L2. G ⊢ L1 ⊒[h] L2 → G ⊢ ⬈*𝐒[h,V] L2.
34 #h #G #L1 #V @(fqup_wf_ind_eq (Ⓕ) … G L1 V) -G -L1 -V
35 #G0 #L0 #V0 #IH #G #L1 * *
36 [ //
37 | #i #HG #HL #HV #H #L2 #HL12 destruct
38   elim (rsx_inv_lref_drops … H) -H [|*: * ]
39   [ #HL1 -IH
40     lapply (jsx_fwd_drops_atom_sn … HL12 … HL1) -L1
41     /2 width=1 by rsx_lref_atom_drops/
42   | #I #K1 #HLK1 -IH
43     elim (jsx_fwd_drops_unit_sn … HL12 … HLK1) -L1 [| // ] #K2 #HK12 #HLK2
44     /2 width=3 by rsx_lref_unit_drops/
45   | #I #K1 #V1 #HLK1 #HV1 #HK1
46     elim (jsx_fwd_drops_pair_sn … HL12 … HLK1) -HL12 [3: // |*: * ]
47     [ #K2 #HK12 #HLK2
48       /4 width=6 by rsx_lref_pair_drops, jsx_csx_conf, fqup_lref/
49     | #K2 #_ #HLK2 #_
50       /2 width=3 by rsx_lref_unit_drops/
51     ]
52   ]
53 | //
54 | #p #I #V #T #HG #HL #HV #H #L2 #HL12 destruct
55   elim (rsx_inv_bind_void … H) -H #HV #HT
56   /4 width=4 by jsx_bind, rsx_bind_void/
57 | #I #V #T #HG #HL #HV #H #L2 #HL12 destruct
58   elim (rsx_inv_flat … H) -H #HV #HT
59   /3 width=4 by rsx_flat/
60 ]
61 qed-.