It is the other way around. We first model the system in a certain way, for instance we assume that there is a (or is no) global clock, or we assume that messages arrive or may fail, etc. Once we fix our assumptions, we can ask questions about the system we have characterized: does it allow computations of certain types or not?
For instance, if we assume all ...
Your question is somewhat unclear. In asynchronous systems we normally assume that any message will eventually be delivered after some finite time. It if perfectly feasible to write an algorithm that sends infinitly many messages:
Send a message to p;
If received message form p do <...>
This is valid and will indeed cause infinite ...
This is awesome book:
Designing Data-Intensive Applications
You may find the review here:
In the case of the Spanner doc: it appears to be more strict than linearizability due to transactions. The difference between linearizability and sequential consistency is that latter doesn't need to preserve the real time ordering of requests.
The combination of linearizability and transactions is called ...