src/HOL/BNF/Tools/bnf_fp_def_sugar.ML
changeset 53746 bd038e48526d
parent 53741 c9068aade859
child 53792 f0b273258d80
equal deleted inserted replaced
53745:788730ab7da4 53746:bd038e48526d
    42   val mk_rel: int -> typ list -> typ list -> term -> term
    42   val mk_rel: int -> typ list -> typ list -> term -> term
    43   val build_map: local_theory -> (typ * typ -> term) -> typ * typ -> term
    43   val build_map: local_theory -> (typ * typ -> term) -> typ * typ -> term
    44   val build_rel: local_theory -> (typ * typ -> term) -> typ * typ -> term
    44   val build_rel: local_theory -> (typ * typ -> term) -> typ * typ -> term
    45   val dest_map: Proof.context -> string -> term -> term * term list
    45   val dest_map: Proof.context -> string -> term -> term * term list
    46   val dest_ctr: Proof.context -> string -> term -> term * term list
    46   val dest_ctr: Proof.context -> string -> term -> term * term list
       
    47 
       
    48   type lfp_sugar_thms =
       
    49     (thm list * thm * Args.src list)
       
    50     * (thm list list * Args.src list)
       
    51     * (thm list list * Args.src list)
       
    52 
       
    53   type gfp_sugar_thms =
       
    54     ((thm list * thm) list * Args.src list)
       
    55     * (thm list list * thm list list * Args.src list)
       
    56     * (thm list list * thm list list) * (thm list list * thm list list * Args.src list)
       
    57     * (thm list list * thm list list * Args.src list)
       
    58     * (thm list list list * thm list list list * Args.src list)
       
    59 
    47   val mk_co_iters_prelims: BNF_FP_Util.fp_kind -> typ list list list -> typ list -> typ list ->
    60   val mk_co_iters_prelims: BNF_FP_Util.fp_kind -> typ list list list -> typ list -> typ list ->
    48     int list -> int list list -> term list list -> Proof.context ->
    61     int list -> int list list -> term list list -> Proof.context ->
    49     (term list list
    62     (term list list
    50      * (typ list list * typ list list list list * term list list
    63      * (typ list list * typ list list list list * term list list
    51         * term list list list list) list option
    64         * term list list list list) list option
    52      * (string * term list * term list list
    65      * (string * term list * term list list
    53         * ((term list list * term list list list) * (typ list * typ list list)) list) option)
    66         * ((term list list * term list list list) * (typ list * typ list list)) list) option)
    54     * Proof.context
    67     * Proof.context
    55 
       
    56   val mk_iter_fun_arg_types: typ list list list -> int list -> int list list -> term ->
    68   val mk_iter_fun_arg_types: typ list list list -> int list -> int list list -> term ->
    57     typ list list list list
    69     typ list list list list
    58   val mk_coiter_fun_arg_types: typ list list list -> typ list -> int list -> term ->
    70   val mk_coiter_fun_arg_types: typ list list list -> typ list -> int list -> term ->
    59     typ list list
    71     typ list list
    60     * (typ list list list list * typ list list list * typ list list list list * typ list)
    72     * (typ list list list list * typ list list list * typ list list list list * typ list)
    68     (term list * thm list) * Proof.context
    80     (term list * thm list) * Proof.context
    69   val derive_induct_iters_thms_for_types: BNF_Def.bnf list ->
    81   val derive_induct_iters_thms_for_types: BNF_Def.bnf list ->
    70     (typ list list * typ list list list list * term list list * term list list list list) list ->
    82     (typ list list * typ list list list list * term list list * term list list list list) list ->
    71     thm -> thm list list -> BNF_Def.bnf list -> BNF_Def.bnf list -> typ list -> typ list ->
    83     thm -> thm list list -> BNF_Def.bnf list -> BNF_Def.bnf list -> typ list -> typ list ->
    72     typ list -> typ list list list -> term list list -> thm list list -> term list list ->
    84     typ list -> typ list list list -> term list list -> thm list list -> term list list ->
    73     thm list list -> local_theory ->
    85     thm list list -> local_theory -> lfp_sugar_thms
    74     (thm list * thm * Args.src list) * (thm list list * Args.src list)
       
    75     * (thm list list * Args.src list)
       
    76   val derive_coinduct_coiters_thms_for_types: BNF_Def.bnf list ->
    86   val derive_coinduct_coiters_thms_for_types: BNF_Def.bnf list ->
    77     string * term list * term list list * ((term list list * term list list list)
    87     string * term list * term list list * ((term list list * term list list list)
    78       * (typ list * typ list list)) list ->
    88       * (typ list * typ list list)) list ->
    79     thm -> thm list -> thm list -> thm list list -> BNF_Def.bnf list -> typ list -> typ list ->
    89     thm -> thm list -> thm list -> thm list list -> BNF_Def.bnf list -> typ list -> typ list ->
    80     int list list -> int list list -> int list -> thm list list -> BNF_Ctr_Sugar.ctr_sugar list ->
    90     int list list -> int list list -> int list -> thm list list -> BNF_Ctr_Sugar.ctr_sugar list ->
    81     term list list -> thm list list -> (thm list -> thm list) -> local_theory ->
    91     term list list -> thm list list -> (thm list -> thm list) -> local_theory -> gfp_sugar_thms
    82     ((thm list * thm) list * Args.src list)
       
    83     * (thm list list * thm list list * Args.src list)
       
    84     * (thm list list * thm list list) * (thm list list * thm list list * Args.src list)
       
    85     * (thm list list * thm list list * Args.src list)
       
    86     * (thm list list list * thm list list list * Args.src list)
       
    87 
       
    88   val co_datatypes: BNF_FP_Util.fp_kind -> (mixfix list -> binding list -> binding list ->
    92   val co_datatypes: BNF_FP_Util.fp_kind -> (mixfix list -> binding list -> binding list ->
    89       binding list list -> binding list -> (string * sort) list -> typ list * typ list list ->
    93       binding list list -> binding list -> (string * sort) list -> typ list * typ list list ->
    90       BNF_Def.bnf list -> local_theory -> BNF_FP_Util.fp_result * local_theory) ->
    94       BNF_Def.bnf list -> local_theory -> BNF_FP_Util.fp_result * local_theory) ->
    91     (bool * bool) * (((((binding * (typ * sort)) list * binding) * (binding * binding)) * mixfix) *
    95     (bool * bool) * (((((binding * (typ * sort)) list * binding) * (binding * binding)) * mixfix) *
    92       ((((binding * binding) * (binding * typ) list) * (binding * term) list) *
    96       ((((binding * binding) * (binding * typ) list) * (binding * term) list) *
   393 
   397 
   394 fun nesty_bnfs ctxt ctr_Tsss Us =
   398 fun nesty_bnfs ctxt ctr_Tsss Us =
   395   map_filter (bnf_of ctxt) (fold (fold (fold (add_nesty_bnf_names Us))) ctr_Tsss []);
   399   map_filter (bnf_of ctxt) (fold (fold (fold (add_nesty_bnf_names Us))) ctr_Tsss []);
   396 
   400 
   397 fun indexify proj xs f p = f (find_index (curry op = (proj p)) xs) p;
   401 fun indexify proj xs f p = f (find_index (curry op = (proj p)) xs) p;
       
   402 
       
   403 type lfp_sugar_thms =
       
   404   (thm list * thm * Args.src list)
       
   405   * (thm list list * Args.src list)
       
   406   * (thm list list * Args.src list);
       
   407 
       
   408 type gfp_sugar_thms =
       
   409   ((thm list * thm) list * Args.src list)
       
   410   * (thm list list * thm list list * Args.src list)
       
   411   * (thm list list * thm list list) * (thm list list * thm list list * Args.src list)
       
   412   * (thm list list * thm list list * Args.src list)
       
   413   * (thm list list list * thm list list list * Args.src list);
   398 
   414 
   399 fun mk_iter_fun_arg_types0 n ms = map2 dest_tupleT ms o dest_sumTN_balanced n o domain_type;
   415 fun mk_iter_fun_arg_types0 n ms = map2 dest_tupleT ms o dest_sumTN_balanced n o domain_type;
   400 
   416 
   401 fun mk_iter_fun_arg_types ctr_Tsss ns mss =
   417 fun mk_iter_fun_arg_types ctr_Tsss ns mss =
   402   mk_fp_iter_fun_types
   418   mk_fp_iter_fun_types