equal
deleted
inserted
replaced
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) |