src/Provers/clasimp.ML
changeset 82870 c4b692b61e96
parent 82869 a28bbeb76e22
child 82871 df8de6dacede
equal deleted inserted replaced
82869:a28bbeb76e22 82870:c4b692b61e96
    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;