首页 > 其他分享 >LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)浅析

LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)浅析

时间:2024-09-07 08:56:43浏览次数:12  
标签:定义 归纳 Inductive LEAN Nat 类型 Type 浅析

        归纳类型(Inductive Type)的核心是,该类型是基于归纳原则(Inductive principle,base case & inductive step)来定义的。简单来说,在定义归纳类型时,会使用其归纳类型自身。如下图的类型等式(Type Equation),K 是其定义体(The body of Definition),调用其类型自身:        

        这个类型等式(Type Equation)是理解归纳类型(Inductive Type)的最关键。

        该类型等式的意思是,有这么一个类型,记为 μt:F.K, 与  其定义体 K 中的类型变量 t 替换(substitute)成自身后的类型,记为 K [ μt:F.K / t ],等价(Equivalence)。

        要解该类型等式,即找到该等式的解(Solution),就是要找到一个类型,能满足该等式。 那么,分析上述类型等式(Type Equation),有:

        1. μ,抽象出一个类型为F 的 类型变量 t,(Type variable),如 λ 的作用,是抽象出一个值变量(variable)。

        2. K,可以看作是一个类型函数(Type Function)的函数体,其内部使用了类型为F 的 类型变量 t。

        3. 在等式的右边可以看出,类型变量 t 所引用的类型就是正在被定义的类型本身,即 μt:F.K 。

        因此,当要定义的类型,是归纳类型(Inductive Type)时,就可以满足上述类型等式。

        严格来说,上述类型等式,定义了递归类型(Recursive Type),包括了归纳类型(Inductive Type),以及共归纳类型(Coinductive Type),在LEAN的语境里,统称为归纳类型(Inductive Type)。

        其区别在于,归纳类型(Inductive Type)必须存在基本构建函数(Base case constructor),即不需要依赖被定义的归纳类型的本身即可以构建其正规元素(Canonical Element),以此作为其归纳步骤(Inductive step)的出发点或落脚点,如自然数类型(Nat)。

        而,共归纳类型(Coinductive Type)则没有基本构建函数(Base case constructor),如 流类型(Stream)。

        在正式研究LEAN对归纳类型(Inductive Type)的定义前,我们先通过自然数的例子,直观感受一下。

inductive Nat where
  | zero : Nat
  | succ (n : Nat) : Nat

        上面代码是LEAN对自然数(Nat)的定义:

        1. inductive,关键字,申明这是一个归纳类型的定义,该归纳类型的名字叫 Nat。

        2. where,关键字,引出后面的内容,是该类型的定义体。

        3. 符号 |, 指示这是该类型的构建函数(constructor),用以构建该类型的正规元素(Canonical Element)。

        4. zero : Nat,这个自然数归纳类型的基本构建函数(Base case constructor),其没有输入,即无输入函数,表示一个常量,其类型为自然数,即正在定义的类型本身。

        5. succ (n : Nat) : Nat,这是其归纳步骤的构建函数(constructor of inductive step),其输入是自然数,即正在定义的类型的值;其输出是另一个自然数。succ 是 successor的缩写,即其含义是,给定的输入的自然数的下一个自然数。

        通过,上面的说明,可以清晰的看到,该归纳类型在定义自己的时候,使用了自己本身,尤其,体现在归纳步骤(Inductive Step)上,即 succ 构建函数(constructor)。

        将 K 定义为  ( zero : t ) + ( succ (n : t ) : t  ),μt:F.K ≡ Nat,就有

                μt:F.K ≃ K [ μt:F.K / t ]

                   =>  Nat ≃ K [ Nat / t ]

                   =>  Nat ≃ (( zero : t ) + ( succ (n : t ) : t  )) [ Nat / t ]

                   =>  Nat ≃ (( zero : Nat ) + ( succ (n : Nat ) : Nat  ))

        此时,可以清楚看到,类型等式的左边是正在定义的归纳类型 Nat;右边是其构建函数(constructor)。且与LEAN中定义归纳类型(Inductive Type)Nat 的语法结构相对应。这是,因为 LEAN的语法 是为了 完整地 表达 LEAN类型理论。

                        

        顺便给个共归纳类型(Coinductive Type),流类型(Stream):

inductive Stream t where
| cons (head: t) (tail: Stream t): Stream t

        

标签:定义,归纳,Inductive,LEAN,Nat,类型,Type,浅析
From: https://blog.csdn.net/sinat_36821938/article/details/141865032

相关文章

  • 鸿蒙-TypeScript语法
    1.概述HarmonyOS应用的主要开发语言是ArkTS,它由TypeScript(简称TS)扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。注意:TypeScript本身也是由另一门语言JavaScript扩展而来,它主要是在JavaScript的基础上添加了静......
  • [Typescript] Handle Errors with a Generic Result Type
    Considerthis Result type:typeResult<TResult,TError>=|{success:true;data:TResult;}|{success:false;error:TError;};The Result typehastwotypeparametersfor TResult and TError.Itreturnsadisc......
  • Playwright 源码 BrowserType
    playwright-java的Browser、BrowserContext、Page挺好理解的,唯独这厮,就有一丢丢……packagecom.microsoft.playwright;/***BrowserTypeprovidesmethodstolaunchaspecificbrowserinstanceorconnecttoanexistingone.**BrowserType提供启动一个特定......
  • LEAN 类型理论之注解(Annotations of LEAN Type Theory)—— 归纳类型(Inductive Type)的
            使用规则(EliminationRule),也叫解构规则(DestructionRule),与构建规则(IntroductionRule),也叫建构规则(ConstructionRule),相对应。        即,构建规则(IntroductionRule),定义了该类型的正规元素是如何构建出来的;而,使用规则(EliminationRule),定义了该类型的正......
  • git diff 命令浅析
    gitdiff命令浅析以下内容来自GPT的chat请向我介绍gitdiff命令的用法gitdiff是Git中用于比较不同版本之间的改动的一个非常重要的命令。它可以比较工作区、暂存区和提交历史中的差异,帮助开发者理解和查看代码的变化情况。gitdiff的基本用法比较工作区和暂存区:当你......
  • MySQL优化-explain:字段,索引相同的多个数据库为什么他们的type,key,key_len会不一样
    实习倒数第二天,偶然间查了查自己的写的sql语句性能有没有问题。selectCOL1,COL2,COL3frominf_logwhereCODE='AAA'andORDER_ID='123456';上述字段中,code与order_id都被设置为索引IDX_MIAN_ID,IDX_CODE。也就是说,正常情况下这两个索引应该是都会命中公司实现了表的水平......
  • ​浅析多模态大模型技术路线梳理
    前段时间ChatGPT进行了一轮重大更新:多模态上线,能说话,会看图!微软发了一篇长达166页的GPT-4V测评论文,一时间又带起了一阵多模态的热议,随后像是LLaVA-1.5、CogVLM、MiniGPT-5等研究工作紧随其后,到处刷屏。大模型的多模态能力到底是怎么来的?今天来分享一下多模态相关的......
  • antD——报错:模块 ""antd/es/checkbox/Group"" 没有导出的成员 "CheckboxValueType"。
    参考:1. https://github.com/ant-design/ant-design/issues/50000  importtype{CheckboxValueType}from'antd/es/checkbox/Group'失效#500002. https://github.com/ant-design/ant-design/pull/49073  fix:fixCheckbox.Grouptype #490733. https://ant-de......
  • isspace函数讲解 <ctype.h>头文件函数
    目录​​​​​​​1.头文件2.isspace函数使用1.头文件以上函数都需要包括头文件<ctype.h>,其中包括isspace函数#include<ctype.h>2.isspace函数使用isspace函数用于判断字符是否为空白字符,而这里的空白字符,包括我们上一节讲过的部分控制字符,所以很好记忆我们......
  • isdigit函数讲解 <ctype.h>头文件函数
    目录1.头文件2.isdigit函数使用  1.头文件以上函数都需要包括头文件<ctype.h>,其中包括isdigit 函数#include<ctype.h>2.isdigit函数使用isdigit函数用于判断字符是否为阿拉伯数字0-9,如果是,则返回非0的数,如果不是则返回0比如:isdigit函数测量的一定是字......