avoid that var names get changed by resolution in Metis lambda-lifting
authorblanchet
Fri, 18 Nov 2011 11:47:12 +0100
changeset 45567 8e3891309a8e
parent 45566 da05ce2de5a8
child 45568 211a6e6cbc04
avoid that var names get changed by resolution in Metis lambda-lifting
src/HOL/Tools/Meson/meson.ML
src/HOL/Tools/Metis/metis_tactic.ML
--- a/src/HOL/Tools/Meson/meson.ML	Fri Nov 18 11:47:12 2011 +0100
+++ b/src/HOL/Tools/Meson/meson.ML	Fri Nov 18 11:47:12 2011 +0100
@@ -12,6 +12,7 @@
   val unfold_set_consts : bool Config.T
   val max_clauses : int Config.T
   val term_pair_of: indexname * (typ * 'a) -> term * 'a
+  val first_order_resolve : thm -> thm -> thm
   val size_of_subgoals: thm -> int
   val has_too_many_clauses: Proof.context -> term -> bool
   val make_cnf:
--- a/src/HOL/Tools/Metis/metis_tactic.ML	Fri Nov 18 11:47:12 2011 +0100
+++ b/src/HOL/Tools/Metis/metis_tactic.ML	Fri Nov 18 11:47:12 2011 +0100
@@ -79,7 +79,8 @@
         else case term_of ct of
           Abs _ =>
           Conv.abs_conv (conv false o snd) ctxt ct
-          |> wrap ? (fn th => th RS @{thm Metis.eq_lambdaI})
+          |> wrap
+             ? (fn th => Meson.first_order_resolve th @{thm Metis.eq_lambdaI})
         | _ => Conv.comb_conv (conv true ctxt) ct
       val eqth = conv true ctxt (cprop_of th)
     in Thm.equal_elim eqth th end