On Wednesday, 6 August 2014 at 19:18:30 UTC, Marc Schütz wrote:
On Wednesday, 6 August 2014 at 18:51:05 UTC, Ola Fosheim

Yes, but as I wrote above, we're not defining a relation between two constants ("true == false"), we define the following axiom:

    "When control flow reaches this point, then true == false."

Because true is not equal to false, it follows that the first part of the proposition cannot be true, meaning control flow will not reach this point.

But you are defining an axiom, not evaluating, that is how the optimizer can use it for deduction. Think of how Prolog works.

See above. Of course we could define our `assume(P)` to define `P` as an axiom directly, but this would be much less useful, because it would have exactly the consequences you write about. And it would be a lot more consistent, too. Surely you wouldn't want `assume(x == 42)` to mean "x is always and everywhere equal to 42", but just "x is equal to 42 when control flow passes this point".

I think there is a misunderstanding here. If you have:

uint x=0;

then that invokes many axioms defined by the language:

uint x=0;
assume(x exists from here)
assume(any value assigned to x has to be in the range [0,0xffffffff])
assume(x==0)
assume(type(x)=='uint')
assume(…etc…)

So if you then do:

x=x+1
assert(x==1)

You have to move the assert upwards (3+ steps) and see if it satisfied by any of the axioms you run into.

3: assert(x==0) //covered by axiom(x==0), x==1 is satisfied
2: assert(x+1-1==1-1)
1: assert(x+1==1)
x=x+1
assert(x==1)

Without the "uint x=0;" you would then have moved all the way up to the global scope (conceptually speaking) and not been able to find any axioms matching 'x'.

If you assume(x==0) on the other hand, then you don't need the other axioms at all. It is instantly satisfied. No need to prove anything.

See above, no special treatment is necessary.

I don't follow. If you use assert(false) to signify anything special beyond requesting a proof or assume(false) for anything beyond defining an axiom, then you are special casing.

Reply via email to