

		   Properties of Virtual Synchrony
		   -------------------------------

 1. Views are uniquely identified. A view consists of a a) creator and
    b) a logical time (ltime). There has to be an order on views which
    guarantees v1 < v2 < v3 where v1 was created before v2 which was
    created before v3. Note that total order does not mean gap-free,
    e.g. v1 < v4 < v5 is also total order.

    When creating a new view the ltime of the new view should be
    greater than the highest ltime received or sent so far.

 2. Messages are uniquely identified. Therefore each message is tagged
    with a) the view in which it was sent, b) the sender's address and
    c) a sequence number.

 3. Views and messages are delivered at most once at each member.

 4. A message is delivered in only one view. It cannot be delivered in
    v1 and then in v2 again. This is ensured by matching a message's
    view with the current view of the receiver. If they match, the
    message is delivered. If the message's view is older (previous
    view), the message is discarded. If the message's view is newer,
    it is stored for later delivery.

 5. Views are delivered at each member in total order on view ids
    (using lexicographical ordering of views on creator and ltime, as
    specified in point 1).

 6. If p installs V then p must be a member of V (self-inclusion).

 7. (FLUSH) If p in Vp and q in Vq both want to deliver W then:
            a) Vp == Vq (both views are the same) or
	    b) the intersection of Vp and Vq is empty

 8. (FLUSH) If both p and q install V1 and V2 consecutively then p and
            q have to deliver the same set of messages in V1. Note
            that this point does not require the messages in the set
            to have an order.

 9. (TOTAL) If 2 processes p and q both deliver m1 and m2 then they
            have to deliver them in the same order. (The order should
            be established even before the sending of the message,
            e.g. by means of a sequencer or rotating token).
