equal
deleted
inserted
replaced
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 |