Agda学习笔记1
Agda学习笔记1
好久没写博客了,诈尸一波。
说句题外话,期中有点小爆炸,开始后悔选实验班了。要读信科的后辈诸君,我劝你选计概A普通班拿4.0。
开学的时候老是想着多学点东西,现在:绩点绩点绩点
快捷键
- C-c C-l : 加载,把问号转换成goal
- C-c C-f/C-b : 在goal之间切换
- C-c C-, : goal&context
- C-c C-. : goal&context&type
- C-c C-r : refine 有时可以自动填充
- C-c C-c spilt:
- 直接回车:补上变量
- 输入变量:把这个变量解释成所有定义
- C-c C-a : 自动填充(一般用不上)
refl
表示左右相等
Natural Number
自然数集合
data \(ℕ\) : Set where
zero : \(ℕ\)
suc : \(ℕ \rightarrow ℕ\)
即只能从这两条推出其他的性质
解释一个 ℕ 变量的时候就会展开成这两个元素
operations
\(\_+\_ : ℕ → ℕ → ℕ\)
zero + n = n
suc m + n = suc (m + n)
\(\_*\_ : ℕ → ℕ → ℕ\)
zero * n = zero
suc m * n = n + (m * n)
\(pred : ℕ → ℕ\)
pred 0 = 0
pred (suc n) = n
rewrite
大概是用于递归的一个东西,相当于把rewrite的东西带入原式
cong
cong f : 把 f 添加到左右两边
例:
+0 : ∀ (y : ℕ) -> y ≡ y + zero
+0 zero = refl
+0 (suc y) = cong suc (+0 y)
加法结合律
+assoc : ∀ (x y z : ℕ) → x + (y + z) ≡ (x + y) + z
+assoc zero y z = refl
+assoc (suc x) y z rewrite +assoc x y z = refl
就是运用suc对+的结合律
加法交换律
依旧是利用suc递归...
+suc : ∀ (x y : ℕ) → suc x + y ≡ x + suc y
+suc zero y = refl
+suc (suc x) y rewrite +suc x y = refl
+comm : ∀ (x y : ℕ) → x + y ≡ y + x
+comm zero y = +0 y
+comm (suc x) y rewrite +comm x y = +suc y x
也可以用rewrite这样写:
+comm : ∀ (x y : ℕ) → x + y ≡ y + x
+comm zero y = +0 y
+comm (suc x) y rewrite +comm x y | +suc y x = refl
rewrite加竖线就是从左到右替换
乘法分配律
同上
*distribr : ∀ (x y z : ℕ) → (x + y) * z ≡ x * z + y * z
*distribr zero y z = refl
*distribr (suc x) y z rewrite *distribr x y z | +assoc z (x * z) (y * z) = refl
比较大小
_<_ : ℕ → ℕ →
0 < 0 = ff
0 < (suc y) = tt
(suc x) < (suc y) = x < y
(suc x) < 0 = ff
_=ℕ_ : ℕ → ℕ →
0 =ℕ 0 = tt
suc x =ℕ suc y = x =ℕ y
_ =ℕ _ = ff
_≤_ : ℕ → ℕ →
x ≤ y = (x < y) || x =ℕ y
_>_ : ℕ → ℕ →
a > b = b < a
_≥_ : ℕ → ℕ →
a ≥ b = b ≤ a
注意相等是 _=ℕ_
衍生的一些证明
其实上面的定义不用记,反正也会忘
写作业和考试前看看就好了
<-0 : ∀ (x : ℕ) → x < 0 ≡ false
<-0 0 = refl
<-0 (suc y) = refl
-contra : false ≡ true → ∀{ℓ} {P : Set ℓ} → P
-contra ()
<-trans : ∀ {x y z : ℕ} → x < y ≡ true → y < z ≡ true → x < z ≡ true
<-trans {x} {0} p1 p2 rewrite <-0 x = -contra p1
<-trans {0} {suc y} {0} p1 ()
<-trans {0} {suc y} {suc z} p1 p2 = refl
<-trans {suc x} {suc y} {0} p1 ()
<-trans {suc x} {suc y} {suc z} p1 p2 = <-trans {x} {y} {z} p1 p2
其中 () 代表荒谬匹配,即出现 false==true 时就可以直接写 (),也可以像第一条一样,用大括号加上(必要的)参数之后用定义的 -contra(有点搞不懂原理)
=ℕ-refl : ∀ (x : ℕ) → (x =ℕ x) ≡ tt
=ℕ-refl 0 = refl
=ℕ-refl (suc x) = =ℕ-refl x
=ℕ-from-≡ : ∀ {x y : ℕ} → x ≡ y → x =ℕ y ≡ tt
=ℕ-from-≡ {x} refl = =ℕ-refl x
也可以用 refl 替换一个等式
begin-qed
一种语法,如下:
+0 : ∀ (y : ℕ) -> y ≡ y + zero
+0 zero = refl
+0 (suc y) =
begin
suc y
≡⟨ cong suc (+0 y) ⟩
suc (y + zero)
≡⟨⟩
suc y + zero
∎
<>里的是依据,某些根据定义的依据可以不用写(如zero+x=x)
作业题
乘法交换律
惨淡的证明:
+assoc' : ∀ (x y z : ℕ) → (x + y) + z ≡ x + (y + z)
+assoc' x y z rewrite +assoc x y z = refl
*0 : ∀ (x : ℕ) → zero ≡ x * zero
*0 zero = refl
*0 (suc x) = *0 x
*suc : (x y : ℕ) → x + x * y ≡ x * suc y
*suc zero y = refl
*suc (suc x) y rewrite +assoc x y (x * y) | +comm x y | +assoc' y x (x * y) | *suc x y = refl
*-comm : (x y : ℕ) → x * y ≡ y * x
*-comm zero zero = refl
*-comm zero (suc y) = *-comm zero y
*-comm (suc x) y rewrite *-comm x y = *suc y x
优化:使用 sym x == y -> y == x,即把+assoc' y x (x * y)
换成 sym ( +assoc y x (x * y) )
乘法结合律
精简的证明:
*-assoc : (x y z : ℕ) → (x * y) * z ≡ x * (y * z)
*-assoc zero y z = refl
*-assoc (suc x) y z rewrite *distribr y (x * y) z | *-assoc x y z = refl
一些比较大小
n≮n : (n : ℕ) → n < n ≡ false
n≮n zero = refl
n≮n (suc x) = n≮n x
-- problem 2.2
<-antisym : (x y : ℕ) → x < y ≡ true → y < x ≡ false
<-antisym zero (suc y) p1 = refl
<-antisym (suc x) (suc y) = <-antisym x y
-- problem 2.3
<-trichotomy : (x y : ℕ) → x < y ∨ x =ℕ y ∨ y < x ≡ true
<-trichotomy zero zero = refl
<-trichotomy zero (suc y) = refl
<-trichotomy (suc x) zero = refl
<-trichotomy (suc x) (suc y) = <-trichotomy x y
Agda学习笔记1的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- 【2022-09-09】Django框架(九)
Django框架(九) cookie与session简介 网址的发展史: 1.起初网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的. 比如:新闻网页,博客网页,小说... (这些网页是不 ...
- haodoop新特性
Hadoop2.x新特性 scp实现两个远程主机之间的文件复制 scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt // 推 push sc ...
- 《Java基础——异常的捕获与抛出》
Java基础--异常的捕获与抛出 ' 前言: Error类(错误)和Exception类(异常)是Throwable类的子类. 异常分为CheckedException类(编译时异常)和Ru ...
- filebeat测试output连通性
在默认的情况下,直接运行filebeat的话,它选择的默认的配置文件是当前目录下的filebeat.yml文件. filebeat.yml文件内容 filebeat.inputs: - type: l ...
- 1.nexus的安装
1,Nexus 介绍 Nexus是什么 Nexus 是一个强大的maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问. 不仅如此,他还可以用来创建yum.pypi.npm.docke ...
- 修改因python是3版本导致的yum问题
问题原因: 系统自带的python出来的是2版本,但是因为某些原因,比如安装使用ElartAlert,导致执行python出来的是3版本. 此时执行yum相关的命令,会报错,具体错误信息如下: [ro ...
- css padding和overflow
padding:10px 5px 15px 20px; 上右下左 padding:10px 5px 15px; 上 左右 下 padding:10px 5px; 上下 左右 padding:10px; ...
- 跳过nsis Error强制运行程序
NSIS编译的程序在运行之初,都会有一个程序完整性的自我检测,一旦检测到数据不完整,比如文件资源被篡改,下载过程中有数据丢失等情况,就会报错停止运行,也就是大名鼎鼎的nsis Error ,其实想跳 ...
- 云数据库技术|“重磅升级”后再测 TDSQL-C
来源:云数据库技术 标题 1.摘要 前段时间,测试了国内主要云原生数据库 PolarDB.TDSQL-C.GaussDB 的性能,参考:<再测云原生数据库性能>.在上次测试结果中,由于地域 ...
- Netty 学习(六):创建 NioEventLoopGroup 的核心源码说明
Netty 学习(六):创建 NioEventLoopGroup 的核心源码说明 作者: Grey 原文地址: 博客园:Netty 学习(六):创建 NioEventLoopGroup 的核心源码说明 ...