src/HOL/Codatatype/Tools/bnf_fp_sugar.ML
changeset 49273 f839ce127a2e
parent 49268 9e9dd498fb23
child 49274 ddd606ec45b9
equal deleted inserted replaced
49269:7157af98ca55 49273:f839ce127a2e
    56   mk_tupled_fun (HOLogic.mk_tuple (map HOLogic.mk_tuple xss)) f (flat xss);
    56   mk_tupled_fun (HOLogic.mk_tuple (map HOLogic.mk_tuple xss)) f (flat xss);
    57 
    57 
    58 fun tick v f = Term.lambda v (HOLogic.mk_prod (v, f $ v));
    58 fun tick v f = Term.lambda v (HOLogic.mk_prod (v, f $ v));
    59 
    59 
    60 fun tack z_name (c, v) f =
    60 fun tack z_name (c, v) f =
    61   let
    61   let val z = Free (z_name, mk_sumT (fastype_of v, fastype_of c)) in
    62     val T = fastype_of v;
    62     Term.lambda z (mk_sum_case (Term.lambda v v, Term.lambda c (f $ c)) $ z)
    63     val z = Free (z_name, mk_sumT (T, fastype_of c))
    63   end;
    64   in Term.lambda z (mk_sum_case (mk_id T, Term.lambda c (f $ c)) $ z) end;
       
    65 
    64 
    66 fun cannot_merge_types () = error "Mutually recursive types must have the same type parameters";
    65 fun cannot_merge_types () = error "Mutually recursive types must have the same type parameters";
    67 
    66 
    68 fun merge_type_arg_constrained ctxt (T, c) (T', c') =
    67 fun merge_type_arg_constrained ctxt (T, c) (T', c') =
    69   if T = T' then
    68   if T = T' then