使用函数在 z3 中创建列表

2024-01-11

我试图将这段伪代码转换为 SMT-LIB 语言,但我卡住了。

List function my_fun(int x)
{
    list = nil
    for(i in 1 to x):
        if(some_condition_on_i)
            list.concat(i)
    return list
}

到目前为止我所做的是:

(declare-const l1 (List Int))
(define-fun my_fun ((x Int)) (List Int)
    (forall ((t Int))
        (ite (and (some_condition_on_t) (< t x)) (insert t l1) l1 )
        )
    )
)

我知道这是错误的,而且不起作用。你能帮我理解我该怎么做吗?


SMT-LIB 建模逻辑,其中变量始终不可变;另一方面,您的代码似乎是命令式的,即诸如此类的变量list and i是可变的。这种关键的差异将是编码程序时面临的最大挑战,而推理命令式程序的挑战引发了诸如Dafny https://github.com/Microsoft/dafny, Boogie https://github.com/boogie-org/boogie, or Viper http://viper.ethz.ch/

以下是一些提示:

  • (insert t l1)代表一个新列表,通过插入得到t into l1。它会not modify l1(并且无法修改 l1,因为它是逻辑变量)
  • 一个合乎逻辑的forall是一个布尔公式(它的计算结果是true or false),它不是您可以执行的语句(例如其副作用)
  • 如果值x是静态已知的(即如果它是5),然后你可以展开循环(这里是伪代码):

    l0 := Nil
    l1 := ite(condition(1), insert(1, l0), l0)
    l2 := ite(condition(2), insert(2, l1), l1)
    ...
    l4 := ite(condition(4), insert(4, l3), l3)
    
  • 如果值x不是静态已知的,那么您很可能需要一个循环不变式或与固定点为了考虑未知数量的循环迭代
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用函数在 z3 中创建列表 的相关文章

  • 哪里可以找到 z3py 教程

    由于某些安全问题 rise4fun z3py 将在几周内不可用 我试图找到一些学习z3py的资源但徒劳无功 请推荐一些学习z3py的资源 我使用 Z3Py 教程源创建了一个 zip 文件 它基本上是一些 HTML 页面和一堆 python
  • 简化 CNF 公式,同时保留某些变量的所有解决方案

    有关的 CNF 简化 https stackoverflow com questions 23461191 cnf simplification 事实上 我认为这个问题的提交者可能是在追求我想要的东西 有许多工具可用于简化 或求解前 预处理
  • 如何让 z3 返回多个 unsat 核心、多个令人满意的作业

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

    我看过一些在线材料 用于定义代数数据类型 例如 Z3 中的 IntList 我想知道如何定义具有逻辑约束的代数数据类型 例如 如何定义代表正整数的 PosSort SMT中的全部功能 在 SMT 中函数总是完整的 这提出了如何对部分函数 例
  • 正确 Dafny 方法的 Z3 模型

    对于正确的方法 Z3能否找到该方法验证条件的模型 我原以为不会 但这里有一个例子 该方法是正确的 但验证发现了一个模型 这是 Dafny 1 9 7 的情况 Malte 所说的是正确的 我发现它也得到了很好的解释 Dafny 是健全的 因为
  • 在 Mac OS X 上构建 z3

    我正在尝试建立Z3 http z3 codeplex com releases view 95640在 Mac OS X 上 按照 README 文件 我刚刚执行了 autoconf configure make 收到错误 omp h 文件
  • 为什么0=0.5?

    我注意到 Z3 4 3 1 在处理 smt2 文件时出现一些奇怪的行为 If I do assert 0 0 5 就会得到满足 但是 如果我改变顺序并执行 assert 0 5 0 这是不能令人满意的 我对发生的情况的猜测是 如果第一个参数
  • 将 IR 转换为 Z3 公式?

    我在 IR 中有一些代码 并且该代码已经是 SSA 形式 现在我正在尝试将此代码转换为SMT公式 然后将其提供给Z3进行一些验证 我有一些疑问 有没有技术论文详细解释如何将SSA IR转换为SMT公式 我四处寻找 一无所获 对于那些计算指令
  • z3 是否支持有理算术的输入约束?

    事实上 SMT LIB标准是否有理性的 不仅仅是真实的 排序 按其website http smtlib cs uiowa edu theories shtml 它不是 如果 x 是有理数并且我们有约束 x 2 2 那么我们应该返回 不可满
  • 在 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 实数算术和数据类型理论整合得不太好

    这与我之前问过的问题有关Z3 SMT 2 0 与 Z3 py 实现 https stackoverflow com questions 13826217 z3 smt 2 0 vs z3 py implementation我实现了无穷大正实
  • 尝试在Python中使用Z3找到布尔公式的所有解决方案

    我是 Z3 的新手 正在尝试制作一个求解器 将每个可满足的解决方案返回到布尔公式 从其他 SO 帖子中记下笔记 我已经编写了我希望能起作用的代码 但事实并非如此 问题似乎是 通过添加以前的解决方案 我删除了一些变量 但它们又在后面的解决方案
  • Z3 C API 在运行时更改超时

    是否可以使用 C API 在运行时更改求解器的超时值 为了设置超时 可以执行以下操作 Z3 config cfg Z3 mk config Z3 set param value cfg SOFT TIMEOUT 10000 set time
  • Z3:执行矩阵运算

    我的情况 我正在开展一个项目 需要 证明正确性3D 矩阵变换 http rodrigo silveira com 3d programming transformation matrix tutorial UU65YicWsYZ涉及矩阵运算
  • 能够删除特定约束的增量 SMT 求解器

    是否有增量 SMT 求解器或用于某些增量 SMT 求解器的 API 我可以在其中增量添加约束 在其中我可以通过某个标签 名称唯一地标识每个约束 我想唯一地标识约束的原因是这样我可以稍后通过指定标签 名称来删除它们 需要放弃约束是因为我之前的
  • 如何以跨系统的方式将进程仅绑定到物理核心?

    我在用着每次将线程数加倍的项目 https github com ConsenSys mythril pull 1372 files 您会增加 40 到 60 的开销 由于超线程将性能最多提高了 30 这意味着程序在超线程系统上的运行速度比
  • 使用SMT-LIB使用公式计算模块数量

    我不确定使用 SMT LIB 是否可以做到这一点 如果不可能 是否存在可以做到这一点的替代求解器 考虑方程 a lt 10 and a gt 5 b lt 5 and b gt 0 b lt c lt a with a b and c整数
  • Z3 的简化

    declare datatypes SE BROKEN ON OFF declare const s SE declare const a Int simplify or s ON s OFF s BROKEN simplify and g
  • 如何在Z3中使用四元数进行计算?

    In Z3 中的复数 http research microsoft com en us um people leonardo blog 2013 01 26 complex htmlLeonardo de Moura 能够在 Z3 中引入

随机推荐