On Friday, 1 August 2014 at 09:02:36 UTC, Walter Bright wrote:
On 7/31/2014 11:24 PM, "Ola Fosheim Grøstad"
An assert does not say that the predicate is always true.

Yes, it does. From Meyers' comprehensive tome on the topic "Object-Oriented Software Construction" (1997) where he writes:

"A run-time assertion violation is the manifestation of a bug in the software."

No. Implication is not the same as equivalence.

An assert does not take a predicate. It takes a proposition that is to be turned into a proven theorem.

bool test(bool x) {return x || !x} // predicate

test(x) for all x in {true,false} // proposition

assert(test(x) for all x in {true,false}) // prove proposition => proven theorem


However, you may use assumptions from a precondition locally in a function for optimization purposes without asserting the precondition first IFF:

1. the function is pure (no side effects)

2. the optimizer is capable of detecting inconsistencies and ignore user provided assumptions when a conflict arises.

3. no code makes assumptions based on the postconditions of the function

I think so, at least.


Reply via email to