dafny - 达芙妮。另一种调用情况可能违反上下文的修改子句
问题描述
我在这里和维基上阅读了很多关于此的问题,但我无法解决这个“调用可能违反上下文的修改子句”的情况。你可以帮帮我吗?我正在尝试将问题的实例从主方法发送到“求解器”,当我调用该solve()
方法时,我收到了这个错误,我不明白为什么。https://rise4fun.com/Dafny/53q6
class Stack {
var x : array<int>;
constructor()
ensures fresh(x);
{
x := new int[10];
}
}
class Formula {
var stack : Stack;
constructor()
ensures fresh(stack);
ensures fresh(stack.x);
{
stack := new Stack();
}
}
class Solver {
var f : Formula;
constructor(f' : Formula)
{
this.f := f';
}
method solve()
modifies f.stack;
ensures old(f.stack.x) == f.stack.x;
{}
}
method Main() {
var f := new Formula();
var a := new Solver(f);
assert fresh(f);
assert fresh(f.stack);
assert fresh(f.stack.x);
assert fresh(a);
a.solve();
}
解决方案
您缺少后置条件
ensures f == f'
在类的构造函数上Solver
。
(由于构造函数是方法,Dafny 在推理其他方法时不会“查看内部”它们的主体,因此您需要这个后置条件来暴露主体。)
推荐阅读
- javascript - 为什么这个函数没有返回数据。它在打印出来时只显示未定义
- javascript - Discord 机器人没有响应 Node.js V16.5
- python-3.x - Django ModelForm 中的 clean() 方法以避免重复条目在更新数据时创建另一个实例。甚至不保存新实例
- python - 使用 pandas 系列为 df 定义一个函数
- javascript - 根据 if 和 else 条件在 HTML 特定的 div 文件中调用 JS 变量
- python - 使用 face_recognition 和 cv2 进行人脸识别:空编码错误 Python
- google-api - Google Shopping Content API:创建网站抓取供稿
- javascript - 等待/异步火力与本机反应
- android - 为什么在 SDK 30 及之后,运行 holder.lockCanvas 和 holder.unlockCanvasAndPost 的后台线程仍然会锁定 UI 线程?
- python - 如何将字符串映射到 int(类号)作为 tf.data.Dataset .map() 的一部分以在 Tensorflow 中进行预处理?