Skip to content

Lambda sort and DatatypeRef in _to_expr_ref #100

@philzook58

Description

@philzook58

I'm looking at getting cvc5 to be an alternate backend to my project and there are a couple z3 incompatibilities.

There's a missing cast to DatatypeRef here

def _to_expr_ref(a, ctx, r=None):

which I backpatched as

def Const(name, sort):
    # _to_expr doesn't have a DatatypeRef case
    x = cvc5.pythonic.Const(name, sort)
    if isinstance(sort, DatatypeSortRef):
        x = DatatypeRef(x.ast, x.ctx, x.reverse_children)
    return x

And the sort returned by lambdas is not right

I tried patching this as

def _qsort(self):
    if self.is_lambda():
        return ArraySort(self.var_sort(0), self.body().sort())
    else:
        return BoolSort(self.ctx)


QuantifierRef.sort = _qsort

but I get a deeper error which I don't understand

________________________________________________________________ ERROR collecting tests/test_kernel.py ________________________________________________________________
tests/test_kernel.py:9: in <module>
    import knuckledragger.theories.Interval
knuckledragger/theories/Interval.py:9: in <module>
    setof = kd.define("setof", [i], smt.Lambda([x], smt.And(i.lo <= x, x <= i.hi)))
knuckledragger/kernel.py:132: in define
    f(*args) == body
../../../.local/lib/python3.10/site-packages/cvc5/pythonic/cvc5_pythonic.py:375: in __eq__
    return BoolRef(c.solver.mkTerm(Kind.EQUAL, a.as_ast(), b.as_ast()), c)
cvc5.pxi:2556: in cvc5.cvc5_python_base.Solver.mkTerm
    ???
cvc5.pxi:1538: in cvc5.cvc5_python_base.TermManager.mkTerm
    ???
E   RuntimeError: Subexpressions must have the same type:
E   Equation: (= (setof i) (lambda ((x Real)) (and (<= (lo i) x) (<= x (hi i)))))
E   Type 1: (Array Real Bool)
E   Type 2: (-> Real Bool)

Are lambda sorts distinct from Arrays?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    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