【发布时间】:2017-10-14 13:36:25
【问题描述】:
我试图在 Z3 中定义成对集合(使用数组定义)之间的部分关系(在下面的代码中称为 C)。 我写了 3 个断言来定义自反性、传递性和反对称性,但 Z3 返回“未知”,我不明白为什么。
(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)
我注意到只有在其他 2 个断言之一考虑反对称时才返回未知数。如果我只考虑反对称属性 Z3 不会返回未知数。如果我考虑没有反对称的自反性和传递性,也是一样的。
【问题讨论】: