src/Pure/type.ML
changeset 19305 5c16895d548b
parent 19250 932a50e2332f
child 19464 d13309e30aba
equal deleted inserted replaced
19304:15f001295a7b 19305:5c16895d548b
   218 val varifyT = map_type_tfree (fn (a, S) => TVar ((a, 0), S));
   218 val varifyT = map_type_tfree (fn (a, S) => TVar ((a, 0), S));
   219 val unvarifyT = map_type_tvar (fn ((a, 0), S) => TFree (a, S) | v => TVar v);
   219 val unvarifyT = map_type_tvar (fn ((a, 0), S) => TFree (a, S) | v => TVar v);
   220 
   220 
   221 fun varify (t, fixed) =
   221 fun varify (t, fixed) =
   222   let
   222   let
   223     val fs = add_term_tfrees (t, []) \\ fixed;
   223     val fs = Term.fold_types (Term.fold_atyps
       
   224       (fn TFree v => if member (op =) fixed v then I else insert (op =) v | _ => I)) t [];
   224     val ixns = add_term_tvar_ixns (t, []);
   225     val ixns = add_term_tvar_ixns (t, []);
   225     val fmap = fs ~~ map (rpair 0) (variantlist (map fst fs, map #1 ixns))
   226     val fmap = fs ~~ map (rpair 0) (variantlist (map fst fs, map #1 ixns))
   226     fun thaw (f as (a, S)) =
   227     fun thaw (f as (a, S)) =
   227       (case AList.lookup (op =) fmap f of
   228       (case AList.lookup (op =) fmap f of
   228         NONE => TFree f
   229         NONE => TFree f