src/HOL/Tools/BNF/bnf_fp_n2m.ML
changeset 55819 e21d83c8e1c7
parent 55810 63d63d854fae
child 55854 ee270328a781
equal deleted inserted replaced
55818:d8b2f50705d0 55819:e21d83c8e1c7
    45   in
    45   in
    46     Const (@{const_name sum_map}, fT --> gT --> mk_sumT (fAT, gAT) --> mk_sumT (fBT, gBT)) $ f $ g
    46     Const (@{const_name sum_map}, fT --> gT --> mk_sumT (fAT, gAT) --> mk_sumT (fBT, gBT)) $ f $ g
    47   end;
    47   end;
    48 
    48 
    49 fun construct_mutualized_fp fp fpTs (fp_sugars : fp_sugar list) bs resBs (resDs, Dss) bnfs
    49 fun construct_mutualized_fp fp fpTs (fp_sugars : fp_sugar list) bs resBs (resDs, Dss) bnfs
    50     absT_infos lthy =
    50     (absT_infos : absT_info list) lthy =
    51   let
    51   let
    52     fun of_fp_res get =
    52     fun of_fp_res get =
    53       map (fn {fp_res, fp_res_index, ...} => nth (get fp_res) fp_res_index) fp_sugars;
    53       map (fn {fp_res, fp_res_index, ...} => nth (get fp_res) fp_res_index) fp_sugars;
    54 
    54 
    55     fun mk_co_algT T U = fp_case fp (T --> U) (U --> T);
    55     fun mk_co_algT T U = fp_case fp (T --> U) (U --> T);
   120     val absATs = map (domain_type o fastype_of) ctors;
   120     val absATs = map (domain_type o fastype_of) ctors;
   121     val absBTs = map (Term.typ_subst_atomic thetaBs) absATs;
   121     val absBTs = map (Term.typ_subst_atomic thetaBs) absATs;
   122     val xTs = map (domain_type o fastype_of) xtors;
   122     val xTs = map (domain_type o fastype_of) xtors;
   123     val yTs = map (domain_type o fastype_of) xtor's;
   123     val yTs = map (domain_type o fastype_of) xtor's;
   124 
   124 
   125     fun abs_of allAs Ds bnf = mk_abs (mk_T_of_bnf Ds allAs bnf) o #abs;
   125     val absAs = map3 (fn Ds => mk_abs o mk_T_of_bnf Ds allAs) Dss bnfs abss;
   126     fun rep_of absAT = mk_rep absAT o #rep;
   126     val absBs = map3 (fn Ds => mk_abs o mk_T_of_bnf Ds allBs) Dss bnfs abss;
   127 
   127     val fp_repAs = map2 mk_rep absATs fp_reps;
   128     val absAs = map3 (abs_of allAs) Dss bnfs absT_infos;
   128     val fp_repBs = map2 mk_rep absBTs fp_reps;
   129     val absBs = map3 (abs_of allBs) Dss bnfs absT_infos;
       
   130     val fp_repAs = map2 rep_of absATs fp_absT_infos;
       
   131     val fp_repBs = map2 rep_of absBTs fp_absT_infos;
       
   132 
   129 
   133     val (((((phis, phis'), pre_phis), xs), ys), names_lthy) = names_lthy
   130     val (((((phis, phis'), pre_phis), xs), ys), names_lthy) = names_lthy
   134       |> mk_Frees' "R" phiTs
   131       |> mk_Frees' "R" phiTs
   135       ||>> mk_Frees "S" pre_phiTs
   132       ||>> mk_Frees "S" pre_phiTs
   136       ||>> mk_Frees "x" xTs
   133       ||>> mk_Frees "x" xTs