@@ -377,13 +377,13 @@ RcvMsg(p) == \E e \in InEdges(p) :
377377 /\ UNCHANGED << acks , sentUnacked >>
378378
379379(* **************************************************************************)
380- (* A process p may finish its computation and become idle at any time. *)
380+ (* An active process p may become idle at any time. *)
381381(* *)
382- (* If a non-leader process p is neutral after an idle step, it implies *)
383- (* that p was not a node of the overlay tree when it became idle. Thus, *)
384- (* there is no need to change upEdge[p] in the Idle subaction. *)
382+ (* Since p is active before the step, it must be a node of the overlay *)
383+ (* tree. If it is a leaf, it can be removed from the tree in a subsequent *)
384+ (* SendAck transition. *)
385385(************************************************************************** *)
386- Idle ( p ) == /\ active [ p ] \* otherwise this step is subsumed by stuttering
386+ Idle ( p ) == /\ active [ p ]
387387 /\ active ' = [ active EXCEPT ! [ p ] = FALSE ]
388388 /\ UNCHANGED << msgs , acks , sentUnacked , rcvdUnacked , upEdge >>
389389
@@ -419,9 +419,7 @@ THEOREM Spec => []CountersConsistent
419419
420420TreeWithRoot ==
421421 LET E == { upEdge [ p ] : p \in DOMAIN upEdge } \ { NotAnEdge }
422- \* The original definition includes every node occurring in the tree
423- \* twice (except the leader), which unnecessarily complicates the proof.
424- N == (* {e[1] : e \in E} \cup *) { e [ 2 ] : e \in E } \cup { Leader }
422+ N == { e [ 2 ] : e \in E } \cup { Leader }
425423 O == Transpose ( [ edge |-> E , node |-> N ] )
426424 IN \* O is a tree rooted in the leader.
427425 /\ IsTreeWithRoot ( O , Leader )
0 commit comments