有人尝试过用Z3本身来证明Z3吗?

2024-02-09

有没有人尝试证明Z3 http://research.microsoft.com/en-us/um/redmond/projects/z3/与Z3本身?

是否有可能使用 Z3 来证明 Z3 是正确的?

更理论化的是,是否有可能使用 X 本身来证明工具 X 是正确的?


简短的回答是:“不,没有人尝试使用 Z3 本身来证明 Z3”:-)

“我们证明了程序 X 是正确的”这句话非常具有误导性。 主要问题是:正确意味着什么。 就 Z3 而言,如果至少对于不可满足的问题它永远不会返回“sat”,对于可满足的问题则返回“unsat”,那么我们可以说 Z3 是正确的。 这个定义可以通过还包括附加属性来改进,例如: Z3 不应崩溃; Z3 API 中的函数 X 具有属性 Y 等。

在我们就要证明的内容达成一致后,我们必须创建运行时模型、编程语言语义(Z3 中为 C++)等。 然后,使用工具(又名验证器)将实际代码转换为一组公式,我们应该使用定理证明器(例如 Z3)来检查这些公式。 我们需要验证器,因为 Z3 不“理解”C++。 验证 C 编译器 (VCC http://research.microsoft.com/en-us/projects/vcc/)是此类工具的一个示例。 请注意,使用这种方法证明 Z3 是正确的并不能明确保证 Z3 确实正确,因为我们的模型可能不正确,验证器可能不正确,Z3 可能不正确等。

要使用验证器,例如VCC,我们需要用我们想要验证的属性、循环不变量等来注释程序。一些注释用于指定代码片段应该做什么。其他注释用于“帮助/指导”定理证明者。在某些情况下,注释的数量比正在验证的程序还要多。因此,该过程并不是完全自动的。

另一个问题是成本,这个过程会非常昂贵。这比实施 Z3 花费的时间要多得多。 Z3 有 30 万行代码,其中一些代码基于非常微妙的算法和实现技巧。 另一个问题是维护,我们定期添加新功能并提高性能。这些修改会影响证明。

尽管成本可能非常高,但 VCC 已被用于验证重要的代码片段,例如 Microsoft Hyper-V 虚拟机管理程序。

理论上,任何编程语言 X 的验证器如果也是用 X 语言实现的,都可以用来证明自己。 这Spec# http://research.microsoft.com/en-us/projects/specsharp/verifier 就是此类工具的一个例子。 Spec#是在Spec#中实现的,并且Spec#的几个部分是使用Spec#进行验证的。 请注意,Spec# 使用 Z3 并假设它是正确的。当然,这是一个很大的假设。

您可以在论文中找到有关这些问题和 Z3 应用程序的更多信息:http://research.microsoft.com/en-us/um/people/leonardo/ijcar10.pdf http://research.microsoft.com/en-us/um/people/leonardo/ijcar10.pdf

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

有人尝试过用Z3本身来证明Z3吗? 的相关文章

  • z3在处理非线性实数运算时能否始终给出结果

    我有一个问题需要解决一组非线性多项式约束 在处理非线性实数算术时 z3 能否始终给出结果 sat 或 unsat 结果也还好吗 是的 假设 1 资源可用 并且 2 您仅使用实际约束 以便nlsat使用了策略 正如我上次检查的那样 它没有与其
  • 显示 (head .unit ) = Agda 中的 head

    我试图证明 Agda 中的一个简单引理 我认为这是正确的 如果向量有两个以上元素 则取其head继采取init与取其相同head立即地 我将其表述如下 lem headInit l xs Vec suc suc l gt head init
  • 有没有办法获取Z3中的默认上下文?

    我正在使用 z3py API 4 3 0 我可以轻松翻译一个表达expr从默认上下文到新上下文target ctx using expr translate target ctx 但是我如何从给定的上下文中进行翻译ctx进入默认的 Z3 上
  • Z3 对指数的支持

    我是 Z3 的新手 我试图了解它是如何工作的 以及它能做什么和不能做什么 我知道Z3至少有some通过幂 运算符支持指数 请参阅Z3py 使用 pow 函数返回未知方程 https stackoverflow com questions 3
  • 使用函数在 z3 中创建列表

    我试图将这段伪代码转换为 SMT LIB 语言 但我卡住了 List function my fun int x list nil for i in 1 to x if some condition on i list concat i r
  • 使用 prolog 显示布尔逻辑失败的原因

    假设我有以下布尔逻辑 Z A or B and A or C 是否可以使用序言 可能与某些库一起 来找出 Z 为假的原因并以以下格式返回答案 Z 为假 因为 A 或 b 和 c 为假 如果我替代some已知值 或全部 例如 c true 它
  • 正确 Dafny 方法的 Z3 模型

    对于正确的方法 Z3能否找到该方法验证条件的模型 我原以为不会 但这里有一个例子 该方法是正确的 但验证发现了一个模型 这是 Dafny 1 9 7 的情况 Malte 所说的是正确的 我发现它也得到了很好的解释 Dafny 是健全的 因为
  • 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 中 看上面的 可能
  • z3 中使用哪些技术来处理非线性整数实数问题?

    以下是 a 的 z3 统计数据problem http www ccs neu edu home jaideep example smt2在非线性整数实数片段中 我的许多问题与此类似 add rows 11062574 added eqs
  • 如何从 Z3 中的 Seq 类型中提取元素作为基本类型?

    如何将序列中的元素提取到基本类型 以便以下内容正常工作 define sort ISeq Seq Int define const x ISeq seq unit 5 define const y ISeq seq unit 6 asser
  • 如何在 MMT 中粘合/识别两个结构中的内含物?

    我想形式化形式语言及其语义MMT https uniformal github io 并定义一个一般概念语义等价两种语义 one句法 准确地说 对后者进行编码实际上是一种识别 粘合 我不知道如何在 MMT 中做到这一点 接下来让我详细说明我
  • 如何学习阿格达

    我正在努力学习agda 但是 我遇到了一个问题 我在 agda wiki 上找到的所有教程对我来说都太复杂了 并且涵盖了编程的不同方面 在并行阅读了 3 个关于 agda 的教程后 我能够编写简单的证明 但我仍然没有足够的知识来使用它来实现
  • Z3 求解器中 MAxSMT 和用户定义成本函数的组合

    我正在使用 Z3 来优化带有一些软约束 带有加权 MaxSMT 的成本函数 我很好奇 MaxSMT 和用户定义的成本函数如何交互 求解器是否最小化 MaxSMT 成本和目标函数两者 是否有优先级机制 我找不到这方面的任何文档 如果我遗漏了什
  • Z3 SMT 求解器中的常数相等

    我正在使用 Microsoft 的 Z3 SMT 求解器 并且我正在尝试定义自定义类型的常量 默认情况下 这些常量似乎并不不平等 假设您有以下程序 declare sort S 0 declare const x S declare con
  • 使用 SML 和 HOL 推理规则从第一原理证明定理

    我正在尝试证明这个定理 p q lt gt q p thm将 SML 与 HOL 推理规则结合使用 这是 SML 代码 val thm1 ASSUME p bool q bool val thm2 ASSUME p bool val thm
  • Z3:执行矩阵运算

    我的情况 我正在开展一个项目 需要 证明正确性3D 矩阵变换 http rodrigo silveira com 3d programming transformation matrix tutorial UU65YicWsYZ涉及矩阵运算
  • Z3统计中内存使用量的单位是什么?

    z3 统计中测量内存使用情况的单位是什么 是MB还是KB 记忆到底意味着什么 是执行期间的最大内存使用量还是所有分配的总和 它是执行期间最大堆大小的近似值 并通过 cmd context cpp 中的以下函数将其添加到统计对象中 void
  • 如何以跨系统的方式将进程仅绑定到物理核心?

    我在用着每次将线程数加倍的项目 https github com ConsenSys mythril pull 1372 files 您会增加 40 到 60 的开销 由于超线程将性能最多提高了 30 这意味着程序在超线程系统上的运行速度比
  • Z3:FP 和 BitVector 之间的转换?

    SMTLIB2 中是否有任何方法可以在 BitVector 和 FP 之间进行转换 例如 int2bv 和 bv2int 函数 为了澄清 我正在寻找位的原始表示 而不是例如 BitVec 形式的舍入整数 准确地说 SMTLIB中的浮点运算还

随机推荐

  • jquery命名空间:如何将默认选项从一个方法传递到子序列方法?

    我怎样才能通过默认选项从一种方法到子序列方法 例如 我有一些默认设置 in the init方法 我想将这些设置用于其他方法 例如show function var methods init function options var def
  • 如何修复 413 HTTP 请求实体太大

    我有一个项目 我有一个用 angularjs 编写的简单客户端 服务器在 scala 中 在我的客户端中 我有一个简单的上传按钮 您可以单击它并选择本地文件 csv 当我上传某个 csv 时这有点大 比如我得到的 6000 行 413请求实
  • .Net Core Linux 容器无法使用 SQL 身份验证连接到 SQL Server

    在 Linux Docker 容器中运行的 Net Core 2 2 应用程序无法使用 SQL 身份验证向不同计算机上的 SQL Server 进行身份验证 错误信息是 无法使用 Kerberos 进行身份验证 确保已使用 kinit 在客
  • 在 Clojure 中有条件地初始化映射元素

    我正在寻找最好的方法来有条件地避免在初始化 定义时将元素添加到地图中 在这种情况下 如果键的值为 nil 我想避免将元素添加到映射中 defn create record data let res username data usernam
  • Firebase Analytics 架构 x86_64 的未定义符号:“_OBJC_CLASS_$_FIRAnalytics”

    通过 cocoapods 将 Firebase 更新到 7 6 0 后 我收到以下链接错误 但仅在针对模拟器时出现 当针对设备时 一切都构建得很好 OBJC CLASS FIRAnalytics referenced from objc c
  • 有些浏览器会对 cookie 进行编码吗?

    这是一种后续行动为什么我的包含 JSON 的 cookie 偶尔会出现格式错误 https stackoverflow com questions 2329395 why are my cookies containing json occ
  • java.text.ParseException:无法解析的日期:“20:01:00.000Z”

    我得到的时间字段值采用 10 30 00 000Z 格式 我想将其转换为 10 30 AM PM 格式 我正在尝试使用 SimpleDateFormat 并解析它 但我收到了 java text ParseException 有人可以帮我解
  • asp.net MVC - 如何制作主页面/详细信息页面

    我希望创建一个主 详细信息页面 我认为它以两种方式之一工作 单击网格中的一行会再次调用同一页面 并添加详细信息面板 单击一行会对控制器操作进行 javascript JSON 调用 该操作返回详细信息并填充面板 我希望突出显示所选行 所选行
  • 可以将输入字符串转换为Python中的可调用函数对象吗? [复制]

    这个问题在这里已经有答案了 我希望能够获取一个描述 Python 函数的字符串 并将其转换为一个我可以调用的函数对象 例如 myString def add5 x return x 5 myFunc myString toFunction
  • 使用 Python 的 Dataflow/Beam 示例

    我正在尝试获取以下项目的样本PCollection在 Dataflow Beam 上使用 Python SDK 虽然没有记录 Sample FixedSizeGlobally n 存在 测试时 它seems返回一个PCollection包含
  • 未找到类 Android 支持设计小部件 NavigationView

    美好的一天 你能帮我一个忙吗 在模拟器上编译 运行代码时出现此错误 这是我以前制作的示例教程 我使用了 min Target API 15 并编译了最新的 gradle com android support design 23 0 0 h
  • 当初始状态和最终状态相同时,不会触发transitionend

    在下面的例子中我正在做background color使用 CSS 进行过渡并尝试处理transitionend两个 div 的事件 很遗憾 transitionend没有被解雇div2因为初始和最终背景颜色相同 var div1 div1
  • ASP.NET WebAPI 默认登陆页面

    我已经使用 ASP NET WebApi v2 创建了一个 RESTful Web 服务 并且正在使用虚张声势 https github com domaindrivendev Swashbuckle为 API 文档生成 swagger U
  • 使用 C# 反射从字典生成动态对象

    我一直在研究 C 中的反射 想知道我是否使用带有键值的字典可以创建一个带有变量的对象 该变量包含字典中每个键的名称及其值 该字典的键值 我有一个相反的方法 它从字典中提取一个对象 该字典包含键和类属性及其值 即属性的值 我想知道如果可能的话
  • Julia 中加载/导入的包列表

    如何获取 Julia 会话导入 使用的包的列表 Pkg status 列出所有已安装的软件包 我对通过以下方式导入 加载的内容感兴趣using or import 看起来whos 包含相关信息 名称以及是否是模块 可以输出whos 被捕获在
  • jQuery every 循环重命名 ID 的每个实例

    我有一个页面正在表中创建动态创建的行 其输入的 ID 为 fixedRate 我正在尝试重命名fixedRate id 的每个实例 这仅适用于我当前代码的 id 的第一个实例 这是代码 var amountRows billTasks gt
  • 析构函数永远不会被调用[重复]

    这个问题在这里已经有答案了 我有课Class这创造了一个Thread在它的构造函数中 该线程运行一个while true 循环正在读取非关键数据NetStream 该线程将被析构函数中止 Class thread Abort thread
  • 进程是否在远程计算机上运行?

    我有三台远程连接的远程电脑 我正在尝试编写一个简单的 Windows 应用程序 该应用程序将在单个窗口中显示特定进程是否在任意一台机器上运行 例如 Server1 Chrome 未运行 Server2 Chrome 正在运行 Server3
  • 为 Android 创建 PDU

    我目前正在编写和应用程序 即发送 接收短信 出于单元测试的目的 我需要以编程方式创建 PDU 解码非常简单 Bundle bundle intent getExtras if bundle null Get all messages con
  • 有人尝试过用Z3本身来证明Z3吗?

    有没有人尝试证明Z3 http research microsoft com en us um redmond projects z3 与Z3本身 是否有可能使用 Z3 来证明 Z3 是正确的 更理论化的是 是否有可能使用 X 本身来证明工