量词与非量词

2023-12-14

我有一个关于量词的问题。

假设我有一个数组,我想计算该数组的数组索引 0、1 和 2 -

(declare-const cpuA (Array Int Int))
(assert (or (= (select cpuA 0) 0) (= (select cpuA 0) 1))) 
(assert (or (= (select cpuA 1) 0) (= (select cpuA 1) 1))) 
(assert (or (= (select cpuA 2) 0) (= (select cpuA 2) 1)))

或者我可以使用 forall 构造指定相同的内容 -

(assert (forall ((x Int)) (=> (and (>= x 0) (<= x 2)) (or (= (select cpuA x) 0) (= (select cpuA x) 1)))))

现在我想了解它们两者之间的区别。 第一种方法执行速度很快,并给出了一个简单易读的模型。 相比之下,第二个选项的代码大小非常小,但程序需要时间来执行。而且解决方案也很复杂。

我想使用第二种方法,因为我的代码会变得更小。 然而,我想找到一个可读的简单模型。


量词推理通常非常昂贵。在您的示例中,量化公式相当于您提供的三个断言。 然而,这不是 Z3 决定/解决你的公式的方式。 Z3 使用称为基于模型的量词实例化 (MBQI) 的技术来求解您的公式。 这种技术可以决定许多片段(参见http://rise4fun.com/Z3/tutorial/guide)。主要对本指南中描述的片段有效。 它支持未解释的函数、算术和位向量理论。它对数组和数据类型的支持也有限。 这足以解决您的示例。 Z3生成的模型看起来更复杂,因为使用相同的引擎来决定更复杂的片段。 该模型应该看起来像一个小型功能程序。您可以在以下文章中找到有关此方法如何工作的更多信息:

  • 量化SMT公式的完整实例化

  • 高效求解量化位向量公式

请注意,数组理论主要用于表示/建模无界数组或大数组。也就是说,数组的实际大小未知或太大。我所说的“大”是指数组访问的数量(即selects)在你的公式中比数组的实际大小小得多。我们应该问自己:“我们真的需要数组来建模/解决问题 X 吗?”。您可以考虑以下替代方案:

  • (未解释的)函数而不是数组。您的示例也可以编码为:

    (声明-fun cpuA (Int) Int)

    (断言(或(=(cpuA 0)0)(=(cpuA 0)1)))
    (断言(或(=(cpuA 1)0)(=(cpuA 1)1)))
    (断言(或(=(cpuA 2)0)(=(cpuA 2)1)))

  • 编程式 API。我们已经看到了许多使用数组(和函数)来提供紧凑编码的示例。紧凑而优雅的编码并不一定更容易解决。事实上,通常情况恰恰相反。您可以使用 Z3 的编程 API 实现两全其美(性能和紧凑性)。在下面的链接中,我为“数组”的每个位置使用一个“变量”对您的示例进行了编码。宏/函数用于对约束进行编码,例如:表达式是0 or 1. http://rise4fun.com/Z3Py/JF

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

量词与非量词 的相关文章

  • z3 对于没有量词的断言生成未知

    我有一些简单的约束 涉及 z3 中实数的乘法 这些约束产生unknown 问题似乎是它们被包装在数据类型中 因为未包装的版本会产生sat 这是一个简化的情况 declare datatypes T NUM n Real declare co
  • 如何使 Z3 的 (Python) SAT 求解偏向某个标准,例如“更喜欢”具有更多否定文字

    在 Z3 Python 中 有什么方法可以将 SAT 搜索 偏向 标准 吗 一个案例 我想要Z3获取一个模型 但不是任何模型 如果可能的话 给我一个具有大量否定文字的模型 因此 举例来说 如果我们必须搜索A or B一个可能的模型是 A T
  • 在 Windows 上安装 Z3 + Python

    我很难让 Z3 Python 前端在 Windows 7 上使用 Codeplex 的 Z3 版本 4 3 0 运行 作为 MSI 文件分发的旧版本 4 1 2 在我的 Windows 7 上运行良好 首先 我无法使用 codeplex 中
  • 表示 SMT-LIB 中的时间约束

    我试图在 SMT LIB 中表示时间约束 以检查它们的可满足性 我正在寻找有关我所采取的方向的反馈 我对 SMT LIB 比较陌生 非常感谢您的意见 我所面临的限制是事件的时间和持续时间 例如 考虑以自然语言给出的以下约束 约翰在 13 0
  • 在 Z3-Python 中,执行模型搜索时出现“builtin_function_or_method' object is not iterable”

    我正在探索在 Z3 Python 中执行 SAT 求解的快速方法 为此 我尝试模仿第 5 1 章的结果https theory stanford edu nikolaj programmingz3 html sec blocking eva
  • 增量求解有什么好处?

    如果 pop 完全破坏了上下文 即学到的引理 增量约束求解使用 堆栈 的目的是什么 模式 理由 我想如果我只有 1 个约束 几个 合词 最好进行单个查询 而不是 将单独帧中的合取词堆叠到堆栈上 如果我 有超过 1 个约束并决定使用增量求解
  • 使用布尔运算符在 Z3 中定义约束

    比方说 我想使用 Z3 约束将字符串的每个字符限制为字符集 a zA Z0 9 我可以使用布尔运算符来指定吗 举个例子 input BitVec input s i 8 for i in range 10 for i in range 10
  • 如何在线使用Z3Py解决运算放大器的问题

    求下列电路中R的值 使用以下代码可以解决此问题 R V1 V2 Vo Reals R V1 V2 Vo I1 V1 R 50 I2 V2 R 10 g R I1 I2 print g equations Vo g print equatio
  • Z3 返回型号不可用

    如果可能的话 我想要对我的代码有第二意见 问题的约束条件是 a b c d e f是非零整数 s1 a b c and s2 d e f 是集合 The sum s1 i s2 j for i j 0 2必须是一个完美的正方形 我不明白为什
  • 哪里可以找到 z3py 教程

    由于某些安全问题 rise4fun z3py 将在几周内不可用 我试图找到一些学习z3py的资源但徒劳无功 请推荐一些学习z3py的资源 我使用 Z3Py 教程源创建了一个 zip 文件 它基本上是一些 HTML 页面和一堆 python
  • 如何让 z3 返回多个 unsat 核心、多个令人满意的作业

    我正在研究一个研究工具的一个组件 我有兴趣检索 对于 QF LRA 多个 最少或其他 UNSAT核心以及 多项 SAT 作业 我检查了论坛以获取有关此主题的早期讨论 例如 在逻辑 QF LRA 上使用 z3 时如何获得不同的 unsat 核
  • 在 Z3 中定义带有约束的代数数据类型

    我看过一些在线材料 用于定义代数数据类型 例如 Z3 中的 IntList 我想知道如何定义具有逻辑约束的代数数据类型 例如 如何定义代表正整数的 PosSort SMT中的全部功能 在 SMT 中函数总是完整的 这提出了如何对部分函数 例
  • 在 Z3 中使用 SMT 约束时获取合法范围信息的(次)最佳方法

    这个问题与我之前的问题相关 在 Z3 中使用 SMT 约束时是否可以获得合法的范围信息 https stackoverflow com questions 53676016 is it possible to get a legit ran
  • Z3/SMT:我什么时候应该选择推送/弹出来重置?

    我使用 Z3 来解决符号执行器产生的路径条件 该执行器以深度优先顺序探索状态空间 与 CUTE DART 或 可能 SAGE 非常相似 我们正在尝试使用 Z3 的不同方式 在一种极端情况下 我们将每个查询发送到 Z3 并在之后立即 重置 它
  • Z3Py 中最大值的模型不正确

    我想找到一个表达式的最大间隔e对于所有 x 都成立 编写这样的公式的方法应该是 Exists d ForAll x in d d e and ForAll x not in d d e 为了得到这样一个d 公式f在 Z3 中 看上面的 可能
  • 任意长度的通用位向量类型

    出于与此处描述相同的原因 用户定义的未解释函数 https stackoverflow com questions 7740556 equivalent of define fun in z3 api 我想定义我自己的未解释函数 bvred
  • 将 IR 转换为 Z3 公式?

    我在 IR 中有一些代码 并且该代码已经是 SSA 形式 现在我正在尝试将此代码转换为SMT公式 然后将其提供给Z3进行一些验证 我有一些疑问 有没有技术论文详细解释如何将SSA IR转换为SMT公式 我四处寻找 一无所获 对于那些计算指令
  • 如何从 Z3 中的 Seq 类型中提取元素作为基本类型?

    如何将序列中的元素提取到基本类型 以便以下内容正常工作 define sort ISeq Seq Int define const x ISeq seq unit 5 define const y ISeq seq unit 6 asser
  • 使用 Z3 SMT 解决谓词演算问题

    我想使用 Z3 来解决最自然地用原子 符号 集合 谓词和一阶逻辑表达的问题 例如 伪代码 A a1 a2 a3 A is a set B b1 b2 b3 C c1 c2 c3 def p a A b B c C gt Bool p is
  • 为什么 Z3 对于很小的搜索空间来说很慢?

    我正在尝试制作一个 Z3 程序 在 Python 中 它生成执行某些任务的布尔电路 例如 添加两个 n 位数字 但性能非常糟糕 以至于对整个解决方案空间进行强力搜索将导致快一点 这是我第一次使用 Z3 所以我可能会做一些影响我性能的事情 但

随机推荐

  • “npm run build”失败并出现 SyntaxError:Unexpected token

    我正在尝试将我的应用程序部署到 AWS 但在执行 npm run build 时遇到错误 这个错误似乎与 webpack config js 有关 但我不知道 因为我没有对该文件进行任何修改 我在这里发现了一个类似的问题 但没有多大帮助 S
  • 如何在 XAMPP 下配置 MySQL 以使用 IPv6 [关闭]

    Closed 这个问题是无关 目前不接受答案 我有 XAMPP v 3 1 0 出于测试目的 我需要使用 IPv6 格式连接到 MySQL 数据库 如何配置MySQL 找到我的 ini 更改 取消注释bind address for ipv
  • is_const::value 为 false ——为什么? [复制]

    这个问题在这里已经有答案了 为什么这个静态断言会触发 static assert std is const
  • 在 vue.js 路由加载之前检查权限

    有谁知道如何在渲染 vue js 路由之前检查用户的权限 我通过检查权限提出了部分解决方案created组件的阶段 created function var self this checkPermissions function resul
  • 如何使用 JavaConfig 从 Spring Security 中删除 ROLE_ 前缀?

    我正在尝试删除 Spring Security 中的 ROLE 前缀 我尝试的第一件事是 http servletApi rolePrefix 这不起作用 所以我尝试创建一个BeanPostProcessor如建议的http docs sp
  • 生命游戏数组索引越界

    我正在玩康威的生命游戏 我很确定我即将完成 但是当我运行它时 我得到Exception in thread main java lang ArrayIndexOutOfBoundsException 1 at game of life Ga
  • 从表中选择 *,其中日期 = 今天

    需要 PHP MySql 帮助 需要选择 今天 的所有记录 我的表有一列包含 unix 时间戳 我只想从表中选择 unix 时间戳 今天 很高兴在 Linux 命令行上执行此操作 只需要基本的 MySql 查询 我会选择 SQL 版本 SE
  • 显示 BLOB 图像 Laravel 4

    我在 mysql 上添加了 png 图像作为 BLOB 但是当我尝试检索它们时 我将它们作为文件获取 但无法显示为图像 下面是我的代码 控制器 public function post news image Input file image
  • 控制 ASP.Net MVC 中的输出缩进

    我的同事非常 热衷 将格式正确且缩进的 html 传送到客户端浏览器 这是为了使页面源代码易于被人阅读 首先 如果我有一个在站点中多个不同区域使用的部分视图 渲染引擎是否应该自动为我设置缩进格式 例如在 XmlTextWriter 上设置
  • ImageView圆角[重复]

    这个问题在这里已经有答案了 我希望图像有圆角 我实现了这个 xml 代码并在我的图像视图中使用它 但图像与形状重叠 我正在通过异步任务下载图像
  • ios音频单元remoteIO录音时播放

    我被要求将 VOIP 添加到游戏中 跨平台 因此无法使用 Apple gamekit 来做到这一点 已经有三四天了 我一直在努力让我的注意力集中在音频单元和远程IO上 我忽略了数十个示例等 但每次都只是对输入 PCM 应用简单的算法并在扬声
  • 使用 NSXMLParser 解析 XML

    我有一个关于 xml 解析的问题 通常 XML文件的样式是这样的
  • 如何在spark scala中使用带有2列的array_contains?

    我有一个问题 我想检查字符串数组是否包含另一列中存在的字符串 我目前正在使用下面的代码 该代码给出了错误 withColumn is designer present when array contains col list of desi
  • R 中的双冒号 (::) 是什么?

    我正在关注 Rbloggers 中的教程 发现双冒号的使用 我在网上查找 但找不到其使用的解释 这是它们的使用示例 df lt dplyr data frame year c 2015 NA NA NA trt c A NA B NA 我知
  • Greasemonkey @require 在 Chrome 中不起作用

    我正在尝试使用 Greasemonkey 添加 jQuery require include方法 但是不起作用 显示以下错误 Uncaught ReferenceError is not defined repeated 10 times
  • WinForm c#:检查首次运行并显示消息

    我正在创建一个包含首次运行检查的 winform 应用程序 我一直在关注这两篇文章 如何检查程序是否是第一次运行 C 中的 Windows 窗体用户设置 首次运行检查应该检查应用程序是否曾经运行过 如果没有运行过 它应该向用户显示一些消息
  • 在 TypeScript 中扩展特定类型的数组

    我知道如何扩展任何类型的数组 declare global interface Array
  • MongoDB NodeJS 本机驱动程序(mongodb) 与 Mongo Shell 性能对比

    我在 MongoDB 表 1 中有 10000 条记录 数据如下 id ObjectId 5d5e500cb89312272cfe51fc cities cityid 5d5d2205cdd42d1cf0a92b33 value XYZ c
  • Android 活动识别不适用于 Nexus 5

    我有一个正在使用谷歌活动识别更新的代码 现在突然之间 这些似乎每秒发送几次更新 或者从不发送更新 尽管每 20 秒请求一次 我没有更改代码并检查了早期版本 但遇到了同样的问题 我根据教程构建了一个最小的示例 但我的 Nexus 5 设备没有
  • 量词与非量词

    我有一个关于量词的问题 假设我有一个数组 我想计算该数组的数组索引 0 1 和 2 declare const cpuA Array Int Int assert or select cpuA 0 0 select cpuA 0 1 ass