有什么方法可以禁用 Z3(版本 4.8.8)中断言的简化/重写?
我目前正在 KeyY ( https://www.key-project.org ) 中对 Z3 证明进行证明重放。但是,为了能够重放 Z3 的“断言”规则,我需要在 Z3 的 SMT-LIB 输入中指定的确切断言,而不是它的简化版本。
作为可能发生的情况的一个极端示例,请考虑以下 SMT-LIB 输入:
(set-option :produce-proofs true)
(assert
(not
(forall ((y Int))
(exists ((x Int))
(= x (+ y 1))
)
)
)
)
(check-sat)
(get-proof)
运行 Z3 4.8.8 会导致以下输出:
unsat
((proof
(asserted false)))
显然,断言已被简化,这使得证明没有真正的帮助。有没有办法完全禁用这种简化(从而从 Z3 获得“真实”证明,我可以在我们的工具中重播)?