src/HOL/ex/CodeCollections.thy
author huffman
Thu, 14 Dec 2006 21:03:39 +0100
changeset 21850 bf253f7075b4
parent 21545 54cc492d80a9
child 21924 fe474e69e603
permissions -rw-r--r--
remove usage of ultra tactic
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"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    40
  by default (simp_all add: order_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"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    50
proof (default, unfold order_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"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
    72
  unfolding order_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
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   102
  (* FIXME: better name handling of definitions *)
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   103
  "_1": "fin == [False, True]"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   104
  by default (simp_all add: fin_bool_def)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   105
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   106
instance unit :: fin
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   107
  "_2": "fin == [()]"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   108
  by default (simp_all add: fin_unit_def)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   109
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   110
fun
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   111
  product :: "'a list \<Rightarrow> 'b list \<Rightarrow> ('a * 'b) list"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   112
  where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   113
  "product [] ys = []"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   114
  "product (x#xs) ys = map (Pair x) ys @ product xs ys"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   115
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   116
lemma product_all:
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   117
  assumes "x \<in> set xs" "y \<in> set ys"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   118
  shows "(x, y) \<in> set (product xs ys)"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   119
using prems proof (induct xs)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   120
  case Nil
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   121
  then have False by auto
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
next
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   124
  case (Cons z xs)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   125
  then show ?case
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   126
  proof (cases "x = z")
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   127
    case True
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   128
    with Cons have "(x, y) \<in> set (product (x # xs) ys)" by simp
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   129
    with True show ?thesis by simp
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   130
  next
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   131
    case False
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   132
    with Cons have "x \<in> set xs" by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   133
    with Cons have "(x, y) \<in> set (product xs ys)" by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   134
    then show "(x, y) \<in> set (product (z#xs) ys)" by auto
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
qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   137
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   138
instance * :: (fin, fin) fin
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   139
  "_3": "fin == product fin fin"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   140
apply default
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   141
apply (simp_all add: "fin_*_def")
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   142
apply (unfold split_paired_all)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   143
apply (rule product_all)
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   144
apply (rule member_fin)+
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   145
done
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   146
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   147
instance option :: (fin) fin
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   148
  "_4": "fin == None # map Some fin"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   149
proof (default, unfold fin_option_def)
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   150
  fix x :: "'a::fin option"
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   151
  show "x \<in> set (None # map Some fin)"
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   152
  proof (cases x)
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   153
    case None then show ?thesis by auto
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   154
  next
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   155
    case (Some x) then show ?thesis by (auto intro: member_fin)
20436
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
qed
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   158
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   159
consts
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   160
  get_first :: "('a \<Rightarrow> bool) \<Rightarrow> 'a list \<Rightarrow> 'a option"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   161
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   162
primrec
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   163
  "get_first p [] = None"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   164
  "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
   165
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   166
consts
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   167
  get_index :: "('a \<Rightarrow> bool) \<Rightarrow> nat \<Rightarrow> 'a list \<Rightarrow> nat option"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   168
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   169
primrec
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   170
  "get_index p n [] = None"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   171
  "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
   172
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   173
(*definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21319
diff changeset
   174
  between :: "'a::enum \<Rightarrow> 'a \<Rightarrow> 'a option" where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   175
  "between x y = get_first (\<lambda>z. x << z & z << y) enum"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   176
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   177
definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21319
diff changeset
   178
  index :: "'a::enum \<Rightarrow> nat" where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   179
  "index x = the (get_index (\<lambda>y. y = x) 0 enum)"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   180
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   181
definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21319
diff changeset
   182
  add :: "'a::enum \<Rightarrow> 'a \<Rightarrow> 'a" where
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   183
  "add x y =
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   184
    (let
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   185
      enm = enum
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   186
    in enm ! ((index x + index y) mod length enm))"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   187
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   188
consts
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   189
  sum :: "'a::{enum, infimum} list \<Rightarrow> 'a"
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   190
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   191
primrec
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   192
  "sum [] = inf"
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   193
  "sum (x#xs) = add x (sum xs)"*)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   194
21460
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   195
(*definition "test1 = sum [None, Some True, None, Some False]"*)
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   196
(*definition "test2 = (inf :: nat \<times> unit)"*)
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   197
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
   198
cda5cd8bfd16 example tuned
haftmann
parents: 21404
diff changeset
   199
code_gen test3
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   200
21545
54cc492d80a9 adjusted syntax for internal code generation
haftmann
parents: 21460
diff changeset
   201
code_gen (SML #)
21080
7d73aa966207 added Haskell
haftmann
parents: 20597
diff changeset
   202
code_gen (Haskell -)
20436
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   203
0af8655ab0bb added yet another code generator example
haftmann
parents:
diff changeset
   204
end