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
    • 关键字 Keyword
    • 函数 Function
    • 类 Class
    • 泛型 Generics
    • 声明 Statement
      • 函数/方法的返回值赋值给变量
      • assert 声明
      • print 打印语句
      • if 选择语句
      • while 循环语句
      • match语句
      • break语句
    • 表达式 Expression
  • 简单例子

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

声明 Statement

# 声明 Statement

以下是 Dafny 中最常见语句:

var LocalVariables := ExprList;
 Lvalues := ExprList;
 assert BoolExpr;
 print ExprList;
 if BoolExpr0 {
  Stmts0
 } else if BoolExpr1 {
  Stmts1
 } else {
  Stmts2
 }

 while BoolExpr

  invariant Inv

  modifies Frame

  decreases Rank

 {
  Stmts
 }

match Expr {
  case Empty => Stmts0
  case Node(l, d, r) => Stmts1
}

 break;
 return;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 函数/方法的返回值赋值给变量

(就是将函数/方法返回的值或对象 赋给 一个 局部变量 而已)

var LocalVariables := ExprList;

var 语句引入了局部变量。

Lvalues := ExprList; 赋值语句将 ExprList变量赋给Lvalues。 这些分配是并行执行的(更重要的是,所有必要的读取都发生在写入之前),因此左侧必须表示不同的 L 值。 每个右侧都可以是以下形式之一的表达式或对象创建:

  1. new T

  2. new T.Init(ExprList)

  3. new T(ExprList)

  4. new T[SizeExpr]

  5. new T[SizeExpr0, SizeExpr1]

第一种形式分配一个类型为 T 的对象。

第二种形式另外在新分配的对象上调用初始化方法或构造函数。

第三种形式是当调用匿名构造函数时的语法。

其他形式分别了T是一维和二维数组对象的匿名构造方法

# assert 声明

assert 语句判断后面的表达式结果是否为真(由验证器验证)。

# print 打印语句

打印语句将给定打印表达式的值输出到标准输出。字符串中的字符可以转义;例如,对 print 语句感兴趣的是 \n 表示字符串中的换行符。

# if 选择语句

if 语句是通常的语句。该示例显示了使用 else if 将备选方案串在一起。像往常一样,else 分支是可选的。

# while 循环语句

  • while 语句是通常的循环,其中
  • invariant 声明给出了一个循环变量
  • modifies 语句限制了循环的框架
  • reduction 语句从循环中引入了一个变体函数。

默认情况下,循环不变式为真,修改框与封闭上下文中的相同(通常是封闭方法的修改子句),并从循环保护中猜测变体函数。

while BoolExpr //布尔表达式-循环条件 invariant Inv modifies Frame decreases Rank { Statements }

# match语句

match 语句计算源Expr(一个类型为归纳数据类型的表达式),然后执行与用于创建源数据类型值的构造函数相对应的 case,将构造函数参数绑定到给定的名称。如果不需要它们来标记 match 语句的结尾,则可以省略包围 case 的花括号。

# break语句

break 语句可用于退出循环,而 return 语句可用于退出方法。

编辑 (opens new window)
上次更新: 2022/03/26, 14:38:56
泛型 Generics
表达式 Expression

← 泛型 Generics 表达式 Expression→

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