【发布时间】:2013-07-05 17:38:27
【问题描述】:
当我们讨论horn clauses 的主题时,我一直在试图弄清楚 μZ 的功能和局限性。我向 Z3 教授了用户定义排序的异或理论,但它无法有效地应用规则,导致任何有趣的查询都出现unknown。配对下来,我得到了这个意外返回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 的当前状态?
编辑:我猜这个结果是由于使用了存在量化。如果是这样,并且考虑到我的问题需要存在主义,是否有合理的替代表述?
【问题讨论】:
标签: z3