isabelle - Simplify meta-universally quantified assumptions with equality -
sorry not being able come shorter example.
i have proof state of
1. ⋀e1 t1 l e2 t2 g1. typing (g1 @ (x, u) # g2) e1 t1 ⟹ typing (g1 @ g2) e1 t1 ⟹ (⋀xa. xa |∉| l ⟹ typing ((xa, t1) # g1 @ (x, u) # g2) (open e2 (exp_fvar xa)) t2) ⟹ (⋀xa g1a. xa |∉| l ⟹ (xa, t1) # g1 = g1a ⟹ x |∉| fv (open e2 (exp_fvar xa)) ⟹ typing (g1a @ g2) (open e2 (exp_fvar xa)) t2) ⟹ x |∉| fv e1 ⟹ x |∉| fv e2 ⟹ typing (g1 @ g2) (exp_let e1 e2) t2
note fourth premise (the large one): universally meta-quantifies on g1a
, g1a
determined equation there. substitute (and simplify conclusion of premise) , auto
able solve goal.
can make simplifier solve this?
i guess small example is
lemma foo: "(⋀ g. x#xs = g ⟹ p x ⟹ f g) ⟹ f (x#xs)" apply simp
there related question equalities under existentials.
this problem can solved reliably using simproc. induct
proof method in ~~/src/tools/induct.ml
has implementation this, might able adapt code. idea move equations front using induct.rearrange_eqs_simproc
, use appropriate 1 point rules eliminate equality.
Comments
Post a Comment