src/HOL/Tools/datatype_package.ML
changeset 12338 de0f4a63baa5
parent 12311 ce5f9e61c037
child 12448 473cb9f9e237
equal deleted inserted replaced
12337:7c6a970f0808 12338:de0f4a63baa5
   363                 else None
   363                 else None
   364           | _ => None)
   364           | _ => None)
   365    | _ => None)
   365    | _ => None)
   366   | distinct_proc sg _ _ = None;
   366   | distinct_proc sg _ _ = None;
   367 
   367 
   368 val distinct_pats = [Thm.read_cterm (Theory.sign_of HOL.thy) ("s = t", HOLogic.termT)];
   368 val distinct_pats = [HOLogic.read_cterm (Theory.sign_of HOL.thy) "s = t"];
   369 val distinct_simproc = mk_simproc distinctN distinct_pats distinct_proc;
   369 val distinct_simproc = mk_simproc distinctN distinct_pats distinct_proc;
   370 
   370 
   371 val dist_ss = HOL_ss addsimprocs [distinct_simproc];
   371 val dist_ss = HOL_ss addsimprocs [distinct_simproc];
   372 
   372 
   373 val simproc_setup =
   373 val simproc_setup =
   458       map (fn ((_, cargs), (cname, mx)) =>
   458       map (fn ((_, cargs), (cname, mx)) =>
   459         (cname, map (typ_of_dtyp descr' sorts) cargs ---> T, mx))
   459         (cname, map (typ_of_dtyp descr' sorts) cargs ---> T, mx))
   460           (constrs ~~ constr_syntax')) ((hd descr) ~~ newTs ~~ constr_syntax);
   460           (constrs ~~ constr_syntax')) ((hd descr) ~~ newTs ~~ constr_syntax);
   461 
   461 
   462     val rec_result_Ts = map TFree (variantlist (replicate (length descr') "'t", used) ~~
   462     val rec_result_Ts = map TFree (variantlist (replicate (length descr') "'t", used) ~~
   463       replicate (length descr') HOLogic.termS);
   463       replicate (length descr') HOLogic.typeS);
   464 
   464 
   465     val reccomb_fn_Ts = flat (map (fn (i, (_, _, constrs)) =>
   465     val reccomb_fn_Ts = flat (map (fn (i, (_, _, constrs)) =>
   466       map (fn (_, cargs) =>
   466       map (fn (_, cargs) =>
   467         let
   467         let
   468           val Ts = map (typ_of_dtyp descr' sorts) cargs;
   468           val Ts = map (typ_of_dtyp descr' sorts) cargs;
   482         (1 upto (length descr')));
   482         (1 upto (length descr')));
   483 
   483 
   484     val size_names = DatatypeProp.indexify_names
   484     val size_names = DatatypeProp.indexify_names
   485       (map (fn T => name_of_typ T ^ "_size") (drop (length (hd descr), recTs)));
   485       (map (fn T => name_of_typ T ^ "_size") (drop (length (hd descr), recTs)));
   486 
   486 
   487     val freeT = TFree (variant used "'t", HOLogic.termS);
   487     val freeT = TFree (variant used "'t", HOLogic.typeS);
   488     val case_fn_Ts = map (fn (i, (_, _, constrs)) =>
   488     val case_fn_Ts = map (fn (i, (_, _, constrs)) =>
   489       map (fn (_, cargs) =>
   489       map (fn (_, cargs) =>
   490         let val Ts = map (typ_of_dtyp descr' sorts) cargs
   490         let val Ts = map (typ_of_dtyp descr' sorts) cargs
   491         in Ts ---> freeT end) constrs) (hd descr);
   491         in Ts ---> freeT end) constrs) (hd descr);
   492 
   492