src/HOL/Tools/BNF/bnf_fp_def_sugar_tactics.ML
changeset 58044 b5cdfb352814
parent 58020 95d6488f1204
child 58093 6f37a300c82b
equal deleted inserted replaced
58043:a90847f03ec8 58044:b5cdfb352814
    38   val mk_rel_induct0_tac: Proof.context -> thm -> thm list -> cterm list -> thm list ->
    38   val mk_rel_induct0_tac: Proof.context -> thm -> thm list -> cterm list -> thm list ->
    39     thm list list -> thm list -> thm list -> thm list -> thm list -> tactic
    39     thm list list -> thm list -> thm list -> thm list -> thm list -> tactic
    40   val mk_rel_sel_tac: Proof.context -> cterm -> cterm -> thm -> thm list -> thm list -> thm list ->
    40   val mk_rel_sel_tac: Proof.context -> cterm -> cterm -> thm -> thm list -> thm list -> thm list ->
    41     thm list -> thm list -> tactic
    41     thm list -> thm list -> tactic
    42   val mk_set_cases_tac: Proof.context -> cterm -> thm list -> thm -> thm list -> tactic
    42   val mk_set_cases_tac: Proof.context -> cterm -> thm list -> thm -> thm list -> tactic
    43   val mk_set_empty_tac: Proof.context -> cterm -> thm -> thm list -> thm list -> tactic
       
    44   val mk_set_induct0_tac: Proof.context -> cterm list -> thm list -> thm list -> thm list ->
    43   val mk_set_induct0_tac: Proof.context -> cterm list -> thm list -> thm list -> thm list ->
    45     thm list -> thm list -> thm list -> thm list -> tactic
    44     thm list -> thm list -> thm list -> thm list -> tactic
    46   val mk_set_intros_tac: Proof.context -> thm list -> tactic
    45   val mk_set_intros_tac: Proof.context -> thm list -> tactic
    47   val mk_set_sel_tac: Proof.context -> cterm -> thm -> thm list -> thm list -> thm list -> tactic
    46   val mk_set_sel_tac: Proof.context -> cterm -> thm -> thm list -> thm list -> thm list -> tactic
    48 end;
    47 end;
   314   unfold_thms_tac ctxt sets THEN
   313   unfold_thms_tac ctxt sets THEN
   315   REPEAT_DETERM (HEADGOAL
   314   REPEAT_DETERM (HEADGOAL
   316     (eresolve_tac @{thms FalseE emptyE singletonE UnE UN_E insertE} ORELSE'
   315     (eresolve_tac @{thms FalseE emptyE singletonE UnE UN_E insertE} ORELSE'
   317      hyp_subst_tac ctxt ORELSE'
   316      hyp_subst_tac ctxt ORELSE'
   318      SELECT_GOAL (SOLVE (HEADGOAL (eresolve_tac assms THEN' REPEAT_DETERM o atac)))));
   317      SELECT_GOAL (SOLVE (HEADGOAL (eresolve_tac assms THEN' REPEAT_DETERM o atac)))));
   319 
       
   320 fun mk_set_empty_tac ctxt ct exhaust sets discs =
       
   321   TRYALL Goal.conjunction_tac THEN
       
   322   ALLGOALS (rtac (cterm_instantiate_pos [SOME ct] exhaust) THEN_ALL_NEW
       
   323     REPEAT_DETERM o hyp_subst_tac ctxt) THEN
       
   324   unfold_thms_tac ctxt (sets @ map_filter (fn thm =>
       
   325     SOME (thm RS eqFalseI) handle THM _ => NONE) discs) THEN
       
   326   ALLGOALS (rtac refl ORELSE' etac FalseE);
       
   327 
   318 
   328 fun mk_set_intros_tac ctxt sets =
   319 fun mk_set_intros_tac ctxt sets =
   329   TRYALL Goal.conjunction_tac THEN
   320   TRYALL Goal.conjunction_tac THEN
   330   unfold_thms_tac ctxt sets THEN
   321   unfold_thms_tac ctxt sets THEN
   331   TRYALL (REPEAT o
   322   TRYALL (REPEAT o