It appears that a conjunction of abstract functions is not able to be asserted when it should be.
function f(x: Int): Bool
function g(x: Int): Bool
method foo() {
assume forall x: Int, y: Int :: {f(x), g(y)} f(x) && g(y)
assert forall x: Int, y: Int :: {f(x), g(y)} f(x) && g(y)
}
I understand that this should verify. This bug only appears using the Z3 solver; cvc5 passes this.
(also applies to Carbon: see viperproject/carbon#588)
Output:
Silicon found 1 error in 6.18s:
[0] Assert might fail. Assertion (forall x: Int, y: Int :: { f(x), g(y) } f(x) && g(y)) might not hold. (bug1.vpr@6.10--6.60)
It appears that a conjunction of abstract functions is not able to be asserted when it should be.
I understand that this should verify. This bug only appears using the Z3 solver; cvc5 passes this.
(also applies to Carbon: see viperproject/carbon#588)
Output: