added meet_sort_typ
authorhaftmann
Wed, 22 Oct 2008 14:15:47 +0200
changeset 2866598aba9fc90f6
parent 28664 d89ac2917157
child 28666 d2dbfe3a0284
added meet_sort_typ
src/Pure/sorts.ML
     1.1 --- a/src/Pure/sorts.ML	Wed Oct 22 14:15:46 2008 +0200
     1.2 +++ b/src/Pure/sorts.ML	Wed Oct 22 14:15:47 2008 +0200
     1.3 @@ -53,7 +53,9 @@
     1.4    val class_error: Pretty.pp -> class_error -> string
     1.5    exception CLASS_ERROR of class_error
     1.6    val mg_domain: algebra -> string -> sort -> sort list   (*exception CLASS_ERROR*)
     1.7 -  val meet_sort: algebra -> typ * sort -> sort Vartab.table -> sort Vartab.table
     1.8 +  val meet_sort: algebra -> typ * sort
     1.9 +    -> sort Vartab.table -> sort Vartab.table   (*exception CLASS_ERROR*)
    1.10 +  val meet_sort_typ: algebra -> typ * sort -> typ -> typ   (*exception CLASS_ERROR*)
    1.11    val of_sort: algebra -> typ * sort -> bool
    1.12    val weaken: algebra -> ('a * class -> class -> 'a) -> 'a * class -> class -> 'a
    1.13    val of_sort_derivation: Pretty.pp -> algebra ->
    1.14 @@ -365,6 +367,13 @@
    1.15        | meet (Type (a, Ts)) S = fold2 meet Ts (mg_domain algebra a S);
    1.16    in uncurry meet end;
    1.17  
    1.18 +fun meet_sort_typ algebra (T, S) =
    1.19 +  let
    1.20 +    val tab = meet_sort algebra (T, S) Vartab.empty;
    1.21 +  in Term.map_type_tvar (fn (v, _) =>
    1.22 +    TVar (v, (the o Vartab.lookup tab) v))
    1.23 +  end;
    1.24 +
    1.25  
    1.26  (* of_sort *)
    1.27