@@ -3,11 +3,13 @@ import "core.mm1";
3
3
term Var_sym: Symbol;
4
4
def Var: Pattern = $ sym Var_sym $;
5
5
def Vars: Pattern = $ dom Var $;
6
+ def is_var (p: Pattern): Pattern = $ is_of_sort p Var $;
6
7
axiom Var_atom: $ is_atom_sort Var $;
7
8
8
9
term Exp_sym: Symbol;
9
10
def Exp: Pattern = $ sym Exp_sym $;
10
11
def Exps: Pattern = $ dom Exp $;
12
+ def is_exp (p: Pattern): Pattern = $ is_of_sort p Exp $;
11
13
axiom Exp_sort: $ is_nominal_sort Exp $;
12
14
13
15
term lc_var_sym: Symbol;
@@ -44,16 +46,16 @@ theorem abstraction_sorting_lemma:
44
46
function_abstraction Var_atom Exp_sort));
45
47
46
48
theorem abstraction_sorting (phi rho: Pattern):
47
- $ is_of_sort phi Var -> is_of_sort rho Exp -> is_of_sort (abstraction phi rho) (sort_abstraction Var Exp) $ =
49
+ $ is_var phi -> is_exp rho -> is_of_sort (abstraction phi rho) (sort_abstraction Var Exp) $ =
48
50
(named '(
49
51
rsyl ,(framing_imp_subst 'appCtxLRVar) @
50
52
rsyl subset_trans @
51
53
imim ,(framing_imp_subst 'appCtxRVar) @
52
54
com12 subset_trans abstraction_sorting_lemma));
53
55
54
56
theorem EV_lc_lam_abstraction {a b: EVar} (phi: Pattern a b):
55
- $ is_of_sort phi Exp ->
56
- ((is_of_sort (eVar a) Var ) /\ (is_of_sort (eVar b) Var )) ->
57
+ $ is_exp phi ->
58
+ ((is_var (eVar a)) /\ (is_var (eVar b))) ->
57
59
((swap a b (lc_lam (abstraction (eVar a) phi))) == lc_lam (abstraction (eVar b) (swap a b phi))) $ =
58
60
(named '(exp @
59
61
sylc eq_trans (
@@ -89,11 +91,11 @@ theorem EV_lc_lam_abstraction {a b: EVar} (phi: Pattern a b):
89
91
90
92
theorem exp_pred_ev_unquantified {x y: EVar} (exp_pred: Pattern)
91
93
(exp_pred_ev: $ EV_pattern Var exp_pred $):
92
- $ (is_of_sort (eVar x) Var ) /\ (is_of_sort (eVar y) Var ) -> ((swap x y exp_pred) == exp_pred) $ =
94
+ $ (is_var (eVar x)) /\ (is_var (eVar y)) -> ((swap x y exp_pred) == exp_pred) $ =
93
95
'(curry @ syl var_subst_same_var @ var_subst_same_var exp_pred_ev);
94
96
95
97
theorem lc_lemma_1 {x: EVar} (exp_pred exp_suff_fresh: Pattern)
96
- (exp_suff_fresh_sorting: $ is_of_sort exp_suff_fresh Var $)
98
+ (exp_suff_fresh_sorting: $ is_var exp_suff_fresh $)
97
99
(exp_suff_fresh_nonempty: $ |^ exp_suff_fresh ^| $)
98
100
(h_abs: $ (lc_lam (abstraction exp_suff_fresh exp_pred)) C= exp_pred $):
99
101
$ s_exists Var x ((lc_lam (abstraction (eVar x) exp_pred)) C= exp_pred) $ =
@@ -106,9 +108,9 @@ theorem lc_lemma_1 {x: EVar} (exp_pred exp_suff_fresh: Pattern)
106
108
@ anl lemma_ceil_exists_membership exp_suff_fresh_nonempty));
107
109
108
110
theorem lc_lemma_2 {x y: EVar} (exp_pred: Pattern)
109
- (exp_pred_sorting: $ is_of_sort exp_pred Exp $)
111
+ (exp_pred_sorting: $ is_exp exp_pred $)
110
112
(exp_pred_ev: $ EV_pattern Var exp_pred $):
111
- $ (((is_of_sort (eVar x) Var ) /\ (is_of_sort (eVar y) Var )) /\ ((lc_lam (abstraction (eVar y) exp_pred)) C= exp_pred)) -> ((lc_lam (abstraction (eVar x) exp_pred)) C= exp_pred) $ =
113
+ $ (((is_var (eVar x)) /\ (is_var (eVar y))) /\ ((lc_lam (abstraction (eVar y) exp_pred)) C= exp_pred)) -> ((lc_lam (abstraction (eVar x) exp_pred)) C= exp_pred) $ =
112
114
(named '(
113
115
rsyl (anim2 ,(subset_imp_subset_framing_subst 'appCtxRVar)) @
114
116
rsyl (iand anl @
@@ -122,12 +124,12 @@ theorem lc_lemma_2 {x y: EVar} (exp_pred: Pattern)
122
124
syl anl ,(func_subst_explicit_helper 'hole $(_ @@ (_ @@ (eVar hole))) C= (eVar hole)$)));
123
125
124
126
theorem lc_lemma_3 {y: EVar} (exp_pred: Pattern)
125
- (exp_pred_sorting: $ is_of_sort exp_pred Exp $)
126
- (exp_suff_fresh_sorting: $ is_of_sort exp_suff_fresh Var $)
127
+ (exp_pred_sorting: $ is_exp exp_pred $)
128
+ (exp_suff_fresh_sorting: $ is_var exp_suff_fresh $)
127
129
(exp_suff_fresh_nonempty: $ |^ exp_suff_fresh ^| $)
128
130
(exp_pred_ev: $ EV_pattern Var exp_pred $)
129
131
(h_abs: $ (lc_lam (abstraction exp_suff_fresh exp_pred)) C= exp_pred $):
130
- $ is_of_sort (eVar y) Var -> ((lc_lam (abstraction (eVar y) exp_pred)) C= exp_pred) $ =
132
+ $ is_var (eVar y) -> ((lc_lam (abstraction (eVar y) exp_pred)) C= exp_pred) $ =
131
133
(named '(
132
134
rsyl (ian2 @ lc_lemma_1 exp_suff_fresh_sorting exp_suff_fresh_nonempty h_abs) @
133
135
rsyl and_exists_disjoint_reverse @
@@ -136,8 +138,8 @@ theorem lc_lemma_3 {y: EVar} (exp_pred: Pattern)
136
138
lc_lemma_2 exp_pred_sorting exp_pred_ev));
137
139
138
140
theorem freshness_irrelevance (exp_pred exp_suff_fresh: Pattern)
139
- (exp_pred_sorting: $ is_of_sort exp_pred Exp $)
140
- (exp_suff_fresh_sorting: $ is_of_sort exp_suff_fresh Var $)
141
+ (exp_pred_sorting: $ is_exp exp_pred $)
142
+ (exp_suff_fresh_sorting: $ is_var exp_suff_fresh $)
141
143
(exp_suff_fresh_nonempty: $ |^ exp_suff_fresh ^| $)
142
144
(exp_pred_ev: $ EV_pattern Var exp_pred $)
143
145
(h_abs: $ (lc_lam (abstraction exp_suff_fresh exp_pred)) C= exp_pred $):
@@ -149,9 +151,9 @@ theorem freshness_irrelevance (exp_pred exp_suff_fresh: Pattern)
149
151
lc_lemma_3 exp_pred_sorting exp_suff_fresh_sorting exp_suff_fresh_nonempty exp_pred_ev h_abs));
150
152
151
153
theorem induction_principle (exp_pred exp_suff_fresh: Pattern)
152
- (exp_suff_fresh_sorting: $ is_of_sort exp_suff_fresh Var $)
154
+ (exp_suff_fresh_sorting: $ is_var exp_suff_fresh $)
153
155
(exp_suff_fresh_nonempty: $ |^ exp_suff_fresh ^| $)
154
- (exp_pred_sorting: $ is_of_sort exp_pred Exp $)
156
+ (exp_pred_sorting: $ is_exp exp_pred $)
155
157
(exp_pred_ev: $ EV_pattern Var exp_pred $)
156
158
(h_var: $ (lc_var Vars) C= exp_pred $)
157
159
(h_app: $ (lc_app exp_pred exp_pred) C= exp_pred $)
0 commit comments