On Thursday, 7 August 2014 at 16:56:01 UTC, Ola Fosheim Grøstad wrote:
On Thursday, 7 August 2014 at 16:36:09 UTC, David Bregman wrote:
Right. So if X is false, the axiom we declare is !P, not "false" or "a fallacy".

But Pn is always true where you assume…?

No. Remember P is "control flow can reach this assume". If the assume is unreachable, then P is false. The compiler doesn't always know that P is false though, so we can use assume(false) to supply that as an axiom.

Here's an example:

x = rand() & 3; // x is 0,1,2 or 3.
switch(x) {
  case 0: foo();
  case 1: bar();
  case 2: baz();
  case 3: qux();
default: assume(false); // hopefully redundant with a decent compiler.
}

now the compiler can optimize this down to

{foo, bar, baz, qux}[x]();

or even better, a computed jump.


False => X is true for any X, so the axiom we declare is just a tautology.

I don't follow. If any assumption is false then anything goes…


Using my definition of assume, the axiom declared is P=>x. If P is false, then the axiom declared is false => x, which is true for any x.

http://en.wikipedia.org/wiki/Truth_table#Logical_implication


So is the control flow definition / unreachability argument clear now?

Nope.

Ok, is it clear now? If not, which parts are not clear?

Reply via email to