src/Pure/simplifier.ML
changeset 68046 6aba668aea78
parent 67561 f0b11413f1c9
child 68403 223172b97d0b
equal deleted inserted replaced
68041:d45b78cb86cf 68046:6aba668aea78
    30   include BASIC_SIMPLIFIER
    30   include BASIC_SIMPLIFIER
    31   val map_ss: (Proof.context -> Proof.context) -> Context.generic -> Context.generic
    31   val map_ss: (Proof.context -> Proof.context) -> Context.generic -> Context.generic
    32   val attrib: (thm -> Proof.context -> Proof.context) -> attribute
    32   val attrib: (thm -> Proof.context -> Proof.context) -> attribute
    33   val simp_add: attribute
    33   val simp_add: attribute
    34   val simp_del: attribute
    34   val simp_del: attribute
       
    35   val simp_reorient: attribute
    35   val cong_add: attribute
    36   val cong_add: attribute
    36   val cong_del: attribute
    37   val cong_del: attribute
    37   val check_simproc: Proof.context -> xstring * Position.T -> string
    38   val check_simproc: Proof.context -> xstring * Position.T -> string
    38   val the_simproc: Proof.context -> string -> simproc
    39   val the_simproc: Proof.context -> string -> simproc
    39   type 'a simproc_spec = {lhss: 'a list, proc: morphism -> Proof.context -> cterm -> thm option}
    40   type 'a simproc_spec = {lhss: 'a list, proc: morphism -> Proof.context -> cterm -> thm option}
    87 
    88 
    88 fun attrib f = Thm.declaration_attribute (map_ss o f);
    89 fun attrib f = Thm.declaration_attribute (map_ss o f);
    89 
    90 
    90 val simp_add = attrib add_simp;
    91 val simp_add = attrib add_simp;
    91 val simp_del = attrib del_simp;
    92 val simp_del = attrib del_simp;
       
    93 val simp_reorient = attrib reorient_simp;
    92 val cong_add = attrib add_cong;
    94 val cong_add = attrib add_cong;
    93 val cong_del = attrib del_cong;
    95 val cong_del = attrib del_cong;
    94 
    96 
    95 
    97 
    96 (** named simprocs **)
    98 (** named simprocs **)
   265 (** concrete syntax of attributes **)
   267 (** concrete syntax of attributes **)
   266 
   268 
   267 (* add / del *)
   269 (* add / del *)
   268 
   270 
   269 val simpN = "simp";
   271 val simpN = "simp";
       
   272 val reorientN = "reorient"
   270 val congN = "cong";
   273 val congN = "cong";
   271 val onlyN = "only";
   274 val onlyN = "only";
   272 val no_asmN = "no_asm";
   275 val no_asmN = "no_asm";
   273 val no_asm_useN = "no_asm_use";
   276 val no_asm_useN = "no_asm_use";
   274 val no_asm_simpN = "no_asm_simp";
   277 val no_asm_simpN = "no_asm_simp";
   338 
   341 
   339 val simp_modifiers =
   342 val simp_modifiers =
   340  [Args.$$$ simpN -- Args.colon >> K (Method.modifier simp_add \<^here>),
   343  [Args.$$$ simpN -- Args.colon >> K (Method.modifier simp_add \<^here>),
   341   Args.$$$ simpN -- Args.add -- Args.colon >> K (Method.modifier simp_add \<^here>),
   344   Args.$$$ simpN -- Args.add -- Args.colon >> K (Method.modifier simp_add \<^here>),
   342   Args.$$$ simpN -- Args.del -- Args.colon >> K (Method.modifier simp_del \<^here>),
   345   Args.$$$ simpN -- Args.del -- Args.colon >> K (Method.modifier simp_del \<^here>),
       
   346   Args.$$$ reorientN -- Args.colon >> K (Method.modifier simp_reorient \<^here>),
   343   Args.$$$ simpN -- Args.$$$ onlyN -- Args.colon >>
   347   Args.$$$ simpN -- Args.$$$ onlyN -- Args.colon >>
   344     K {init = Raw_Simplifier.clear_simpset, attribute = simp_add, pos = \<^here>}]
   348     K {init = Raw_Simplifier.clear_simpset, attribute = simp_add, pos = \<^here>}]
   345    @ cong_modifiers;
   349    @ cong_modifiers;
   346 
   350 
   347 val simp_modifiers' =
   351 val simp_modifiers' =
   348  [Args.add -- Args.colon >> K (Method.modifier simp_add \<^here>),
   352  [Args.add -- Args.colon >> K (Method.modifier simp_add \<^here>),
   349   Args.del -- Args.colon >> K (Method.modifier simp_del \<^here>),
   353   Args.del -- Args.colon >> K (Method.modifier simp_del \<^here>),
       
   354   Args.$$$ reorientN -- Args.colon >> K (Method.modifier simp_reorient \<^here>),
   350   Args.$$$ onlyN -- Args.colon >>
   355   Args.$$$ onlyN -- Args.colon >>
   351     K {init = Raw_Simplifier.clear_simpset, attribute = simp_add, pos = \<^here>}]
   356     K {init = Raw_Simplifier.clear_simpset, attribute = simp_add, pos = \<^here>}]
   352    @ cong_modifiers;
   357    @ cong_modifiers;
   353 
   358 
   354 val simp_options =
   359 val simp_options =