Z3 中未记录的三角函数可修复吗?
Undocumented trigonometric functions in Z3 reparable?
据官方说法,Z3 中不支持触发。例如,参见 this question, or this one. However, there are undocumented trigonometric operators in Z3 -- they are used for example in the 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 出现段错误,或者导致主分支的内存使用量快速爆炸 this commit(现在):
(declare-fun x () Real)
(assert (< (sin x) -1.0))
(check-sat)
对于团队所说不存在的未记录功能不起作用,我并不感到惊讶。我的问题是:它们可以修复吗?什么水平的性能是 Z3 的合理补充?我知道我可以使用未解释的函数和三角恒等式对 Z3 进行许多三角证明。 Z3团队对此有兴趣吗?
谢谢,Z3 应该不会在这种情况下崩溃。处理这些操作应该更加优雅。我现在检查了对此的修复,9b91e6f..cb29c07。
OTOH,这些运营商基本上没有理论推理。
例如,Z3 不知道 sin 的界限。你必须自己公理化这些属性。当您使用没有(部分)决策过程支持的内置函数时,Z3 returns "unknown"(或 "unsat",但不是 "sat")。
据官方说法,Z3 中不支持触发。例如,参见 this question, or this one. However, there are undocumented trigonometric operators in Z3 -- they are used for example in the 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 出现段错误,或者导致主分支的内存使用量快速爆炸 this commit(现在):
(declare-fun x () Real)
(assert (< (sin x) -1.0))
(check-sat)
对于团队所说不存在的未记录功能不起作用,我并不感到惊讶。我的问题是:它们可以修复吗?什么水平的性能是 Z3 的合理补充?我知道我可以使用未解释的函数和三角恒等式对 Z3 进行许多三角证明。 Z3团队对此有兴趣吗?
谢谢,Z3 应该不会在这种情况下崩溃。处理这些操作应该更加优雅。我现在检查了对此的修复,9b91e6f..cb29c07。 OTOH,这些运营商基本上没有理论推理。 例如,Z3 不知道 sin 的界限。你必须自己公理化这些属性。当您使用没有(部分)决策过程支持的内置函数时,Z3 returns "unknown"(或 "unsat",但不是 "sat")。