src/HOL/Tools/BNF/bnf_fp_n2m_sugar.ML
changeset 58634 9f10d82e8188
parent 58577 15337ad05370
child 58671 4cc24f1e52d5
equal deleted inserted replaced
58633:8529745af3dc 58634:9f10d82e8188
   203           | callsp => freeze_fpTs_map kk fpT callsp T)
   203           | callsp => freeze_fpTs_map kk fpT callsp T)
   204         | callsp => freeze_fpTs_map kk fpT callsp T)
   204         | callsp => freeze_fpTs_map kk fpT callsp T)
   205       | freeze_fpTs_call _ _ _ T = T;
   205       | freeze_fpTs_call _ _ _ T = T;
   206 
   206 
   207     val ctr_Tsss = map (map binder_types) ctr_Tss;
   207     val ctr_Tsss = map (map binder_types) ctr_Tss;
   208     val ctrXs_Tsss = map4 (map2 o map2 oo freeze_fpTs_call) kks fpTs callssss ctr_Tsss;
   208     val ctrXs_Tsss = @{map 4} (map2 o map2 oo freeze_fpTs_call) kks fpTs callssss ctr_Tsss;
   209     val ctrXs_repTs = map mk_sumprodT_balanced ctrXs_Tsss;
   209     val ctrXs_repTs = map mk_sumprodT_balanced ctrXs_Tsss;
   210 
   210 
   211     val ns = map length ctr_Tsss;
   211     val ns = map length ctr_Tsss;
   212     val kss = map (fn n => 1 upto n) ns;
   212     val kss = map (fn n => 1 upto n) ns;
   213     val mss = map (map length) ctr_Tsss;
   213     val mss = map (map length) ctr_Tsss;
   259           mk_co_recs_prelims fp ctr_Tsss fpTs Cs absTs repTs ns mss xtor_co_recs0 lthy;
   259           mk_co_recs_prelims fp ctr_Tsss fpTs Cs absTs repTs ns mss xtor_co_recs0 lthy;
   260 
   260 
   261         fun mk_binding b pre = Binding.prefix_name (pre ^ "_") b;
   261         fun mk_binding b pre = Binding.prefix_name (pre ^ "_") b;
   262 
   262 
   263         val ((co_recs, co_rec_defs), lthy) =
   263         val ((co_recs, co_rec_defs), lthy) =
   264           fold_map2 (fn b =>
   264           @{fold_map 2} (fn b =>
   265               if fp = Least_FP then define_rec (the recs_args_types) (mk_binding b) fpTs Cs reps
   265               if fp = Least_FP then define_rec (the recs_args_types) (mk_binding b) fpTs Cs reps
   266               else define_corec (the corecs_args_types) (mk_binding b) fpTs Cs abss)
   266               else define_corec (the corecs_args_types) (mk_binding b) fpTs Cs abss)
   267             fp_bs xtor_co_recs lthy
   267             fp_bs xtor_co_recs lthy
   268           |>> split_list;
   268           |>> split_list;
   269 
   269 
   338               common_set_inducts = common_set_inducts,
   338               common_set_inducts = common_set_inducts,
   339               set_inducts = set_inducts}}
   339               set_inducts = set_inducts}}
   340           |> morph_fp_sugar phi;
   340           |> morph_fp_sugar phi;
   341 
   341 
   342         val target_fp_sugars =
   342         val target_fp_sugars =
   343           map16 mk_target_fp_sugar fpTs Xs kks pre_bnfs absT_infos ctrXs_Tsss ctr_defss ctr_sugars
   343           @{map 16} mk_target_fp_sugar fpTs Xs kks pre_bnfs absT_infos ctrXs_Tsss ctr_defss
   344             co_recs co_rec_defs mapss (transpose co_inductss') co_rec_thmss co_rec_disc_thmss
   344             ctr_sugars co_recs co_rec_defs mapss (transpose co_inductss') co_rec_thmss
   345             co_rec_sel_thmsss fp_sugars0;
   345             co_rec_disc_thmss co_rec_sel_thmsss fp_sugars0;
   346 
   346 
   347         val n2m_sugar = (target_fp_sugars, fp_sugar_thms);
   347         val n2m_sugar = (target_fp_sugars, fp_sugar_thms);
   348       in
   348       in
   349         (n2m_sugar, lthy |> register_n2m_sugar key n2m_sugar)
   349         (n2m_sugar, lthy |> register_n2m_sugar key n2m_sugar)
   350       end)
   350       end)