A theorem stating that a distributed system cannot deliver on all three of the following guarantees: that all system entities see the same view of the overall system state (Consistency); that a response regarding success or failure is delivered to every request (Availability); and that loss of messages or failure of part of the system does not prevent the system as a whole from operating (Partition tolerance). In effect, a distributed system designer needs to choose which one of these three will be sacrificed, whilst guaranteeing the other two. See also acid, base.