473 Args.parens (Args.$$$ no_asm_simpN) >> K asm_simp_tac || |
473 Args.parens (Args.$$$ no_asm_simpN) >> K asm_simp_tac || |
474 Args.parens (Args.$$$ no_asm_useN) >> K full_simp_tac || |
474 Args.parens (Args.$$$ no_asm_useN) >> K full_simp_tac || |
475 Args.parens (Args.$$$ asm_lrN) >> K asm_lr_simp_tac || |
475 Args.parens (Args.$$$ asm_lrN) >> K asm_lr_simp_tac || |
476 Scan.succeed asm_full_simp_tac); |
476 Scan.succeed asm_full_simp_tac); |
477 |
477 |
|
478 val simp_flags = Scan.repeat |
|
479 (Args.parens (Args.$$$ "depth_limit" -- Args.colon |-- Args.nat) |
|
480 >> setmp MetaSimplifier.simp_depth_limit) |
|
481 >> curry (Library.foldl op o) I; |
|
482 |
478 val cong_modifiers = |
483 val cong_modifiers = |
479 [Args.$$$ congN -- Args.colon >> K ((I, cong_add_local):Method.modifier), |
484 [Args.$$$ congN -- Args.colon >> K ((I, cong_add_local):Method.modifier), |
480 Args.$$$ congN -- Args.add -- Args.colon >> K (I, cong_add_local), |
485 Args.$$$ congN -- Args.add -- Args.colon >> K (I, cong_add_local), |
481 Args.$$$ congN -- Args.del -- Args.colon >> K (I, cong_del_local)]; |
486 Args.$$$ congN -- Args.del -- Args.colon >> K (I, cong_del_local)]; |
482 |
487 |
492 Args.del -- Args.colon >> K (I, simp_del_local), |
497 Args.del -- Args.colon >> K (I, simp_del_local), |
493 Args.$$$ onlyN -- Args.colon >> K (map_local_simpset clear_ss, simp_add_local)] |
498 Args.$$$ onlyN -- Args.colon >> K (map_local_simpset clear_ss, simp_add_local)] |
494 @ cong_modifiers; |
499 @ cong_modifiers; |
495 |
500 |
496 fun simp_args more_mods = |
501 fun simp_args more_mods = |
497 Method.sectioned_args (Args.bang_facts -- Scan.lift simp_options) (more_mods @ simp_modifiers'); |
502 Method.sectioned_args (Args.bang_facts -- Scan.lift simp_options -- Scan.lift simp_flags) |
498 |
503 (more_mods @ simp_modifiers'); |
499 |
504 |
500 fun simp_method (prems, tac) ctxt = Method.METHOD (fn facts => |
505 fun simp_method ((prems, tac), FLAGS) ctxt = Method.METHOD (fn facts => |
501 ALLGOALS (Method.insert_tac (prems @ facts)) THEN |
506 ALLGOALS (Method.insert_tac (prems @ facts)) THEN |
502 (CHANGED_PROP o ALLGOALS o tac) (local_simpset_of ctxt)); |
507 (FLAGS o CHANGED_PROP o ALLGOALS o tac) (local_simpset_of ctxt)); |
503 |
508 |
504 fun simp_method' (prems, tac) ctxt = Method.METHOD (fn facts => |
509 fun simp_method' ((prems, tac), FLAGS) ctxt = Method.METHOD (fn facts => |
505 HEADGOAL (Method.insert_tac (prems @ facts) THEN' |
510 HEADGOAL (Method.insert_tac (prems @ facts) THEN' |
506 (CHANGED_PROP oo tac) (local_simpset_of ctxt))); |
511 ((FLAGS o CHANGED_PROP) oo tac) (local_simpset_of ctxt))); |
507 |
512 |
508 |
513 |
509 (* setup methods *) |
514 (* setup methods *) |
510 |
515 |
511 fun setup_methods more_mods = Method.add_methods |
516 fun setup_methods more_mods = Method.add_methods |