481 FIRST' (map (fn s => CHANGED o struct_tac s ctxt facts) (Data.get (Context.Proof ctxt))); |
483 FIRST' (map (fn s => CHANGED o struct_tac s ctxt facts) (Data.get (Context.Proof ctxt))); |
482 |
484 |
483 |
485 |
484 (* attributes *) |
486 (* attributes *) |
485 |
487 |
486 fun add_struct_thm s tag = |
488 fun add_struct s tag = |
487 Thm.declaration_attribute |
489 Thm.declaration_attribute |
488 (fn thm => Data.map (AList.map_default struct_eq (s, Order_Tac.empty TrueI) (Order_Tac.update tag thm))); |
490 (fn thm => Data.map (AList.map_default struct_eq (s, Order_Tac.empty TrueI) (Order_Tac.update tag thm))); |
489 fun del_struct s = |
491 fun del_struct s = |
490 Thm.declaration_attribute |
492 Thm.declaration_attribute |
491 (fn _ => Data.map (AList.delete struct_eq s)); |
493 (fn _ => Data.map (AList.delete struct_eq s)); |
492 |
494 |
493 val _ = |
|
494 Theory.setup |
|
495 (Attrib.setup @{binding order} |
|
496 (Scan.lift ((Args.add -- Args.name >> (fn (_, s) => SOME s) || Args.del >> K NONE) --| |
|
497 Args.colon (* FIXME || Scan.succeed true *) ) -- Scan.lift Args.name -- |
|
498 Scan.repeat Args.term |
|
499 >> (fn ((SOME tag, n), ts) => add_struct_thm (n, ts) tag |
|
500 | ((NONE, n), ts) => del_struct (n, ts))) |
|
501 "theorems controlling transitivity reasoner"); |
|
502 |
|
503 end; |
495 end; |
504 *} |
496 *} |
|
497 |
|
498 attribute_setup order = {* |
|
499 Scan.lift ((Args.add -- Args.name >> (fn (_, s) => SOME s) || Args.del >> K NONE) --| |
|
500 Args.colon (* FIXME || Scan.succeed true *) ) -- Scan.lift Args.name -- |
|
501 Scan.repeat Args.term |
|
502 >> (fn ((SOME tag, n), ts) => Orders.add_struct (n, ts) tag |
|
503 | ((NONE, n), ts) => Orders.del_struct (n, ts)) |
|
504 *} "theorems controlling transitivity reasoner" |
505 |
505 |
506 method_setup order = {* |
506 method_setup order = {* |
507 Scan.succeed (fn ctxt => SIMPLE_METHOD' (Orders.order_tac ctxt [])) |
507 Scan.succeed (fn ctxt => SIMPLE_METHOD' (Orders.order_tac ctxt [])) |
508 *} "transitivity reasoner" |
508 *} "transitivity reasoner" |
509 |
509 |