LEAN从定义上相等(Definitional Equality)中,区分了算法式定义上相等(Algorithmic Definitional Equality),说白了,就是,当一个表达式 e,通过简化规则(Reduction Rule)转化成另一表达式 e',那么,这两个表达式 e 和 e' 为 算法式定义上相等(Algorithmic Definitional Equality),记为 e ⇔ e'。
即:
当表达式 e 通过简化规则,简化成 k,且 k 与 e' 是算法式定义上相等,那么 表达式 e 和 e' 也是算法式定义上相等。
另外由于算法式定义上相等的自反性,那么,表达式 k 与其自身是算法式定义上相等,因此,表达式 e 与 k 也是算法式定义上相等的。也就是说,表达式 e 与其简化后的表达式 是算法式定义上相等的。
另外,需要注意的是,简化是单向的,而算法式定义上相等,及定义上相等,都是双向的。
一、算法式定义上相等(Algorithmic Definitional Equality)(Γ ⊢ e ⇔ e')
其中,定义了基于 Γ 的假设下,表达式 e 和 e' 算法式定义上相等(Algorithmic Definitional Equals),即 e ⇔ e'。
1. 自反性(Reflexive) 与 互换性(Commutive)
2. 类型宇宙表达式的算法式定义上相等
3. 抽象化、依赖函数类型、Eta简化、函数应用、证明无关性、的算法式定义上相等
4. 简化的算法式定义上相等
注解:e ⤳ k,表示,表达式 e 使用了 一次(one step) LEAN定义了的一种(one of)转化规则,转化成表达式 k。此时,如果 k 与表达式 e' 是算法式定义上相等,那么 表达式e 和 表达式 e' 算法式定义上相等。
另 e ⤳* k,表示多次使用,即多步(multi-step),转换规则。
二、步进规则(Progress Rules)( e ⤳ e' )
步进(Progress)其实就是计算(Computation)即规范化(Normalization),步进规则定义了LEAN的计算规则。
1. 函数表达式步进
2. 函数应用(Application)步进
口