diff -r 4af8a92396ce -r c4f31f1564b7 Nominal/nominal_mutual.ML --- a/Nominal/nominal_mutual.ML Mon Jul 20 11:21:59 2015 +0100 +++ b/Nominal/nominal_mutual.ML Sat Mar 19 21:06:48 2016 +0000 @@ -19,7 +19,7 @@ -> term list -> local_theory -> ((thm (* goalstate *) - * (thm -> Nominal_Function_Common.nominal_function_result) (* proof continuation *) + * (Proof.context -> thm -> Nominal_Function_Common.nominal_function_result) (* proof continuation *) ) * local_theory) end @@ -330,21 +330,23 @@ val induct_thm = case induct_thms of [thm] => thm - |> Drule.gen_all (Variable.maxidx_of ctxt') + |> Variable.gen_all ctxt' |> Thm.permute_prems 0 1 |> (fn thm => atomize_rule ctxt' (length (Thm.prems_of thm) - 1) thm) | thms => thms - |> map (Drule.gen_all (Variable.maxidx_of ctxt')) + |> map (Variable.gen_all ctxt') |> map (Rule_Cases.add_consumes 1) |> snd o Rule_Cases.strict_mutual_rule ctxt' |> atomize_concl ctxt' fun tac ctxt thm = - rtac (Drule.gen_all (Variable.maxidx_of ctxt) thm) THEN_ALL_NEW assume_tac ctxt + resolve_tac ctxt [Variable.gen_all ctxt thm] + THEN_ALL_NEW assume_tac ctxt in Goal.prove ctxt' (flat arg_namess) [] goal (fn {context = ctxt'', ...} => - HEADGOAL (DETERM o (rtac induct_thm) THEN' RANGE (map (tac ctxt'') eqvts_thms))) + HEADGOAL (DETERM o (resolve_tac ctxt'' [induct_thm]) THEN' + RANGE (map (tac ctxt'') eqvts_thms))) |> singleton (Proof_Context.export ctxt' ctxt) |> split_conj_thm |> map (fn th => th RS mp) @@ -441,7 +443,7 @@ val ((G_aux, GIntro_aux_thms, _, G_aux_induct), lthy''') = Nominal_Function_Core.inductive_def ((Binding.name G_name_aux, G_type), NoSyn) GIntros_aux lthy'' - val mutual_cont = mk_partial_rules_mutual lthy''' cont mutual' + fun mutual_cont ctxt = mk_partial_rules_mutual lthy''' (cont ctxt) mutual' (* proof of equivalence between graph and auxiliary graph *) val x = Var(("x", 0), ST) @@ -474,22 +476,25 @@ val simpset1 = put_simpset HOL_ss lthy''' addsimps simp_thms val inj_thm = Goal.prove lthy''' [] [] goal_inj - (K (HEADGOAL (DETERM o etac G_aux_induct THEN_ALL_NEW asm_simp_tac simpset1))) + (K (HEADGOAL (DETERM o eresolve_tac lthy''' [G_aux_induct] + THEN_ALL_NEW asm_simp_tac simpset1))) fun aux_tac thm = - rtac (Drule.gen_all (Variable.maxidx_of lthy''') thm) THEN_ALL_NEW + resolve_tac lthy''' [Variable.gen_all lthy''' thm] THEN_ALL_NEW asm_full_simp_tac (simpset1 addsimps [inj_thm]) val iff1_thm = Goal.prove lthy''' [] [] goal_iff1 - (K (HEADGOAL (DETERM o etac G_aux_induct THEN' RANGE (map aux_tac GIntro_thms)))) - |> Drule.gen_all (Variable.maxidx_of lthy''') + (K (HEADGOAL (DETERM o eresolve_tac lthy''' [G_aux_induct] + THEN' RANGE (map aux_tac GIntro_thms)))) + |> Variable.gen_all lthy''' val iff2_thm = Goal.prove lthy''' [] [] goal_iff2 - (K (HEADGOAL (DETERM o etac G_induct THEN' RANGE + (K (HEADGOAL (DETERM o eresolve_tac lthy''' [G_induct] THEN' RANGE (map (aux_tac o simplify simpset0) GIntro_aux_thms)))) - |> Drule.gen_all (Variable.maxidx_of lthy''') + |> Variable.gen_all lthy''' val iff_thm = Goal.prove lthy''' [] [] (HOLogic.mk_Trueprop (HOLogic.mk_eq (G, G_aux))) - (K (HEADGOAL (EVERY' ((map rtac @{thms ext ext iffI}) @ [etac iff2_thm, etac iff1_thm])))) + (K (HEADGOAL (EVERY' ((map (resolve_tac lthy''' o single) @{thms ext ext iffI}) @ + [eresolve_tac lthy''' [iff2_thm], eresolve_tac lthy''' [iff1_thm]])))) val tac = HEADGOAL (simp_tac (put_simpset HOL_basic_ss lthy''' addsimps [iff_thm])) val goalstate' =