src/Pure/Isar/attrib.ML
changeset 13370 3ec0d8c8beba
parent 12804 163a85ba885b
child 13414 15597d502035
--- 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 *)