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 b (subst a phi1 plug1) plug2) == (subst a (subst b phi1 plug2) (subst b plug1 plug2))) $ =
212
-
'();
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) $;
204
+
205
+
theorem subst_induction_app_lemma {x y: EVar} (a b phi1 plug1 plug2: Pattern)
206
+
(a_var: $ is_sorted_func Var a $)
207
+
(b_var: $ is_sorted_func Var b $)
208
+
(plug1_exp: $ is_exp plug1 $)
209
+
(plug2_exp: $ is_exp plug2 $)
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 $ =
212
+
'();
213
+
214
+
theorem subst_induction_app (a b phi1 plug1 plug2: Pattern)
215
+
(a_var: $ is_sorted_func Var a $)
216
+
(b_var: $ is_sorted_func Var b $)
217
+
(plug1_exp: $ is_exp plug1 $)
218
+
(plug2_exp: $ is_exp plug2 $)
219
+
(a_fresh: $ fresh_for a phi3 $):
220
+
$ (lc_app (satisfying_exps a b plug1 plug2) (satisfying_exps a b plug1 plug2)) C= (satisfying_exps a b plug1 plug2) $ =
221
+
'();
222
+
223
+
224
+
theorem subst_induction (a b phi1 plug1 plug2: Pattern)
225
+
(a_var: $ is_sorted_func Var a $)
226
+
(b_var: $ is_sorted_func Var b $)
227
+
(phi1_exp: $ is_exp phi1 $)
228
+
(plug1_exp: $ is_exp plug1 $)
229
+
(plug2_exp: $ is_exp plug2 $)
230
+
(a_fresh: $ fresh_for a phi3 $):
231
+
$ (subst b (subst a phi1 plug1) plug2) == (subst a (subst b phi1 plug2) (subst b plug1 plug2)) $ =
0 commit comments