官方说来,Z3没有触发支持。例如,请参阅this question或this one。但是,在Z3中有未记录的三角运算符 - 例如在regression tests中使用它们。甚至还有一个名为pi
的内置符号。 Z3甚至可以用这些运算符做一些简单的证明,例如:
(declare-fun x () Real)
(assert (= (cos pi) x))
(check-sat)
(get-value (x))
回来:
sat
((x (- 1.0)))
这些运算符效果不佳。例如,这个小输入文件将导致Z3 4.4.1发生seg故障,或导致内存使用量迅速爆炸,主分支为this commit(现在):
(declare-fun x () Real)
(assert (< (sin x) -1.0))
(check-sat)
我并不感到惊讶,团队认为不存在的无证功能不起作用。我的问题是:他们有可能修复吗? Z3的合理性能是什么级别的性能?我知道我可以使用Z3使用未解释的函数和三角函数来进行大量的三角证明。 Z3团队对此有兴趣吗?
答案 0 :(得分:2)
谢谢,Z3不应该在这种情况下崩溃。处理这些操作应该更优雅。我现在检查了这个,9b91e6f..cb29c07。 OTOH,对这类运营商基本上没有理论推理。 例如,Z3不知道罪的界限。你必须自己公理化这些属性。当您使用没有(部分)决策程序支持的内置函数时,Z3返回“unknown”(或“不满”,但不是“sat”)。