93 Ctr_Sugar.ctr_sugar list -> term list list -> thm list list -> (thm list -> thm list) -> |
93 Ctr_Sugar.ctr_sugar list -> term list list -> thm list list -> (thm list -> thm list) -> |
94 local_theory -> gfp_sugar_thms |
94 local_theory -> gfp_sugar_thms |
95 val co_datatypes: BNF_FP_Util.fp_kind -> (mixfix list -> binding list -> binding list -> |
95 val co_datatypes: BNF_FP_Util.fp_kind -> (mixfix list -> binding list -> binding list -> |
96 binding list list -> binding list -> (string * sort) list -> typ list * typ list list -> |
96 binding list list -> binding list -> (string * sort) list -> typ list * typ list list -> |
97 BNF_Def.bnf list -> local_theory -> BNF_FP_Util.fp_result * local_theory) -> |
97 BNF_Def.bnf list -> local_theory -> BNF_FP_Util.fp_result * local_theory) -> |
98 (bool * bool) * (((((binding * (typ * sort)) list * binding) * (binding * binding)) * mixfix) * |
98 (bool * (bool * bool)) * (((((binding * (typ * sort)) list * binding) * (binding * binding)) |
99 ((((binding * binding) * (binding * typ) list) * (binding * term) list) * |
99 * mixfix) * ((((binding * binding) * (binding * typ) list) * (binding * term) list) * |
100 mixfix) list) list -> |
100 mixfix) list) list -> |
101 local_theory -> local_theory |
101 local_theory -> local_theory |
102 val parse_co_datatype_cmd: BNF_FP_Util.fp_kind -> (mixfix list -> binding list -> binding list -> |
102 val parse_co_datatype_cmd: BNF_FP_Util.fp_kind -> (mixfix list -> binding list -> binding list -> |
103 binding list list -> binding list -> (string * sort) list -> typ list * typ list list -> |
103 binding list list -> binding list -> (string * sort) list -> typ list * typ list list -> |
104 BNF_Def.bnf list -> local_theory -> BNF_FP_Util.fp_result * local_theory) -> |
104 BNF_Def.bnf list -> local_theory -> BNF_FP_Util.fp_result * local_theory) -> |
973 (disc_unfold_iff_thmss, disc_corec_iff_thmss, simp_attrs), |
973 (disc_unfold_iff_thmss, disc_corec_iff_thmss, simp_attrs), |
974 (sel_unfold_thmsss, sel_corec_thmsss, simp_attrs)) |
974 (sel_unfold_thmsss, sel_corec_thmsss, simp_attrs)) |
975 end; |
975 end; |
976 |
976 |
977 fun define_co_datatypes prepare_constraint prepare_typ prepare_term fp construct_fp |
977 fun define_co_datatypes prepare_constraint prepare_typ prepare_term fp construct_fp |
978 (wrap_opts as (no_discs_sels, rep_compat), specs) no_defs_lthy0 = |
978 (wrap_opts as (no_discs_sels, (_, rep_compat)), specs) no_defs_lthy0 = |
979 let |
979 let |
980 (* TODO: sanity checks on arguments *) |
980 (* TODO: sanity checks on arguments *) |
981 |
981 |
982 val _ = if fp = Greatest_FP andalso no_discs_sels then |
982 val _ = if fp = Greatest_FP andalso no_discs_sels then |
983 error "Cannot define codatatypes without discriminators and selectors" |
983 error "Cannot define codatatypes without discriminators and selectors" |