
LEAN
文章平均质量分 73
研究LEAN语言相关的知识点。
KeithTsui
编译器工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LEAN Compiler Toolchain 之 main 函数入口
前文已经对 LEAN Compiler Toolchain 的构建系统进行了简述,感兴趣的读者可以翻阅一下。本文主要是确定 lean 的 主函数入口,即 main 函数,在那个源文件里。原创 2025-01-03 15:25:33 · 312 阅读 · 0 评论 -
LEAN Compiler Toolchain 之 构建系统(Build System)
前文有提及过,要研究一个项目,要从其构建系统(Build System)着手。因为,构建系统是用于构建出对应项目的可执行程序(executable, binary)、相关库(libraries)、资源(resources)等。因此,通过对构建系统的研究,可以知道,该项目所要构建的东西是如何一步步构建出来的。原创 2025-01-03 14:43:05 · 414 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 可达类型(Accessibility Type)
可达类型(Accessibility Type)表达了,对于一个定义在某一类型α关系 r,类型α 中的元素a 的可达性(Accessibility),即其它元素,能通过该关系r,直接或间接地接触到元素 a。 如果,类型里的每个元素都是关系r可达的(Accessible),那么该关系则是正确定义的(Well-founded)。原创 2024-09-10 07:42:58 · 1126 阅读 · 0 评论 -
LEAN 类型系统属性 之 定义上相等的非确定性(Undecidability of Definitional Equality)注解
由于定义上相等(Definitional Equality)作用在所有情况,由此,当遇到不一致(Inconsistent)的时候,会导致其结果是不确定的,即会无限扩展(expansion)下去。原创 2024-09-11 08:59:08 · 618 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)浅析
归纳类型(Inductive Type)的核心是,该类型是基于归纳原则(Inductive principle,base case & inductive step)来定义的。简单来说,在定义归纳类型时,会使用其归纳类型自身。原创 2024-09-05 08:46:01 · 1605 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 商类型(Quotient Type)
商类型(Quotient Type),也称划分类型,通过给定义一个定义在某一类型 α 上的关系R:α → α→ ℙ,将类型α 中,满足关系R的元素摘出来,组成该商类型(Quotient),记 α / R。原创 2024-09-07 16:36:28 · 301 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 谓词性Predicative、非谓词性Impredicative、Large Elimination
谓词性Predicative、非谓词性Impredicative、Large Elimination,浅析原创 2024-09-07 08:54:20 · 825 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)的使用规则(Elimination Rule)
使用规则(Elimination Rule),也叫解构规则(Destruction Rule),与构建规则(Introduction Rule),也叫建构规则(Construction Rule),相对应。即,构建规则(Introduction Rule),定义了该类型的正规元素是如何构建出来的;而,使用规则(Elimination Rule),定义了该类型的正规元素是如何被使用的。可以看作,生产(Produce)、消费(consume)关系。原创 2024-09-06 08:50:37 · 1793 阅读 · 0 评论 -
LEAN 类型系统属性 之 赋型唯一性(Unique Typing)浅析
LEAN 类型系统属性 之 赋型唯一性(Unique Typing),如同一表达式有两种类型,在LEAN定义的赋型规则(Typing Rules)下,那么那两类型定义上相等(Definitional Equality)。原创 2024-09-13 08:50:56 · 1221 阅读 · 0 评论 -
LEAN 赋型唯一性(Unique Typing)之 证明过程简介
LEAN论文在证明赋型唯一性(Unique Typing )时,引入了 n-provability 的概念,通过证明在 n-provability 情况下的赋型唯一性,来证明系统的赋型唯一性。同时,在证明在 n-provability 情况下的赋型唯一性时,引入了κ 简化(κ reduction)的概念,以及 Church-Rosser 推论(Church-Rosser theorem)。原创 2024-09-14 08:27:28 · 736 阅读 · 0 评论 -
LEAN类型系统属性之规范性(Regularity)注解
在《小结》 中,列出LEAN类型系统所定义的全部规律,下面 关于LEAN 属性 的一些推论(Lemma)进行注解。主要是其规范性(Regularity),以说明LEAN类型系统是完备构建的(well founded),即不存在相互矛盾的规律。原创 2024-09-09 16:20:20 · 894 阅读 · 0 评论 -
LEAN 赋型唯一性(Unique Typing)之 κ 简化 (κ reduction)
在《赋型唯一性的证明过程简介》提及到,κ 简化 (κ reduction)概念的引入,是为了证明,在不考虑 证据不区分(Proof Irrelevance)的情况,表达式具备唯一常态(Unique normal form),这使得 Church-Rosser理论得以证明,从而证明 n-provability是定义上方向(Definitional Inversion),最终,证明 赋型唯一性(Unique Typing)。原创 2024-09-17 08:01:01 · 898 阅读 · 0 评论 -
LEAN 类型理论(Type Theory) 之 符号(Symbols)含义
梳理LEAN类型理论中符号的形与意。原创 2024-09-20 10:27:05 · 1822 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 相等类型(Equality Type)
相等类型(Equality Type)表达了,给定一个类型 α,类型α里的元素自身相等(equals itself),即其自反性(reflexivity)。原创 2024-09-09 08:29:03 · 1018 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)的计算规则,iota简化(ι reduction)
归纳类型(Inductive Type)的计算规则(Computation Rule),也就是,《归纳类型(Inductive Type)的使用规则(Computation Rule)》中,提到的类型元素的等价规则(Equality Rule),也是,针对归纳类型的简化规则(Reduction Rules),即步进规则(Progress Rules)。原创 2024-09-06 08:57:48 · 356 阅读 · 0 评论 -
LEAN 赋型唯一性(Unique Typing)之 n-provability 注解
n-provability (n ∈ ℕ),记 ⊢ₙ ,其中,n 是指证明过程中,赋型规则与定义上相等规则的切换次数。表达式 e 在进行计算的过程中,赋型规则随着表达式 e 的形变,给每一步计算后的形变表达式 e‘ 进行赋型。此时,赋型规则的前提(Premises),利用归纳假设(Inductive Hypothese)提供的定义上相等关系,即 Γ ⊢ₙα ≡ β,为其结果的赋型,即Γ ⊢ₙ e:α,提供证明。那么, Γ ⊢ₙα ≡ β =>Γ ⊢ₙ e:α =>Γ ⊢ₙ₊₁α ≡ β 。原创 2024-09-15 08:33:12 · 1185 阅读 · 0 评论 -
LEAN 赋型唯一性(Unique Typing)之 并行 κ 简化 (Parallel κ reduction)>>ₖ
在表达式e 中,存在多个部分是可以进行简化的,这些部分成为可简化部分(Redex),同时如果应用的简化规则是 K简化的话,即称为可K简化部分(K - Redex)。表达式 e 中的可K简化部分(K - Redex)通过K简化后,得到了 表达式 e',那么,就有 表达式 e 并行K简化为 表达式 e',记为e>>ₖ e' ,如果所有的可K简化部分(K - Redex)都进行了K简化的话,称为完全简化(Complete Reduction),记 e>>>ₖ e' 。原创 2024-09-21 09:13:59 · 1223 阅读 · 0 评论 -
LEAN 类型系统属性 之 算法式相等的非传递性(Algorithm equality is not transitive)注解
由于 subsingleton 使用函数(eliminator) 的存在,导致算法式相等(Algorithm defintional equality)的非传递性。原创 2024-09-12 08:29:49 · 829 阅读 · 0 评论 -
LEAN 赋型唯一性(Unique Typing)之 在 n-provability 下 的 赋型唯一性
《LEAN 赋型唯一性(Unique Typing)之 证明过程简介》中,介绍到,在证明赋型唯一性(Unique Typing )时,引入了 n-provability 的概念,通过证明在 n-provability 情况下的赋型唯一性,来证明系统的赋型唯一性。此篇文章介绍在 n-provability 情况下的赋型唯一性。原创 2024-09-16 09:31:29 · 860 阅读 · 0 评论 -
LEAN 赋型唯一性(Unique Typing)之 Church-Rosser 定理 (Church-Rosser Theorem)及 赋型唯一性的证明
有了并行K简化的概念及其属性,以及其在LEAN类型理论中的相关证明,就可以证明,在K简化下的Church-Rosser 定理,及赋型唯一性。也就是说,在LEAN类型系统里,每个表达式(Expression)有且只有一个定义上相等的类型(Type)。原创 2024-09-22 08:31:33 · 744 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)的定义
归纳类型(Inductive Type)在LEAN里的定义。原创 2024-09-05 08:52:53 · 950 阅读 · 0 评论 -
LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 小结(Summary)
小结(Summarize)LEAN类型理论(LEAN Type Theory)有三大部分组成,依赖类型(Dependent Type Theory)、非累积类型宇宙架构(The Hierarchy of Non-cumulative Universes )、以及 归纳类型(Inductive Type)。原创 2024-09-08 08:13:10 · 872 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 norm_cast 策略
norm_cast 策略通过 对目的里的假设进行类型提升,如自然数提升至整数,以满足(c:ℝ) >= A * ( l - ⌊_⌋ ) + ⌊_⌋ + 1 ) 的类型。原创 2024-11-29 09:37:19 · 277 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 最后两 this 证明
证明剩下的两个 this 假设。原创 2024-11-29 09:37:05 · 389 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 repeat 与 nlinarith 策略(Tactic)
repeat 策略,重复使用 use 策略,同时 by nlinarith 提供 use 策略的参数。 也就是,by 启动策略机制,通过 nlinarith 策略,产生一个 值,供给 use 策略使用。原创 2024-11-28 08:57:23 · 782 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 cases 策略(Tactic)
AlphaProof 使用了 cases 策略,通过,其策略参数的值,进行分类讨论,即,lt_or_ge c (A * (l-.floor ↑x)+⌊x⌋ + 1)。原创 2024-11-28 08:57:12 · 524 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 have 策略(Tactic)
have 策略 与 suffices 策略,大同小异,都是新增类型如其参数的假设,或叫局部变量(local variable),在 Lean 表达式中,是 bound variable,与 free variable 相对的。同时,两者都会产生新的目的(new goal),对应其产生假设的证明。其中,suffices 策略,产生的新目的(new goal)会排在 目的列表的最后,因此,点(·)策略,会专注目的列表的第一个目的。而,have 策略 产生的新目的 会排在 目的列表的最前。原创 2024-11-27 08:53:45 · 981 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 rintro 策略(Tactic)
rintro A B@c,也就是,将 第一个 binder 称为 A,第二个 binder 称为 B,同时,使用引入一个新的变量 c,作用在第三个binder ,此处,编译器给定的名称为 h。原创 2024-11-27 08:53:36 · 418 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 revert 策略(Tactic)
revert 策略 的作用,是与 intro 策略的相反的,也就是,将假设变成目标(Target)的 binder。原创 2024-11-26 08:47:02 · 408 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 specialize 策略(Tactic)
AlphaProof 使用 specialize 策略,将假设中,对 任意自然数(ℕ )的使用,直接引用n : ℕ。原创 2024-11-26 08:46:54 · 259 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 induction 策略(Tactic)
induction 策略,在假设中,增加了,在归纳证明中使用的,前值假设。原创 2024-11-25 08:50:07 · 453 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 intro 策略(Tactic)
AlphaProof 使用 intro 策略,让目标(Target)中的∀ (n : ℕ),提到假设上。原创 2024-11-25 08:49:58 · 339 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 非(not)的证明(Prove to False)
要使得 最终得证 False,因,False 是无法证明的,所以,需要产生一个矛盾(Contradiction),再使用 False.elim 来证明 False。也就是说,当两个互斥的命题同时认为真,那么,False 得证。原创 2024-11-24 15:51:02 · 1129 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 apply 策略(Tactic)
apply 策略就是以其参数表达式,此处的,le_antisym,作为原目标(Target)的证明,同时,le_antisym 的条件,即 其输入参数,作为新的目标(new targets),即,x ≤(↑l - ↑⌊x⌋) * 2和x ≥(↑l - ↑⌊x⌋) * 2。原创 2024-11-24 15:50:37 · 589 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 norm_num 策略(Tactic)
AlphaProof 使用norm_num 策略,使得目标(Target)中,明显为偶数的条件得以证明,从而简化目标为:⊢ x = (↑l - ↑⌊x⌋) * 2 。原创 2024-11-23 09:31:39 · 510 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 zify 策略(Tactic)
zify 策略中 的 z ,意思是,整数(ℤ)。也就是,上述注释说的,将自然数的命题,提升到整数的命题,使得可以更好地处理减法。原创 2024-11-23 09:31:28 · 1107 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 suffices 策略(Tactic)
suffices 策略,是用于增加一个 名为this 的假设(hypothese),其类型为 suffices 策略 参数。原创 2024-11-22 08:49:58 · 663 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 exact 策略
AlphaProof 使用了 exact 策略,成功满足了 case refine_1 目的。至此,IMO 2024 P1 的第一部分证明完成。原创 2024-11-22 08:49:46 · 461 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 rw, simp_all 策略再使用
AlphaProof 通过rw和simp_all策略,使用等式替换的方式,凑出了与除数相同的共乘数,从而证明能被除数整除。原创 2024-11-21 08:51:27 · 598 阅读 · 0 评论 -
AlphaProof IMO 2024 P1 in LEAN 之 simp_all 策略
simp_all 策略使用其参数组中的等式,通过,等式的右边对左边进行替换,使其目标得到简化。原创 2024-11-21 08:51:14 · 829 阅读 · 0 评论