File ‹rew.ML›
fun peEs 0 = []
| peEs n = @{thm EqE} :: map (curry (op RS) @{thm ProdE}) (peEs (n-1));
fun prove_cond_tac ctxt = eresolve_tac ctxt (peEs 5);
structure TSimp_data: TSIMP_DATA =
struct
val refl = @{thm refl_elem}
val sym = @{thm sym_elem}
val trans = @{thm trans_elem}
val refl_red = @{thm refl_red}
val trans_red = @{thm trans_red}
val red_if_equal = @{thm red_if_equal}
val default_rls = @{thms comp_rls}
val routine_tac = routine_tac @{thms routine_rls}
end;
structure TSimp = TSimpFun (TSimp_data);
val standard_congr_rls = @{thms intrL2_rls} @ @{thms elimL_rls};
fun make_rew_tac ctxt ntac =
TRY (eqintr_tac ctxt) THEN TRYALL (resolve_tac ctxt [TSimp.split_eqn]) THEN
ntac;
fun rew_tac ctxt thms = make_rew_tac ctxt
(TSimp.norm_tac ctxt (standard_congr_rls, thms));
fun hyp_rew_tac ctxt thms = make_rew_tac ctxt
(TSimp.cond_norm_tac ctxt (prove_cond_tac ctxt, standard_congr_rls, thms));