diff -r 7e2c8a63a8f8 -r 2da59cdf531c src/HOL/HOL.thy --- a/src/HOL/HOL.thy Sat Jul 25 23:15:37 2015 +0200 +++ b/src/HOL/HOL.thy Sat Jul 25 23:41:53 2015 +0200 @@ -1190,15 +1190,6 @@ simproc_setup let_simp ("Let x f") = \ let - val (f_Let_unfold, x_Let_unfold) = - let val [(_ $ (f $ x) $ _)] = Thm.prems_of @{thm Let_unfold} - in apply2 (Thm.cterm_of @{context}) (f, x) end - val (f_Let_folded, x_Let_folded) = - let val [(_ $ (f $ x) $ _)] = Thm.prems_of @{thm Let_folded} - in apply2 (Thm.cterm_of @{context}) (f, x) end; - val g_Let_folded = - let val [(_ $ _ $ (g $ _))] = Thm.prems_of @{thm Let_folded} - in Thm.cterm_of @{context} g end; fun count_loose (Bound i) k = if i >= k then 1 else 0 | count_loose (s $ t) k = count_loose s k + count_loose t k | count_loose (Abs (_, _, t)) k = count_loose t (k + 1) @@ -1234,7 +1225,7 @@ if g aconv g' then let val rl = - cterm_instantiate [(f_Let_unfold, cf), (x_Let_unfold, cx)] @{thm Let_unfold}; + infer_instantiate ctxt [(("f", 0), cf), (("x", 0), cx)] @{thm Let_unfold}; in SOME (rl OF [fx_g]) end else if (Envir.beta_eta_contract f) aconv (Envir.beta_eta_contract abs_g') then NONE (*avoid identity conversion*) @@ -1243,10 +1234,10 @@ val g'x = abs_g' $ x; val g_g'x = Thm.symmetric (Thm.beta_conversion false (Thm.cterm_of ctxt g'x)); val rl = - @{thm Let_folded} |> cterm_instantiate - [(f_Let_folded, Thm.cterm_of ctxt f), - (x_Let_folded, cx), - (g_Let_folded, Thm.cterm_of ctxt abs_g')]; + @{thm Let_folded} |> infer_instantiate ctxt + [(("f", 0), Thm.cterm_of ctxt f), + (("x", 0), cx), + (("g", 0), Thm.cterm_of ctxt abs_g')]; in SOME (rl OF [Thm.transitive fx_g g_g'x]) end end | _ => NONE)