07.01.2013 Views

Lecture Notes in Computer Science 3472

Lecture Notes in Computer Science 3472

Lecture Notes in Computer Science 3472

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

126 Stefan D. Bruda<br />

obs(Succ, p) ={⊤}<br />

obs(Fail, p) ={⊥}<br />

obs(ao, p) = � {obs(o, p ′ ) | p a ⇒ p ′ }∪{⊥|p ↑} ∪ {⊥ | p ε ⇒ p ′ , p ′ ref a}<br />

obs(�ao, p) = � {obs(o, p ′ ) | p a ⇒ p ′ }∪{⊥|p ↑} ∪ {⊤ | p ε ⇒ p ′ , p ′ ref a}<br />

obs(εo, p) = � {obs(o, p ′ ) | p ε ⇒ p ′ }∪{⊥|p ↑}<br />

obs(o1 ∧ o2, p) =obs(o1, p) ∧ obs(o2, p)<br />

obs(o1 ∨ o2, p) =obs(o1, p) ∨ obs(o2, p)<br />

obs(∀ o, p) =∀ obs(o, p)<br />

obs(∃ o, p) =∃ obs(o, p)<br />

⊓⊔<br />

The function from Def<strong>in</strong>ition 5.5 follows the syntax of test expressions faithfully,<br />

so most cases should need no further explanation. We note that tests of<br />

form (5.3) are allowed to cont<strong>in</strong>ue only if the action a is available to, and is<br />

performed by the process under test; if the respective action is not available, the<br />

test fails. In contrast, when a test of form (5.4) is applied to some process, we<br />

record a success whenever the process refuses the action (the primary purpose of<br />

such a test), but then we go ahead and allow the action to be performed anyway,<br />

to see what happens next (i.e., we remove the block on the action; maybe <strong>in</strong> addition<br />

to the noted success we get a failure later). As we shall see <strong>in</strong> Section 5.7<br />

such a behavior of allow<strong>in</strong>g the action to be performed after a refusal is of great<br />

help <strong>in</strong> identify<strong>in</strong>g crooked coffee mach<strong>in</strong>es (and also <strong>in</strong> differentiat<strong>in</strong>g between<br />

processes that would otherwise appear equivalent).<br />

As a f<strong>in</strong>al thought, we note aga<strong>in</strong> that tests can be <strong>in</strong> fact expressed <strong>in</strong> the<br />

same syntax as the one used for processes. A test then moves forward synchronized<br />

with the process under <strong>in</strong>vestigation, <strong>in</strong> the sense that the visible action<br />

performed by the process should always be the same as the action performed<br />

by the test. This synchronized run is typically denoted by the operator |, and<br />

the result is itself a process. We thus obta<strong>in</strong> an operational formulation of tests,<br />

which is used as well [Abr87, Phi87] and is quite <strong>in</strong>tuitive. S<strong>in</strong>ce we f<strong>in</strong>d the<br />

previous version more convenient for this presentation, we do not <strong>in</strong>sist on it<br />

and direct <strong>in</strong>stead the reader elsewhere [Abr87] for details.<br />

5.2.3 Equivalence and Preorder Relations<br />

The semantics of tests presented <strong>in</strong> the previous section associates a set of outcomes<br />

for each pair test–process. By compar<strong>in</strong>g these outcomes (i.e., the set<br />

of possible observations one can make while <strong>in</strong>teract<strong>in</strong>g with two processes, or<br />

the observable behavior of the processes) we can def<strong>in</strong>e the observable test<strong>in</strong>g<br />

preorder 3 ⊑. Given the preorder one can easily def<strong>in</strong>e the observable test<strong>in</strong>g<br />

equivalence �.<br />

3 Recall that this was orig<strong>in</strong>ally named test<strong>in</strong>g preorder [Abr87], but we <strong>in</strong>troduce the<br />

new name because of name clashes that developed over time.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!