equal
deleted
inserted
replaced
337 fun generalize_type T (seen_lthy as (seen, _)) = |
337 fun generalize_type T (seen_lthy as (seen, _)) = |
338 (case AList.lookup (op =) seen T of |
338 (case AList.lookup (op =) seen T of |
339 SOME U => (U, seen_lthy) |
339 SOME U => (U, seen_lthy) |
340 | NONE => |
340 | NONE => |
341 (case T of |
341 (case T of |
342 Type (s, Ts) => |
342 Type (s, Ts') => |
343 if exists_subtype_in Ts T then fold_map generalize_type Ts seen_lthy |>> curry Type s |
343 if exists_subtype_in Ts T then fold_map generalize_type Ts' seen_lthy |>> curry Type s |
344 else generalize_simple_type T seen_lthy |
344 else generalize_simple_type T seen_lthy |
345 | _ => generalize_simple_type T seen_lthy)); |
345 | _ => generalize_simple_type T seen_lthy)); |
346 |
346 |
347 val (perm_Us, _) = fold_map generalize_type perm_Ts ([], lthy); |
347 val (perm_Us, _) = fold_map generalize_type perm_Ts ([], lthy); |
348 |
348 |