- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
forall
语句在 SMT 中如何工作?我找不到有关使用的信息。你能简单解释一下吗?有一个例子来自
https://rise4fun.com/Z3/Po5 .
(declare-fun f (Int) Int)
(declare-fun g (Int) Int)
(declare-const a Int)
(declare-const b Int)
(declare-const c Int)
(assert (forall ((x Int))
(! (= (f (g x)) x)
:pattern ((g x)))))
(assert (= (g a) c))
(assert (= (g b) c))
(assert (not (= a b)))
(check-sat)
最佳答案
有关量词(以及所有其他 SMTLib)的一般信息,请参阅官方 SMTLib 文档:
http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf
引自第 3.6.1 节:
Exists and forall quantifiers. These binders correspond to the usual universal and existential quantifiers of first-order logic, except that each variable they quantify is also associated with a sort. Both binders have a non-empty list of variables, which abbreviates a sequential nesting of quantifiers. Specifically, a formula of the form (forall ((x1 σ1) (x2 σ2) · · · (xn σn)) ϕ) (3.1) has the same semantics as the formula (forall ((x1 σ1)) (forall ((x2 σ2)) (· · · (forall ((xn σn)) ϕ) · · · ) (3.2) Note that the variables in the list ((x1 σ1) (x2 σ2) · · · (xn σn)) of (3.1) are not required to be pairwise disjoint. However, because of the nested quantifier semantics, earlier occurrences of same variable in the list are shadowed by the last occurrence—making those earlier occurrences useless. The same argument applies to the exists binder.
如果您有一个量化断言,这意味着求解器必须找到一个令人满意的实例,使该公式为真。对于 forall
量词,这意味着它必须找到一个模型,断言对于相关类别的量化变量的所有赋值都是正确的。同样,对于 exists
,模型需要能够展示满足断言的特定值。
顶级 exists
量词通常在 SMTLib 中被遗漏:通过 skolemization,声明一个顶级变量满足需求,并且还具有自动显示在模型中的优势。 (也就是说,任何顶级声明的变量都会自动存在量化。)
使用forall
通常会使逻辑成为半可判定的。因此,如果您使用量词,您可能会得到 unknown
作为答案,除非某些试探法可以找到令人满意的分配。同样,虽然语法允许嵌套量词,但大多数求解器都很难处理它们。模式可以提供帮助,但直到今天它们仍然难以使用。总结一下:如果您使用量词,则 SMT 求解器不再是决策过程:它们可能终止也可能不终止。
如果您使用 z3 的 Python 接口(interface),另请查看:https://ericpony.github.io/z3py-tutorial/advanced-examples.htm .它确实包含一些可以为您澄清事情的量化示例。 (即使您不使用 Python 界面,我也衷心建议您翻阅该页面以查看功能是什么。它们或多或少直接转换为 SMTLib。)
希望这能让您入门。如果您提出具体问题,Stack-overflow 的效果最好,因此请根据需要随时询问有关实际代码的说明。
关于z3 - forall 在 SMT 中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62307385/
我想在另一个模型中使用一个模型的输出(在我的例子中只有 sat 和 unsat)。在这里,模型是对一组逻辑公式(在本例中为 Z3 表达式)中涉及的常量的令人满意的赋值。我的目标可以简要解释如下。 我的
我想在另一个模型中使用一个模型的输出(在我的例子中只有 sat 和 unsat)。在这里,模型是对一组逻辑公式(在本例中为 Z3 表达式)中涉及的常量的令人满意的赋值。我的目标可以简要解释如下。 我的
我正在尝试 a Z3 tutorial 的一些示例涉及递归函数。我已经尝试了以下示例。 Fibonacci (第 8.3 节) IsNat (第 8.3 节) Inductive (第 10.5 节)
下面的 smt2 代码给出了与类型相关的错误。 ( declare-datatypes ( ( List 1 ) ) ( ( par ( T ) ( ( cons ( hd T ) ( tl (
我有一个关于 MaxSat 的想法,并且已经使用 MSU3 以及使用 minisat API 的顺序编码实现了一个朴素的 Maxsat 求解器 我想知道是否有办法加速这个求解器。 我带来了这篇论文:
我在以下看似微不足道的基准测试中尝试了几种 SMT 求解器(CVC3、CVC4 和 Z3): (set-logic LIA) (set-info :smt-lib-version 2.0) (asse
最近,我开始研究形式验证技术。在文献中,模型检查器和求解器可以以某种方式互换使用。 但是,模型检查器和求解器如何相互连接? p.s.如果建议提供一些论文或链接,我将不胜感激。 最佳答案 为了执行模型检
我一直在研究各种 SMT 求解器,主要是 Z3、CVC4 和 VeriT。他们都对自己用量词解决 SMT 问题的能力有模糊的描述。他们的文档主要基于示例 (Z3),或由学术论文组成,描述可能会或可能不
我想构造一个 SMT 公式,其中包含对整数线性算术和 bool 变量的多个断言,以及对实数非线性算术和 bool 变量的一些断言。对整数和实数的断言仅共享 bool 变量。例如,请考虑以下公式: (d
解决优化问题的一种方法是使用 SMT 求解器来询问是否存在(坏)解决方案,然后逐步添加更严格的成本约束,直到命题不再可满足。例如,http://www.lsi.upc.edu/~oliveras/es
我有一个 SMT 应用程序(基于 Haskell SBV 库构建),它针对单个 s 求解一些复杂的方程式使用 Z3 的实逻辑变量。就我而言,找到解决方案大约需要 30 秒。 为了加快速度,我添加了额外
在 previous post使用Z3Py在线解决了一些涉及运算放大器的问题。但是现在 Z3Py online 已停止服务,我正在尝试使用 Z3 SMT-LIB online 解决此类问题。 示例 1
我尝试了一段时间来完成一个相当简单的要求: 我声明了一个新的数据类型 (declare-datatypes () ((A (mk_A (key Int) (var1 Int) (var2 Int)))
HT/SMT 背后的主要思想是,当一个线程停顿时,同一内核上的另一个线程可以选择该内核的其余空闲时间并透明地运行它。 In 2013 Intel dropped SMT in favor of out
我正在使用 Microsoft 的 Z3 SMT 求解器,并且我正在尝试定义自定义类型的常量。默认情况下,这些常量似乎并不不平等。假设您有以下程序: (declare-sort S 0) (decla
我正在考虑做一些验证工作,其中我有常规的树语法作为基础理论。 Z3 允许您使用未解释的函数定义自己的东西,但是当您的决策过程是递归的时,这往往不会很好地工作。他们曾经允许使用插件,但我认为这已经被贬低
是否有增量 SMT 求解器或某些增量 SMT 求解器的 API,我可以在其中增量添加约束,我可以通过某个标签/名称唯一标识每个约束? 我想唯一标识约束的原因是我以后可以通过指定该标签/名称来删除它们。
我正在计划使用现成的 SMT 求解器对 C 代码的符号执行进行一些实验,并且想知道使用哪个求解器;看着例如SMT 竞赛参赛者只选择开源系统,将范围缩小到 Beaver、Boolector、CVC3、O
我用 Haskell 编写了一个应用程序,它调用 Z3 求解器来解决一些复杂公式的约束。感谢 Haskell,我可以快速切换正在使用的数据类型。 当使用 SBV 的 AlgReal 类型进行计算时,我
我正在使用Z3的Java API。在检查“满意度”(s.status)时,我遇到了段错误。有人可以帮忙调试这个问题吗?有什么方法可以转储消息以便我可以调试这个问题。我尝试使用 Log.open(),但
我是一名优秀的程序员,十分优秀!