src/HOL/BNF/Tools/bnf_fp_def_sugar.ML
changeset 52173 ec337c3438a7
parent 52172 1b3f907caf61
child 52195 056ec8201667
equal deleted inserted replaced
52172:1b3f907caf61 52173:ec337c3438a7
   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)