]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/basic_2/static/lsubf_lsubf.ma
renaming in basic_2
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / static / lsubf_lsubf.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/static/frees_frees.ma".
16 include "basic_2/static/lsubf.ma".
17
18 (* RESTRICTED REFINEMENT FOR CONTEXT-SENSITIVE FREE VARIABLES ***************)
19
20 (* Main properties **********************************************************)
21
22 theorem lsubf_sor: āˆ€K,L,g1,f1. ā¦ƒK, g1ā¦„ ā«ƒš…* ā¦ƒL, f1ā¦„ ā†’
23                    āˆ€g2,f2. ā¦ƒK, g2ā¦„ ā«ƒš…* ā¦ƒL, f2ā¦„ ā†’
24                    āˆ€g. g1 ā‹“ g2 ā‰˜ g ā†’ āˆ€f. f1 ā‹“ f2 ā‰˜ f ā†’ ā¦ƒK, gā¦„ ā«ƒš…* ā¦ƒL, fā¦„.
25 #K elim K -K
26 [ #L #g1 #f1 #H1 #g2 #f2 #H2 #g #Hg #f #Hf
27   elim (lsubf_inv_atom1 ā€¦ H1) -H1 #H1 #H destruct
28   lapply (lsubf_inv_atom ā€¦ H2) -H2 #H2
29   /5 width=4 by lsubf_atom, sor_mono, sor_eq_repl_back2, sor_eq_repl_back1/
30 | #K #J #IH #L #g1 #f1 #H1 #g2 #f2 #H2 #g #Hg #f #Hf
31   elim (pn_split g1) * #y1 #H destruct
32   elim (pn_split g2) * #y2 #H destruct
33   [ elim (sor_inv_ppx ā€¦ Hg) -Hg [|*: // ] #y #Hy #H destruct
34     elim (lsubf_inv_push1 ā€¦ H1) -H1 #x1 #Z1 #Y1 #H1 #H #H0 destruct
35     elim (lsubf_inv_push_sn ā€¦ H2) -H2 #x2 #H2 #H destruct
36     elim (sor_inv_ppx ā€¦ Hf) -Hf [|*: // ] #x #Hx #H destruct
37     /3 width=8 by lsubf_push/
38   | elim (sor_inv_pnx ā€¦ Hg) -Hg [|*: // ] #y #Hy #H destruct
39     elim (lsubf_inv_push1 ā€¦ H1) -H1 #x1 #Z1 #Y1 #H1 #H #H0 destruct
40     generalize in match H2; -H2 cases J -J #J [| #V ] #H2
41     [ elim (lsubf_inv_unit1 ā€¦ H2) -H2 #x2 #Y2 #H2 #H #H0 destruct
42     | elim (lsubf_inv_pair1 ā€¦ H2) -H2 *
43       [ #x2 #Z2 #H2 #H #H0 destruct
44       | #y3 #y4 #x2 #Y2 #W #U #H2 #Hy3 #Hy2 #H #H0 #H3 #H4 destruct
45       | #y3 #y4 #x2 #Z2 #Y2 #H2 #Hy3 #Hy2 #H #H0 destruct
46       ]
47     ]
48     elim (sor_inv_pnx ā€¦ Hf) -Hf [1,6,11,16:|*: // ] #x #Hx #H destruct
49     /3 width=12 by lsubf_unit, lsubf_beta, lsubf_bind, sor_assoc_sn/
50   | elim (sor_inv_npx ā€¦ Hg) -Hg [|*: // ] #y #Hy #H destruct
51     elim (lsubf_inv_push1 ā€¦ H2) -H2 #x2 #Z2 #Y2 #H2 #H #H0 destruct
52     generalize in match H1; -H1 cases J -J #J [| #V ] #H1
53     [ elim (lsubf_inv_unit1 ā€¦ H1) -H1 #x1 #Y1 #H1 #H #H0 destruct
54     | elim (lsubf_inv_pair1 ā€¦ H1) -H1 *
55       [ #x1 #Z1 #H1 #H #H0 destruct
56       | #y3 #y4 #x1 #Y1 #W #U #H1 #Hy3 #Hy1 #H #H0 #H3 #H4 destruct
57       | #y3 #y4 #x1 #Z1 #Y1 #H1 #Hy3 #Hy1 #H #H0 destruct
58       ]
59     ]
60     elim (sor_inv_npx ā€¦ Hf) -Hf [1,6,11,16:|*: // ] #x #Hx #H destruct
61     /3 width=12 by lsubf_unit, lsubf_beta, lsubf_bind, sor_comm_23/
62   | elim (sor_inv_nnx ā€¦ Hg) -Hg [|*: // ] #y #Hy #H destruct
63     generalize in match H2; generalize in match H1; -H1 -H2 cases J -J #J [| #V ] #H1 #H2
64     [ elim (lsubf_inv_unit1 ā€¦ H1) -H1 #x1 #Y1 #H1 #H #H0 destruct
65       elim (lsubf_inv_bind_sn ā€¦ H2) -H2 #x2 #H2 #H destruct
66     | elim (lsubf_inv_pair1 ā€¦ H1) -H1 *
67       [ #x1 #Z1 #H1 #H #H0 destruct
68         elim (lsubf_inv_bind_sn ā€¦ H2) -H2 #x2 #H2 #H destruct
69       | #y3 #y4 #x1 #Y1 #W #U #H1 #Hy3 #Hy1 #H #H0 #H3 #H4 destruct
70         elim (lsubf_inv_beta_sn ā€¦ H2) -H2 #z3 #z4 #x2 #H2 #Hz3 #Hy2 #H destruct
71         lapply (frees_mono ā€¦ Hz3 ā€¦ Hy3) -Hz3 #H3
72         lapply (sor_eq_repl_back2 ā€¦ Hy2 ā€¦ H3) -z3 #Hy2
73       | #y3 #y4 #x1 #Z1 #Y1 #H1 #Hy3 #Hy1 #H #H0 destruct
74         elim (lsubf_inv_unit_sn ā€¦ H2) -H2 #z3 #z4 #x2 #H2 #Hz3 #Hy2 #H destruct
75         lapply (frees_mono ā€¦ Hz3 ā€¦ Hy3) -Hz3 #H3
76         lapply (sor_eq_repl_back2 ā€¦ Hy2 ā€¦ H3) -z3 #Hy2
77       ]
78     ]
79     elim (sor_inv_nnx ā€¦ Hf) -Hf [1,6,11,16:|*: // ] #x #Hx #H destruct
80     /3 width=12 by lsubf_unit, lsubf_beta, lsubf_bind, sor_coll_dx/
81   ]
82 ]
83 qed-.