246 fun freeze_thaw_term t = |
246 fun freeze_thaw_term t = |
247 let |
247 let |
248 val tvars = OldTerm.term_tvars t |
248 val tvars = OldTerm.term_tvars t |
249 val tfree_names = OldTerm.add_term_tfree_names(t,[]) |
249 val tfree_names = OldTerm.add_term_tfree_names(t,[]) |
250 val (type_inst,_) = |
250 val (type_inst,_) = |
251 Library.foldl (fn ((inst,used),(w as (v,_),S)) => |
251 fold (fn (w as (v,_), S) => fn (inst, used) => |
252 let |
252 let |
253 val v' = Name.variant used v |
253 val v' = Name.variant used v |
254 in |
254 in |
255 ((w,TFree(v',S))::inst,v'::used) |
255 ((w,TFree(v',S))::inst,v'::used) |
256 end) |
256 end) |
257 (([],tfree_names),tvars) |
257 tvars ([], tfree_names) |
258 val t' = subst_TVars type_inst t |
258 val t' = subst_TVars type_inst t |
259 in |
259 in |
260 (t',map (fn (w,TFree(v,S)) => (v,TVar(w,S)) |
260 (t', map (fn (w,TFree(v,S)) => (v,TVar(w,S)) |
261 | _ => error "Internal error in Shuffler.freeze_thaw") type_inst) |
261 | _ => error "Internal error in Shuffler.freeze_thaw") type_inst) |
262 end |
262 end |
263 |
263 |
264 fun inst_tfrees thy [] thm = thm |
264 fun inst_tfrees thy [] thm = thm |
265 | inst_tfrees thy ((name,U)::rest) thm = |
265 | inst_tfrees thy ((name,U)::rest) thm = |