src/HOL/IMP/Collecting_Examples.thy
author nipkow
Wed, 13 Feb 2013 11:28:44 +0100
changeset 51040 faf7f0d4f9eb
parent 50986 c54ea7f5418f
child 51391 408271602165
permissions -rw-r--r--
tuned state display
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48765
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     1
theory Collecting_Examples
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     2
imports Collecting
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     3
begin
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     4
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     5
text{* Tweak code generation to work with sets of non-equality types: *}
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     6
declare insert_code[code del] union_coset_filter[code del]
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     7
lemma insert_code [code]:  "insert x (set xs) = set (x#xs)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     8
by simp
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
     9
51040
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    10
text{* In order to display commands annotated with state sets,
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    11
states must be translated into a printable format as lists of pairs,
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    12
for a given set of variable names. This is what @{text show_acom} does: *}
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    13
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    14
definition show_acom ::
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    15
  "vname list \<Rightarrow> state set acom \<Rightarrow> (vname*val)list set acom" where
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    16
"show_acom xs = map_acom (\<lambda>S. (\<lambda>s. map (\<lambda>x. (x, s x)) xs) ` S)"
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    17
faf7f0d4f9eb tuned state display
nipkow
parents: 50986
diff changeset
    18
48765
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    19
text{* The example: *}
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    20
definition "c = WHILE Less (V ''x'') (N 3)
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    21
                DO ''x'' ::= Plus (V ''x'') (N 2)"
50766
d5c07ddd929b tuned names
nipkow
parents: 49767
diff changeset
    22
definition C0 :: "state set acom" where "C0 = anno {} c"
48765
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    23
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    24
text{* Collecting semantics: *}
50821
nipkow
parents: 50766
diff changeset
    25
nipkow
parents: 50766
diff changeset
    26
value "show_acom [''x''] (((step {<>}) ^^ 1) C0)"
nipkow
parents: 50766
diff changeset
    27
value "show_acom [''x''] (((step {<>}) ^^ 2) C0)"
nipkow
parents: 50766
diff changeset
    28
value "show_acom [''x''] (((step {<>}) ^^ 3) C0)"
nipkow
parents: 50766
diff changeset
    29
value "show_acom [''x''] (((step {<>}) ^^ 4) C0)"
nipkow
parents: 50766
diff changeset
    30
value "show_acom [''x''] (((step {<>}) ^^ 5) C0)"
nipkow
parents: 50766
diff changeset
    31
value "show_acom [''x''] (((step {<>}) ^^ 6) C0)"
nipkow
parents: 50766
diff changeset
    32
value "show_acom [''x''] (((step {<>}) ^^ 7) C0)"
nipkow
parents: 50766
diff changeset
    33
value "show_acom [''x''] (((step {<>}) ^^ 8) C0)"
48765
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    34
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    35
text{* Small-step semantics: *}
50821
nipkow
parents: 50766
diff changeset
    36
value "show_acom [''x''] (((step {}) ^^ 0) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    37
value "show_acom [''x''] (((step {}) ^^ 1) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    38
value "show_acom [''x''] (((step {}) ^^ 2) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    39
value "show_acom [''x''] (((step {}) ^^ 3) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    40
value "show_acom [''x''] (((step {}) ^^ 4) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    41
value "show_acom [''x''] (((step {}) ^^ 5) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    42
value "show_acom [''x''] (((step {}) ^^ 6) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    43
value "show_acom [''x''] (((step {}) ^^ 7) (step {<>} C0))"
nipkow
parents: 50766
diff changeset
    44
value "show_acom [''x''] (((step {}) ^^ 8) (step {<>} C0))"
48765
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    45
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    46
end