@@ -100,8 +100,10 @@ yield right procedure {:layer 1} vote_all(xid: TransactionId, {:linear_in} vrs:
100100requires {:layer 1 } vrs == Set((lambda vr:VoteRequest :: vr-> xid == xid && 1 <= vr-> rid && vr-> rid < i+1 ));
101101ensures {:layer 1 } (forall j:int :: 1 <= j && j < i+1 && votes[j] == YES() ==> Set_Contains(locked_transactions[j], xid));
102102ensures {:layer 1 } vrs' == Set((lambda vr:VoteRequest :: vr-> xid == xid && 1 <= vr-> rid && vr-> rid < i+1 ));
103- preserves call LockedNoConflicts();
104- preserves call CommittedSubsetLocked();
103+ requires {:layer 1 } (forall {:pool "J" } j:int, xid1: TransactionId, xid2: TransactionId :: {:add_to_pool "J" , j} (1 <= j && j < n+1 && xid1 ! = xid2 && Set_Contains(locked_transactions[j], xid1) && Set_Contains(locked_transactions[j], xid2)) ==> ! Conflict[xid1][xid2]);
104+ ensures {:layer 1 } (forall {:pool "J" } j:int, xid1: TransactionId, xid2: TransactionId :: {:add_to_pool "J" , j} (1 <= j && j < n+1 && xid1 ! = xid2 && Set_Contains(locked_transactions[j], xid1) && Set_Contains(locked_transactions[j], xid2)) ==> ! Conflict[xid1][xid2]);
105+ requires {:layer 1 } (forall {:pool "J" } j:int, xid0: TransactionId :: {:add_to_pool "J" , j} 1 <= j && j < n+1 && Set_Contains(committed_transactions, xid0) ==> Set_Contains(locked_transactions[j], xid0));
106+ ensures {:layer 1 } (forall {:pool "J" } j:int, xid0: TransactionId :: {:add_to_pool "J" , j} 1 <= j && j < n+1 && Set_Contains(committed_transactions, xid0) ==> Set_Contains(locked_transactions[j], xid0));
105107ensures {:layer 1 } (forall j:int :: 1 <= j && j < n+1 ==> IsSubset(old (locked_transactions)[j]-> val, locked_transactions[j]-> val));
106108ensures {:layer 1 } (forall j:int :: 1 <= j && j < i+1 ==> votes[j] ! = NONE());
107109modifies locked_transactions;
@@ -123,8 +125,10 @@ yield left procedure {:layer 1} finalize_all(d: Decision, {:linear} xid: One Tra
123125requires {:layer 1 } vrs == allVoteRequests(xid-> val);
124126requires {:layer 1 } (forall j:int :: {:add_to_pool "J" , j} d == COMMIT() && 1 <= j && j < n+1 ==> Set_Contains(locked_transactions[j], xid-> val));
125127ensures {:layer 1 } (forall j:int :: d == COMMIT() && 1 <= j && j < n+1 ==> Set_Contains(locked_transactions[j], xid-> val));
126- preserves call LockedNoConflicts();
127- preserves call CommittedSubsetLocked();
128+ requires {:layer 1 } (forall {:pool "J" } j:int, xid1: TransactionId, xid2: TransactionId :: {:add_to_pool "J" , j} (1 <= j && j < n+1 && xid1 ! = xid2 && Set_Contains(locked_transactions[j], xid1) && Set_Contains(locked_transactions[j], xid2)) ==> ! Conflict[xid1][xid2]);
129+ ensures {:layer 1 } (forall {:pool "J" } j:int, xid1: TransactionId, xid2: TransactionId :: {:add_to_pool "J" , j} (1 <= j && j < n+1 && xid1 ! = xid2 && Set_Contains(locked_transactions[j], xid1) && Set_Contains(locked_transactions[j], xid2)) ==> ! Conflict[xid1][xid2]);
130+ requires {:layer 1 } (forall {:pool "J" } j:int, xid0: TransactionId :: {:add_to_pool "J" , j} 1 <= j && j < n+1 && Set_Contains(committed_transactions, xid0) ==> Set_Contains(locked_transactions[j], xid0));
131+ ensures {:layer 1 } (forall {:pool "J" } j:int, xid0: TransactionId :: {:add_to_pool "J" , j} 1 <= j && j < n+1 && Set_Contains(committed_transactions, xid0) ==> Set_Contains(locked_transactions[j], xid0));
128132requires {:layer 1 } ! Set_Contains(committed_transactions, xid-> val);
129133ensures {:layer 1 } (forall j:int, xid0 : TransactionId :: 1 <= j && j < n+1 && xid0 ! = xid-> val && Set_Contains(old (locked_transactions)[j], xid0) ==> Set_Contains(locked_transactions[j], xid0));
130134modifies locked_transactions;
0 commit comments