| author | wenzelm | 
| Fri, 23 Aug 2024 22:47:51 +0200 | |
| changeset 80753 | 66893c47500d | 
| parent 68778 | 4566bac4517d | 
| child 82773 | 4ec8e654112f | 
| 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  |