更改对象上的修改子句错误

2023-12-04

我怎样才能(用达夫尼语)陈述“ensures“保证方法返回的对象将是“新的”,即不会与其他地方使用的对象相同(尚未)?

以下代码显示了一个最小的示例:

method newArray(a:array<int>) returns (b:array<int>)
requires a != null
ensures b != null
ensures a != b
ensures b.Length == a.Length+1
{
  b := new int[a.Length+1];
}

class Testing {
  var test : array<int>;

  method doesnotwork()
  requires this.test!=null
  requires this.test.Length > 10;
  modifies this
  {
    this.test := newArray(this.test); //change array a with b
    this.test[3] := 9;  //error modifies clause
  }

  method doeswork()
  requires this.test!=null
  requires this.test.Length > 10;
  modifies this
  {
    this.test := new int[this.test.Length+1];
    this.test[3] := 9;
  }


}

The "doeswork" 函数正确编译(并验证),但另一个函数则不然,因为 Dafny 编译器无法知道 " 返回的对象newArray" 功能是新的,即不需要在 " 的 "require" 语句中列为可修改的不起作用“函数,以便该函数满足它仅修改的要求”this“。 在里面 ”doeswork“函数,我只是插入了”的定义newArray” 函数,然后就可以了。

您可以在下面找到上面的示例https://rise4fun.com/Dafny/hHWwr,也可以在线运行。

Thanks!


你可以说ensures fresh(b) on newArray.

fresh正是您所描述的意思:该对象与调用之前分配的任何对象都不同newArray.

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

更改对象上的修改子句错误 的相关文章

随机推荐

  • 现实世界的 LR(k > 1) 语法?

    制作 k gt 1 的人工 LR k 语法很容易 Input A1 B x Input A2 B y introduce reduce reduce conflict for terminal a A1 a A2 a B b b b b t
  • Symfony2:即使存在对象,也调用非对象上的成员函数 getId() ?

    我不断收到此错误 em this gt getDoctrine gt getEntityManager movie em gt getRepository MyMyBundle Movie gt findMovieByName movien
  • 我想让面板具有粗边框。我可以以某种方式设置这个吗?

    我想让面板具有粗边框 我可以以某种方式设置这个吗 PS 我用的是C 对比 2008 年 Jim 我制作了一个用户控件 并给出了一个 ParentControlDesigner 正如我在评论中指出的那样 这并不是您所要求的完美解决方案 但这应
  • 按给定位置替换文件中的字符串

    我有一个以 ab 模式打开的文件 我需要做的是将文件中的一些字节替换为另一个字符串的字节 这样 FILE thisissomethingasperfectlygood string 01234 因此 例如 我寻找位置 4 0 并且我想在文件
  • ASP.Net 母版页和文件路径问题

    我正在尝试在我的母版页中添加对 jQuery 的脚本引用 以便它适用于任何页面 目前看起来像这样 问题是路径始终相对于执行的 aspx 页面 因此仅当 jquery js 文件位于同一文件夹中时才有效 为了使其工作 我必须将该行更改为 这显
  • 类名实例而不是数据 - Dart/Flutter

    我得到的是 DeviceClass 的实例 而不是实际的数据字段 这是我的数据模型 import package meta meta dart import dart convert Device deviceFromJson String
  • 在 NumPy 中使用频率数组检索数组元素

    我有一个数字数组 a 我有第二个数组 b 指定我想要检索相应元素的次数a 如何才能实现这一目标 在这种情况下 输出的顺序并不重要 import numpy as np a np arange 5 b np array 1 0 3 2 0 d
  • Android 谷歌地图 java.lang.NoClassDefFoundError: 解析失败: Lorg/apache/http/ProtocolVersion

    我正在使用 Google 地图 Android SDK 11 6 2 也尝试过 15 0 1 但在地图显示之前出现以下崩溃 已检查清单中的API密钥 它是可用的 但仍然出现此问题 我的 targetSDk 版本为 28 是否会导致此问题 j
  • 如何获取表或视图中的列列表?

    有时 我有兴趣获取 SQL Server 2008 R2 数据库中的一个表或视图中的列列表 例如 如果您在不使用昂贵的现成产品的情况下构建数据库文档 那么它很有用 获取此信息的简单方法是什么 另一种方法是查询 INFORMATION SCH
  • 在 Unity 中打电话?

    我在我的 C 脚本中使用了 Application OpenURL tel 79011111115 出现拨号器 但未拨打电话 如果是 Java 我可以说它的工作原理如下 Intent call new Intent Intent ACTIO
  • 如果对象返回为空字符串而不是空结构,如何解组 json 对象

    我收到一些 JSON 数据 但如果对象为空 它不会返回空结构 而是返回空 字符串代替 并且在解组时 它返回一个错误 所以而不是数据 key is key 即使使用 omitempty 字段也不起作用 例子 https play golang
  • 将数据从 PostgreSQL 传输到 MySQL

    您好 有什么方法可以将表布局和数据从 Postgres 数据库自动传输到 MySQL 吗 我必须将架构和数据迁移到 MYSQL 最简单的可能是使用 Postgres 将数据库 架构和数据 导出为 SQLpg dump效用 那么import将
  • 实体框架 4:多对多关系 IQueryable 而不是 ICollection

    大家 早安 我试图首先解决我在 EF 代码中遇到的问题 我的架构如下 public class Article IUrlNode Key public Guid ArticleID get set public string Title g
  • 为什么arguments.callee.caller.name未定义?

    为什么这不提醒 http 127 0 0 1 sendRequest 可在http jsfiddle net Gq8Wd 52 var foo sendRequest function alert bar getUrl var bar ge
  • docker: MISCONF Redis配置为保存RDB快照

    与此类似的问题还有很多 例如 Redis配置为保存RDB快照 但目前无法持久保存在磁盘上 Ubuntu Server MISCONF Redis 配置为保存 RDB 快照 但目前无法保留在磁盘上 可能修改数据集的命令被禁用 但这些都不能解决
  • 具有不同构造函数参数的装饰器

    我想使用温莎城堡创建一个记录整数的类 但我想用其他类来装饰它几次 如果涉及的所有具体实体都具有可以解决的依赖关系 我可以看到这是如何工作的 但这里的情况并非如此 考虑这段代码 public interface IRecorder void
  • 通过用麦克风录制播放声音来测量扬声器音量

    我想通过播放声音并同时在本地麦克风上收听来测量系统的扬声器音量 这是针对特定应用的 准确记录的声音并不重要 重要的是区分播放声音之前和播放过程中记录的麦克风音量 这个想法是在扬声器关闭或声音太低时警告用户 如何在播放声音时录制声音并确定音量
  • jQuery Zoom 在颜色框内

    是否可以在 colorbox 中使用 Jack Moore 的 jQuery Zoom 插件 document ready function a photo zoom url photo big jpg 我很确定你可以这样做 a color
  • 我如何在 Haskell 中使用lens来复制Python的枚举?

    蟒蛇的枚举在列表上可以写成zip 0 我查看了 Control Lens Traversal 和 Control Lens Indexed 但我无法弄清楚如何使用镜头将其推广到任何合理的容器 我犹豫是否要说 可遍历 我正在猜测itraver
  • 更改对象上的修改子句错误

    我怎样才能 用达夫尼语 陈述 ensures 保证方法返回的对象将是 新的 即不会与其他地方使用的对象相同 尚未 以下代码显示了一个最小的示例 method newArray a array