src/HOL/Tools/Datatype/datatype_aux.ML
changeset 32900 dc883c6126d4
parent 32733 71618deaf777
child 32952 aeb1e44fbc19
equal deleted inserted replaced
32899:c913cc831630 32900:dc883c6126d4
    35 
    35 
    36   val app_bnds : term -> int -> term
    36   val app_bnds : term -> int -> term
    37 
    37 
    38   val indtac : thm -> string list -> int -> tactic
    38   val indtac : thm -> string list -> int -> tactic
    39   val exh_tac : (string -> thm) -> int -> tactic
    39   val exh_tac : (string -> thm) -> int -> tactic
    40 
       
    41   datatype simproc_dist = FewConstrs of thm list
       
    42                         | ManyConstrs of thm * simpset;
       
    43 
       
    44 
    40 
    45   exception Datatype
    41   exception Datatype
    46   exception Datatype_Empty of string
    42   exception Datatype_Empty of string
    47   val name_of_typ : typ -> string
    43   val name_of_typ : typ -> string
    48   val dtyp_of_typ : (string * string list) list -> typ -> dtyp
    44   val dtyp_of_typ : (string * string list) list -> typ -> dtyp
   151       cterm_of thy (List.foldr (fn ((_, T), t) => Abs ("z", T, t))
   147       cterm_of thy (List.foldr (fn ((_, T), t) => Abs ("z", T, t))
   152         (Bound 0) params))] exhaustion
   148         (Bound 0) params))] exhaustion
   153   in compose_tac (false, exhaustion', nprems_of exhaustion) i state
   149   in compose_tac (false, exhaustion', nprems_of exhaustion) i state
   154   end;
   150   end;
   155 
   151 
   156 (* handling of distinctness theorems *)
       
   157 
       
   158 datatype simproc_dist = FewConstrs of thm list
       
   159                       | ManyConstrs of thm * simpset;
       
   160 
   152 
   161 (********************** Internal description of datatypes *********************)
   153 (********************** Internal description of datatypes *********************)
   162 
   154 
   163 datatype dtyp =
   155 datatype dtyp =
   164     DtTFree of string
   156     DtTFree of string
   174   {index : int,
   166   {index : int,
   175    alt_names : string list option,
   167    alt_names : string list option,
   176    descr : descr,
   168    descr : descr,
   177    sorts : (string * sort) list,
   169    sorts : (string * sort) list,
   178    inject : thm list,
   170    inject : thm list,
   179    distinct : simproc_dist,
   171    distinct : thm list,
   180    induct : thm,
   172    induct : thm,
   181    inducts : thm list,
   173    inducts : thm list,
   182    exhaust : thm,
   174    exhaust : thm,
   183    nchotomy : thm,
   175    nchotomy : thm,
   184    rec_names : string list,
   176    rec_names : string list,