Dafny Dafny
首页
  • 入门介绍

    • 什么是dafny?
  • 用起来吧!

    • 安装
    • 快速上手
    • 可能遇到的问题?
  • Dafny快速入门

    • 基础学习 Basic
    • 方法 Method
    • 关键字 Keyword
    • 函数 Function
    • 类 Class
    • 泛型 Generics
    • 声明 Statement
    • 表达式 Expression
  • Dafny简单例子

    • 寻找最大最小数和
    • 斐波那契数列
    • 线性查询
    • 引理-计算序列非负元素个数
    • 集合
    • 终止
  • Dafny指导

    • 介绍
    • 方法 Methods
    • 前置/后置条件 Pre/Postconditions
    • 断言 Assertions
    • 函数 Functions
    • 循环不变体 Loop Invariants
    • 数组 Arrays
    • 量词(函数) Quantifiers
    • 谓词(函数) Predicates
    • 框架 Framing
    • 二分搜索 Binary Search
    • 总结
  • Dafny进阶语法

    • 引理和归纳 Lemmas and Induction
    • 模块 Modules
    • 集合 sets
    • 序列 sequence
    • 终止 Terminal
    • 值类型 Values Types
  • 实践探索

    • 自动归纳
    • 自动调用引理
    • 定义、证明、算法正确性
    • 各种推导式
    • 不同类型的证明
    • 集合元素上的函数
    • 在集合上的迭代
  • 常用工具

    • Type System
    • Style Guide
    • Cheet Sheet
✨收藏
  • 简体中文
  • English
💬社区留言板
GitHub (opens new window)

Dafny

新一代验证语言
首页
  • 入门介绍

    • 什么是dafny?
  • 用起来吧!

    • 安装
    • 快速上手
    • 可能遇到的问题?
  • Dafny快速入门

    • 基础学习 Basic
    • 方法 Method
    • 关键字 Keyword
    • 函数 Function
    • 类 Class
    • 泛型 Generics
    • 声明 Statement
    • 表达式 Expression
  • Dafny简单例子

    • 寻找最大最小数和
    • 斐波那契数列
    • 线性查询
    • 引理-计算序列非负元素个数
    • 集合
    • 终止
  • Dafny指导

    • 介绍
    • 方法 Methods
    • 前置/后置条件 Pre/Postconditions
    • 断言 Assertions
    • 函数 Functions
    • 循环不变体 Loop Invariants
    • 数组 Arrays
    • 量词(函数) Quantifiers
    • 谓词(函数) Predicates
    • 框架 Framing
    • 二分搜索 Binary Search
    • 总结
  • Dafny进阶语法

    • 引理和归纳 Lemmas and Induction
    • 模块 Modules
    • 集合 sets
    • 序列 sequence
    • 终止 Terminal
    • 值类型 Values Types
  • 实践探索

    • 自动归纳
    • 自动调用引理
    • 定义、证明、算法正确性
    • 各种推导式
    • 不同类型的证明
    • 集合元素上的函数
    • 在集合上的迭代
  • 常用工具

    • Type System
    • Style Guide
    • Cheet Sheet
✨收藏
  • 简体中文
  • English
💬社区留言板
GitHub (opens new window)
  • Dafny快速入门

    • 基础 Basic
    • 方法 Method
      • 框架Frame
      • 变体函数 variant function
    • 关键字 Keyword
    • 函数 Function
    • 类 Class
    • 泛型 Generics
    • 声明 Statement
    • 表达式 Expression
  • 简单例子

  • 指南
  • Dafny快速入门
lijiahai
2022-03-26
目录

方法 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

其中:

  • 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
基础 Basic
关键字 Keyword

← 基础 Basic 关键字 Keyword→

最近更新
01
寻找最大和最小数
04-06
02
斐波那契数列
04-06
03
线性查询
04-06
更多文章>
Theme by Vdoing | Copyright © 2022-2022 Li Jiahai | Dafny Community | 2022
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式