src/HOL/ex/CodeCollections.thy
author aspinall
Sat, 17 Feb 2007 17:18:47 +0100
changeset 22334 4c96d3370186
parent 22179 1a3575de2afc
child 22384 33a46e6c7f04
permissions -rw-r--r--
Clarify comment
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22068
00bed5ac9884 renamed locale partial_order to order
haftmann
parents: 21924
diff changeset
     1
(*  ID:         $Id$
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
     2
    Author:     Florian Haftmann, TU Muenchen
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
     3
*)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
     4
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
     5
header {* Collection classes as examples for code generation *}
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
     6
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
     7
theory CodeCollections
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
     8
imports Main Product_ord List_lexord
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
     9
begin
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    10
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    11
fun
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    12
  abs_sorted :: "('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> 'a list \<Rightarrow> bool" where
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    13
  "abs_sorted cmp [] \<longleftrightarrow> True"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    14
  "abs_sorted cmp [x] \<longleftrightarrow> True"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    15
  "abs_sorted cmp (x#y#xs) \<longleftrightarrow> cmp x y \<and> abs_sorted cmp (y#xs)"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    16
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    17
abbreviation (in ord)
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    18
  "sorted \<equiv> abs_sorted less_eq"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    19
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    20
abbreviation
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    21
  "sorted \<equiv> abs_sorted less_eq"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    22
22068
00bed5ac9884 renamed locale partial_order to order
haftmann
parents: 21924
diff changeset
    23
lemma (in order) sorted_weakening:
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    24
  assumes "sorted (x # xs)"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    25
  shows "sorted xs"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    26
using prems proof (induct xs)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    27
  case Nil show ?case by simp 
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    28
next
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    29
  case (Cons x' xs)
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    30
  from this have "sorted (x # x' # xs)" by auto
20523
36a59e5d0039 Major update to function package, including new syntax and the (only theoretical)
krauss
parents: 20453
diff changeset
    31
  then show "sorted (x' # xs)"
36a59e5d0039 Major update to function package, including new syntax and the (only theoretical)
krauss
parents: 20453
diff changeset
    32
    by auto
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    33
qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    34
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    35
instance unit :: order
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    36
  "u \<le> v \<equiv> True"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    37
  "u < v \<equiv> False"
21924
fe474e69e603 simplified class_package
haftmann
parents: 21545
diff changeset
    38
  by default (simp_all add: less_eq_unit_def less_unit_def)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    39
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    40
fun le_option' :: "'a\<Colon>order option \<Rightarrow> 'a option \<Rightarrow> bool"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    41
  where "le_option' None y \<longleftrightarrow> True"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    42
  | "le_option' (Some x) None \<longleftrightarrow> False"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    43
  | "le_option' (Some x) (Some y) \<longleftrightarrow> x \<le> y"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    44
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    45
instance option :: (order) order
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    46
  "x \<le> y \<equiv> le_option' x y"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    47
  "x < y \<equiv> x \<le> y \<and> x \<noteq> y"
21924
fe474e69e603 simplified class_package
haftmann
parents: 21545
diff changeset
    48
proof (default, unfold less_eq_option_def less_option_def)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    49
  fix x
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    50
  show "le_option' x x" by (cases x) simp_all
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    51
next
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    52
  fix x y z
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    53
  assume "le_option' x y" "le_option' y z"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    54
  then show "le_option' x z"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    55
    by (cases x, simp_all, cases y, simp_all, cases z, simp_all)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    56
next
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    57
  fix x y
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    58
  assume "le_option' x y" "le_option' y x"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    59
  then show "x = y"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    60
    by (cases x, simp_all, cases y, simp_all, cases y, simp_all)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    61
next
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    62
  fix x y
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    63
  show "le_option' x y \<and> x \<noteq> y \<longleftrightarrow> le_option' x y \<and> x \<noteq> y" ..
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    64
qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    65
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    66
lemma [simp, code]:
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    67
  "None \<le> y \<longleftrightarrow> True"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    68
  "Some x \<le> None \<longleftrightarrow> False"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    69
  "Some v \<le> Some w \<longleftrightarrow> v \<le> w"
21924
fe474e69e603 simplified class_package
haftmann
parents: 21545
diff changeset
    70
  unfolding less_eq_option_def less_option_def le_option'.simps by rule+
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    71
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    72
lemma forall_all [simp]:
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    73
  "list_all P xs \<longleftrightarrow> (\<forall>x\<in>set xs. P x)"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    74
  by (induct xs) auto
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    75
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    76
lemma exists_ex [simp]:
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    77
  "list_ex P xs \<longleftrightarrow> (\<exists>x\<in>set xs. P x)"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    78
  by (induct xs) auto
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    79
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
    80
class finite =
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    81
  fixes fin :: "'a list"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    82
  assumes member_fin: "x \<in> set fin"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    83
begin
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    84
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    85
lemma set_enum_UNIV:
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    86
  "set fin = UNIV"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    87
  using member_fin by auto
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    88
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    89
lemma all_forall [code func, code inline]:
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    90
  "(\<forall>x. P x) \<longleftrightarrow> list_all P fin"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    91
  using set_enum_UNIV by simp_all
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    92
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    93
lemma ex_exists [code func, code inline]:
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    94
  "(\<exists>x. P x) \<longleftrightarrow> list_ex P fin"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    95
  using set_enum_UNIV by simp_all
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
    96
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    97
end
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    98
  
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
    99
instance bool :: finite
21924
fe474e69e603 simplified class_package
haftmann
parents: 21545
diff changeset
   100
  "fin == [False, True]"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   101
  by default (simp_all add: fin_bool_def)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   102
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
   103
instance unit :: finite
21924
fe474e69e603 simplified class_package
haftmann
parents: 21545
diff changeset
   104
  "fin == [()]"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   105
  by default (simp_all add: fin_unit_def)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   106
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   107
fun
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   108
  product :: "'a list \<Rightarrow> 'b list \<Rightarrow> ('a * 'b) list"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   109
  where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   110
  "product [] ys = []"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   111
  "product (x#xs) ys = map (Pair x) ys @ product xs ys"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   112
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   113
lemma product_all:
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   114
  assumes "x \<in> set xs" "y \<in> set ys"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   115
  shows "(x, y) \<in> set (product xs ys)"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   116
using prems proof (induct xs)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   117
  case Nil
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   118
  then have False by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   119
  then show ?case ..
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   120
next
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   121
  case (Cons z xs)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   122
  then show ?case
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   123
  proof (cases "x = z")
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   124
    case True
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   125
    with Cons have "(x, y) \<in> set (product (x # xs) ys)" by simp
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   126
    with True show ?thesis by simp
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   127
  next
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   128
    case False
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   129
    with Cons have "x \<in> set xs" by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   130
    with Cons have "(x, y) \<in> set (product xs ys)" by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   131
    then show "(x, y) \<in> set (product (z#xs) ys)" by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   132
  qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   133
qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   134
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
   135
instance * :: (finite, finite) finite
21924
fe474e69e603 simplified class_package
haftmann
parents: 21545
diff changeset
   136
  "fin == product fin fin"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   137
apply default
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   138
apply (simp_all add: "fin_*_def")
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   139
apply (unfold split_paired_all)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   140
apply (rule product_all)
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
   141
apply (rule finite_class.member_fin)+
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   142
done
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   143
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
   144
instance option :: (finite) finite
21924
fe474e69e603 simplified class_package
haftmann
parents: 21545
diff changeset
   145
  "fin == None # map Some fin"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   146
proof (default, unfold fin_option_def)
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
   147
  fix x :: "'a::finite option"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   148
  show "x \<in> set (None # map Some fin)"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   149
  proof (cases x)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   150
    case None then show ?thesis by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   151
  next
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
   152
    case (Some x) then show ?thesis by (auto intro: finite_class.member_fin)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   153
  qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   154
qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   155
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   156
consts
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   157
  get_first :: "('a \<Rightarrow> bool) \<Rightarrow> 'a list \<Rightarrow> 'a option"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   158
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   159
primrec
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   160
  "get_first p [] = None"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   161
  "get_first p (x#xs) = (if p x then Some x else get_first p xs)"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   162
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   163
consts
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   164
  get_index :: "('a \<Rightarrow> bool) \<Rightarrow> nat \<Rightarrow> 'a list \<Rightarrow> nat option"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   165
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   166
primrec
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   167
  "get_index p n [] = None"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   168
  "get_index p n (x#xs) = (if p x then Some n else get_index p (Suc n) xs)"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   169
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   170
(*definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21319
diff changeset
   171
  between :: "'a::enum \<Rightarrow> 'a \<Rightarrow> 'a option" where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   172
  "between x y = get_first (\<lambda>z. x << z & z << y) enum"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   173
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   174
definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21319
diff changeset
   175
  index :: "'a::enum \<Rightarrow> nat" where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   176
  "index x = the (get_index (\<lambda>y. y = x) 0 enum)"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   177
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   178
definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21319
diff changeset
   179
  add :: "'a::enum \<Rightarrow> 'a \<Rightarrow> 'a" where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   180
  "add x y =
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   181
    (let
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   182
      enm = enum
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   183
    in enm ! ((index x + index y) mod length enm))"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   184
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   185
consts
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   186
  sum :: "'a::{enum, infimum} list \<Rightarrow> 'a"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   187
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   188
primrec
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   189
  "sum [] = inf"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   190
  "sum (x#xs) = add x (sum xs)"*)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   191
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   192
(*definition "test1 = sum [None, Some True, None, Some False]"*)
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   193
(*definition "test2 = (inf :: nat \<times> unit)"*)
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   194
definition "test3 \<longleftrightarrow> (\<exists>x \<Colon> bool option. case x of Some P \<Rightarrow> P | None \<Rightarrow> False)"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   195
22179
1a3575de2afc adjusted to changes in class package
haftmann
parents: 22068
diff changeset
   196
code_gen test3 (SML #) (OCaml -) (Haskell -)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   197
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   198
end