You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
((subst a (lc_app phi1 phi2) plug) == (lc_app (subst a phi1 plug) (subst a phi2 plug))) $;
191
+
(is_var (eVar a)) ->
192
+
(is_exp plug) ->
193
+
((subst (eVar a) (lc_app phi1 phi2) plug) == (lc_app (subst (eVar a) phi1 plug) (subst (eVar a) phi2 plug))) $;
194
194
axiom subst_lam {a b: EVar} (plug phi: Pattern a b):
195
195
$ (is_var (eVar a)) ->
196
196
(is_var (eVar b)) ->
197
197
(is_exp plug) ->
198
198
(is_exp phi) ->
199
199
(fresh_for (eVar a) plug) ->
200
-
((subst b (lc_lam_a a phi) plug) == (lc_lam_a a (subst b phi plug))) $;
200
+
((subst (eVar b) (lc_lam_a a phi) plug) == (lc_lam_a a (subst (eVar b) phi plug))) $;
201
201
202
-
def subst_induction_pred (a b phi plug1 plug2: Pattern) = $ (subst b (subst a phi plug1) plug2) == (subst a (subst b phi plug2) (subst b plug1 plug2)) $;
203
-
def satisfying_exps {.x: EVar} (a b plug1 plug2: Pattern)= $ exists x ((eVar x) /\ subst_induction_pred a b (eVar x) plug1 plug2) $;
202
+
def subst_induction_pred (a b phi plug1 plug2: Pattern): Pattern = $ (subst b (subst a phi plug1) plug2) == (subst a (subst b phi plug2) (subst b plug1 plug2)) $;
203
+
def satisfying_exps {.x: EVar} (a b plug1 plug2: Pattern): Pattern = $ s_exists Exp x ((eVar x) /\ subst_induction_pred a b (eVar x) plug1 plug2) $;
204
204
205
-
theorem subst_induction_app_lemma {x y: EVar} (a b phi1 plug1 plug2: Pattern)
205
+
theorem subst_induction_app_lemma {x y: EVar} (a b plug1 plug2: Pattern)
206
206
(a_var: $ is_sorted_func Var a $)
207
207
(b_var: $ is_sorted_func Var b $)
208
208
(plug1_exp: $ is_exp plug1 $)
209
209
(plug2_exp: $ is_exp plug2 $)
210
210
(a_fresh: $ fresh_for a phi3 $):
211
-
$ (subst_induction_pred a b x plug1 plug2 /\ subst_induction_pred a b y plug1 plug2) -> subst_induction_pred a b (lc_app x y) plug1 plug2 $ =
211
+
$ (is_exp (eVar x) /\ subst_induction_pred a b (eVar x) plug1 plug2) /\ (is_exp (eVar y) /\ subst_induction_pred a b (eVar y) plug1 plug2) -> subst_induction_pred a b (lc_app (eVar x) (eVar y)) plug1 plug2 $ =
212
212
'();
213
213
214
-
theorem subst_induction_app (a b phi1 plug1 plug2: Pattern)
214
+
theorem subst_induction_app (a b plug1 plug2: Pattern)
215
215
(a_var: $ is_sorted_func Var a $)
216
216
(b_var: $ is_sorted_func Var b $)
217
217
(plug1_exp: $ is_exp plug1 $)
218
218
(plug2_exp: $ is_exp plug2 $)
219
219
(a_fresh: $ fresh_for a phi3 $):
220
220
$ (lc_app (satisfying_exps a b plug1 plug2) (satisfying_exps a b plug1 plug2)) C= (satisfying_exps a b plug1 plug2) $ =
0 commit comments