equal
deleted
inserted
replaced
124 SOME f => f |
124 SOME f => f |
125 | NONE => if member (op =) Cs T then Term.absdummy T (Bound 0) else mk_abs_zero_nat T) |
125 | NONE => if member (op =) Cs T then Term.absdummy T (Bound 0) else mk_abs_zero_nat T) |
126 | mk_size_of_typ (T as Type (s, Ts)) = |
126 | mk_size_of_typ (T as Type (s, Ts)) = |
127 if is_pair_C s Ts then |
127 if is_pair_C s Ts then |
128 pair (snd_const T) |
128 pair (snd_const T) |
129 else if exists (exists_subtype_in As) Ts then |
129 else if exists (exists_subtype_in (As @ Cs)) Ts then |
130 (case Symtab.lookup data s of |
130 (case Symtab.lookup data s of |
131 SOME (size_name, (_, size_o_maps as _ :: _)) => |
131 SOME (size_name, (_, size_o_maps as _ :: _)) => |
132 let |
132 let |
133 val (args, size_o_mapss') = split_list (map (fn T => mk_size_of_typ T []) Ts); |
133 val (args, size_o_mapss') = split_list (map (fn T => mk_size_of_typ T []) Ts); |
134 val size_const = Const (size_name, map fastype_of args ---> mk_to_natT T); |
134 val size_const = Const (size_name, map fastype_of args ---> mk_to_natT T); |