Axiomatic semantics: Non-determinism
p 344
Why should one want to specify non-deterministic behavior? The are two
main reasons.
The first reason is that non-deterministic programs may be useful to
model non-deterministic behavior in the real-world.
The second reason has to do with the desire not to overspecify.
Routines and recursion:
pp 353-354
This is the idea of *programming by contract*. A routine call is a
contract to perform a certain task. The caller is the "client", the
called routine is the "supplier". As in every good contract, there are
advantages and obligations for both parties:
. The precondition is an obligation for the client; for the supplier,
it is a benefit, since it relieves the routine body from having to
care about cases not covered by the precondition.
. For the postcondition the situation is reversed.
p 369
Two particular embedding strategies:
- Constant relaxation
- Uncoupling
Prev: Pre-post semantics of Graal
Introduction to the Theory of Programming Languages