src/HOL/BNF/Tools/bnf_fp_def_sugar.ML
changeset 54626 8a5e82425e55
parent 54623 59388c359dec
child 54740 91f54d386680
equal deleted inserted replaced
54625:f312a035d0cf 54626:8a5e82425e55
    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"