113 let |
113 let |
114 val log_types = |
114 val log_types = |
115 Symtab.fold (fn (c, (LogicalType n, _)) => cons (c, n) | _ => I) (snd types) [] |
115 Symtab.fold (fn (c, (LogicalType n, _)) => cons (c, n) | _ => I) (snd types) [] |
116 |> Library.sort (Library.int_ord o pairself snd) |> map fst; |
116 |> Library.sort (Library.int_ord o pairself snd) |> map fst; |
117 val witness = |
117 val witness = |
118 (case Sorts.witness_sorts classes log_types [] [Sorts.classes classes] of |
118 (case Sorts.witness_sorts classes log_types [] [Sorts.minimal_classes classes] of |
119 [w] => SOME w | _ => NONE); |
119 [w] => SOME w | _ => NONE); |
120 in make_tsig ((space, classes), default, types, log_types, witness) end; |
120 in make_tsig ((space, classes), default, types, log_types, witness) end; |
121 |
121 |
122 fun map_tsig f (TSig {classes, default, types, log_types = _, witness = _}) = |
122 fun map_tsig f (TSig {classes, default, types, log_types = _, witness = _}) = |
123 build_tsig (f (classes, default, types)); |
123 build_tsig (f (classes, default, types)); |