16 thm list list list -> tactic |
16 thm list list list -> tactic |
17 val mk_corec_tac: thm list -> thm list -> thm -> thm -> thm -> thm -> Proof.context -> tactic |
17 val mk_corec_tac: thm list -> thm list -> thm -> thm -> thm -> thm -> Proof.context -> tactic |
18 val mk_ctor_iff_dtor_tac: Proof.context -> ctyp option list -> cterm -> cterm -> thm -> thm -> |
18 val mk_ctor_iff_dtor_tac: Proof.context -> ctyp option list -> cterm -> cterm -> thm -> thm -> |
19 tactic |
19 tactic |
20 val mk_disc_corec_iff_tac: thm list -> thm list -> thm list -> Proof.context -> tactic |
20 val mk_disc_corec_iff_tac: thm list -> thm list -> thm list -> Proof.context -> tactic |
|
21 val mk_disc_map_iff_tac: Proof.context -> cterm -> thm -> thm list -> thm list -> tactic |
21 val mk_exhaust_tac: Proof.context -> int -> thm list -> thm -> thm -> tactic |
22 val mk_exhaust_tac: Proof.context -> int -> thm list -> thm -> thm -> tactic |
22 val mk_half_distinct_tac: Proof.context -> thm -> thm -> thm list -> tactic |
23 val mk_half_distinct_tac: Proof.context -> thm -> thm -> thm list -> tactic |
23 val mk_induct_tac: Proof.context -> int -> int list -> int list list -> int list list list -> |
24 val mk_induct_tac: Proof.context -> int -> int list -> int list list -> int list list list -> |
24 thm list -> thm -> thm list -> thm list -> thm list -> thm list list -> tactic |
25 thm list -> thm -> thm list -> thm list -> thm list -> thm list list -> tactic |
25 val mk_inject_tac: Proof.context -> thm -> thm -> thm -> tactic |
26 val mk_inject_tac: Proof.context -> thm -> thm -> thm -> tactic |
110 EVERY (map3 (fn case_split_tac => fn corec_thm => fn disc => |
112 EVERY (map3 (fn case_split_tac => fn corec_thm => fn disc => |
111 HEADGOAL case_split_tac THEN unfold_thms_tac ctxt [corec_thm] THEN |
113 HEADGOAL case_split_tac THEN unfold_thms_tac ctxt [corec_thm] THEN |
112 HEADGOAL (asm_simp_tac (ss_only basic_simp_thms ctxt)) THEN |
114 HEADGOAL (asm_simp_tac (ss_only basic_simp_thms ctxt)) THEN |
113 (if is_refl disc then all_tac else HEADGOAL (rtac disc))) |
115 (if is_refl disc then all_tac else HEADGOAL (rtac disc))) |
114 (map rtac case_splits' @ [K all_tac]) corecs discs); |
116 (map rtac case_splits' @ [K all_tac]) corecs discs); |
|
117 |
|
118 fun mk_disc_map_iff_tac ctxt ct exhaust discs maps = |
|
119 TRYALL Goal.conjunction_tac THEN |
|
120 ALLGOALS (rtac (cterm_instantiate_pos [SOME ct] exhaust) THEN_ALL_NEW |
|
121 REPEAT_DETERM o hyp_subst_tac ctxt) THEN |
|
122 unfold_thms_tac ctxt maps THEN |
|
123 unfold_thms_tac ctxt (map (fn thm => thm RS @{thm iffD2[OF eq_False]} |
|
124 handle THM _ => thm RS @{thm iffD2[OF eq_True]}) discs) THEN |
|
125 ALLGOALS (rtac refl ORELSE' rtac TrueI); |
115 |
126 |
116 fun solve_prem_prem_tac ctxt = |
127 fun solve_prem_prem_tac ctxt = |
117 REPEAT o (eresolve_tac @{thms bexE rev_bexI} ORELSE' rtac @{thm rev_bexI[OF UNIV_I]} ORELSE' |
128 REPEAT o (eresolve_tac @{thms bexE rev_bexI} ORELSE' rtac @{thm rev_bexI[OF UNIV_I]} ORELSE' |
118 hyp_subst_tac ctxt ORELSE' resolve_tac @{thms disjI1 disjI2}) THEN' |
129 hyp_subst_tac ctxt ORELSE' resolve_tac @{thms disjI1 disjI2}) THEN' |
119 (rtac refl ORELSE' atac ORELSE' rtac @{thm singletonI}); |
130 (rtac refl ORELSE' atac ORELSE' rtac @{thm singletonI}); |
192 (1 upto nn) ns pre_rel_defs fp_abs_inverses abs_inverses dtor_ctors exhausts ctr_defss discsss |
203 (1 upto nn) ns pre_rel_defs fp_abs_inverses abs_inverses dtor_ctors exhausts ctr_defss discsss |
193 selsss)); |
204 selsss)); |
194 |
205 |
195 fun mk_set_empty_tac ctxt ct exhaust sets discs = |
206 fun mk_set_empty_tac ctxt ct exhaust sets discs = |
196 TRYALL Goal.conjunction_tac THEN |
207 TRYALL Goal.conjunction_tac THEN |
197 ALLGOALS(rtac (Ctr_Sugar_Util.cterm_instantiate_pos [SOME ct] exhaust) THEN_ALL_NEW |
208 ALLGOALS (rtac (cterm_instantiate_pos [SOME ct] exhaust) THEN_ALL_NEW |
198 REPEAT_DETERM o hyp_subst_tac ctxt) THEN |
209 REPEAT_DETERM o hyp_subst_tac ctxt) THEN |
199 unfold_thms_tac ctxt (sets @ map_filter (fn thm => |
210 unfold_thms_tac ctxt (sets @ map_filter (fn thm => |
200 SOME (thm RS @{thm iffD2[OF eq_False]}) handle THM _ => NONE) discs) THEN |
211 SOME (thm RS @{thm iffD2[OF eq_False]}) handle THM _ => NONE) discs) THEN |
201 ALLGOALS(rtac refl ORELSE' etac FalseE); |
212 ALLGOALS (rtac refl ORELSE' etac FalseE); |
202 |
213 |
203 end; |
214 end; |