src/HOL/Tools/datatype_rep_proofs.ML
changeset 28965 1de908189869
parent 28662 64ab5bb68d4c
child 29270 0eade173f77e
equal deleted inserted replaced
28963:f6d9e0e0b153 28965:1de908189869
    75     val big_rec_name = big_name ^ "_rep_set";
    75     val big_rec_name = big_name ^ "_rep_set";
    76     val rep_set_names' =
    76     val rep_set_names' =
    77       (if length descr' = 1 then [big_rec_name] else
    77       (if length descr' = 1 then [big_rec_name] else
    78         (map ((curry (op ^) (big_rec_name ^ "_")) o string_of_int)
    78         (map ((curry (op ^) (big_rec_name ^ "_")) o string_of_int)
    79           (1 upto (length descr'))));
    79           (1 upto (length descr'))));
    80     val rep_set_names = map (Sign.full_name thy1) rep_set_names';
    80     val rep_set_names = map (Sign.full_bname thy1) rep_set_names';
    81 
    81 
    82     val tyvars = map (fn (_, (_, Ts, _)) => map dest_DtTFree Ts) (hd descr);
    82     val tyvars = map (fn (_, (_, Ts, _)) => map dest_DtTFree Ts) (hd descr);
    83     val leafTs' = get_nonrec_types descr' sorts;
    83     val leafTs' = get_nonrec_types descr' sorts;
    84     val branchTs = get_branching_types descr' sorts;
    84     val branchTs = get_branching_types descr' sorts;
    85     val branchT = if null branchTs then HOLogic.unitT
    85     val branchT = if null branchTs then HOLogic.unitT
   182         ((1 upto (length constrs)) ~~ constrs)) (descr' ~~ rep_set_names');
   182         ((1 upto (length constrs)) ~~ constrs)) (descr' ~~ rep_set_names');
   183 
   183 
   184     val ({raw_induct = rep_induct, intrs = rep_intrs, ...}, thy2) =
   184     val ({raw_induct = rep_induct, intrs = rep_intrs, ...}, thy2) =
   185         InductivePackage.add_inductive_global (serial_string ())
   185         InductivePackage.add_inductive_global (serial_string ())
   186           {quiet_mode = ! quiet_mode, verbose = false, kind = Thm.internalK,
   186           {quiet_mode = ! quiet_mode, verbose = false, kind = Thm.internalK,
   187            alt_name = Name.binding big_rec_name, coind = false, no_elim = true, no_ind = false,
   187            alt_name = Binding.name big_rec_name, coind = false, no_elim = true, no_ind = false,
   188            skip_mono = true}
   188            skip_mono = true}
   189           (map (fn s => ((Name.binding s, UnivT'), NoSyn)) rep_set_names') []
   189           (map (fn s => ((Binding.name s, UnivT'), NoSyn)) rep_set_names') []
   190           (map (fn x => (Attrib.no_binding, x)) intr_ts) [] thy1;
   190           (map (fn x => (Attrib.empty_binding, x)) intr_ts) [] thy1;
   191 
   191 
   192     (********************************* typedef ********************************)
   192     (********************************* typedef ********************************)
   193 
   193 
   194     val (typedefs, thy3) = thy2 |>
   194     val (typedefs, thy3) = thy2 |>
   195       parent_path flat_names |>
   195       parent_path flat_names |>
   208     val big_rep_name = (space_implode "_" new_type_names) ^ "_Rep_";
   208     val big_rep_name = (space_implode "_" new_type_names) ^ "_Rep_";
   209     val rep_names = map (curry op ^ "Rep_") new_type_names;
   209     val rep_names = map (curry op ^ "Rep_") new_type_names;
   210     val rep_names' = map (fn i => big_rep_name ^ (string_of_int i))
   210     val rep_names' = map (fn i => big_rep_name ^ (string_of_int i))
   211       (1 upto (length (flat (tl descr))));
   211       (1 upto (length (flat (tl descr))));
   212     val all_rep_names = map (Sign.intern_const thy3) rep_names @
   212     val all_rep_names = map (Sign.intern_const thy3) rep_names @
   213       map (Sign.full_name thy3) rep_names';
   213       map (Sign.full_bname thy3) rep_names';
   214 
   214 
   215     (* isomorphism declarations *)
   215     (* isomorphism declarations *)
   216 
   216 
   217     val iso_decls = map (fn (T, s) => (s, T --> Univ_elT, NoSyn))
   217     val iso_decls = map (fn (T, s) => (s, T --> Univ_elT, NoSyn))
   218       (oldTs ~~ rep_names');
   218       (oldTs ~~ rep_names');