方法 Method
# 方法 methods
方法的声明如下:
method M(a: A, b: B, c: C) r eturns (x: X, y: Y, z: Y) //输入输出参数
requires Pre //前置条件
modifies Frame //框架
ensures Post //后置条件
decreases TerminationMetric //变体函数
{
method M(a: A, b: B, c: C) r eturns (x: X, y: Y, z: Y) //输入输出参数
requires Pre //前置条件
modifies Frame //框架
ensures Post //后置条件
decreases TerminationMetric //变体函数
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
其中:
a
,b
,c
: 输入参数x
,y
,z
: 输出参数Pre
: 表示方法 前提条件 的 布尔表达式Frame
: 表示类对象的集合,可以被方法更新Post
: 是方法 后置条件 的 布尔表达式TerminationMetric
: 是方法的变体函数
# 框架Frame
框架Frame 是单个或多个对象组成的表达式的集合。(见下面例子)
框架Frame
是由类内对象和类外方法内对象两部分组成。(反正就是一堆类对象的集合)
例如,如果 c
和 d
是类C
的对象,那么以下每行意思是一样的。
modifies {c, d}
modifies {c} + {d}
modifies c, {d}
modifies c, d
如果方法内啥都没写,那么前置和后置条件默认为真,框架默认为空集。
# 变体函数 variant function
变体函数是一个表达式组成的列表,表示由给定表达式组成的字典元组,后跟隐含的top
元素。
如果省略没写的话,Dafny 将猜测该方法的变体函数,通常是以该方法的参数列表开头的字典元组。
Dafny IDE 将在工具提示中显示猜测。
编辑 (opens new window)
上次更新: 2022/03/26, 14:38:56