src/HOL/Tools/BNF/bnf_lfp_size.ML
changeset 56737 e4f363e16bdc
parent 56684 d8f32f55e463
child 56966 01637dd1260c
equal deleted inserted replaced
56736:0f5cf342961c 56737:e4f363e16bdc
   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);