使用def时的UNKNOWN

时间:2013-01-13 20:15:43

标签: z3

这个简单的例子为我生成了UNKNOWN,我想有些东西我对def的不了解。

from z3 import *
s = Solver()
def Min(b, r): 
    return If(b, r, 1)
a = Real('a')
b = Bool('b')

s.add(a==0.9)
s.add(a<=Min(b,0.9))

s.check()   
print "Presenting result "
m = s.model()
print "traversing model..."
for d in m.decls():
    print "%s = %s" % (d.name(), m[d])

1 个答案:

答案 0 :(得分:3)

你没有犯任何错误。这是Z3求解器之一的问题。你的问题出现在称为“差异逻辑”的算术片段中。如果算术原子可以写成x - y <= k,其中k是数字,则此片段中存在问题。当此片段出现问题时,Z3将使用专门的解算器。但是,当输入问题还包含if-then-else术语(unknown中的If)时,此解算器可能会失败(返回Min)。 The bug has been fixed,将在下一个版本中提供。在此期间,您可以尝试以下解决方法之一: