parthood definition in Z3

女生的网名这么多〃 提交于 2020-01-14 02:53:06

问题


I'm trying to define in Z3 the parthood relation (called C in the code below) between pairs of sets (defined using array). I wrote 3 asserts to define reflexivity, transitivity, and antisymmetry but Z3 returns "unknown" and I don't understand why.

(define-sort Set () (Array Int Bool))
(declare-rel C (Set Set))

; reflexivity
(assert (forall ((X Set)) (C X X)))

; transitive
(assert (forall ((X Set)(Y Set)(Z Set)) 
    (=> 
        (and (C X Y) (C Y Z)) 
        (C X Z)
    )
))

; antisymmetric
(assert (forall ((X Set)(Y Set)) 
    (=> 
        (and (C X Y) (C Y X))
        (= X Y)
    )
))

(check-sat)

I noticed that the unknown is returned only when the antisymmetry is considered with one of the other 2 asserts. If I only consider the antisymmetry property Z3 doesn't return unknown. The same if I consider reflexivity and transitivity without antisymmetry.


回答1:


Quantifiers are inherently incomplete. So, it's not surprising that Z3 (or any other SMT solver) will return unknown when they are present. There are a few heuristics that solvers use for handling quantifiers, such as e-matching; but those will only apply when you have ground-terms around. Your formulation, having only quantified axioms, is unlikely to benefit from that.

For reasoning about quantifiers in general, an SMT solver is simply not the best choice; use a theorem prover (Isabelle, Lean, Coq, etc.) for that.

Here's a nice slide deck by Leonardo on the use of quantifiers in SMT solving: https://leodemoura.github.io/files/qsmt.pdf. It can help provide some further insight into the techniques and the difficulties associated.



来源:https://stackoverflow.com/questions/46745187/parthood-definition-in-z3

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!