如何在 ACSL 中编写“is power of 2”谓词?

2024-03-15

我尝试编写一个 ACSL 谓词来查看整数是否是 2 的幂,如下所示:

/*@
  predicate positive_power_of_2 (integer i) =
    i > 0 &&
    (i == 1 || ((i & 1) == 0 && positive_power_of_2 (i >> 1)));
 */

然而,当我将一些断言行添加到随机函数中时,出现一些超时(即失败)。我不明白为什么?

//@ assert positive_power_of_2 (1);  // Timeout
//@ assert positive_power_of_2 (2);  // Valid
//@ assert positive_power_of_2 (4);  // Valid
//@ assert !positive_power_of_2 (7); // Timeout

作为旁注,对于这种纯粹的逻辑属性,您可以使用lemmas 而不是assert, as in //@ lemma pow2_1: positive_power_of_2(1);。自从一个lemma是一个全局注释,它使您不必仅仅为了保存一个函数而编写一个函数assert.

现在回到问题本身。将按位运算与算术运算(小于比较)混合在一起往往会使自动定理证明者感到困惑。您没有指定使用哪一个,但如果您只使用了一个,您可能想尝试安装其他的(现在,alt-ergo、z3 和 cvc4 的混合往往会提供良好的结果)。也就是说,对 WP 内部简化器 QED 的小型交互式帮助也足够了:通过使用 GUI(请参阅第 2.4 节)工作手册 https://frama-c.com/download/frama-c-wp-manual.pdf),你可以通过展开定义来得出结论positive_power_of_2在每个目标中(据我所知,没有命令行选项可以执行相同的操作)。

基本上,一旦你进入WP ProofsGUI 面板,您必须双击Script您想要进行的证明义务对应的行的列,这将让您进入交互式证明模式,如下截图:

现在,关键是可用策略列表(右侧)是上下文相关的:仅显示与您在证明义务(左侧)中选择的术语相关的策略。有些策略总是相关的,例如Cut,它可以让您证明一个辅助陈述,该陈述可以用作其余证明中的假设,但只有在您的选择中有要展开的定义时,展开定义才有意义。因此你必须点击P_positive_power_of_2让战术出现。之后,只需点击相应的三角形即可让WP展开定义并尝试随后完成证明。

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

如何在 ACSL 中编写“is power of 2”谓词? 的相关文章

  • jQuery.on('click') 在 jQuery.click 之前?

    我有一个外部脚本 我无法修改它 该脚本加载一个 a 按钮 并添加一个 jQuery 单击它 并以 return false 结束 我需要在这次点击时触发我自己的代码 当我加载页面时 a 不存在 所以我需要使用 on click 绑定 活 但
  • PHP 回显性能

    这些命令中哪一个执行效果最佳 最糟糕 为什么 echo A a B b C c echo A a B b C c echo A a B b C c echo A a B b C c 将是最快的 因为这里字符串的所有部分都直接复制到输出流 而
  • 如何从 iOS 11 beta 的 iOS 应用程序打开定位服务?

    if UIDevice currentDevice systemVersion floatValue gt 10 0 NSURL URL NSURL URLWithString App prefs root Privacy path LOC
  • QLineEdit 与 QValidator:无论输入有效性如何,都会对编辑完成做出反应?

    QLineEdit有信号QLineEdit editingFinished当用户完成编辑 例如按 Enter 键 时发出 但是 如果设置了验证器或输入掩码 则editingFinished仅当输入有效时才会发出 但是 无论输入的有效性如何
  • Xcode 14 beta 错误:存储的属性无法用“@available”标记为可能不可用

    当我在 Xcode 14 beta 上运行我的应用程序时 出现此错误 但我不知道如何修复它 存储的属性不能用 available 标记为可能不可用 当我运行 Xcode 13 时 它不会弹出 并且应用程序运行顺利 我在 xcworkspac
  • 确定传递依赖的来源

    我有一个项目 其中使用 sl4j 和 log4j 我最近向我的项目添加了一些新的依赖项 我添加的这些新依赖项之一包括对 logback classic 的传递依赖项 其中包括 sj4j 的另一个绑定 我想摆脱 logback 但我不知道我的
  • 如何在单击“阅读更多”按钮或链接时展开文本?

    我有一个 js 函数 可以在两个文本范围之间切换 一种是类折叠的较小文本 另一种是类展开的全文 这是我的js document ready function expanded hide expanded collapsed click fu
  • 高分表

    我希望在我的 Android 应用程序中添加一个 本地 而不是在线 高分表 并且我想了解解决该问题的最佳方法 我有一个用户列表 现在被保存到文件中并作为 User 对象数组读回 高分需要引用此数据以使用用户的姓名和照片等填充表 对于显示器
  • Google Chart Gannt 避免工具提示

    通过研究 我发现 Gannt Google Chart 上显示的工具提示不可自定义 因此我决定覆盖它 捕获由我的 gannt 矩形触发的悬停事件 如下所示 google visualization events addListener ch
  • 如何触发 IModel.BasicAcks?

    我第一次使用 RabbitMQ 的 NET API 我想出了一个对我来说似乎合理的用例 我想创建发布消息并在消息被确认后执行某些操作的发布者 IModel BasicAcks 事件似乎是了解这一点的好方法 所以 我给出版商写了一封信 pri
  • 识别并计算咒语(每组内的独特事件)

    我正在寻找一种有效的方法来识别时间序列中的咒语 运行 在下图中 前三列是我所拥有的 第四列 spell这就是我想要计算的 我尝试过使用dplyr s lead and lag 但这变得太复杂了 我试过了rle但一无所获 ReprEx df
  • 如何在android中检查3g是否活跃

    我正在尝试检查我的手机中的 3G 是否处于活动状态 之后我必须触发一个 Intent 所以请有人帮助我 提前致谢 我最近编写的应用程序的另一个片段 TelephonyManager telManager telManager Telepho
  • 如何在命令类之外获取命令参数?

    我向doctrine fixtures load 命令添加了自定义选项 现在我想知道如何在自定义装置类中获取此命令选项 class LoadUserData implements FixtureInterface ContainerAwar
  • Matlab 中多个字符串的日期

    我必须从两个字符串生成一个日期 字符串或数字 第一个是日期 第二个是时间 我一定在代码中犯了一些错误 因为结果与源数据的串联不同 DIR4 h datestr strcat DIR1 h DIR2 h dd mm yyyy HH MM SS

随机推荐

  • Django 403 CSRF 令牌丢失或不正确

    我遇到过这个问题 但不幸的是仍然不知道如何解决它 表单呈现完美 我输入信息并收到 CSRF 错误 给出的理由是token missing or incorrect View def eventSell request id c c upda
  • 循环 this.props.children 如何测试它们的类型?

    在自定义 React 组件中的以下代码片段中 React Children map this props children child gt if predicate child do stuff else do other stuff p
  • 简单的网络服务器或网络测试框架

    需要测试一个复杂的 Web 应用程序 该应用程序与基于远程第 3 方 CGI 的 Web 服务进行交互 我计划在虚拟网络服务器中实现一些第三方服务 以便我可以完全控制测试用例 寻找一个简单的 python http web 服务器或框架来模
  • C 结构中的填充量是编译器相关的还是明确定义的?

    是C中的填充量struct在标准或编译器和 或目标体系结构中明确定义 我在标准中找不到答案 它是实现定义的 来自 C99 标准第 6 7 2 1 节 结构体或联合对象的每个非位域成员都按照实现定义的方式对齐 适合其类型的方式 可能还有无名的
  • 使用VBA代码从tr获取所有td

    我有一个 tr 它是一个对象并且有 td 我想获取另一个对象变量 tblTD 中的所有 td 为此我用了Set tblTD tr getelementsbytagname td 但是当我检查 tblTD 的长度时 它显示为 0 有人可以建议
  • C# WPF Webbrowser msHTML - 探索 DOM - 查找元素

    我实际上正在使用 WPF 和 WPF WebBrowser 用 C 开发一个个人项目 我真的需要探索 html DOM 元素 就像我们过去在 javascript 或 php 中所做的那样 在我的主窗口中我有这个变量 private msh
  • 将 2D 箱中分散值的平均值绘制为直方图/十六进制图

    我有 3 维分散数据 x y z 我想将 x 和 y 的箱中 z 的平均值绘制为十六进制图或二维直方图 有没有 matplotlib 函数可以做到这一点 尽管这似乎是一个常见问题 但我只能提出一些非常麻烦的实现 例如 像这样的东西 除了颜色
  • #if canImport(CoreImage) 在 swift 包管理器中不起作用

    我制作使用 CoreImage 的库 库支持 Cocoapods Carthage 和 Swift 包管理器 当我在 Swift 包管理器中构建它时 我收到此错误 Undefined symbols for architecture x86
  • 空 ByteArrayOutputStream / ZipOutputStream 的长度 = 22?

    我有一个关于流大小的小问题 这是我的尝试 ByteArrayOutputStream outStream new ByteArrayOutputStream ZipOutputStream zipStream new ZipOutputSt
  • 从 SQL Server 导出到带有列标题的 Excel?

    我有一个大约有 20 列的查询 我想将其导出到带有列标题的 Excel 文件 我以为这很容易弄清楚 但运气不好 我在网上搜索并发现了一项建议 但最终没有奏效 所以我陷入了困境 工具 gt 选项 选择 查询结果 gt SQL Server g
  • Angular 2.0 和 ng 风格

    我正在构建一个 Angular 2 0 组件 我想动态控制它的样式 使用ng style 快速查看 Angular 2 的文档后 我尝试了以下操作 div class theme preview fontSize div 并看到尺寸实际上打
  • WPF 切角元素

    我正在尝试在 WPF 中创建类似于下图的内容 该控件被设计为我的应用程序中所有内容的基本视图 并将位于带有背景 可能是某种渐变 的 Window 控件内 要求如下 三边圆角 左上 左下 右下 剪掉右上角的选项卡查看角 剪切区域 后面的背景透
  • 将可变上下文传递到回调中

    我正在尝试用 Rust 构建一个简单的 UI 但部分可以在 Lua 中编写脚本 使用 rust lua53 并且在找到一种让 Lua 组件访问 Lua 状态的好方法时遇到问题 这个问题 示例比我想要的要长一点 抱歉 UI 的核心是Widge
  • Direct2D 仅在 C++ Builder 中部分链接

    我有一个 C Builder Rad Studio Berlin 项目设置来使用 Direct2d 画布绘图与 TDirect2DCanvas 配合得很好 这表明 Direct2D 链接正确 一切都渲染得很顺利 但是 我需要使用矩阵 当我尝
  • gitlab-ctl 重新配置:无法确定节点名称

    我确实在 Ubuntu 16 04 4 LTS 上设置了一个新的 GitLab 实例 安装包进展顺利 GitLab 似乎已启动并运行 然后我开始配置实例并设置 SMTP etc gitlab gitlab rb 后来我跑了sudo gitl
  • 从多个 jpg 图像创建 Dicom

    我已经成功地用一张图像构建了 dicom 但我找不到添加更多图像的方法 我认为问题可能出在我的像素阵列中 任何人都可以帮我纠正它吗 Populate required values for file meta information met
  • 如何动态设置谷歌地图自定义缩放级别?

    我正在使用谷歌地图 根据要求 我需要设置取决于我的搜索查询的不同缩放级别 如果国家 地区地图上有多个位置 则地图应聚焦该国家 地区 其他情况是 如果城市中标记了不同的位置 则地图应集中到城市级别 var geoCoder new GClie
  • “#!/bin/env”是什么意思(位于 node.js 脚本的顶部)?

    我发现一些 Node js 项目的顶部有这个app js 如在这个开放轮班计划 https github com openshift openshift mongo node express example blob master serv
  • WinDBG - 查找实际的(非托管)异常

    我试图在托管 非托管混合代码中找到实际的异常 问题是我有一个 Net 类 它捕获所有未处理的异常 然后创建一个转储 因此当我查看转储时 存在混合的托管 非托管代码 并且我无法真正获取实际的非托管异常 更糟糕的是 Net 似乎有自己的例外 所
  • 如何在 ACSL 中编写“is power of 2”谓词?

    我尝试编写一个 ACSL 谓词来查看整数是否是 2 的幂 如下所示 predicate positive power of 2 integer i i gt 0 i 1 i 1 0 positive power of 2 i gt gt 1