src/Pure/proofterm.ML
changeset 44116 c70257b4cb7e
parent 44113 0baa8bbd355a
child 44118 69e29cf993c0
equal deleted inserted replaced
44115:5d9821493bc1 44116:c70257b4cb7e
   672   in map_proof_terms (map_types (map_type_tfree thaw)) (map_type_tfree thaw) prf end;
   672   in map_proof_terms (map_types (map_type_tfree thaw)) (map_type_tfree thaw) prf end;
   673 
   673 
   674 
   674 
   675 local
   675 local
   676 
   676 
   677 fun new_name (ix, (pairs,used)) =
   677 fun new_name ix (pairs, used) =
   678   let val v = singleton (Name.variant_list used) (string_of_indexname ix)
   678   let val v = singleton (Name.variant_list used) (string_of_indexname ix)
   679   in  ((ix, v) :: pairs, v :: used)  end;
   679   in ((ix, v) :: pairs, v :: used) end;
   680 
   680 
   681 fun freeze_one alist (ix, sort) = (case AList.lookup (op =) alist ix of
   681 fun freeze_one alist (ix, sort) =
       
   682   (case AList.lookup (op =) alist ix of
   682     NONE => TVar (ix, sort)
   683     NONE => TVar (ix, sort)
   683   | SOME name => TFree (name, sort));
   684   | SOME name => TFree (name, sort));
   684 
   685 
   685 in
   686 in
   686 
   687 
   687 fun legacy_freezeT t prf =
   688 fun legacy_freezeT t prf =
   688   let
   689   let
   689     val used = OldTerm.it_term_types OldTerm.add_typ_tfree_names (t, [])
   690     val used = Term.add_tfree_names t [];
   690     and tvars = map #1 (OldTerm.it_term_types OldTerm.add_typ_tvars (t, []));
   691     val (alist, _) = fold_rev new_name (map #1 (Term.add_tvars t [])) ([], used);
   691     val (alist, _) = List.foldr new_name ([], used) tvars;
       
   692   in
   692   in
   693     (case alist of
   693     (case alist of
   694       [] => prf (*nothing to do!*)
   694       [] => prf (*nothing to do!*)
   695     | _ =>
   695     | _ =>
   696       let val frzT = map_type_tvar (freeze_one alist)
   696         let val frzT = map_type_tvar (freeze_one alist)
   697       in map_proof_terms (map_types frzT) frzT prf end)
   697         in map_proof_terms (map_types frzT) frzT prf end)
   698   end;
   698   end;
   699 
   699 
   700 end;
   700 end;
   701 
   701 
   702 
   702