z3 - Z3 使用量词的相关性传播
问题描述
我已经看到在他们的解决方案中设法返回“不关心”的示例。我认为这利用了 Z3 的相关性传播。(参见SO 问题“我如何让 Z3 返回最小模型?”,SO 问题“https://stackoverflow.com/questions/28289410/z3-eliminate-dont-care-variables/28302963”,本文)。
这允许:
(set-option :smt.auto-config false)
(declare-const x Bool)
(declare-const y Bool)
(assert (or x y))
(assert x)
(check-sat)
(echo "Expect x is true")
(eval x) ; returns true
(echo "Expect y is don't care")
(eval y) ; returns y - i.e don'tcare
返回:
sat
Expect x is true
true
Expect y is don't care
y
当涉及量词时,我怎样才能达到类似的效果?例如,在下面的示例中,如果绿色汽车的变速箱损坏,则无关紧要。
(set-option :smt.auto-config false)
(declare-sort Car)
(declare-fun working_engine (Car) Bool)
(declare-fun broken_transmission (Car) Bool)
(define-fun allCarsNeedFixing () Bool
(forall ((c Car))
(or
(not (working_engine c))
(broken_transmission c))))
(declare-const redCar Car)
(assert (working_engine redCar))
(declare-const greenCar Car)
(assert (not (working_engine greenCar)))
(assert allCarsNeedFixing)
(check-sat)
(echo "red car has working engine, expect true")
(eval (working_engine redCar)) ; returns true
(echo "red car has broken transmission, expect true")
(eval (broken_transmission redCar)) ; returns true
(echo "green car has working engine, expect false")
(eval (working_engine greenCar)) ; returns false
(echo "green car has broken transmission, expect don't care")
(eval (broken_transmission greenCar)) ; could return true or false
返回:
sat
red car has working engine, expect true
true
red car has broken transmission, expect true
true
green car has working engine, expect false
false
green car has broken transmission, expect don't care
true
如何获得最终结果以返回“不关心”而不是 true?
这些示例应通过Rise4Fun执行
解决方案
推荐阅读
- java - 使用电子邮件和密码登录。失败时如何找出两者中的哪一个是错误的?
- c# - 有没有办法向.net 控制台添加倒计时?
- android - 我对空点异常有一些问题
- unity3d - unity hub 不允许我安装 unity;错误:“没有足够的空间下载和安装所选项目”
- c - 为什么在我的 C 代码中行主矩阵访问比列主矩阵访问运行得慢?
- python-3.x - 如果这些方法彼此相等,如何输出 True?
- python - 使用 pyodbc 和 mysql8 的参数化查询对于具有 int 数据类型的列返回 0
- macos - Gitlab-CI runner 可以与 MacOSx 和 docker 一起在应用商店中发布吗?
- javascript - 无法在 firestore 中使用 set() 合并数据,而是覆盖数据
- vim - 为什么当 ~/.vimrc 丢失时 Vim 文件类型选项打开但存在时关闭?