src/HOL/IMP/Collecting_Examples.thy
author nipkow
Sat, 11 Aug 2012 11:31:05 +0200
changeset 48765 fb1ed5230abc
child 49138 53f954510a8c
permissions -rw-r--r--
special code with lists no longer necessary, use sets
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
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    10
text{* Make assignment rule executable: *}
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    11
declare step.simps(2)[code del]
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    12
lemma [code]: "step S (x ::= e {P}) = (x ::= e {(%s. s(x := aval e s)) ` S})"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    13
by auto
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    14
declare step.simps(1,3-)[code]
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    15
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    16
text{* The example: *}
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    17
definition "c = WHILE Less (V ''x'') (N 3)
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    18
                DO ''x'' ::= Plus (V ''x'') (N 2)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    19
definition c0 :: "state set acom" where "c0 = anno {} c"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    20
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    21
definition "show_acom xs = map_acom (\<lambda>S. show_state xs ` S)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    22
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    23
text{* Collecting semantics: *}
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    24
value "show_acom [''x''] (((step {%x. 0}) ^^ 1) c0)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    25
value "show_acom [''x''] (((step {%x. 0}) ^^ 2) c0)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    26
value "show_acom [''x''] (((step {%x. 0}) ^^ 3) c0)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    27
value "show_acom [''x''] (((step {%x. 0}) ^^ 4) c0)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    28
value "show_acom [''x''] (((step {%x. 0}) ^^ 5) c0)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    29
value "show_acom [''x''] (((step {%x. 0}) ^^ 6) c0)"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    30
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    31
text{* Small-step semantics: *}
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    32
value "show_acom [''x''] (((step {}) ^^ 0) (step {%x. 0} c0))"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    33
value "show_acom [''x''] (((step {}) ^^ 1) (step {%x. 0} c0))"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    34
value "show_acom [''x''] (((step {}) ^^ 2) (step {%x. 0} c0))"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    35
value "show_acom [''x''] (((step {}) ^^ 3) (step {%x. 0} c0))"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    36
value "show_acom [''x''] (((step {}) ^^ 4) (step {%x. 0} c0))"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    37
value "show_acom [''x''] (((step {}) ^^ 5) (step {%x. 0} c0))"
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    38
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    39
fb1ed5230abc special code with lists no longer necessary, use sets
nipkow
parents:
diff changeset
    40
end