src/HOL/Tools/Datatype/datatype_codegen.ML
author wenzelm
Mon, 12 Dec 2011 23:05:21 +0100
changeset 45822 843dc212f69e
parent 45740 132a3e1c0fe5
child 45889 4ff377493dbb
permissions -rw-r--r--
datatype dtyp with explicit sort information; tuned messages;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33968
f94fb13ecbb3 modernized structures and tuned headers of datatype package modules; joined former datatype.ML and datatype_rep_proofs.ML
haftmann
parents: 33964
diff changeset
     1
(*  Title:      HOL/Tools/Datatype/datatype_codegen.ML
29265
5b4247055bd7 moved old add_term_vars, add_term_frees etc. to structure OldTerm;
wenzelm
parents: 28965
diff changeset
     2
    Author:     Stefan Berghofer and Florian Haftmann, TU Muenchen
12445
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
     3
25534
d0b74fdd6067 simplified infrastructure for code generator operational equality
haftmann
parents: 25505
diff changeset
     4
Code generator facilities for inductive datatypes.
12445
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
     5
*)
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
     6
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
     7
signature DATATYPE_CODEGEN =
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
     8
sig
18708
4b3dadb4fe33 setup: theory -> theory;
wenzelm
parents: 18702
diff changeset
     9
  val setup: theory -> theory
12445
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
    10
end;
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
    11
33968
f94fb13ecbb3 modernized structures and tuned headers of datatype package modules; joined former datatype.ML and datatype_rep_proofs.ML
haftmann
parents: 33964
diff changeset
    12
structure Datatype_Codegen : DATATYPE_CODEGEN =
12445
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
    13
struct
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
    14
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    15
(** generic code generator **)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    16
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    17
(* liberal addition of code data for datatypes *)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    18
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    19
fun mk_constr_consts thy vs tyco cos =
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    20
  let
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    21
    val cs = map (fn (c, tys) => (c, tys ---> Type (tyco, map TFree vs))) cos;
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    22
    val cs' = map (fn c_ty as (_, ty) => (AxClass.unoverload_const thy c_ty, ty)) cs;
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    23
  in
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    24
    if is_some (try (Code.constrset_of_consts thy) cs')
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    25
    then SOME cs
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    26
    else NONE
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    27
  end;
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    28
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    29
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    30
(* case certificates *)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    31
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    32
fun mk_case_cert thy tyco =
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    33
  let
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    34
    val raw_thms = #case_rewrites (Datatype_Data.the_info thy tyco);
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    35
    val thms as hd_thm :: _ = raw_thms
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    36
      |> Conjunction.intr_balanced
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    37
      |> Thm.unvarify_global
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    38
      |> Conjunction.elim_balanced (length raw_thms)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    39
      |> map Simpdata.mk_meta_eq
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    40
      |> map Drule.zero_var_indexes;
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    41
    val params = fold_aterms (fn (Free (v, _)) => insert (op =) v | _ => I) (Thm.prop_of hd_thm) [];
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    42
    val rhs = hd_thm
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    43
      |> Thm.prop_of
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    44
      |> Logic.dest_equals
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    45
      |> fst
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    46
      |> Term.strip_comb
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    47
      |> apsnd (fst o split_last)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    48
      |> list_comb;
43324
2b47822868e4 discontinued Name.variant to emphasize that this is old-style / indirect;
wenzelm
parents: 42411
diff changeset
    49
    val lhs = Free (singleton (Name.variant_list params) "case", Term.fastype_of rhs);
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    50
    val asm = Thm.cterm_of thy (Logic.mk_equals (lhs, rhs));
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    51
  in
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    52
    thms
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    53
    |> Conjunction.intr_balanced
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    54
    |> Raw_Simplifier.rewrite_rule [Thm.symmetric (Thm.assume asm)]
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    55
    |> Thm.implies_intr asm
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    56
    |> Thm.generalize ([], params) 0
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    57
    |> AxClass.unoverload thy
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    58
    |> Thm.varifyT_global
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    59
  end;
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    60
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    61
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    62
(* equality *)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    63
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    64
fun mk_eq_eqns thy tyco =
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    65
  let
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    66
    val (vs, cos) = Datatype_Data.the_spec thy tyco;
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    67
    val {descr, index, inject = inject_thms, distinct = distinct_thms, ...} =
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    68
      Datatype_Data.the_info thy tyco;
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    69
    val ty = Type (tyco, map TFree vs);
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    70
    fun mk_eq (t1, t2) = Const (@{const_name HOL.equal}, ty --> ty --> HOLogic.boolT) $ t1 $ t2;
45740
132a3e1c0fe5 more antiquotations;
wenzelm
parents: 45700
diff changeset
    71
    fun true_eq t12 = HOLogic.mk_eq (mk_eq t12, @{term True});
132a3e1c0fe5 more antiquotations;
wenzelm
parents: 45700
diff changeset
    72
    fun false_eq t12 = HOLogic.mk_eq (mk_eq t12, @{term False});
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    73
    val triv_injects =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    74
      map_filter
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    75
        (fn (c, []) => SOME (HOLogic.mk_Trueprop (true_eq (Const (c, ty), Const (c, ty))))
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    76
          | _ => NONE) cos;
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    77
    fun prep_inject (trueprop $ (equiv $ (_ $ t1 $ t2) $ rhs)) =
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    78
      trueprop $ (equiv $ mk_eq (t1, t2) $ rhs);
45822
843dc212f69e datatype dtyp with explicit sort information;
wenzelm
parents: 45740
diff changeset
    79
    val injects = map prep_inject (nth (Datatype_Prop.make_injs [descr]) index);
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    80
    fun prep_distinct (trueprop $ (not $ (_ $ t1 $ t2))) =
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    81
      [trueprop $ false_eq (t1, t2), trueprop $ false_eq (t2, t1)];
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    82
    val distincts =
45822
843dc212f69e datatype dtyp with explicit sort information;
wenzelm
parents: 45740
diff changeset
    83
      maps prep_distinct (snd (nth (Datatype_Prop.make_distincts [descr]) index));
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    84
    val refl = HOLogic.mk_Trueprop (true_eq (Free ("x", ty), Free ("x", ty)));
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    85
    val simpset =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    86
      Simplifier.global_context thy
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    87
        (HOL_basic_ss addsimps
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    88
          (map Simpdata.mk_eq (@{thms equal eq_True} @ inject_thms @ distinct_thms)));
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    89
    fun prove prop =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    90
      Skip_Proof.prove_global thy [] [] prop (K (ALLGOALS (simp_tac simpset)))
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    91
      |> Simpdata.mk_eq;
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    92
  in (map prove (triv_injects @ injects @ distincts), prove refl) end;
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    93
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    94
fun add_equality vs tycos thy =
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    95
  let
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    96
    fun add_def tyco lthy =
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
    97
      let
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
    98
        val ty = Type (tyco, map TFree vs);
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
    99
        fun mk_side const_name =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   100
          Const (const_name, ty --> ty --> HOLogic.boolT) $ Free ("x", ty) $ Free ("y", ty);
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   101
        val def =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   102
          HOLogic.mk_Trueprop (HOLogic.mk_eq
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   103
            (mk_side @{const_name HOL.equal}, mk_side @{const_name HOL.eq}));
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   104
        val def' = Syntax.check_term lthy def;
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   105
        val ((_, (_, thm)), lthy') =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   106
          Specification.definition (NONE, (Attrib.empty_binding, def')) lthy;
42361
23f352990944 modernized structure Proof_Context;
wenzelm
parents: 41424
diff changeset
   107
        val ctxt_thy = Proof_Context.init_global (Proof_Context.theory_of lthy);
23f352990944 modernized structure Proof_Context;
wenzelm
parents: 41424
diff changeset
   108
        val thm' = singleton (Proof_Context.export lthy' ctxt_thy) thm;
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   109
      in (thm', lthy') end;
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   110
    fun tac thms = Class.intro_classes_tac [] THEN ALLGOALS (Proof_Context.fact_tac thms);
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   111
    fun prefix tyco =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   112
      Binding.qualify true (Long_Name.base_name tyco) o Binding.qualify true "eq" o Binding.name;
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   113
    fun add_eq_thms tyco =
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   114
      Theory.checkpoint
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   115
      #> `(fn thy => mk_eq_eqns thy tyco)
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   116
      #-> (fn (thms, thm) =>
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   117
        Global_Theory.note_thmss Thm.lemmaK
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   118
          [((prefix tyco "refl", [Code.add_nbe_default_eqn_attribute]), [([thm], [])]),
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   119
            ((prefix tyco "simps", [Code.add_default_eqn_attribute]), [(rev thms, [])])])
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   120
      #> snd;
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   121
  in
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   122
    thy
38857
97775f3e8722 renamed class/constant eq to equal; tuned some instantiations
haftmann
parents: 38538
diff changeset
   123
    |> Class.instantiation (tycos, vs, [HOLogic.class_equal])
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   124
    |> fold_map add_def tycos
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   125
    |-> (fn def_thms => Class.prove_instantiation_exit_result (map o Morphism.thm)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   126
         (fn _ => fn def_thms => tac def_thms) def_thms)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   127
    |-> (fn def_thms => fold Code.del_eqn def_thms)
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   128
    |> fold add_eq_thms tycos
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   129
  end;
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   130
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   131
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   132
(* register a datatype etc. *)
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   133
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   134
fun add_all_code config tycos thy =
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   135
  let
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   136
    val (vs :: _, coss) = split_list (map (Datatype_Data.the_spec thy) tycos);
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   137
    val any_css = map2 (mk_constr_consts thy vs) tycos coss;
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   138
    val css = if exists is_none any_css then [] else map_filter I any_css;
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   139
    val case_rewrites = maps (#case_rewrites o Datatype_Data.the_info thy) tycos;
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   140
    val certs = map (mk_case_cert thy) tycos;
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   141
    val tycos_eq =
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   142
      filter_out
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   143
        (fn tyco => can (Sorts.mg_domain (Sign.classes_of thy) tyco) [HOLogic.class_equal]) tycos;
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   144
  in
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   145
    if null css then thy
45700
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   146
    else
9dcbf6a1829c misc tuning;
wenzelm
parents: 45173
diff changeset
   147
      thy
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   148
      |> tap (fn _ => Datatype_Aux.message config "Registering datatype for code generator ...")
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   149
      |> fold Code.add_datatype css
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   150
      |> fold_rev Code.add_default_eqn case_rewrites
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   151
      |> fold Code.add_case certs
38538
c87b69396a37 liberal instantiation of class eq; tuned naming scheme
haftmann
parents: 38348
diff changeset
   152
      |> not (null tycos_eq) ? add_equality vs tycos_eq
36298
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   153
   end;
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   154
2d55c4aba1dc swapped generic code generator and SML code generator
haftmann
parents: 35899
diff changeset
   155
20426
9ffea7a8b31c added typecopy_package
haftmann
parents: 20389
diff changeset
   156
(** theory setup **)
9ffea7a8b31c added typecopy_package
haftmann
parents: 20389
diff changeset
   157
45173
81a3fb857ab8 removing old code generator setup for datatypes
bulwahn
parents: 44121
diff changeset
   158
val setup = Datatype_Data.interpretation add_all_code;
20597
65fe827aa595 code generation 2 adjustments
haftmann
parents: 20439
diff changeset
   159
12445
f17eb90bfd16 Code generator for datatypes.
berghofe
parents:
diff changeset
   160
end;