src/HOL/Tools/BNF/bnf_def_tactics.ML
changeset 67399 eab6ce8368fa
parent 67223 711eec20aecd
child 74545 6c123914883a
equal deleted inserted replaced
67398:5eb932e604a2 67399:eab6ce8368fa
   208     fun in_tac nthO_in = rtac ctxt @{thm CollectI} THEN'
   208     fun in_tac nthO_in = rtac ctxt @{thm CollectI} THEN'
   209         CONJ_WRAP' (fn thm => EVERY' [rtac ctxt (thm RS ord_eq_le_trans),
   209         CONJ_WRAP' (fn thm => EVERY' [rtac ctxt (thm RS ord_eq_le_trans),
   210           rtac ctxt @{thm image_subsetI}, rtac ctxt nthO_in, etac ctxt set_mp, assume_tac ctxt]) set_maps;
   210           rtac ctxt @{thm image_subsetI}, rtac ctxt nthO_in, etac ctxt set_mp, assume_tac ctxt]) set_maps;
   211     val rel_OO_Grps_tac = if null rel_OO_Grps then K all_tac
   211     val rel_OO_Grps_tac = if null rel_OO_Grps then K all_tac
   212       else rtac ctxt (hd rel_OO_Grps RS ord_eq_le_trans) THEN'
   212       else rtac ctxt (hd rel_OO_Grps RS ord_eq_le_trans) THEN'
   213         rtac ctxt (@{thm arg_cong2[of _ _ _ _ "op OO"]} OF (replicate 2 (hd rel_OO_Grps RS sym)) RSN
   213         rtac ctxt (@{thm arg_cong2[of _ _ _ _ "(OO)"]} OF (replicate 2 (hd rel_OO_Grps RS sym)) RSN
   214           (2, ord_le_eq_trans));
   214           (2, ord_le_eq_trans));
   215   in
   215   in
   216     if null set_maps then rtac ctxt (rel_eq RS @{thm leq_OOI}) 1
   216     if null set_maps then rtac ctxt (rel_eq RS @{thm leq_OOI}) 1
   217     else
   217     else
   218       EVERY' [rel_OO_Grps_tac, rtac ctxt @{thm predicate2I},
   218       EVERY' [rel_OO_Grps_tac, rtac ctxt @{thm predicate2I},
   407 fun mk_pred_transfer_tac ctxt n in_rel pred_map pred_cong =
   407 fun mk_pred_transfer_tac ctxt n in_rel pred_map pred_cong =
   408   HEADGOAL (EVERY' [REPEAT_DETERM_N (n + 1) o rtac ctxt rel_funI, dtac ctxt (in_rel RS iffD1),
   408   HEADGOAL (EVERY' [REPEAT_DETERM_N (n + 1) o rtac ctxt rel_funI, dtac ctxt (in_rel RS iffD1),
   409     REPEAT_DETERM o eresolve_tac ctxt @{thms exE conjE CollectE}, hyp_subst_tac ctxt,
   409     REPEAT_DETERM o eresolve_tac ctxt @{thms exE conjE CollectE}, hyp_subst_tac ctxt,
   410     rtac ctxt (box_equals OF [@{thm _}, pred_map RS sym, pred_map RS sym]),
   410     rtac ctxt (box_equals OF [@{thm _}, pred_map RS sym, pred_map RS sym]),
   411     rtac ctxt (refl RS pred_cong), REPEAT_DETERM_N n o
   411     rtac ctxt (refl RS pred_cong), REPEAT_DETERM_N n o
   412       (etac ctxt @{thm rel_fun_Collect_case_prodD[where B="op ="]} THEN_ALL_NEW assume_tac ctxt)]);
   412       (etac ctxt @{thm rel_fun_Collect_case_prodD[where B="(=)"]} THEN_ALL_NEW assume_tac ctxt)]);
   413 
   413 
   414 end;
   414 end;