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 |