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