# HG changeset patch # User wenzelm # Date 1427637672 -7200 # Node ID fc3d7eaa486e844a9b7e7cab8c6ba02fe7475fe7 # Parent 2333045edb78c786991dc277322d7ba80b9fcd82 tuned; diff -r 2333045edb78 -r fc3d7eaa486e src/Pure/Tools/rule_insts.ML --- a/src/Pure/Tools/rule_insts.ML Sat Mar 28 21:05:02 2015 +0100 +++ b/src/Pure/Tools/rule_insts.ML Sun Mar 29 16:01:12 2015 +0200 @@ -228,20 +228,17 @@ let (* goal context *) - val (params, param_ctxt) = goal_context (Thm.term_of cgoal) ctxt; + val (params, goal_ctxt) = goal_context (Thm.term_of cgoal) ctxt; val paramTs = map #2 params; - (* local fixes *) - - val fixes_ctxt = param_ctxt - |> Proof_Context.read_vars fixes |-> Proof_Context.add_fixes |> #2; + (* local fixes and instantiation *) - val ((inst_tvars, inst_vars), inst_ctxt) = read_insts thm mixed_insts fixes_ctxt; + val ((inst_tvars, inst_vars), inst_ctxt) = goal_ctxt + |> Proof_Context.read_vars fixes |-> Proof_Context.add_fixes |> #2 + |> read_insts thm mixed_insts; - fun add_fixed (Free (x, _)) = - if Variable.newly_fixed inst_ctxt param_ctxt x - then insert (op =) x else I + fun add_fixed (Free (x, _)) = Variable.newly_fixed inst_ctxt goal_ctxt x ? insert (op =) x | add_fixed _ = I; val fixed = fold (Term.fold_aterms add_fixed o #2) inst_vars []; @@ -250,7 +247,7 @@ val inc = Thm.maxidx_of st + 1; val lift_type = Logic.incr_tvar inc; - fun lift_var ((a, j), T) = Var ((a, j + inc), paramTs ---> Logic.incr_tvar inc T); + fun lift_var ((a, j), T) = Var ((a, j + inc), paramTs ---> lift_type T); fun lift_term t = fold_rev Term.absfree params (Logic.incr_indexes (fixed, paramTs, inc) t); val inst_tvars' = inst_tvars @@ -260,9 +257,9 @@ val thm' = Thm.lift_rule cgoal thm |> Drule.instantiate_normalize (inst_tvars', inst_vars') - |> singleton (Variable.export inst_ctxt param_ctxt); + |> singleton (Variable.export inst_ctxt goal_ctxt); in - compose_tac param_ctxt (bires_flag, thm', Thm.nprems_of thm) i + compose_tac goal_ctxt (bires_flag, thm', Thm.nprems_of thm) i end) i st; val res_inst_tac = bires_inst_tac false;