added Term.fold_atyps_sorts convenience;
authorwenzelm
Sat, 27 Mar 2010 15:47:57 +0100
changeset 35986 b7fcca3d9a44
parent 35985 0bbf0d2348f9
child 35987 7c728daf4876
added Term.fold_atyps_sorts convenience;
src/Pure/term.ML
src/Pure/thm.ML
--- a/src/Pure/term.ML	Sat Mar 27 15:20:31 2010 +0100
+++ b/src/Pure/term.ML	Sat Mar 27 15:47:57 2010 +0100
@@ -72,6 +72,7 @@
   val map_type_tfree: (string * sort -> typ) -> typ -> typ
   val map_types: (typ -> typ) -> term -> term
   val fold_atyps: (typ -> 'a -> 'a) -> typ -> 'a -> 'a
+  val fold_atyps_sorts: (typ * sort -> 'a -> 'a) -> typ -> 'a -> 'a
   val fold_aterms: (term -> 'a -> 'a) -> term -> 'a -> 'a
   val fold_term_types: (term -> typ -> 'a -> 'a) -> term -> 'a -> 'a
   val fold_types: (typ -> 'a -> 'a) -> term -> 'a -> 'a
@@ -431,6 +432,9 @@
 fun fold_atyps f (Type (_, Ts)) = fold (fold_atyps f) Ts
   | fold_atyps f T = f T;
 
+fun fold_atyps_sorts f =
+  fold_atyps (fn T as TFree (_, S) => f (T, S) | T as TVar (_, S) => f (T, S));
+
 fun fold_aterms f (t $ u) = fold_aterms f t #> fold_aterms f u
   | fold_aterms f (Abs (_, _, t)) = fold_aterms f t
   | fold_aterms f a = f a;
--- a/src/Pure/thm.ML	Sat Mar 27 15:20:31 2010 +0100
+++ b/src/Pure/thm.ML	Sat Mar 27 15:47:57 2010 +0100
@@ -484,10 +484,7 @@
   | strip_shyps (thm as Thm (der, {thy_ref, tags, maxidx, shyps, hyps, tpairs, prop})) =
       let
         val thy = Theory.deref thy_ref;
-        val present =
-          (fold_terms o fold_types o fold_atyps)
-            (fn T as TFree (_, S) => insert (eq_snd op =) (T, S)
-              | T as TVar (_, S) => insert (eq_snd op =) (T, S)) thm [];
+        val present = (fold_terms o fold_types o fold_atyps_sorts) (insert (eq_snd op =)) thm [];
         val extra = fold (Sorts.remove_sort o #2) present shyps;
         val witnessed = Sign.witness_sorts thy present extra;
         val extra' = fold (Sorts.remove_sort o #2) witnessed extra