确定任意命题公式中变量的上/下界[关闭]

2023-12-24

给定一个任意命题公式 PHI(某些变量的线性约束),确定每个变量的(近似)上限和下限的最佳方法是什么?

有些变量可能是无界的。在这种情况下,算法应该得出结论:这些变量没有上限/下限。

例如,PHI = (x=3 AND y>=1)。 x 的上限和下限均为 3。y 的下限为 1,并且 y 没有上限。

这是一个非常简单的例子,但是有通用的解决方案吗(也许使用 SMT 求解器)?


这假设每个变量的 SAT/UNSAT 域是连续的。

  1. 使用 SMT 求解器检查公式的解。如果没有解决方案,则意味着没有上限/下限,因此停止。
  2. 对于公式中的每个变量,在变量的域上进行两次二分搜索,一次搜索下界,另一个搜索上限。每个变量搜索的起始值是步骤 1 中找到的解决方案中的变量值。使用 SMT 求解器探测每个搜索值的可满足性,并有条理地对每个变量的边界进行括号。

搜索函数的伪代码,假设整数域变量:

lower_bound(variable, start, formula)
{
    lo = -inf;
    hi = start;
    last_sat = start;
    incr = 1;
    do {
        variable = (lo + hi) / 2;
        if (SMT(formula) == UNSAT) {
            lo = variable + incr;
        } else {
            last_sat = variable;
            hi = variable - incr;
        }
    } while (lo <= hi);
    return last_sat;
}

and

upper_bound(variable, start, formula)
{
    lo = start;
    hi = +inf;
    last_sat = start;
    do {
        variable = (lo + hi) / 2;
        if (SMT(formula) == SAT) {
            last_sat = variable;
            lo = variable + incr;
        } else {
            hi = variable - incr;
        }
    } while (lo <= hi);
    return last_sat;
}

-inf/+inf 是每个变量的域中可表示的最小/最大值。如果 lower_bound 返回 -inf 则该变量没有下限。如果 upper_bound 返回 +inf 则该变量没有上限。

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

确定任意命题公式中变量的上/下界[关闭] 的相关文章

  • 如何使 Z3 的 (Python) SAT 求解偏向某个标准,例如“更喜欢”具有更多否定文字

    在 Z3 Python 中 有什么方法可以将 SAT 搜索 偏向 标准 吗 一个案例 我想要Z3获取一个模型 但不是任何模型 如果可能的话 给我一个具有大量否定文字的模型 因此 举例来说 如果我们必须搜索A or B一个可能的模型是 A T
  • 如何以 smt2 格式示例获取 z3 求解器的多个解决方案?

    如何使用 smt2 格式的 z3 求解器生成位向量公式的多个模型 在为位向量实现 IDEA 代码时 它正在生成一个模型 如果存在 如何生成相同的所有可能模型 ex smt2 file set logic QF BV set info smt
  • 量词与非量词

    我有一个关于量词的问题 假设我有一个数组 我想计算该数组的数组索引 0 1 和 2 declare const cpuA Array Int Int assert or select cpuA 0 0 select cpuA 0 1 ass
  • z3 实数的存在主义理论

    Z3决定非线性实数运算的存在片段吗 也就是说 我可以用它作为决策程序来测试是否 带有 和 x 的无量词公式有实数解吗 是的 Z3有一个非线性多项式实数运算的存在片段的判定过程 当然 该过程是以可用资源为模完成的 该过程相当昂贵 本文 htt
  • 关于 Z3 for Java 的性能问题

    我在当前使用 Z3 for Java 的项目中遇到了一些性能问题 基本上我当前的大多数限制都非常简单 例如 f x 2 f y lt 3 f x lt 5 我正在使用整个项目共享的静态上下文和解算器实例 public class Const
  • 如何使用 z3py 进行增量求解

    我正在使用 Z3 求解器的 python API 来搜索优化的时间表 它工作得很好 除了有时即使对于小图也非常慢 但有时非常快 原因可能是我的调度问题的约束相当复杂 我试图加快速度 并偶然发现了一些关于增量解决方案的文章 据我了解 您可以使
  • z3 中如何定义 Int 排序(SMT-LIB 2.0 Ints 理论)和动态声明排序?

    这是我使用 z3 执行的 SMT LIB 2 0 基准测试 set logic AUFLIA declare sort PZ 0 declare fun MS Int PZ Bool assert forall x Int exists X
  • 在 Mac OS X 上构建 z3

    我正在尝试建立Z3 http z3 codeplex com releases view 95640在 Mac OS X 上 按照 README 文件 我刚刚执行了 autoconf configure make 收到错误 omp h 文件
  • 如何将 Z3 与 C++ 结合使用

    我想将 Z3 与 C 一起使用 并且我遵循了安装指南 使用 Visual Studio 命令提示符在 Windows 上构建 Z3 https github com Z3Prover z3 building z3 on windows us
  • 使用 Z3_solver_get_unsat_core 获取 unsat 核心

    假设这是非线性实数算术的约束集 例如 pred1 gt v2 x v0 x v1 y v0 y v2 y v0 y v1 x v0 x 0 pred2 gt v1 x v0 x v2 y v0 y v1 y v0 y v2 x v0 x 0
  • 将 IR 转换为 Z3 公式?

    我在 IR 中有一些代码 并且该代码已经是 SSA 形式 现在我正在尝试将此代码转换为SMT公式 然后将其提供给Z3进行一些验证 我有一些疑问 有没有技术论文详细解释如何将SSA IR转换为SMT公式 我四处寻找 一无所获 对于那些计算指令
  • 在 SMTLIB v2 输入中使用 :pattern 不断获得“未知”结果

    我在 Z3 中使用 SMTLIBv2 输入格式和模式时遇到问题 通过以下输入 我不断得到 未知 结果 declare datatypes L L0 L1 declare fun path List L declare fun checkTr
  • 为什么 Z3 中的运算符“/”和“div”给出不同的结果?

    我试图用两个整数来表示一个实数 并将它们用作实数的分子和分母 我写了以下程序 declare const a Int declare const b Int declare const f Real assert f a b assert
  • 如何从 Z3 中的 Seq 类型中提取元素作为基本类型?

    如何将序列中的元素提取到基本类型 以便以下内容正常工作 define sort ISeq Seq Int define const x ISeq seq unit 5 define const y ISeq seq unit 6 asser
  • 如何将公式转换为析取范式?

    说给定一个公式 t1 gt 2 或 t2 gt 3 且 t3 gt 1 我希望得到它的析取范式 t1 gt 2 且 t3 gt 1 或 t2 gt 3 且 t3 gt 1 在Z3中如何实现这一点 Z3没有将公式转换为DNF的API或策略 然
  • 使用 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 在这个简单的输入上返回“未知”?

    这是输入 set option auto config false set option mbqi false declare sort T6 declare sort T7 declare fun set23 T7 T7 Bool ass
  • 根据求解器的决定执行 get-model 或 unsat-core

    我想知道 SMT LIB 2 0 脚本中是否有可能访问求解器的最后一个可满足性决策 sat unsat 例如 以下代码 set option produce unsat cores true set option produce model
  • (Z3Py) 声明函数

    我想在简单的 result x t c 公式中找到一些给定结果 x 对的 c 和 t 系数 from z3 import x Int x c Int c t Int t s Solver f Function f IntSort IntSo
  • Z3 Java API 定义函数

    我需要您帮助使用 Z3 Java API 定义函数 我尝试解决这样的问题 与 z3 exe 进程一起工作正常 declare fun a Real declare fun b Real declare fun c Bool define f

随机推荐

  • 电子邮件上的 CSS

    有没有人找到一种在以编程方式生成的电子邮件中嵌入 CSS 的好方法 我发现的最好方法是将样式代码放入资源文件中并在代码中调用它 一个例子是 Dim objBuilder objBuilder New StringBuilder objBui
  • 如何关闭本地 firebase 模拟器?

    目前我使用以下命令初始化 firebase 模拟器 firebase emulators start 经过一段时间的研究后 我想停止它 那么我怎样才能停止模拟器呢 查看端口被哪个进程占用sudo lsof i tcp
  • 从 htaccess 中的 URL 中删除不需要的字符

    我们当前的 htaccess 设置正确地将 URL 转换为这样 site com page php sid Friend 到 site com Friend 然而 由于不相关的疏忽 我们几乎所有的 URL 都被双索引为 site com F
  • phpmyadmin:创建一个函数

    我正在尝试在我的 phpmyadmin 中创建一个函数 不起作用 这是我的语法 DELIMITER CREATE FUNCTION fixString input varchar RETURNS varchar BEGIN declare
  • 如何在 TypeORM queryBuilder 中显示生成的 SQL/原始 SQL

    我开发了typeorm querybuilder 为了调试的目的 我想显示生成的 SQL 查询 我测试过printSql 方法 但它没有显示任何 SQL 查询 const Result await this attendanceReposi
  • R Keras:将tensorflow张量转换为R数组

    我正在使用 R Keras 我可以通过执行以下命令来获取中间层的输出 layer output lt get layer mymodel index 1 output 其中 mymodel 是 Keras 模型 问题是layer outpu
  • 更新拉丝面积图的 y 轴

    我正在使用 d3 js 并且我正在通过修改来处理拉丝面积图这个例子 http bl ocks org 1667367 除了根据画笔改变 x 轴之外 我还希望根据画笔内数据的 y 值重新绘制图表的 y 轴 类似于 我已经使该功能正常工作 但只
  • Spring boot @DataJpaTest排除过滤器不起作用

    我有这个测试 RunWith SpringRunner class DataJpaTest excludeFilters Filter type FilterType REGEX pattern io rainrobot adwisdom
  • @PostConstruct 拦截器与 @Named @ViewScoped 未调用

    我仔细阅读了有关的文章拦截器 http docs jboss org weld reference 1 0 0 en US html interceptors html在接缝 焊接文档中并实施了InterceptorBinding Inte
  • 如何通过代码设置另存为对话框的目录?

    基本上 我编写了一些代码 用于监听应用程序内弹出的 另存为 对话框 当它弹出时 它会按下 保存 所有这些都是通过代码实现的 这很好用 但是我需要能够在保存之前将文件路径设置为我想要的路径 到目前为止 这是我的代码 using System
  • 常量的 k 前缀从何而来?

    常量以前缀开头是一种很常见的做法k e g k pi 但什么是k mean 难道只是这样c已经意味着char 这是一个历史上的奇怪现象 在喜欢盲目应用他们不理解的编码标准的团队中仍然是常见的做法 很久以前 大多数商业编程语言都是弱类型的 自
  • 哪些Google API可以通过服务帐号授权访问?

    我从 Google API 文档推断 并非所有广告的 Google 服务都可供服务帐户使用 例如在服务帐户的公告中 这是文本的一部分 服务帐户目前受以下 Google 支持 开发者服务 谷歌云存储 谷歌预测API 谷歌网址缩短器 谷歌 OA
  • 如何将一个流读入另一个流? [复制]

    这个问题在这里已经有答案了 FileInputStream in new FileInputStream myFile ByteArrayOutputStream out new ByteArrayOutputStream 问题 我怎样才能
  • Cassandra 集群 - 数据密度(每个节点的数据大小) - 寻求反馈和建议

    我正在考虑 Cassandra 集群的设计 用例将存储大行的时间序列数据的微小样本 使用 KairosDB 数据几乎是不可变的 非常罕见的删除 无更新 这部分工作得很好 然而 几年后 数据将相当大 最大大小将达到数百 TB 考虑到复制因子
  • 带弹出框/工具提示的 R 闪亮 valueBox

    我尝试从闪亮的仪表板为 valueBox 制作弹出框 工具提示 但到目前为止没有任何效果 我尝试使用shinyBS 例如popify函数 但随后收到错误警告 tagAssert中的错误 需要具有类 shiny tag 的对象 当我使用 ad
  • 使用 Cloud SQL 避免每日高额费用

    所以我处于开发模式 在开发后的 10 天内 我有了一个300 向 Google 计费 我做了什么 创建一个测试表 并向其中添加记录 文本和数字 我想说 从我的 Mac 执行了多个查询每天100个 持续6天 与周围有一张桌子100k 行 6
  • 如何在 Tkinter 画布上旋转多边形?

    我正在努力使用 Python 和 Tkinter 创建 asteroids 版本 当按下左或右箭头键时 船需要旋转 这艘船在 Tkinter 画布上是一个三角形 我无法想出调整三角形坐标的公式 我相信这与 sin 和 cos 有关 尽管我不
  • Meteor.js 在没有日志的情况下被杀死

    尝试运行 Meteor js 的示例 派对 示例失败 没有留下任何日志 meteor run parties gt Meteor server running on http localhost 3000 Killed 看起来由于某种原因崩
  • Storm拓扑未提交

    我已经配置了我的机器zookeeper nimbus supervisor运行正常 并且我的拓扑在LocalCluster中工作 LocalCluster cluster new LocalCluster cluster submitTop
  • 确定任意命题公式中变量的上/下界[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 给定一个任意命题公式 PHI 某些变量的线性约束 确定每个变量的 近似 上限和下限的最佳方法是什么 有些变量可能是无界的 在这种情况下 算