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/reduction/lpr_ldrop.ma".
17 include "basic_2/unfold/fsups.ma".
18 include "basic_2/reducibility/lpr_ldrop.ma".
20 lamma pippo: ∀L1,L2,T1,T2. ⦃L1, T1⦄ ⊃ ⦃L2, T2⦄ → ∀V1,i. ⇧[i, 1] V1 ≡ T1 → T2 = #i → ⊥.
21 #L1 #L2 #T1 #T2 #H elim H -L1 -L2 -T1 -T2
22 [ #I #L1 #V #W1 #j #H1 #H2
23 elim (lift_inv_lref2 … H1) -H1 * #H1 #H3
29 thaorem cpr_trans_lpr: ∀L1,T1,T. L1 ⊢ T1 ➡ T → ∀L2. L1 ⊢ ➡ L2 →
31 (⦃L2, T2⦄ ⊃* ⦃L1, T1⦄ → ⊥) ∨ T1 = T.
32 #L1 #T1 @(fsupp_wf_ind … L1 T1) -L1 -T1 #n #IH #L1 * [|*]
33 [ #I #Hn #T #H1 #L2 #HL12 #T2 #HT2 destruct -IH
34 elim (cpr_inv_atom1 … H1) -H1
36 elim (cpr_inv_atom1 … HT2) -HT2
38 | * #K2 #V #V2 #i #HLK2 #HV2 #HVT2 #H destruct //
40 | * #K1 #V1 #V #i #HLK1 #HV1 #HVT #H destruct
41 lapply (ldrop_pair2_fwd_fw … HLK1 (#i)) #HKV1
42 elim (lpr_ldrop_conf … HLK1 … HL12) -HLK1 -HL12 #X #H #HLK2
43 elim (lpr_inv_pair1 … H) -H #K2 #V0 #HK12 #_ #H destruct
44 lapply (ldrop_fwd_ldrop2 … HLK2) -V0 #HLK2
45 elim (cpr_inv_lift1 … HT2 … HLK2 … HVT) -HT2 -HLK2 -HVT #V2 #HVT2 #HV2
53 elim (lift_inv_lref2 … HVT2) -HVT2 * #H #_
54 [ elim (lt_zero_false … H)
55 | >commutative_plus in H; >plus_plus_comm_23 #H
56 elim (le_plus_xySz_x_false … H)
59 | #a #I #V1 #T1 #Hn #X1 #H1 #L2 #HL12 #X2 #H2
60 elim (cpr_inv_bind1 … H1) -H1 *
61 [ #V #T #HV1 #HT1 #H destruct
62 elim (cpr_inv_bind1 … H2) -H2 *
63 [ #V2 #T2 #HV2 #HT2 #H destruct
64 elim (IH … HV1 … HV2) // #HV12 destruct
65 [ @or_introl #H destruct /2 width=1/
66 | elim (IH … HT1 … HT2) // /2 width=1/ -L1 -L2 #HT12 destruct
67 @or_introl #H destruct /2 width=1/
69 | #T2 #HT2 #HXT2 #H1 #H2 destruct
70 elim (IH … HT1 … HT2) // /2 width=1/ -L1 -L2 #HT12 destruct
71 | elim (term_eq_dec V1 V) #HV1 destruct
74 | #Y1 #HTY1 #HXY1 #H11 #H12 destruct
75 elim (lift_total (+ⓓV1.T1) 0 1) #Y2 #HXY2
76 lapply (cpr_lift … H2 (L2.ⓓV1) … HXY1 … HXY2) /2 width=1/ -X1 /4 width=5/
78 | #I #V1 #T1 #Hn #X1 #H1 #L2 #HL12 #X2 #H2
79 elim (cpr_inv_flat1 … H1) -H1 *
80 [ #V #T #HV1 #HT1 #H destruct
81 elim (cpr_inv_flat1 … H2) -H2 *
82 [ #V2 #T2 #HV2 #HT2 #H destruct /3 width=5/
83 | #HX2 #H destruct /3 width=5/
85 | #HX1 #H destruct /3 width=5/