为什么Z3不能提出没有元素的排序?

时间:2017-05-02 04:43:53

标签: z3

使用Z3Py,我尝试构建一个Z3决定的程序意味着排序Human为空。

from z3 import *
from z3_helper import Z3Helper

Human = DeclareSort("Human")
is_mortal = Function("is_mortal", Human, BoolSort())
h = Const('h', Human)

s = Solver()
s.add([
    ForAll([h], And(is_mortal(h), Not(is_mortal(h))))
])

print s.check()
s.model()

但不是返回Human为空的模型,而是返回unsat。这是为什么?

如果我删除“所有人都是凡人”的公理,它会返回一个空集作为模型。

const h的存在是否意味着需要存在至少一个Human的问题?

1 个答案:

答案 0 :(得分:1)

SMT-LIB和Z3认为简单地键入一阶逻辑假定所有排序都是非空的。另请参阅http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-draft-3.pdf,第5.1节。