author | wenzelm |
Sat, 13 Aug 2022 18:06:30 +0200 | |
changeset 75848 | 9e4c0aaa30aa |
parent 68778 | 4566bac4517d |
permissions | -rw-r--r-- |
68778 | 1 |
subsection "Collecting Semantics Examples" |
2 |
||
48765 | 3 |
theory Collecting_Examples |
51566 | 4 |
imports Collecting Vars |
48765 | 5 |
begin |
6 |
||
68778 | 7 |
subsubsection "Pretty printing state sets" |
51566 | 8 |
|
67406 | 9 |
text\<open>Tweak code generation to work with sets of non-equality types:\<close> |
48765 | 10 |
declare insert_code[code del] union_coset_filter[code del] |
11 |
lemma insert_code [code]: "insert x (set xs) = set (x#xs)" |
|
12 |
by simp |
|
13 |
||
67406 | 14 |
text\<open>Compensate for the fact that sets may now have duplicates:\<close> |
51566 | 15 |
definition compact :: "'a set \<Rightarrow> 'a set" where |
16 |
"compact X = X" |
|
17 |
||
18 |
lemma [code]: "compact(set xs) = set(remdups xs)" |
|
19 |
by(simp add: compact_def) |
|
20 |
||
51698 | 21 |
definition "vars_acom = compact o vars o strip" |
51566 | 22 |
|
67406 | 23 |
text\<open>In order to display commands annotated with state sets, states must be |
51566 | 24 |
translated into a printable format as sets of variable-state pairs, for the |
67406 | 25 |
variables in the command:\<close> |
51040 | 26 |
|
52019
a4cbca8f7342
finally: acom with pointwise access and update of annotations
nipkow
parents:
51698
diff
changeset
|
27 |
definition show_acom :: "state set acom \<Rightarrow> (vname*val)set set acom" where |
a4cbca8f7342
finally: acom with pointwise access and update of annotations
nipkow
parents:
51698
diff
changeset
|
28 |
"show_acom C = |
a4cbca8f7342
finally: acom with pointwise access and update of annotations
nipkow
parents:
51698
diff
changeset
|
29 |
annotate (\<lambda>p. (\<lambda>s. (\<lambda>x. (x, s x)) ` (vars_acom C)) ` anno C p) (strip C)" |
51040 | 30 |
|
31 |
||
68778 | 32 |
subsubsection "Examples" |
51566 | 33 |
|
34 |
definition "c0 = WHILE Less (V ''x'') (N 3) |
|
48765 | 35 |
DO ''x'' ::= Plus (V ''x'') (N 2)" |
67437 | 36 |
|
37 |
definition C0 :: "state set acom" where "C0 = annotate (\<lambda>p. {}) c0" |
|
48765 | 38 |
|
67406 | 39 |
text\<open>Collecting semantics:\<close> |
50821 | 40 |
|
67437 | 41 |
value "show_acom (((step {<>}) ^^ 0) C0)" |
51566 | 42 |
value "show_acom (((step {<>}) ^^ 1) C0)" |
43 |
value "show_acom (((step {<>}) ^^ 2) C0)" |
|
44 |
value "show_acom (((step {<>}) ^^ 3) C0)" |
|
45 |
value "show_acom (((step {<>}) ^^ 4) C0)" |
|
46 |
value "show_acom (((step {<>}) ^^ 5) C0)" |
|
47 |
value "show_acom (((step {<>}) ^^ 6) C0)" |
|
48 |
value "show_acom (((step {<>}) ^^ 7) C0)" |
|
49 |
value "show_acom (((step {<>}) ^^ 8) C0)" |
|
48765 | 50 |
|
67406 | 51 |
text\<open>Small-step semantics:\<close> |
51566 | 52 |
value "show_acom (((step {}) ^^ 0) (step {<>} C0))" |
53 |
value "show_acom (((step {}) ^^ 1) (step {<>} C0))" |
|
54 |
value "show_acom (((step {}) ^^ 2) (step {<>} C0))" |
|
55 |
value "show_acom (((step {}) ^^ 3) (step {<>} C0))" |
|
56 |
value "show_acom (((step {}) ^^ 4) (step {<>} C0))" |
|
57 |
value "show_acom (((step {}) ^^ 5) (step {<>} C0))" |
|
58 |
value "show_acom (((step {}) ^^ 6) (step {<>} C0))" |
|
59 |
value "show_acom (((step {}) ^^ 7) (step {<>} C0))" |
|
60 |
value "show_acom (((step {}) ^^ 8) (step {<>} C0))" |
|
48765 | 61 |
|
62 |
end |