]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/basic_2A/etc/etc/cpr_conj.etc
milestone update in ground_2 and basic_2A
[helm.git] / matita / matita / contribs / lambdadelta / basic_2A / etc / etc / cpr_conj.etc
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/reduction/lpr_ldrop.ma".
16
17 include "basic_2/unfold/fsups.ma".
18 include "basic_2/reducibility/lpr_ldrop.ma".
19
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
24
25  HVT2 : ()
26  HV2 : (K2⊢V➡V2)
27
28
29 thaorem cpr_trans_lpr: ∀L1,T1,T. L1 ⊢ T1 ➡ T → ∀L2. L1 ⊢ ➡ L2 →
30                        ∀T2. L2 ⊢ T ➡ T2 →
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
35   [ #H destruct
36     elim (cpr_inv_atom1 … HT2) -HT2
37     [ #H destruct //
38     | * #K2 #V #V2 #i #HLK2 #HV2 #HVT2 #H destruct //
39     ]
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
46     @or_introl #H
47
48
49
50
51
52
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)
57     ]
58   ]
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/
68       ]
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
72
73     ]
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/
77   ]
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/
84     ]
85   | #HX1 #H destruct /3 width=5/
86 ]
87 qed-.
88 *)