# HG changeset patch # User wenzelm # Date 1427026234 -3600 # Node ID cdd0f4d0835e8ae0e6a515693136e7e85b4a7eae # Parent d1b83f7ff6fece26a8a25e7fe2ed346a0bb98acb tuned; diff -r d1b83f7ff6fe -r cdd0f4d0835e src/Pure/Tools/rule_insts.ML --- a/src/Pure/Tools/rule_insts.ML Sun Mar 22 12:45:34 2015 +0100 +++ b/src/Pure/Tools/rule_insts.ML Sun Mar 22 13:10:34 2015 +0100 @@ -194,7 +194,7 @@ fun bires_inst_tac bires_flag ctxt mixed_insts thm i st = CSUBGOAL (fn (cgoal, _) => let - (* goal context *) + (* goal parameters *) val goal = Thm.term_of cgoal; val params = @@ -202,20 +202,19 @@ (*as they are printed: bound variables with the same name are renamed*) |> Term.rename_wrt_term goal |> rev; - val (param_names, ctxt') = ctxt + val (param_names, param_ctxt) = ctxt |> Variable.declare_thm thm |> Thm.fold_terms Variable.declare_constraints st |> Proof_Context.add_fixes (map (fn (x, T) => (Binding.name x, SOME T, NoSyn)) params) ||> Proof_Context.set_mode Proof_Context.mode_schematic; + val paramTs = map #2 params; (* lift and instantiate rule *) - val (inst_tvars, inst_vars) = read_insts ctxt' mixed_insts thm; + val (inst_tvars, inst_vars) = read_insts param_ctxt mixed_insts thm; val inc = Thm.maxidx_of st + 1; - val paramTs = map #2 params; - fun lift_var ((a, j), T) = Var ((a, j + inc), paramTs ---> Logic.incr_tvar inc T); fun lift_term t = @@ -223,15 +222,15 @@ (Logic.incr_indexes (paramTs, inc) t); val inst_tvars' = inst_tvars - |> map (apply2 (Thm.ctyp_of ctxt' o Logic.incr_tvar inc) o apfst TVar); + |> map (apply2 (Thm.ctyp_of param_ctxt o Logic.incr_tvar inc) o apfst TVar); val inst_vars' = inst_vars - |> map (fn (v, t) => apply2 (Thm.cterm_of ctxt') (lift_var v, lift_term t)); + |> map (fn (v, t) => apply2 (Thm.cterm_of param_ctxt) (lift_var v, lift_term t)); val thm' = Drule.instantiate_normalize (inst_tvars', inst_vars') (Thm.lift_rule cgoal thm); in - compose_tac ctxt' (bires_flag, thm', Thm.nprems_of thm) i + compose_tac param_ctxt (bires_flag, thm', Thm.nprems_of thm) i end) i st; val res_inst_tac = bires_inst_tac false;