Skip to content

Conjunction of abstract functions is not able to be asserted #989

Description

@fosslinux

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions