SPARK 整数溢出检查

2024-01-08

我有以下程序:

procedure Main with SPARK_Mode is
   F : array (0 .. 10) of Integer := (0, 1, others => 0);
begin
   for I in 2 .. F'Last loop
      F (I) := F (I - 1) + F (I - 2);
   end loop;
end Main;

如果我跑gnatprove,我得到以下结果,指向+ sign:

中:溢出检查可能会失败

这是否意味着F (I - 1)可以等于Integer'Last,并且添加任何内容都会溢出?如果是这样,那么从程序流程中是否还不清楚这是不可能的?或者我需要在合同中注明这一点吗?如果不是,那么这意味着什么?


一个反例表明确实gnatprove在这种情况下,担心的边缘Integer:

中:溢出检查可能会失败(例如,当F = (1 => -1, others => -2147483648) and I = 2)


考虑在代码中添加循环不变式。以下是《使用 Spark 构建高完整性应用程序》一书中的示例。

procedure Copy_Into(Buffer : out Buffer_Type;
                    Source : in String) is
   Characters_To_Copy : Buffer.Count_Type := Maximum_Buffer_Size;
begin
   Buffer := (Others => ' '); -- Initialize to all blanks
   if Source'Length < Characters_To_Copy then
      Characters_To_Copy := Source'Length;
   end if;
   for Index in Buffer.Count_Type range 1..Characters_To_Copy loop
      pragma Loop_Invariant
        (Characters_To_Copy <= Source'Length and
         Characters_To_Copy = Characters_To_Copy'Loop_Entry);
      Buffer (Index) := Source(Source'First + (Index - 1));
   end loop;
end Copy_Into;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPARK 整数溢出检查 的相关文章

  • Ada 中的派生类型和子类型

    有什么区别 首先 术语 它是 Ada 不是 ADA 它是以 Ada Lovelace 命名的 它不是一个缩写词 子类型与其基类型兼容 因此您可以将基类型的操作数与基类型的操作数混合 例如 subtype Week Days is Integ
  • 有谁知道协议缓冲区的 Ada 插件吗?

    我正在寻找用于协议缓冲区的 Ada 插件 看起来除了 Ada 之外 几乎所有语言插件都可用或正在开发中 嗯 我唯一发现的是这篇论文 不幸的是 我没有找到任何翻译工具的源代码 即你所说的plugin 我唯一能告诉的是该工具是用 C 开发的 U
  • 访问类型声明对释放的影响

    在这两种情况下 在声明块之后 当然是在过程结束之前 是否以相同的方式释放内存 procedure allocation is type T Integer Access is access Integer begin declare P T
  • Ada 与 Netbeans

    我下载了 Netbeans 插件 用于使用 Ada 进行编程 但是 我不知道如何将Eclipse链接到Ada平台库 什么应该链接到 IDE lib 等 bin 我不知道该怎么办 安装后Ada 插件模块 http wiki netbeans
  • 是否可以声明具有无限上限的 Ada 范围?

    我想在 Ada 中声明记录类型的速度范围 下面的方法行不通 但是有没有办法让它工作呢 Speed in knots range 0 to unlimited Speed float Range 0 0 unlimited 我只想要这个数字的
  • Ada - 提出可访问性检查

    我从Github下载了这个程序 https github com raph amiard ada synth lib https github com raph amiard ada synth lib 我尝试了第一个例子 但遇到了一个例外
  • 将从 C 例程分配的数组传递给 Ada

    将结构 记录数组从 Ada 传递到 C 例程是一回事 在本例中 内存管理是在 Ada 中完成的 但是在与第三方库接口时经常会出现这样的问题 内存管理是在C部分完成的 例如 对于 C 结构 typedef struct MYREC int n
  • 如何从 Ada 源构建可从 C++ 代码调用的静态库?

    我需要使用一堆用 Ada 编写的代码构建一个静态库 可以从用 C C 编写的代码中调用这些代码 我通过互联网搜索并了解了一些知识gnatmake gnatbind and gnatlink 但仍然无法正确完成工作 另外 我读到有些工具依赖于
  • 为什么字符串需要用初始值初始化?

    我有一根绳子lx String我想稍后在代码中设置该值 但出现错误unconstrained subtype not allowed need initialization provide initial value or explicit
  • 在 Ada 中实现具有访问类型的抽象函数

    我有一个名为 Statements 的包 其中包含一个名为 Statement 的抽象类型和一个名为execute 的抽象函数 在另一个包中 我有一个CompoundStatement 类型 它是一个Statement 类型 它实现了exe
  • “在 SPARK Ada 中接受挑战”- 后置条件下的总和鬼函数有意外行为

    我正在 SPARK Ada 中编写一个软件 它需要后置条件来验证函数返回值是否等于数组的求和值 在证明函数所在的文件后 我不断收到一个错误 该错误并没有完全加起来 没有双关语的意图 我将发布代码的屏幕截图以便更好地查看 大小为 10 的数组
  • Ada:操作员不直接可见

    我正在使用 GNAT GPS studio IDE 来对 Ada 进行一些训练 我遇到了包可见性问题 首先 我在名为 DScale ads 的文件中指定一个包 其中包含以下类型 package DScale is type DMajor i
  • Ada.Containers.Functional_Maps 在 Ada2012 中可用吗?

    有关的信息Ada Containers Functional Maps https docs adacore com gnat rm docs html gnat rm gnat rm the gnat library html ada c
  • 如何将 Ada.Real_TIme.Time 转换为字符串?

    我想写一个Ada Real Time Time http www adaic com standards 05rm html RM D 8 html在一个文件中 我怎样才能做到这一点 Thanks 您可以使用Ada Real Time Sp
  • Ada T'Class 的基础知识

    虽然有点不好意思问这个问题 但我知道这是最好的 我已经使用 Ada 编程很多年了 并且几乎可以流利地理解该语言的每个部分 然而 我似乎始终无法完全理解 T Class 借用别人的话 有人可以 像我五岁一样解释一下吗 编辑 我买它只是为了拥有
  • 使用 GtkAda 发出信号

    我担心的是我创建了一个回调函数 它应该显示Gtk Entry当我们点击Gtk Button但当我点击按钮时什么也没有发生 我不明白 File ads Package Test is Type T Test is record Contene
  • Mac OS 上的 Ada 编译器 GNAT

    我正在尝试使用 mac 上的终端编译 ada 但总是收到此错误 错误 x ada 中的 ada 值无效 有人知道如何解决这个问题吗 你可能没有安装Ada编译器 OSX自带的gcc不支持Ada 目前 有两种适用于 OSX 且支持 Ada 的免
  • 如何在 Ada 中直接访问内存地址?

    所以我是 Ada 的新手 我正在尝试在其中编写内核 但我似乎找不到任何关于如何正确执行此操作的好信息 在 C 语言中 我会这样写 unsigned char videoram char 0xB8000 videoram 0 65 直接访问视
  • ‘access’参数模式有什么用处?

    Ada 中有三种传递参数的 正常 模式 in out and in out 但还有第四种模式 access 有什么需要它们的吗 即 否则不可能实现的事情 现在 我确实知道 GNAT JVM Ada 编译器在导入的 库 规范中大量使用了它们
  • 在 Ada 中定义通用标量类型包

    我想通过制作一个用于操作多项式的 Ada 包来测试编写 Ada 包的水 可以为多种代数结构定义多项式 因此为了反映这一点 我想使该包通用 以便它可以与浮点数 整数或其他数字子类型一起使用 我现在想说 我对 Ada 的类型系统如何工作或者它的

随机推荐

  • 如何从反应应用程序中的公共文件夹导入文件?

    我在 public 文件夹中有一个 javascript 文件 我想将该文件导入到文件夹 src components 中的组件 projectFolder publicFolder index html recorder js srcFo
  • eclipse 从 root 显示 README

    以下项目结构并不罕见 项目A 目录 项目B 目录 ProjectX 目录 变更日志 文件 许可证 文件 自述文件 文件 这种结构 README 位于根目录中 得到了不同在线 Git 解决方案 如 github com bitbucket o
  • MDX - NON EMPTY 函数更快?

    我当时的假设是NON EMPTY必须尽可能避免使用该子句 因此 当我意外地发现它实际上使查询速度更快时 我感到震惊 示例如下 select Measures Count Of Requests on 0 Client Client Numb
  • Laravel - 与软删除数据的隐式路由模型绑定

    我有一个小问题 有两种用户角色 一种是普通成员 一种是管理员 成员可以删除博客 并且在删除 软删除 博客后他们将无法看到该博客 而管理员仍然可以看到该博客 即使它是软删除的 示例代码 Route file Route get blog bl
  • AngularJS 指令链接函数未被调用

    我正在尝试将 Angular http auth 库与引导模式窗口一起使用 模态框工作正常 但我在指令方面遇到问题 这是一个 jsfiddle 链接 http jsfiddle net jCUSh 85 http jsfiddle net
  • Android - 从Webview调用Java

    我想从Webview调用Java I have JavaScriptInterface below class JavaScriptInterface private Activity activity public JavaScriptI
  • Rails 4.0.1 中的新记录“没有将符号显式转换为字符串”(仅限)

    在我升级 Rails 4 后 尝试为我的任何 ActiveRecord 类创建新记录会给出 No explicit conversion of Symbol into String 例如 这是我的 links links params 方法
  • 在 FLASK 中运行 pypupeteer 会出现 ValueError: signal only Works in main thread

    我正在尝试将 pyppeteer 集成到 Flask 应用程序中 我有一个运行 pyppeteer 并截取页面屏幕截图的 python 脚本 如果我单独运行该脚本 这是工作文件 The PROBLEM当我在 FLASK 应用程序中运行它时
  • c++ - 不命名类型

    我有一个问题 当我尝试构建以下代码时 我得到 keywords does not name a type whitespace does not name a type 第 18 19 行和第 22 24 行 有人可以帮忙吗 这是代码 cp
  • 我如何解释这个输入?

    我目前使用 ANTLR 在 Java 中实现了一种可用的 简单的语言 我想做的是将其嵌入纯文本中 与 PHP 类似 例如 Lorem ipsum dolor sit amet Phasellus volutpat dignissim sap
  • Woocommerce/Wordpress - 将用户登录重定向到主页

    我已经搜索了这个问题的答案 使用了插件 但仍然没有任何效果 我希望我的网站的用户在登录 注册后被重定向到主页 目前 用户登录并被重定向到我的帐户页面 Woocommerce 提供了此代码 但它对我不起作用 goes in theme fun
  • 如何减少/消除 Angular 应用程序中的内存泄漏

    我正在优化我的大Angular App 当我发现一个Google DevTools非常好发现问题 由于我刚刚开始学习DevTools 我对内存泄漏很困惑 当我在应用程序中的不同页面之间来回移动时 配置文件堆快照大小一次又一次地增加 因此我认
  • 如何在 Java 中为 Swing 组件设置字体粗细

    我想设置不同字体粗细我的 JFrame 对话框上的组件 我该怎么做呢 在下面的Java语句中 setFont new Font Dialog Font BOLD 12 当我使用 Font BOLD 时 它太粗体 当我使用 Font Plai
  • Spark 设置为从最早的偏移量读取 - 在尝试使用 Kafka 上不再可用的偏移量时抛出错误

    我目前正在 Dataproc 上运行 Spark 作业 在尝试重新加入组并从 kafka 主题读取数据时遇到错误 我做了一些挖掘 但不确定问题是什么 我有auto offset reset set to earliest所以它应该从最早可用
  • 将 JSON 对象的一部分存储在 pandas df 中[重复]

    这个问题在这里已经有答案了 我正在尝试将以下内容存储到 pandas 数据框中 page 1 results poster path null adult false overview Go behind the scenes during
  • 使用 koa.js 显示静态 html 文件

    我想要做的是在调用索引路由 即 localhost 3000 时提供 index html 文件 我使用 koa router 进行路由 所以我的路线如下所示 app all function next Send the file here
  • 我在 Matter.js 中自己的模型

    我正在使用 Matter js 编写一个简单的游戏 我无法弄清楚如何最好地将我的模型挂接到 Matter js 中 我的游戏以细菌为特色 我想上一堂课Bacterium这样我就可以管理这些人了 在我当前的实现中 此类创建并存储自己的Matt
  • char 160 在我的源代码中意味着什么?

    我正在使用以下格式字符串 将数字格式化为字符串 在某些时候我需要将这些数字字符串 1 234 567 转回类似 1234567 的内容 我正在尝试删除空字符但发现 value value Replace 由于某种原因 该字符串仍然是 1 2
  • 通过智能感知支持从文件动态生成枚举

    我听说了很多关于 Roslyn 的事情 我只是想是否可以从 xml 文件动态生成代码 这样对于开发人员来说它是透明的 他可以使用 IntelliSense 枚举代码 就像代码是在项目中编写的一样 我正在编写一个框架 其中通过配置文件完成了很
  • SPARK 整数溢出检查

    我有以下程序 procedure Main with SPARK Mode is F array 0 10 of Integer 0 1 others gt 0 begin for I in 2 F Last loop F I F I 1