src/Provers/simplifier.ML
changeset 9899 5a9081c3b869
parent 9861 b2a6d854d6da
child 9952 24914e42b857
equal deleted inserted replaced
9898:5f28e5b4c68e 9899:5a9081c3b869
   461 val simpN = "simp";
   461 val simpN = "simp";
   462 val congN = "cong";
   462 val congN = "cong";
   463 val addN = "add";
   463 val addN = "add";
   464 val delN = "del";
   464 val delN = "del";
   465 val onlyN = "only";
   465 val onlyN = "only";
       
   466 val no_asmN = "no_asm";
       
   467 val no_asm_useN = "no_asm_use";
       
   468 val no_asm_simpN = "no_asm_simp";
   466 
   469 
   467 val simp_attr =
   470 val simp_attr =
   468  (Attrib.add_del_args simp_add_global simp_del_global,
   471  (Attrib.add_del_args simp_add_global simp_del_global,
   469   Attrib.add_del_args simp_add_local simp_del_local);
   472   Attrib.add_del_args simp_add_local simp_del_local);
   470 
   473 
   473   Attrib.add_del_args cong_add_local cong_del_local);
   476   Attrib.add_del_args cong_add_local cong_del_local);
   474 
   477 
   475 
   478 
   476 (* conversions *)
   479 (* conversions *)
   477 
   480 
   478 fun conv_attr f =
   481 local
   479   (Attrib.no_args (Drule.rule_attribute (f o simpset_of)),
   482 
   480     Attrib.no_args (Drule.rule_attribute (f o get_local_simpset)));
   483 fun conv_mode x =
       
   484   ((Args.parens (Args.$$$ no_asmN) >> K simplify ||
       
   485     Args.parens (Args.$$$ no_asm_simpN) >> K asm_simplify ||
       
   486     Args.parens (Args.$$$ no_asm_useN) >> K full_simplify ||
       
   487     Scan.succeed asm_full_simplify) |> Scan.lift) x;
       
   488 
       
   489 fun simplified_att get =
       
   490   Attrib.syntax (conv_mode >> (fn f => Drule.rule_attribute (f o get)));
       
   491 
       
   492 in
       
   493 
       
   494 val simplified_attr =
       
   495   (simplified_att simpset_of, simplified_att get_local_simpset);
       
   496 
       
   497 end;
   481 
   498 
   482 
   499 
   483 (* setup_attrs *)
   500 (* setup_attrs *)
   484 
   501 
   485 val setup_attrs = Attrib.add_attributes
   502 val setup_attrs = Attrib.add_attributes
   486  [(simpN,               simp_attr, "declare simplification rule"),
   503  [(simpN, simp_attr, "declaration of simplification rule"),
   487   (congN,               cong_attr, "declare Simplifier congruence rule"),
   504   (congN, cong_attr, "declaration of Simplifier congruence rule"),
   488   ("simplify",          conv_attr simplify, "simplify rule"),
   505   ("simplified", simplified_attr, "simplified rule")];
   489   ("asm_simplify",      conv_attr asm_simplify, "simplify rule, using assumptions"),
       
   490   ("full_simplify",     conv_attr full_simplify, "fully simplify rule"),
       
   491   ("asm_full_simplify", conv_attr asm_full_simplify, "fully simplify rule, using assumptions")];
       
   492 
   506 
   493 
   507 
   494 
   508 
   495 (** proof methods **)
   509 (** proof methods **)
   496 
   510 
   497 (* simplification *)
   511 (* simplification *)
   498 
   512 
   499 val simp_options =
   513 val simp_options =
   500  (Args.parens (Args.$$$ "no_asm") >> K simp_tac ||
   514  (Args.parens (Args.$$$ no_asmN) >> K simp_tac ||
   501   Args.parens (Args.$$$ "no_asm_simp") >> K asm_simp_tac ||
   515   Args.parens (Args.$$$ no_asm_simpN) >> K asm_simp_tac ||
   502   Args.parens (Args.$$$ "no_asm_use") >> K full_simp_tac ||
   516   Args.parens (Args.$$$ no_asm_useN) >> K full_simp_tac ||
   503   Scan.succeed asm_full_simp_tac);
   517   Scan.succeed asm_full_simp_tac);
   504 
   518 
   505 val cong_modifiers =
   519 val cong_modifiers =
   506  [Args.$$$ congN -- Args.colon >> K ((I, cong_add_local):Method.modifier),
   520  [Args.$$$ congN -- Args.colon >> K ((I, cong_add_local):Method.modifier),
   507   Args.$$$ congN -- Args.$$$ addN -- Args.colon >> K (I, cong_add_local),
   521   Args.$$$ congN -- Args.$$$ addN -- Args.colon >> K (I, cong_add_local),