The five-page University of Oxford Finals examination dated 1 June 2015, 2:30 pm–4:00 pm, Trinity Term 2015. The cover permits answers to two of three questions. Public released archive: Lawrence Attachment.zip, member 2015-concur.pdf. Printed p. 2 covers recursion, a reversal network and semantic indistinguishability; p. 3 covers a FIFO buffer and a modified CSP interrupt; pp. 4–5 concern termination detection on a ring network.
FIFO buffer 2026-10-31
A communicating FIFO queue that accepts values on an input channel and emits them, in the same order, on an output channel. An unbounded FIFO buffer always has room for a new input, even when its oldest pending output is also available.
For a finite CSP trace , let be its sequence of values on and its sequence of values on , with channel names removed. Restrict the external alphabet to these two channels. The behavioural CSP trace specification for an unbounded FIFO buffer is
where means prefix of a list, not merely subsequence. Outputs must therefore occur in input order, cannot duplicate or invent values, and cannot precede their inputs. Applying the condition to every CSP trace also checks every execution prefix.
For a legal , write , so is the pending FIFO queue content. Define the events that must remain available by
In addition to the CSP trace condition, require the behavioural CSP stable failure condition
Thus an unbounded FIFO buffer cannot stably refuse any new input, and a nonempty FIFO buffer cannot stably refuse its oldest pending output. An empty FIFO buffer can refuse every output. Readiness of an input and readiness of an output are required together; the environment may choose either. These conditions do not require an output while the environment refuses to accept it. In a CSP failures-divergences model specification, also exclude CSP divergence; the stable-readiness condition alone does not rule out an implementation that loops internally forever without reaching a CSP stable state.
First define the ordinary unbounded FIFO buffer:
Now use CSP internal choice to permit an immediate stop:
An execution choosing the first branch can perform every legal CSP trace satisfying the prefix of a list condition in part (a). Conversely that condition excludes all other CSP traces, so no process satisfying it can have more CSP traces. The second branch adds no new CSP trace, since the empty CSP trace is already present.
The second branch does add the CSP stable failure for any . This violates mandatory input readiness. Therefore the process has the maximum possible CSP trace set and fails the CSP stable failure specification. The qualification is , as is implicit for a useful FIFO buffer; with an empty value type there is no input-readiness event to violate. Maximizing the number of CSP traces does not pick a unique process in the finer models: other processes with the same complete legal CSP trace set and extra refusals also qualify.