implies boolean operator can feel a bit awkward to start with, as it is crafted for a very specific scenario: to be used in Invariants to a condition that is only relevant if another condition matched.
implies combines two boolean arguments. If the first argument is
false, the result is
true, otherwise, the result is the second argument. The idea is that the trueness of the second condition only matters if the first is true.
The following (contrived) example of a class representing a traffic light illustrates it:
type PedestrianCrossing = class; public property CarLight: Color; property PedLight: Color; public invariants CarLight = Color.Green implies = PedLight = Color.Red; PedLight = Color.Green implies = CarLight = Color.Red; end;
The invariant test here ensures that, if one direction's traffic light is green, then the other must be red, to avoid accidents. If it is not green, then the other light does not matter (it could be green, red, yellow or even purple, for as far as the test is concerned).
x implies y translates to
(not x) or y, but expresses the intent of the check much clearer.