src/HOL/IMP/Util.thy
author wenzelm
Wed, 15 Jun 2011 16:22:58 +0200
changeset 43397 dba359c0ae3b
parent 43158 686fa0a0696e
child 44174 d1d79f0e1ea6
permissions -rw-r--r--
more robust init;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43158
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     1
(* Author: Tobias Nipkow *)
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     2
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     3
theory Util imports Main
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     4
begin
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     5
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     6
subsection "Show sets of variables as lists"
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     7
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     8
text {* Sets are functions and are not displayed by element if
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     9
computed as values: *}
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    10
value "{''x'', ''y''}"
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    11
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    12
text {* Lists do not have this problem *}
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    13
value "[''x'', ''y'']"
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    14
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    15
text {* We define a function @{text show} that converts a set of
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    16
  variable names into a list. To keep things simple, we rely on
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    17
  the convention that we only use single letter names.
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    18
*}
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    19
definition 
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    20
  letters :: "string list" where
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    21
  "letters = map (\<lambda>c. [c]) chars"
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    22
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    23
definition 
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    24
  "show" :: "string set \<Rightarrow> string list" where
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    25
  "show S = filter S letters" 
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    26
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    27
value "show {''x'', ''z''}"
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    28
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    29
end