src/HOL/Codatatype/Tools/bnf_wrap_tactics.ML
changeset 49118 b815fa776b91
parent 49116 3d520eec2746
child 49122 83515378d4d7
equal deleted inserted replaced
49117:000deee4913e 49118:b815fa776b91
     7 
     7 
     8 signature BNF_WRAP_TACTICS =
     8 signature BNF_WRAP_TACTICS =
     9 sig
     9 sig
    10   val mk_case_cong_tac: thm -> thm list -> tactic
    10   val mk_case_cong_tac: thm -> thm list -> tactic
    11   val mk_case_eq_tac: Proof.context -> thm -> thm list -> thm list list -> thm list list -> tactic
    11   val mk_case_eq_tac: Proof.context -> thm -> thm list -> thm list list -> thm list list -> tactic
    12   val mk_ctr_sel_tac: Proof.context -> int -> thm -> thm list -> tactic
    12   val mk_collapse_tac: Proof.context -> int -> thm -> thm list -> tactic
    13   val mk_disc_exhaust_tac: int -> thm -> thm list -> tactic
    13   val mk_disc_exhaust_tac: int -> thm -> thm list -> tactic
    14   val mk_half_disc_exclus_tac: int -> thm -> thm -> tactic
    14   val mk_half_disc_exclus_tac: int -> thm -> thm -> tactic
    15   val mk_nchotomy_tac: int -> thm -> tactic
    15   val mk_nchotomy_tac: int -> thm -> tactic
    16   val mk_not_other_disc_def_tac: Proof.context -> thm -> thm -> thm -> tactic
    16   val mk_not_other_disc_def_tac: Proof.context -> thm -> thm -> thm -> tactic
    17   val mk_other_half_disc_exclus_tac: thm -> tactic
    17   val mk_other_half_disc_exclus_tac: thm -> tactic
    54 fun mk_disc_exhaust_tac n exhaust discIs =
    54 fun mk_disc_exhaust_tac n exhaust discIs =
    55   (rtac exhaust THEN'
    55   (rtac exhaust THEN'
    56    EVERY' (map2 (fn k => fn discI =>
    56    EVERY' (map2 (fn k => fn discI =>
    57      dtac discI THEN' select_prem_tac n (etac @{thm meta_mp}) k THEN' atac) (1 upto n) discIs)) 1;
    57      dtac discI THEN' select_prem_tac n (etac @{thm meta_mp}) k THEN' atac) (1 upto n) discIs)) 1;
    58 
    58 
    59 fun mk_ctr_sel_tac ctxt m discD sel_thms =
    59 fun mk_collapse_tac ctxt m discD sel_thms =
    60   (dtac discD THEN'
    60   (dtac discD THEN'
    61    (if m = 0 then
    61    (if m = 0 then
    62       atac
    62       atac
    63     else
    63     else
    64       REPEAT_DETERM_N m o etac exE THEN'
    64       REPEAT_DETERM_N m o etac exE THEN'