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), |