equal
deleted
inserted
replaced
241 map (Term.subst_TVars rho) ts0 |
241 map (Term.subst_TVars rho) ts0 |
242 end; |
242 end; |
243 |
243 |
244 val mk_fp_iter_fun_types = fst o split_last o binder_types o fastype_of; |
244 val mk_fp_iter_fun_types = fst o split_last o binder_types o fastype_of; |
245 |
245 |
246 fun mk_fp_iters thy lfp fpTs Cs fp_iters0 = |
|
247 mk_co_iters thy lfp fpTs Cs fp_iters0 |
|
248 |> `(mk_fp_iter_fun_types o hd); |
|
249 |
|
250 fun unzip_recT fpTs T = |
246 fun unzip_recT fpTs T = |
251 let |
247 let |
252 fun project_recT proj = |
248 fun project_recT proj = |
253 let |
249 let |
254 fun project (Type (s as @{type_name prod}, Ts as [T, U])) = |
250 fun project (Type (s as @{type_name prod}, Ts as [T, U])) = |
353 |
349 |
354 fun mk_un_fold_co_rec_prelims lfp fpTs Cs ns mss fp_folds0 fp_recs0 lthy = |
350 fun mk_un_fold_co_rec_prelims lfp fpTs Cs ns mss fp_folds0 fp_recs0 lthy = |
355 let |
351 let |
356 val thy = Proof_Context.theory_of lthy; |
352 val thy = Proof_Context.theory_of lthy; |
357 |
353 |
358 val (fp_fold_fun_Ts, fp_folds) = mk_fp_iters thy lfp fpTs Cs fp_folds0; |
354 val (fp_fold_fun_Ts, fp_folds) = mk_co_iters thy lfp fpTs Cs fp_folds0 |
359 val (fp_rec_fun_Ts, fp_recs) = mk_fp_iters thy lfp fpTs Cs fp_recs0; |
355 |> `(mk_fp_iter_fun_types o hd); |
|
356 val (fp_rec_fun_Ts, fp_recs) = mk_co_iters thy lfp fpTs Cs fp_recs0 |
|
357 |> `(mk_fp_iter_fun_types o hd); |
360 |
358 |
361 val ((fold_rec_args_types, unfold_corec_args_types), lthy') = |
359 val ((fold_rec_args_types, unfold_corec_args_types), lthy') = |
362 if lfp then |
360 if lfp then |
363 mk_fold_rec_args_types fpTs Cs ns mss fp_fold_fun_Ts fp_rec_fun_Ts lthy |
361 mk_fold_rec_args_types fpTs Cs ns mss fp_fold_fun_Ts fp_rec_fun_Ts lthy |
364 |>> (rpair NONE o SOME) |
362 |>> (rpair NONE o SOME) |