z3 - Z3中的多元减法
问题描述
我正在使用 Z3 来解决需要减法的问题,并且我遇到了这样一个事实,即 Z3 中的减法允许多个参数。这对我来说似乎很奇怪,因为减法不是关联运算。这可以从以下脚本中看出。
(declare-fun a () Int)
(declare-fun b () Int)
(declare-fun c () Int)
(assert (= a (- 1 2 3)))
(assert (= b (- 1 (- 2 3))))
(assert (= c (- (- 1 2) 3)))
由a=c=-4
and满足b=2
所以这意味着 Z3 中的减法是通过从左到右应用二元运算来定义的?
解决方案
这实际上是 SMT-Lib 的一个特性,z3 只是在实现它。见这里:http ://smtlib.cs.uiowa.edu/theories-Ints.shtml
是的,如果你有多个元素,它只是关联到左边。那是:
(- 1 2 3 4)
与以下内容完全相同:
(- (- (- 1 2) 3) 4)
这确实令人困惑,因为我们只想对括号无关紧要的关联运算符(如+
and *
)做,但 SMTLib 在这个意义上是自由的。这并不意味着减法在 SMT-Lib 中是关联的,它只是意味着如果您有多个参数,它会按上述方式进行解析。希望有帮助!
推荐阅读
- c# - 在 asp.net web 表单和 Ajax 中发送字符串类型数据的问题
- typo3 - 哪个版本的扩展构建器适用于 TYPO3 9.5 LTS?
- sql - 如何构建和打印到浏览器类别树?
- mysql - 查询在没有 WHERE 但有它的情况下工作,而不是 - “第 2 行中的 LIMIT 0, 25'”
- java - 将图像和 PDF 从电子邮件附件加载到 BLOB
- node.js - 从异步函数中提取值
- .net - .NETCore 服务。使用动态/JObject 配置 appsettings
- android - Tensorflow-lite - 从量化模型输出中获取位图
- haskell - 为什么导入 Text.RawString.QQ 失败?
- java - 检查元素是否被删除java