为什么可以';tz3/xor?

为什么可以';tz3/xor?,z3,Z3,当我们讨论的主题是时,我一直在试图找出μZ的功能和局限性。我教Z3用户定义排序上的异或理论,但它无法有效地应用规则,导致任何有趣查询的未知。通过配对,我得到了这个例子,它意外地返回了unknown: (set-logic HORN) (declare-fun p (Bool Bool Bool) Bool) ; Test if Z3 can discover two a1+b1+c1 by canceling ra, rb, and rc (assert (exists ((a1 Bool)

当我们讨论的主题是时,我一直在试图找出μZ的功能和局限性。我教Z3用户定义排序上的异或理论,但它无法有效地应用规则,导致任何有趣查询的
未知
。通过配对,我得到了这个例子,它意外地返回了
unknown

(set-logic HORN)
(declare-fun p (Bool Bool Bool) Bool)

; Test if Z3 can discover two a1+b1+c1 by canceling ra, rb, and rc
(assert (exists ((a1 Bool) (b1 Bool) (c1 Bool) (ra Bool) (rb Bool) (rc Bool))
                (and (p a1 b1 c1)
                 (xor (xor a1 (xor ra rc))
                      (xor b1 (xor rb ra))
                      (xor c1 (xor rc rb))))))

; Assert the adversary can not derive the secret, a+b+c.
(assert (exists ((a1 Bool) (b1 Bool) (c1 Bool))
            (and (p a1 b1 c1) (xor a1 (xor b1 c1)))))
(check-sat)
即使使用了未解释的
p
,我也期望sat
是错误的吗?我注意到链接的问题包括一个未解释的函数,
inv
,但由Z3处理。我是否应该从PDR论文中推断出这一缺陷,或者是否有其他出版物可以说明Z3 PDR的当前状态


编辑:我猜这个结果是由于使用了存在量化。如果是这种情况,并且考虑到我的问题需要存在主义,是否有合理的替代公式?

问题是基准被注释为“HORN”,但公式不属于所支持的HORN片段。 如果您删除

(set-logic HORN) 
行,然后Z3通过应用默认策略回答sat。 对于(设置逻辑喇叭)线路,Z3仅使用喇叭策略

如果公式不属于受支持的片段,它将放弃。 受支持的Horn子句片段假定断言是普遍量化的 (对于所有量化)。断言也应该是Horn子句(暗示),这样 含义的开头要么是一个未解释的谓词,要么是一个没有任何解释的公式 未解释的谓词。暗示的主体(暗示的左侧) 是公式的连接,这些公式或是未解释谓词的出现 或者一些没有未解释谓词的公式。 horn子句也可以是由未解释的 谓语 预处理器可识别一些非直接公式化的公式 作为暗示,但实验更容易符合纯霍恩条款

以下是一些Horn条款示例:

 (forall ((a Bool) (b Bool)) (=> (xor a b) (p a b)))

 (forall ((a Bool) (b Bool)) (=> (and (xor a b) (p a b)) false))

 (p true false)

感谢Nikolaj的回答,感谢所有其他人和Z3工具。