--- a/src/Pure/Isar/attrib.ML Fri Mar 17 16:27:28 2000 +0100
+++ b/src/Pure/Isar/attrib.ML Fri Mar 17 16:28:59 2000 +0100
@@ -169,7 +169,7 @@
(* tags *)
fun gen_tag x = syntax (tag >> Drule.tag) x;
-fun gen_untag x = syntax (tag >> Drule.untag) x;
+fun gen_untag x = syntax (Scan.lift Args.name >> Drule.untag) x;
(* transfer *)
--- a/src/Pure/drule.ML Fri Mar 17 16:27:28 2000 +0100
+++ b/src/Pure/drule.ML Fri Mar 17 16:28:59 2000 +0100
@@ -99,9 +99,9 @@
val unvarify : thm -> thm
val rule_attribute : ('a -> thm -> thm) -> 'a attribute
val tag_rule : tag -> thm -> thm
- val untag_rule : tag -> thm -> thm
+ val untag_rule : string -> thm -> thm
val tag : tag -> 'a attribute
- val untag : tag -> 'a attribute
+ val untag : string -> 'a attribute
val tag_lemma : 'a attribute
val tag_assumption : 'a attribute
val tag_internal : 'a attribute
@@ -752,10 +752,10 @@
Thm.put_name_tags (Thm.name_of_thm thm, f (#2 (Thm.get_name_tags thm))) thm;
fun tag_rule tg = map_tags (fn tgs => if tg mem tgs then tgs else tgs @ [tg]);
-fun untag_rule tg = map_tags (fn tgs => tgs \ tg);
+fun untag_rule s = map_tags (filter_out (equal s o #1));
fun tag tg x = rule_attribute (K (tag_rule tg)) x;
-fun untag tg x = rule_attribute (K (untag_rule tg)) x;
+fun untag s x = rule_attribute (K (untag_rule s)) x;
fun simple_tag name x = tag (name, []) x;