25 val force_tac: Proof.context -> int -> tactic |
25 val force_tac: Proof.context -> int -> tactic |
26 val fast_force_tac: Proof.context -> int -> tactic |
26 val fast_force_tac: Proof.context -> int -> tactic |
27 val slow_simp_tac: Proof.context -> int -> tactic |
27 val slow_simp_tac: Proof.context -> int -> tactic |
28 val best_simp_tac: Proof.context -> int -> tactic |
28 val best_simp_tac: Proof.context -> int -> tactic |
29 val iff_add: attribute |
29 val iff_add: attribute |
30 val iff_add': attribute |
30 val iff_add_pure: attribute |
31 val iff_del: attribute |
31 val iff_del: attribute |
32 val iff_modifiers: Method.modifier parser list |
32 val iff_modifiers: Method.modifier parser list |
33 val clasimp_modifiers: Method.modifier parser list |
33 val clasimp_modifiers: Method.modifier parser list |
34 end; |
34 end; |
35 |
35 |
100 val iff_add = |
100 val iff_add = |
101 Thm.declaration_attribute (fn th => |
101 Thm.declaration_attribute (fn th => |
102 Thm.attribute_declaration (iff_decl safe_atts unsafe_atts) th #> |
102 Thm.attribute_declaration (iff_decl safe_atts unsafe_atts) th #> |
103 Thm.attribute_declaration Simplifier.simp_add th); |
103 Thm.attribute_declaration Simplifier.simp_add th); |
104 |
104 |
105 val iff_add' = iff_decl pure_atts pure_atts; |
105 val iff_add_pure = iff_decl pure_atts pure_atts; |
106 |
106 |
107 val iff_del = |
107 val iff_del = |
108 Thm.declaration_attribute (fn th => |
108 Thm.declaration_attribute (fn th => |
109 Thm.attribute_declaration (iff_decl del_atts del_atts) th #> |
109 Thm.attribute_declaration (iff_decl del_atts del_atts) th #> |
110 Thm.attribute_declaration Simplifier.simp_del th); |
110 Thm.attribute_declaration Simplifier.simp_del th); |
186 val _ = |
186 val _ = |
187 Theory.setup |
187 Theory.setup |
188 (Attrib.setup \<^binding>\<open>iff\<close> |
188 (Attrib.setup \<^binding>\<open>iff\<close> |
189 (Scan.lift |
189 (Scan.lift |
190 (Args.del >> K iff_del || |
190 (Args.del >> K iff_del || |
191 Scan.option Args.add -- Args.query >> K iff_add' || |
191 Scan.option Args.add -- Args.query >> K iff_add_pure || |
192 Scan.option Args.add >> K iff_add)) |
192 Scan.option Args.add >> K iff_add)) |
193 "declaration of Simplifier / Classical rules"); |
193 "declaration of Simplifier / Classical rules"); |
194 |
194 |
195 |
195 |
196 (* method modifiers *) |
196 (* method modifiers *) |
197 |
197 |
198 val iffN = "iff"; |
198 val iffN = "iff"; |
199 |
199 |
200 val iff_modifiers = |
200 val iff_modifiers = |
201 [Args.$$$ iffN -- Scan.option Args.add -- Args.colon >> K (Method.modifier iff_add \<^here>), |
201 [Args.$$$ iffN -- Scan.option Args.add -- Args.colon >> K (Method.modifier iff_add \<^here>), |
202 Args.$$$ iffN -- Scan.option Args.add -- Args.query_colon >> K (Method.modifier iff_add' \<^here>), |
202 Args.$$$ iffN -- Scan.option Args.add -- Args.query_colon >> K (Method.modifier iff_add_pure \<^here>), |
203 Args.$$$ iffN -- Args.del -- Args.colon >> K (Method.modifier iff_del \<^here>)]; |
203 Args.$$$ iffN -- Args.del -- Args.colon >> K (Method.modifier iff_del \<^here>)]; |
204 |
204 |
205 val clasimp_modifiers = |
205 val clasimp_modifiers = |
206 Simplifier.simp_modifiers @ Splitter.split_modifiers @ |
206 Simplifier.simp_modifiers @ Splitter.split_modifiers @ |
207 Classical.cla_modifiers @ iff_modifiers; |
207 Classical.cla_modifiers @ iff_modifiers; |