7 |
7 |
8 theory Action |
8 theory Action |
9 imports Stfun |
9 imports Stfun |
10 begin |
10 begin |
11 |
11 |
12 |
12 type_synonym 'a trfun = "state \<times> state \<Rightarrow> 'a" |
13 (** abstract syntax **) |
13 type_synonym action = "bool trfun" |
14 |
|
15 type_synonym 'a trfun = "(state * state) \<Rightarrow> 'a" |
|
16 type_synonym action = "bool trfun" |
|
17 |
14 |
18 instance prod :: (world, world) world .. |
15 instance prod :: (world, world) world .. |
19 |
16 |
|
17 definition enabled :: "action \<Rightarrow> stpred" |
|
18 where "enabled A s \<equiv> \<exists>u. (s,u) \<Turnstile> A" |
|
19 |
|
20 |
20 consts |
21 consts |
21 (** abstract syntax **) |
22 before :: "'a stfun \<Rightarrow> 'a trfun" |
22 before :: "'a stfun \<Rightarrow> 'a trfun" |
23 after :: "'a stfun \<Rightarrow> 'a trfun" |
23 after :: "'a stfun \<Rightarrow> 'a trfun" |
24 unch :: "'a stfun \<Rightarrow> action" |
24 unch :: "'a stfun \<Rightarrow> action" |
|
25 |
|
26 SqAct :: "[action, 'a stfun] \<Rightarrow> action" |
|
27 AnAct :: "[action, 'a stfun] \<Rightarrow> action" |
|
28 enabled :: "action \<Rightarrow> stpred" |
|
29 |
|
30 (** concrete syntax **) |
|
31 |
25 |
32 syntax |
26 syntax |
33 (* Syntax for writing action expressions in arbitrary contexts *) |
27 (* Syntax for writing action expressions in arbitrary contexts *) |
34 "_ACT" :: "lift \<Rightarrow> 'a" ("(ACT _)") |
28 "_ACT" :: "lift \<Rightarrow> 'a" ("(ACT _)") |
35 |
29 |
38 "_unchanged" :: "lift \<Rightarrow> lift" ("(unchanged _)" [100] 99) |
32 "_unchanged" :: "lift \<Rightarrow> lift" ("(unchanged _)" [100] 99) |
39 |
33 |
40 (*** Priming: same as "after" ***) |
34 (*** Priming: same as "after" ***) |
41 "_prime" :: "lift \<Rightarrow> lift" ("(_`)" [100] 99) |
35 "_prime" :: "lift \<Rightarrow> lift" ("(_`)" [100] 99) |
42 |
36 |
43 "_SqAct" :: "[lift, lift] \<Rightarrow> lift" ("([_]'_(_))" [0,1000] 99) |
|
44 "_AnAct" :: "[lift, lift] \<Rightarrow> lift" ("(<_>'_(_))" [0,1000] 99) |
|
45 "_Enabled" :: "lift \<Rightarrow> lift" ("(Enabled _)" [100] 100) |
37 "_Enabled" :: "lift \<Rightarrow> lift" ("(Enabled _)" [100] 100) |
46 |
38 |
47 translations |
39 translations |
48 "ACT A" => "(A::state*state \<Rightarrow> _)" |
40 "ACT A" => "(A::state*state \<Rightarrow> _)" |
49 "_before" == "CONST before" |
41 "_before" == "CONST before" |
50 "_after" == "CONST after" |
42 "_after" == "CONST after" |
51 "_prime" => "_after" |
43 "_prime" => "_after" |
52 "_unchanged" == "CONST unch" |
44 "_unchanged" == "CONST unch" |
53 "_SqAct" == "CONST SqAct" |
|
54 "_AnAct" == "CONST AnAct" |
|
55 "_Enabled" == "CONST enabled" |
45 "_Enabled" == "CONST enabled" |
56 "w \<Turnstile> [A]_v" <= "_SqAct A v w" |
|
57 "w \<Turnstile> <A>_v" <= "_AnAct A v w" |
|
58 "s \<Turnstile> Enabled A" <= "_Enabled A s" |
46 "s \<Turnstile> Enabled A" <= "_Enabled A s" |
59 "w \<Turnstile> unchanged f" <= "_unchanged f w" |
47 "w \<Turnstile> unchanged f" <= "_unchanged f w" |
60 |
48 |
61 axiomatization where |
49 axiomatization where |
62 unl_before: "(ACT $v) (s,t) \<equiv> v s" and |
50 unl_before: "(ACT $v) (s,t) \<equiv> v s" and |
63 unl_after: "(ACT v$) (s,t) \<equiv> v t" and |
51 unl_after: "(ACT v$) (s,t) \<equiv> v t" and |
64 |
|
65 unchanged_def: "(s,t) \<Turnstile> unchanged v \<equiv> (v t = v s)" |
52 unchanged_def: "(s,t) \<Turnstile> unchanged v \<equiv> (v t = v s)" |
66 |
53 |
67 defs |
54 |
68 square_def: "ACT [A]_v \<equiv> ACT (A \<or> unchanged v)" |
55 definition SqAct :: "[action, 'a stfun] \<Rightarrow> action" |
69 angle_def: "ACT <A>_v \<equiv> ACT (A \<and> \<not> unchanged v)" |
56 where square_def: "SqAct A v \<equiv> ACT (A \<or> unchanged v)" |
70 |
57 |
71 enabled_def: "s \<Turnstile> Enabled A \<equiv> \<exists>u. (s,u) \<Turnstile> A" |
58 definition AnAct :: "[action, 'a stfun] \<Rightarrow> action" |
|
59 where angle_def: "AnAct A v \<equiv> ACT (A \<and> \<not> unchanged v)" |
|
60 |
|
61 syntax |
|
62 "_SqAct" :: "[lift, lift] \<Rightarrow> lift" ("([_]'_(_))" [0, 1000] 99) |
|
63 "_AnAct" :: "[lift, lift] \<Rightarrow> lift" ("(<_>'_(_))" [0, 1000] 99) |
|
64 translations |
|
65 "_SqAct" == "CONST SqAct" |
|
66 "_AnAct" == "CONST AnAct" |
|
67 "w \<Turnstile> [A]_v" \<leftharpoondown> "_SqAct A v w" |
|
68 "w \<Turnstile> <A>_v" \<leftharpoondown> "_AnAct A v w" |
72 |
69 |
73 |
70 |
74 (* The following assertion specializes "intI" for any world type |
71 (* The following assertion specializes "intI" for any world type |
75 which is a pair, not just for "state * state". |
72 which is a pair, not just for "state * state". |
76 *) |
73 *) |