src/HOL/Tools/BNF/bnf_def_tactics.ML
changeset 58446 e89f57d1e46c
parent 58106 c8cba801c483
child 59498 50b60f501b05
equal deleted inserted replaced
58445:86b5b02ef33a 58446:e89f57d1e46c
   241     fun last_tac iffD =
   241     fun last_tac iffD =
   242       HEADGOAL (etac rel_mono_strong) THEN
   242       HEADGOAL (etac rel_mono_strong) THEN
   243       REPEAT_DETERM (HEADGOAL (etac (@{thm predicate2_transferD} RS iffD) THEN'
   243       REPEAT_DETERM (HEADGOAL (etac (@{thm predicate2_transferD} RS iffD) THEN'
   244         REPEAT_DETERM o atac));
   244         REPEAT_DETERM o atac));
   245   in
   245   in
   246     REPEAT_DETERM (HEADGOAL (rtac @{thm rel_funI})) THEN
   246     REPEAT_DETERM (HEADGOAL (rtac rel_funI)) THEN
   247     (HEADGOAL (hyp_subst_tac ctxt THEN' rtac refl) ORELSE
   247     (HEADGOAL (hyp_subst_tac ctxt THEN' rtac refl) ORELSE
   248      REPEAT_DETERM (HEADGOAL (eresolve_tac (Tactic.make_elim (in_rel RS iffD1) ::
   248      REPEAT_DETERM (HEADGOAL (eresolve_tac (Tactic.make_elim (in_rel RS iffD1) ::
   249        @{thms exE conjE CollectE}))) THEN
   249        @{thms exE conjE CollectE}))) THEN
   250      HEADGOAL (hyp_subst_tac ctxt) THEN unfold_thms_tac ctxt rel_map THEN HEADGOAL (rtac iffI) THEN
   250      HEADGOAL (hyp_subst_tac ctxt) THEN unfold_thms_tac ctxt rel_map THEN HEADGOAL (rtac iffI) THEN
   251      last_tac iffD1 THEN last_tac iffD2)
   251      last_tac iffD1 THEN last_tac iffD2)
   258       rtac CollectI THEN' CONJ_WRAP' (fn thm =>
   258       rtac CollectI THEN' CONJ_WRAP' (fn thm =>
   259         etac (thm RS
   259         etac (thm RS
   260           @{thm ord_eq_le_trans[OF _ subset_trans[OF image_mono convol_image_vimage2p]]}))
   260           @{thm ord_eq_le_trans[OF _ subset_trans[OF image_mono convol_image_vimage2p]]}))
   261       set_maps;
   261       set_maps;
   262   in
   262   in
   263     REPEAT_DETERM_N n (HEADGOAL (rtac @{thm rel_funI})) THEN
   263     REPEAT_DETERM_N n (HEADGOAL (rtac rel_funI)) THEN
   264     unfold_thms_tac ctxt @{thms rel_fun_iff_leq_vimage2p} THEN
   264     unfold_thms_tac ctxt @{thms rel_fun_iff_leq_vimage2p} THEN
   265     HEADGOAL (EVERY' [rtac @{thm order_trans}, rtac rel_mono, REPEAT_DETERM_N n o atac,
   265     HEADGOAL (EVERY' [rtac @{thm order_trans}, rtac rel_mono, REPEAT_DETERM_N n o atac,
   266       rtac @{thm predicate2I}, dtac (in_rel RS iffD1),
   266       rtac @{thm predicate2I}, dtac (in_rel RS iffD1),
   267       REPEAT_DETERM o eresolve_tac [exE, CollectE, conjE], hyp_subst_tac ctxt,
   267       REPEAT_DETERM o eresolve_tac [exE, CollectE, conjE], hyp_subst_tac ctxt,
   268       rtac @{thm vimage2pI}, rtac (in_rel RS iffD2), rtac exI, rtac conjI, in_tac,
   268       rtac @{thm vimage2pI}, rtac (in_rel RS iffD2), rtac exI, rtac conjI, in_tac,
   338   unfold_thms_tac ctxt wit_defs THEN HEADGOAL (EVERY' (map (fn thm =>
   338   unfold_thms_tac ctxt wit_defs THEN HEADGOAL (EVERY' (map (fn thm =>
   339     dtac (thm RS equalityD1 RS set_mp) THEN' etac imageE THEN' atac) set_maps)) THEN ALLGOALS atac;
   339     dtac (thm RS equalityD1 RS set_mp) THEN' etac imageE THEN' atac) set_maps)) THEN ALLGOALS atac;
   340 
   340 
   341 fun mk_set_transfer_tac ctxt in_rel set_maps =
   341 fun mk_set_transfer_tac ctxt in_rel set_maps =
   342   Goal.conjunction_tac 1 THEN
   342   Goal.conjunction_tac 1 THEN
   343   EVERY (map (fn set_map => HEADGOAL (rtac @{thm rel_funI}) THEN
   343   EVERY (map (fn set_map => HEADGOAL (rtac rel_funI) THEN
   344   REPEAT_DETERM (HEADGOAL (eresolve_tac (Tactic.make_elim (in_rel RS iffD1) ::
   344   REPEAT_DETERM (HEADGOAL (eresolve_tac (Tactic.make_elim (in_rel RS iffD1) ::
   345     @{thms exE conjE CollectE}))) THEN
   345     @{thms exE conjE CollectE}))) THEN
   346   HEADGOAL (hyp_subst_tac ctxt THEN' rtac (@{thm iffD2[OF arg_cong2]} OF [set_map, set_map]) THEN'
   346   HEADGOAL (hyp_subst_tac ctxt THEN' rtac (@{thm iffD2[OF arg_cong2]} OF [set_map, set_map]) THEN'
   347     rtac @{thm rel_setI}) THEN
   347     rtac @{thm rel_setI}) THEN
   348   REPEAT (HEADGOAL (etac imageE THEN' dtac @{thm set_mp} THEN' atac THEN'
   348   REPEAT (HEADGOAL (etac imageE THEN' dtac @{thm set_mp} THEN' atac THEN'