PX tries to remain accessible to non-specialists by applying much less formal concepts of goal states and reachability. Later versions of Murphi can, if the protocol specification is carefully written, detect certain types of symmetry and use that information to reduce the size of the state space that must be explored. In the process, these later versions lost the ability to detect livelock. PX is based on a belief that livelock detection is more important that state-space reduction, and thus does not try to detect symmetry. The most elemental entities in PX are nodes and messages.
Messages encapsulate the information exchanged between nodes, and are usually arranged into queues.
If you want to do anything more complex, you'll need typedefs. If a node contains a message array , as in the example, that is converted internally to a message queue with the same field name. Similarly, a scalar message field becomes a message-queue pointer, again with the same field name. These queues and pointers should only be manipulated using specific mechanisms described later. Messages cannot contain nodes.