The Idris Tutorial Version 0.11.1
120.52 KB
14 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
英语 | .pdf | 3 |
摘要 | ||
文档是关于Idris编程语言的教程,主要涵盖两个核心内容:类型提供者和交互式定理证明器。类型提供者部分展示了如何通过定义函数(如bytesToType和getDevT)来提供特定的位宽类型(如B8、B16等),并在主程序中使用这些提供的类型。交互式定理证明器部分则通过一个具体的例子(plus n (plus m o) = plus (plus n m) o)说明了如何使用Idris的交互式环境来证明自然数加法的结合律,包括加载模块、应用tactics(如intros、induction、compute等)以及完成证明的过程。 | ||
AI总结 | ||
本文档是《The Idris Tutorial Version 0.11.1》的中文总结,内容主要分为两部分:**类型提供器(Type Providers)**和**交互式定理证明器(Interactive Theorem Prover)**。以下是核心内容的总结:
---
### **1. 类型提供器(Type Providers)**
#### **1.1 关键功能**
- **类型提供器**是一种机制,可以在程序运行时根据需求动态提供类型信息。
- 示例代码中定义了以下关键函数:
- `bytesToType`: 根据不同的位数返回对应的类型(如B8、B16、B32、B64),如果不匹配则返回错误信息。
- `getDevT`: 使用`IO`操作结合`bytesToType`获取设备类型大小。
- `main`: 通过`putStrLn`输出设备类型大小。
#### **1.2 实用示例**
- `Main.idr`文件中使用`%provide`关键字将`getDevT`的结果作为`BitWidth`类型提供给程序,并输出其大小。
```idris
module Main
import Providers
%language TypeProviders
%provide (DevTBitWidth : BitWidth) with getDevT
main : IO ()
main = putStrLn $ "size of dev_t: " ++ show DevTBitWidth
```
- 这展示了如何在程序中动态获取和使用类型信息。
---
### **2. 交互式定理证明器(Interactive Theorem Prover)**
#### **2.1 目标**
- 证明`Nat`类型上加法操作的结合律:`plus n (plus m o) = plus (plus n m) o`。
- 文件`Foo.idr`中定义了这个定理:
```idris
module Foo
plusAssoc : plus n (plus m o) = plus (plus n m) o
plusAssoc = ?rhs
```
- 使用`?rhs`表示需要证明的目标。
#### **2.2 interactive proof process**
1. **启动交互式会话**:将文件`Foo.idr`加载到Idris REPL中。
```shell
$ idris Foo.idr
```
2. **探索上下文**:使用`:p rhs`命令查看证明目标。
```
*Foo> :p rhs
----------
Goal:
{ hole 0 } : (n : Nat) -> (m : Nat) -> (o : Nat) -> plus n (plus m o) = plus (plus n m) o
```
3. **应用策略**:
- **intros**:引入变量`n`, `m`, `o`。
- **induction n**:对`n`进行归纳。
- **compute**:简化计算。
- **rewrite ihn__0**:重写目标表达式。
- **trivial**:处理简单目标。
4. **证明完成**:
- 系统自动生成证明脚本:
```idris
proof
intros
induction n
compute
trivial
intros
compute
rewrite ihn_0
trivial
```
- 证明脚本可以直接添加到`Foo.idr`文件中。
#### **2.3 总结**
- 交互式定理证明器通过一系列策略(`intros`, `induction`, `compute`, `rewrite`, `trivial`)帮助用户完成证明。
- 该章节展示了如何通过交互式方式证明加法的结合律,并生成证明脚本。
---
### **3. 文档信息**
- 文档基于**《The Idris Tutorial Version 0.11.1》**,内容由社区成员贡献。
- Idris的文档(包括本教程)以**CC0协议**发布,用户可以自由使用和改编。
---
以上是本文档的核心内容总结,涵盖了**类型提供器**和**交互式定理证明器**的主要功能及使用方法。 |
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
7 页请下载阅读 -
文档评分