By specifying what needs to be remembered, it defines what can be thrown away. This is of course very important. Typically, to be valid, messages will link back to previous messages either directly or though common threading identifiers of some sort. A message without such a reference will in most cases not have any effect on the state. There will in general be error states, which the protocol does not allow, which any message which is invalid in some way will lead to.
Some protocols model most errors themselves by sending.
There must obviously be a set M 0 of valid ways to start a protocol in the first case from the generic initial state s 0 . There will in some systems be a set of F final states, in which no further messages can have any effect on the state. For example, in the US, when 7 years have passed since a transaction occurred, then all records may be discarded as no one even the tax man has the right to query them. The state is reduced to a minimum. Most systems can be modelled in a simple of complex way, the simple way ignoring a lot of the auditing processes for example.