@@ -254,7 +254,8 @@ preserves call ValueStoreInv#3(LeastTimeStamp(), InitValue);
254254 par End(one_pid, ts);
255255}
256256
257- yield procedure {:layer 4 } WriteClient({:linear} one_pid: One ProcessId, value: Value, in: ReplicaSet) returns (ts: TimeStamp, out: ReplicaSet)
257+ yield procedure {:layer 4 } WriteClient({:linear} one_pid: One ProcessId, value: Value, {:hide} {:layer 1 , 2 } in: ReplicaSet)
258+ returns (ts: TimeStamp, {:hide} {:layer 1 , 2 } out: ReplicaSet)
258259requires call MonotonicInduction#1 (in, TimeStamp(last_write[one_pid-> val], one_pid-> val), 0 );
259260ensures call MonotonicInduction#1 (out, ts, 0 );
260261requires call LastWriteInv(one_pid, TimeStamp(last_write[one_pid-> val], one_pid-> val));
@@ -287,7 +288,7 @@ ensures {:layer 3} IsQuorum(w);
287288}
288289
289290yield 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)
291+ returns ({:hide} {:layer 2 } out : ReplicaSet, ts: TimeStamp, value: Value)
291292refines action {:layer 4 } _ {
292293 assume le(old_ts, ts);
293294 assume Map_Contains(value_store, ts);
@@ -298,20 +299,21 @@ preserves call ReplicaInv();
298299preserves call AtLeastGlobalTimeStamp(w, old_ts);
299300preserves call ValidTimeStamp();
300301preserves call TimeStampQuorum();
301- ensures call AtLeastGlobalTimeStamp(q , ts);
302- ensures {:layer 2 } IsQuorum(q );
302+ ensures call AtLeastGlobalTimeStamp(out , ts);
303+ ensures {:layer 2 } IsQuorum(out );
303304requires {:layer 3 } IsQuorum(w);
304305preserves call ValueStoreInv#3 (LeastTimeStamp(), InitValue);
305306{
306307 var {:layer 1 } old_replica_store: [ReplicaId]StampedValue;
307308
308309 call {:layer 1 } old_replica_store := Copy(replica_store);
309- call ts, value, q := QueryPhase(old_replica_store, old_ts, w);
310- par q := UpdatePhase(ts, value) | AtLeastGlobalTimeStamp(w, old_ts) | ValidTimeStamp() | ValueStoreInv#1 (LeastTimeStamp(), InitValue);
310+ call ts, value, out := QueryPhase(old_replica_store, old_ts, w);
311+ par out := UpdatePhase(ts, value) | AtLeastGlobalTimeStamp(w, old_ts) | ValidTimeStamp() | ValueStoreInv#1 (LeastTimeStamp(), InitValue);
311312}
312313
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)
314+ yield procedure {:layer 3 }
315+ Write({:linear} one_pid: One ProcessId, value: Value, {:hide} {:layer 1 , 2 } in: ReplicaSet, old_ts: TimeStamp, {:hide} {:layer 2 , 3 } w: ReplicaSet)
316+ returns ({:hide} {:layer 1 , 2 } out: ReplicaSet, ts: TimeStamp)
315317refines action {:layer 4 } _ {
316318 assume lt(old_ts, ts);
317319 assume ! Map_Contains(value_store, ts);
0 commit comments