# HG changeset patch # User wenzelm # Date 1026837491 -7200 # Node ID 3ec0d8c8beba67c0155b52a72b18580aa790b7f1 # Parent dc5d2a0685eb3881a911d5df049780907d8032b9 context rules; diff -r dc5d2a0685eb -r 3ec0d8c8beba src/Pure/Isar/attrib.ML --- a/src/Pure/Isar/attrib.ML Tue Jul 16 18:37:56 2002 +0200 +++ b/src/Pure/Isar/attrib.ML Tue Jul 16 18:38:11 2002 +0200 @@ -293,6 +293,39 @@ fun no_vars x = no_args (Drule.rule_attribute (K (#1 o Drule.freeze_thaw))) x; +(* rule declarations *) + +local + +fun add_args a b c x = syntax + (Scan.lift ((Args.bang >> K a || Args.query >> K c || Scan.succeed b) -- (Scan.option Args.nat)) + >> (fn (f, n) => f n)) x; + +fun del_args att = syntax (Scan.lift Args.del >> K att); + +open ContextRules; + +in + +val rule_atts = + [("intro", + (add_args intro_bang_global intro_global intro_query_global, + add_args intro_bang_local intro_local intro_query_local), + "declaration of introduction rule"), + ("elim", + (add_args elim_bang_global elim_global elim_query_global, + add_args elim_bang_local elim_local elim_query_local), + "declaration of elimination rule"), + ("dest", + (add_args dest_bang_global dest_global dest_query_global, + add_args dest_bang_local dest_local dest_query_local), + "declaration of destruction rule"), + ("rule", (del_args rule_del_global, del_args rule_del_local), + "remove declaration of intro/elim/dest rule")]; + +end; + + (** theory setup **) @@ -319,7 +352,8 @@ "declaration of atomize rule"), ("rulify", (no_args ObjectLogic.declare_rulify, no_args undef_local_attribute), "declaration of rulify rule"), - ("rule_format", (rule_format_att, rule_format_att), "result put into standard rule format")]; + ("rule_format", (rule_format_att, rule_format_att), "result put into standard rule format")] @ + rule_atts; (* setup *)