@@ -242,7 +242,7 @@ requires call ValidTimeStamp();
242242preserves call TimeStampQuorum();
243243preserves call ValueStoreInv#3 (LeastTimeStamp(), InitValue);
244244{
245- var q: ReplicaSet;
245+ var {:layer 2 } q: ReplicaSet;
246246 var old_ts: TimeStamp;
247247 var {:layer 2 , 3 } w: ReplicaSet;
248248 var ts: TimeStamp;
@@ -286,7 +286,8 @@ ensures {:layer 3} IsQuorum(w);
286286 call ts, w := Begin#2 (one_pid);
287287}
288288
289- yield procedure {:layer 3 } Read({:linear} one_pid: One ProcessId, old_ts: TimeStamp, {:hide} {:layer 2 , 3 } w: ReplicaSet) returns (q: ReplicaSet, ts: TimeStamp, value: Value)
289+ yield procedure {:layer 3 } Read({:linear} one_pid: One ProcessId, old_ts: TimeStamp, {:hide} {:layer 2 , 3 } w: ReplicaSet)
290+ returns ({:hide} {:layer 2 } q: ReplicaSet, ts: TimeStamp, value: Value)
290291refines action {:layer 4 } _ {
291292 assume le(old_ts, ts);
292293 assume Map_Contains(value_store, ts);
@@ -309,7 +310,8 @@ preserves call ValueStoreInv#3(LeastTimeStamp(), InitValue);
309310 par q := UpdatePhase(ts, value) | AtLeastGlobalTimeStamp(w, old_ts) | ValidTimeStamp() | ValueStoreInv#1 (LeastTimeStamp(), InitValue);
310311}
311312
312- yield procedure {:layer 3 } Write({:linear} one_pid: One ProcessId, value: Value, in: ReplicaSet, old_ts: TimeStamp, {:hide} {:layer 2 , 3 } w: ReplicaSet) returns ( out: ReplicaSet, ts: TimeStamp)
313+ yield procedure {:layer 3 } Write({:linear} one_pid: One ProcessId, value: Value, in: ReplicaSet, old_ts: TimeStamp, {:hide} {:layer 2 , 3 } w: ReplicaSet)
314+ returns (out: ReplicaSet, ts: TimeStamp)
313315refines action {:layer 4 } _ {
314316 assume lt(old_ts, ts);
315317 assume ! Map_Contains(value_store, ts);
@@ -327,7 +329,7 @@ ensures {:layer 2} IsQuorum(out);
327329requires {:layer 3 } IsQuorum(w);
328330preserves call ValueStoreInv#3 (LeastTimeStamp(), InitValue);
329331{
330- var q: ReplicaSet;
332+ var {:layer 2 } q: ReplicaSet;
331333 var _value: Value;
332334 var {:layer 1 } old_replica_store: [ReplicaId]StampedValue;
333335
@@ -338,7 +340,8 @@ preserves call ValueStoreInv#3(LeastTimeStamp(), InitValue);
338340 par out := UpdatePhase(ts, value) | LastWriteInv(one_pid, ts) | AtLeastGlobalTimeStamp(w, old_ts) | ValidTimeStamp();
339341}
340342
341- yield right procedure {:layer 3 } QueryPhase({:layer 1 } old_replica_store: [ReplicaId]StampedValue, old_ts: TimeStamp, {:layer 2 , 3 } w: ReplicaSet) returns (max_ts: TimeStamp, max_value: Value, q: ReplicaSet)
343+ yield right procedure {:layer 3 } QueryPhase({:layer 1 } old_replica_store: [ReplicaId]StampedValue, old_ts: TimeStamp, {:layer 2 , 3 } w: ReplicaSet)
344+ returns (max_ts: TimeStamp, max_value: Value, q: ReplicaSet)
342345preserves call ValueStoreInv#1 (LeastTimeStamp(), InitValue);
343346preserves call ReplicaInv();
344347preserves call MonotonicAll(old_replica_store);
@@ -356,7 +359,9 @@ ensures {:layer 3} Map_Contains(value_store, max_ts) && Map_At(value_store, max_
356359 call max_ts, max_value := QueryPhaseHelper(0 , q, old_replica_store, old_ts, w);
357360}
358361
359- yield right procedure {:layer 3 } QueryPhaseHelper(i: int, q: ReplicaSet, {:layer 1 } old_replica_store: [ReplicaId]StampedValue, old_ts: TimeStamp, {:layer 2 , 3 } w: ReplicaSet) returns (max_ts: TimeStamp, max_value: Value)
362+ yield right procedure {:layer 3 }
363+ QueryPhaseHelper(i: int, q: ReplicaSet, {:layer 1 } old_replica_store: [ReplicaId]StampedValue, old_ts: TimeStamp, {:layer 2 , 3 } w: ReplicaSet)
364+ returns (max_ts: TimeStamp, max_value: Value)
360365requires {:layer 1 } IsReplica(i) || i == numReplicas;
361366preserves call ValueStoreInv#1 (LeastTimeStamp(), InitValue);
362367preserves call ReplicaInv();
@@ -437,7 +442,8 @@ pure procedure {:inline 1} CalculateQuorum(replica_ts: [ReplicaId]TimeStamp, ts:
437442 w := (lambda rid: ReplicaId:: IsReplica(rid) && le(ts, replica_ts[rid]));
438443}
439444
440- yield procedure {:layer 2 } Query#2 (rid: ReplicaId, q: ReplicaSet, {:hide} {:layer 1 } old_replica_ts: TimeStamp, old_ts: TimeStamp, {:layer 2 } w: ReplicaSet) returns (ts: TimeStamp, value: Value)
445+ yield procedure {:layer 2 } Query#2 (rid: ReplicaId, q: ReplicaSet, {:hide} {:layer 1 } old_replica_ts: TimeStamp, old_ts: TimeStamp, {:layer 2 } w: ReplicaSet)
446+ returns (ts: TimeStamp, value: Value)
441447refines right action {:layer 3 } _ {
442448 if (q[rid])
443449 {
0 commit comments