Closed DavePearce closed 6 years ago
UPDATE: the essential problem comes down to this function:
private static boolean lessThan(Expr lhs, Expr rhs) {
return lhs.getIndex() < rhs.getIndex();
}
It chooses whichever variable access expression comes first. This doesn't seem optimal!!
The following fails to verify:
The generated proof is this:
In contrast, this minor variation does verify:
And the generated proof is:
It's pretty odd that, given apparently the same initial state, we end up with a different outcome. The key issue revolves around the method
CongruenceClosure.rearrangeToAssignment
. In the first case, this gives:In the second case, this gives:
This definitely explains the difference.