3807
|
1 |
(*
|
|
2 |
File: Buffer.thy
|
17309
|
3 |
ID: $Id$
|
3807
|
4 |
Author: Stephan Merz
|
|
5 |
Copyright: 1997 University of Munich
|
|
6 |
|
|
7 |
Theory Name: Buffer
|
|
8 |
Logic Image: TLA
|
|
9 |
*)
|
|
10 |
|
17309
|
11 |
header {* A simple FIFO buffer (synchronous communication, interleaving) *}
|
|
12 |
|
|
13 |
theory Buffer
|
|
14 |
imports TLA
|
|
15 |
begin
|
3807
|
16 |
|
|
17 |
consts
|
|
18 |
(* actions *)
|
6255
|
19 |
BInit :: "'a stfun => 'a list stfun => 'a stfun => stpred"
|
3807
|
20 |
Enq :: "'a stfun => 'a list stfun => 'a stfun => action"
|
|
21 |
Deq :: "'a stfun => 'a list stfun => 'a stfun => action"
|
|
22 |
Next :: "'a stfun => 'a list stfun => 'a stfun => action"
|
|
23 |
|
|
24 |
(* temporal formulas *)
|
|
25 |
IBuffer :: "'a stfun => 'a list stfun => 'a stfun => temporal"
|
|
26 |
Buffer :: "'a stfun => 'a stfun => temporal"
|
|
27 |
|
17309
|
28 |
defs
|
|
29 |
BInit_def: "BInit ic q oc == PRED q = #[]"
|
|
30 |
Enq_def: "Enq ic q oc == ACT (ic$ ~= $ic)
|
|
31 |
& (q$ = $q @ [ ic$ ])
|
6255
|
32 |
& (oc$ = $oc)"
|
17309
|
33 |
Deq_def: "Deq ic q oc == ACT ($q ~= #[])
|
6255
|
34 |
& (oc$ = hd< $q >)
|
|
35 |
& (q$ = tl< $q >)
|
|
36 |
& (ic$ = $ic)"
|
17309
|
37 |
Next_def: "Next ic q oc == ACT (Enq ic q oc | Deq ic q oc)"
|
|
38 |
IBuffer_def: "IBuffer ic q oc == TEMP Init (BInit ic q oc)
|
6255
|
39 |
& [][Next ic q oc]_(ic,q,oc)
|
|
40 |
& WF(Deq ic q oc)_(ic,q,oc)"
|
17309
|
41 |
Buffer_def: "Buffer ic oc == TEMP (EEX q. IBuffer ic q oc)"
|
3807
|
42 |
|
17309
|
43 |
ML {* use_legacy_bindings (the_context ()) *}
|
3807
|
44 |
|
17309
|
45 |
end
|