EE290N - Specification and Modeling of Reactive Real-Time Systems

Lecture 13 - October 8, 1996, Scribe: Claudio Passerone (sparrow@ic.eecs)

We'll examine some examples of Process Networks (PN), in particular:

  1. The fair merge
  2. The parallel OR

We'll then see a review of classes of processes and how they relates to each other, and introduce some new terms.

1. The fair merge

Consider a process with two inputs and one output as in the figure. The two input signals s and s' are (possibly infinite) sequences of values; we care only about the order of values, and not their tags. The output signal s'' is one of the many possible ways of interleaving them. The key things are:

Note that the two subsequences are disjoint, i.e. if a particular value occurs in s and in s', then there should be two appearances in s''.

Question: is this process continuous? No.

Question: is this process a function? No. In fact, given the inputs you cannot determine the output because there are many possible interleaving.

The Least Fixed Point Theorem requires the function to be continuous, so it cannot be applied to the Fair Merge example. Therefore in general we don't know if the feedback composition is determinate or not. Note that continuity => determinacy, but the reverse is not valid; we can have a non continuous function which is determinate. In the case of the Fair Merge, suppose that s is the infinite sequece of 1s, and s' is the empty signal, then the output signal s'' is completely determined because we have only one possible interleaving. But if s'=[0,0,0,...] the system is not determined any more.

2. The parallel OR

We have again a process with two inputs and one output, but this time we restrict the set of possible values to {0,1}. The output s'' is computed with the following rule:

Pair off the two inputs untill you run out of one signal; at this point continue with the remaining values, extending the other signal with | (bottom). Discard all the | in the output signal.

As a truth table we use the OR binary function, augmented with the definition of ORing with | as in the following table:

| 0 1
| | | 1
0 | 0 1
1 1 1 1

Parallel OR truth table

The intuition behind this definition is that if we receive a 1 on an input, we are sure we should output a 1 regardless of the other value, while receiving a 0 and | doesn't give enough information, unless we receive 0 on both inputs. Let's consider the following two examples:

Ex. 1:

s = [ 0, 1 ]       s' = [ lambda ]      =>      s'' = [ 1 ]

Ex. 2:

s = [ 0, 1 ]       s' = [ 0 ]                  =>      s'' = [ 0, 1 ]

Under the prefix order, Ex.1 is a prefix of Ex.2, since the latter is an extension of the former. However, the output of Ex.1 is not a prefix of the output of Ex.2, therefore the parallel OR is not monotonic. Intuitively, this sysyem violates causality; it is like, when extending the input, we could go back, change our mind and get another output. The parallel OR is a function, because once the input are known, the output is completely defined. The word parallel comes from the fact that we should compute the output in parallel for allinput values, and cannot incrementally obtain it because we would get different results(1).

3. Classification of processes

Untill now we have divided processes in various classes, based on some properties like monotonicity and continuity. We also prooved that some implication apply, and we gave some examples:

continuous               Identity, Head Function
      => monotonic               Finite-Infinite (2)
                  => function               Parallel OR
                              => process               Fair Merge

Kahn-McQueen interpretation adds blocking reads to this picture, and we are going to identify subclasses of continuous functions with specific characteristics. These are the classes of Vuillemin-Sequential processes and that of stable processes. The following implications hold:

VS   =>   stable   =>   continuous

Other subclasses of continuous processes are Kahn-Plotkin Sequential and Linear, but our interest in them is only limited since very few applications of them are known.


1. This problem is solved in synchronous languages by considering the absence of an event as a value, i.e. we don't discard bottoms in the output.

2. It's the process which outputs [0] if the input is finite, [0,1] if it's infinite.