src/HOL/Import/shuffler.ML
changeset 33245 65232054ffd0
parent 33043 ff71cadefb14
child 33317 b4534348b8fd
equal deleted inserted replaced
33244:db230399f890 33245:65232054ffd0
   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 =