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