首页 > 其他分享 >Agda学习笔记1

Agda学习笔记1

时间:2022-11-04 22:44:08浏览次数:60  
标签:suc rewrite 笔记 学习 zero assoc refl comm Agda

目录

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

  1. \(\_+\_ : ℕ → ℕ → ℕ\)

    zero + n = n

    suc m + n = suc (m + n)

  2. \(\_*\_ : ℕ → ℕ → ℕ\)

    zero * n = zero

    suc m * n = n + (m * n)

  3. \(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

比较大小

_<_ : ℕ → ℕ → 

标签:suc,rewrite,笔记,学习,zero,assoc,refl,comm,Agda
From: https://www.cnblogs.com/lcyfrog/p/16859343.html

相关文章

  • spring源码学习(九)springAOP实现过程
    一、aop中所需要的beanDefinition对象的解析   当xml文件解析到<aop:config>这个节点时,就会解析aop所需要的所有对象1、在解析到<aop:config>节点时,会......
  • 《Unix/Linux系统编程》学习笔记10
    第十二章块设备I/O和缓冲区管理一、知识点归纳(一)块设备I/O缓冲区  在第11章中,我们学习了读写普通文件的算法。这些算法依赖于两个关键操作,即get_block和put_b......
  • MarkDown的学习
    Markdown学习标题标题标题标题前面“#+空格”跟标题名字,几个#代表几级标题字体字体两边加两个星号变粗体粗体字体两边加一个星号变斜体斜体字体两边加两个~变成......
  • 2022-11-4学习内容
    1.JetpackRoom、Room增删改查1.1build.gradleplugins{id'com.android.application'}android{compileSdk33defaultConfig{applicatio......
  • 数据结构--011--STL容器deque代码学习
    不提供代码了-------------------------------------------------------------------------------------------------------------自己网上找来自己撸---------------------......
  • 学习C语言的第5天
    #include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>//sys//rand#include<math.h>#include<time.h>intmain_8(){charinput[20];//shutd......
  • 学习python第六天
    python迭代器迭代器是一种对象包含值的可计数数字在py中,迭代器是实现迭代器协议的对象,它包含方法_iter_()和_next_()要把对象/类创建为迭代器,必须为对......
  • MyBatis笔记03------XXXMapper.xml文件解析
    SQL映射文件的配置解析 当我们写好mapper(dao)层接口时,然后在对应的XXXMapper.xml文件中写业务逻辑对应的SQL映射语句,通过这个文件中可以实现CRU操作,那么下面说明如何编......
  • SpringCloud学习笔记
    一、服务注册中心Eurekaeureka-client服务发现:从注册中心上获取服务信息服务注册:将服务信息注册进注册中心依赖引入<!--EurekaClient端依赖-->......
  • 数据分析--学习笔记01
    python数据分析python数据分析工具包Numpy,SciPy.org,matplotlib,lean,pandas,k学习方法:重视理论--》勤于查阅--》身体力行--》联系实际数据获取手段数据仓库将所......