Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Differences with Z3 API #101

Open
Eladkay opened this issue Oct 10, 2024 · 0 comments
Open

Differences with Z3 API #101

Eladkay opened this issue Oct 10, 2024 · 0 comments

Comments

@Eladkay
Copy link

Eladkay commented Oct 10, 2024

Two examples of differences of the CVC5 API to the Z3 API:

  1. This function tries to block a model from a solver:
def _block_model(solver: Solver, model: ModelRef):
    if CVC5:
        solver.add(Or([f != model[f] for f in model.decls() if getattr(f, "arity", lambda: 0)() == 0 and
                            not SOME_REGEX.fullmatch(str(f))]))
    else:
        solver.add(Or([f() != model[f] for f in model.decls() if f.arity() == 0 and
                            not SOME_REGEX.fullmatch(f.name())]))

Z3 defines model.decls() as functions that need to be called, even for constants having arity 0. CVC5 does not even define the arity method on constants (requiring the getattr trick above) nor the name method (requiring the use of str).

  1. For expressions that are of a datatype (ADT) sort, you can get the name of the constructor in Z3 like so:
exp.decl().name()

In CVC5, this throws:

       exp.decl().name()
       ^^^^^^^^^^
  File "/Users/snip/lib/cvc5/build/src/api/python/cvc5/pythonic/cvc5_pythonic.py", line 418, in
decl
    raise SMTException("Declarations for non-function applications")
cvc5.pythonic.cvc5_pythonic.SMTException: Declarations for non-function applications

Probably because constructors are not considered uninterpreted function applications.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant