src/HOL/Codatatype/Tools/bnf_fp_util.ML
changeset 49395 323414474c1f
parent 49392 e1f325ab9503
child 49425 f27f83f71e94
equal deleted inserted replaced
49394:52e636ace94e 49395:323414474c1f
    90   val mk_common_name: binding list -> string
    90   val mk_common_name: binding list -> string
    91 
    91 
    92   val split_conj_thm: thm -> thm list
    92   val split_conj_thm: thm -> thm list
    93   val split_conj_prems: int -> thm -> thm
    93   val split_conj_prems: int -> thm -> thm
    94 
    94 
    95   val strip_typeN: int -> typ -> typ list * typ
       
    96   val retype_free: typ -> term -> term
    95   val retype_free: typ -> term -> term
    97 
    96 
    98   val mk_predT: typ -> typ;
    97   val mk_predT: typ -> typ;
    99 
    98 
   100   val mk_sumTN: typ list -> typ
    99   val mk_sumTN: typ list -> typ
   239 val sel_coitersN = selN ^ "_" ^ coitersN
   238 val sel_coitersN = selN ^ "_" ^ coitersN
   240 val sel_corecsN = selN ^ "_" ^ corecsN
   239 val sel_corecsN = selN ^ "_" ^ corecsN
   241 
   240 
   242 val mk_common_name = space_implode "_" o map Binding.name_of;
   241 val mk_common_name = space_implode "_" o map Binding.name_of;
   243 
   242 
   244 fun strip_typeN 0 T = ([], T)
       
   245   | strip_typeN n (Type (@{type_name fun}, [T, T'])) = strip_typeN (n - 1) T' |>> cons T;
       
   246 
       
   247 fun mk_predT T = T --> HOLogic.boolT;
   243 fun mk_predT T = T --> HOLogic.boolT;
   248 
   244 
   249 fun retype_free T (Free (s, _)) = Free (s, T);
   245 fun retype_free T (Free (s, _)) = Free (s, T);
   250 
   246 
   251 fun dest_sumT (Type (@{type_name sum}, [T, T'])) = (T, T');
   247 fun dest_sumT (Type (@{type_name sum}, [T, T'])) = (T, T');