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)
  • 入门介绍

    • 语言介绍
  • 用起来吧

  • 配置
  • 入门介绍
lijiahai
2022-03-22

语言介绍

# 介绍

Dafny 是一种旨在使编写正确代码变得容易的语言。怎么更容意的验证正确性呢?Dafny依靠高级注释来实现。通过高级注释(high-level annotations)的推理和验证,一段代码的逻辑可以用高级注释更自然抽象的表达出来,当然这样更加容易编写和验证,且不易写错。

编译dafny程序后,dafny会生成与高级注释匹配的逻辑证明,来告诉程序员这个程序逻辑正不正确,错了也会有报错。Dafny这样实际上是把编写无错误代码减轻为编写无错误注释,这样写起来当然更容易,因为注释更短更直接。下面举个例子:

forall k: int :: 0 <= k < a.Length ==> 0 < a[k]
1

这个例子是说:对于所有数组下标索引k,其索引对应的数组值a[k]>0。通过编写这段注释,可以验证这个是正确的。

除了证明程序员写的高级注释是否正确外,Dafny还能实时验证逻辑。它能边写程序边验证,比如数组越界、空引用、除以零等,还可以证明循环中代码是否终止,总之功能非常强大。

那么在何处编写Dafny呢?可以上github下载Dafny语言包,用命令行打开Dafny.exe文件输入程序就可以验证,也可以在浏览器web上打开rise4fun网站,这网站上能实时编写并且有教程。如果想有更好的体验比如高亮注释实时报错这种功能的话,可以用VScode下载相应 适用广泛的基础单选

markdown content

编辑 (opens new window)
上次更新: 2022/03/26, 14:38:56
安装Dafny

安装Dafny→

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