@@ -127,6 +127,7 @@ theorem induction_lemma_app (pred freshness_arg: Pattern)
127
127
@ syl anr ,(func_subst_explicit_helper 'z $(eVar z C= dom Exp) /\ (eVar z /\ (pred @@ eVar z @@ freshness_arg))$)));
128
128
129
129
theorem induction_lemma_abs (pred freshness_arg: Pattern)
130
+ (freshness_arg_Exp: $ is_of_sort freshness_arg Exp $)
130
131
(predicate: $ forall x (is_pred (pred @@ eVar x @@ freshness_arg)) $)
131
132
(h_abs: $ s_forall Var a (s_forall Exp t ((fresh_in_all a freshness_arg) -> (pred @@ eVar t @@ freshness_arg) -> (pred @@ (lc_lam (abstraction (eVar a) (eVar t))) @@ freshness_arg))) $):
132
133
$ (lc_lam (abstraction (dom Var) (s_exists Exp x (eVar x /\ (pred @@ eVar x @@ freshness_arg))))
@@ -136,11 +137,23 @@ theorem induction_lemma_abs (pred freshness_arg: Pattern)
136
137
@ rsyl ,(framing_subst '(anl ,(ex_appCtx_subst 'appCtxRVar)) 'appCtxRVar)
137
138
@ rsyl (anl ,(ex_appCtx_subst 'appCtxRVar))
138
139
@ exists_generalization_disjoint
139
- @ rsyl ,(framing_subst ,(appCtx_floor_commute_b_subst 'appCtxRVar)'appCtxRVar)
140
+ @ rsyl ,(framing_subst ,(appCtx_floor_commute_b_subst 'appCtxRVar) 'appCtxRVar)
140
141
@ rsyl ,(appCtx_floor_commute_b_subst 'appCtxRVar)
142
+ @ rsyl (anim2 ,(framing_subst (framing_subst '(anim2 @ eq_to_intro @ predicate_lemma predicate) 'appCtxRVar) 'appCtxRVar))
143
+ @ rsyl (anim2 ,(framing_subst (appCtx_ceil_commute_subst 'appCtxRVar) 'appCtxRVar))
144
+ @ rsyl (anim2 ,(appCtx_ceil_commute_subst 'appCtxRVar))
145
+ @ rsyl (anim2 ancom)
146
+ @ rsyl (anr anass)
147
+ @ rsyl (anim1 @ anim2 @ eq_to_intro_rev @ predicate_lemma predicate)
148
+ @ rsyl (anim1 @ iand anl id)
149
+ @ rsyl (anl anass)
150
+ @ rsyl (anim2 @ anim1 @ curry @ syl (rsyl (exists_framing imancom) (anr imp_exists_disjoint)) @ anr imp_exists_disjoint @ exists_framing imancom @ exists_framing (iand id @ curry (com23 @ syl var_subst_same_var @ var_subst_same_var h_abs)) (F4 Var_atom Exp_sort freshness_arg_Exp))
151
+ @ rsyl (anim2 @ anim1 @ exists_framing @ anim1 anl)
152
+ -- @ syl (curry @ syl anr ,(func_subst_explicit_helper 'z $(eVar z C= dom Exp) /\ (eVar z /\ (pred @@ eVar z @@ freshness_arg))$))
141
153
_);
142
154
143
155
theorem induction_principle (pred freshness_arg: Pattern)
156
+ (freshness_arg_Exp: $ is_of_sort freshness_arg Exp $)
144
157
(predicate: $ forall x (is_pred (pred @@ eVar x @@ freshness_arg)) $)
145
158
(h_var: $ s_forall Var a (pred @@ lc_var (eVar a) @@ freshness_arg) $)
146
159
(h_app: $ s_forall Exp t1 (s_forall Exp t2 ((pred @@ eVar t1 @@ freshness_arg) /\ (pred @@ eVar t2 @@ freshness_arg) -> (pred @@ (lc_app (eVar t1) (eVar t2)) @@ freshness_arg))) $)
@@ -152,7 +165,7 @@ theorem induction_principle (pred freshness_arg: Pattern)
152
165
rsyl (eq_to_intro no_junk) @ KT positive_in_no_junk (norm (norm_sym @ norm_imp_l
153
166
,(propag_s_subst_adv 'X $((sym lc_var_sym) @@ ((sym (dom_sym)) @@ Var)) \/ ((sym lc_app_sym) @@ (sVar X) @@ (sVar X)) \/ ((sym lc_lam_sym) @@ ((sym abstraction_sym) @@ ((sym (dom_sym)) @@ Var) @@ (sVar X)))$ disjoints)
154
167
) @
155
- eori (eori (induction_lemma_var predicate h_var) (induction_lemma_app predicate h_app)) (induction_lemma_abs predicate h_abs))
168
+ eori (eori (induction_lemma_var predicate h_var) (induction_lemma_app predicate h_app)) (induction_lemma_abs freshness_arg_Exp predicate h_abs))
156
169
)) @
157
170
rsyl (anl @ cong_of_equiv_exists @ cong_of_equiv_and_r @ cong_of_equiv_and_r @ bitr
158
171
(cong_of_equiv_mem (eq_to_intro_bi @ predicate_lemma_same_var predicate))
0 commit comments