【发布时间】:2026-01-15 09:55:01
【问题描述】:
有什么方法可以在 Z3(4.8.8 版)中禁用断言的简化/重写?
我目前正致力于在 Key (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 获得“真实”证明,我可以在我们的工具中重播)?
【问题讨论】:
标签: z3 key-formal-verification