我们目前正在更新精益社区网站,以描述如何使用精益4,但你今天在这里找到的大部分信息仍然描述了精益3。

非常欢迎Pull请求为精益4更新此页面。这个页面的底部有一个链接。

请访问瘦身者zulip在这个过渡时期,寻求任何你需要的帮助!

精益3的网站已存档.如果您需要链接到精益3特定资源,请链接到那里。

精益词汇表#

本文档收集了精益社区中可能遇到的术语的简短解释。

虽然下面的许多条目都有精确的技术定义,但我们更倾向于解释它们的会话用法,并链接其他参考资料以获取更多信息。

下面发现的少量链接表示尚未添加的条目,因此,在完成之前,它们还不会导致条目定义。要请求在此词汇表中添加其他条目,请随时提出问题.

此页面上的条目可以通过锚链接链接到(例如。https://leanprover-community.github.io/glossary.html#小部件).对于某些条目,可以在条目标题之前找到附加的更容易键入的锚——例如。#重量级橄榄球将导致射频识别/沉重的回流“条目。如果条目标题很长、包含反勾号或很难键入,新词汇表条目的作者应考虑添加这些附加锚。

属性#

一个或多个可用于精益的标签或标记宣言可能影响其行为或与之交互的其他精益对象的行为。属性可以在核心精益,在马特里布或在任何精益代码中。

应用属性可以通过在声明命令前面加上@[属性名称],或之后使用属性命令,如属性[属性名称]声明名称.

这个@[简单]例如,属性标记声明(通常是引理,定理定义)作为一名simp引理.

另请参见#

β还原#

中的特定简化操作依赖型理论(以及精益的实施),这可能是决定条款定义上相等.

更准确地说,它是简化表达式的过程,例如(λx,t)at[a/x],其中变量的外观x个在里面t吨已被替换为.

另请参见#

大型运营商#

A类区域设置在内部马特里布代数库,通过启用打开本地big_operators.

它使用字符。

粘合剂#

表达式,例如(a:α),【a:α】{a:α}对于任何标识符和类型α作为各种精益语法元素的一部分--声明,乐趣、量词和其他——表示将绑定在语法元素或声明主体中的标识符。

每种类型的绑定器对它是隐式绑定(不由调用方传递)、显式绑定还是通过绑定有不同的含义类型类推理.

在某些地方,尤其是在定义,不允许定义没有括号的“简单”活页夹,例如活页夹(没有显式类型)用于某些标识符.

捆绑与非捆绑#

给定一个数学对象O(运行)具有属性P(P),捆绑P(P)指创建精益结构包含的证据P(P)除了结构上定义所需的字段之外O(运行).

相反,非绑定结构只包含O(运行),并分别创建是_P可以应用于术语的命题O(运行).

作为一个具体示例群同态可以作为地图查看φ: G→H组之间,以及证据h:φ(a*b)=φ(a)*φ(b).捆绑群同态将同时包含φ小时作为字段,而非绑定字段则只包含φ,带有一个单独的is_群同态 宣言为了证明小时.

由于性能、风格或实施相关的原因,人们更喜欢捆绑或分装,以及灰色阴影,部分捆绑结构的某些部分,而其他部分则未捆绑。类型类在内部马特里布主要是半捆绑的,通常只分拆载体类型本身。mathlib中的形态通常是完全捆绑的,尽管这两种方法的痕迹都存在,并在下面的参考资料中进行了讨论。

另请参见#

隐藏物#

通常,对共享的预构建集的引用奥利安文件夹由建造马特里布连续集成每次将提交推送到其存储库时。

其目的是缓解每一种需求马特里布用户在本地构建(或重建)相同的Lean文件可能需要花费大量时间(在普通计算机上需要数小时)。

缓存是在前面提到的持续集成中构建的,mathlib的用户通常使用精益项目.

计算模式#

A类模式它由包含传递关系的表达式的连续变换序列组成,例如=,<或其他标记为反式 属性.它是通过计算关键字。

另请参见#

载体#

为了精益结构哪一个一种类型T型以及一些表示为附加字段的附加数学结构(例如。集团),这是类型T型基础元素的。

为了精益结构哪一个一套S公司以及一些表示为附加字段的附加属性(例如。子组),它是基础集S公司.

#

更全面地说,a类型分类(或类型类).

A精益结构谁的实例可以通过检索类型类推理.

区别于使用在面向对象语言中——函数式编程语言中的单词用法来自Haskell的类型类.

代码过梁#

A类代码过梁是一个短绒它试图发现内部精益代码中的无意错误马特里布.具体来说,mathlib包括精益计划的集合检查新mathlib代码中可能引入的各种潜在问题。偶尔会引入新的线头来检测其他类别的错误。Mathlib的持续集成确保任何新的此类代码通过定义的linters。可以使用诺林 属性.自动生成的nolint文件; 随着时间的推移,这个文件的长度应该趋于零,因为这些错误是固定的。

卷积和多项式相乘模式#

的子模式战术模式这有助于在假设或目标,以便重写或简化其中的目标部分。它是从战术模式通过卷积和多项式相乘关键字。

另请参见#

核心精益#

区别于马特里布或其他社区编写的精益代码,核心精益(或“核心库”)指的是精益本身分发时附带的精益部分。

从历史上看,即使是mathlib项目本身也是核心精益的一部分,为了加快开发速度,后来也被拆分为单独维护的项目。

一些基本的声明即使在分裂之后,仍然是核心精益的一部分。偶尔,如果与新开发的mathlib代码冲突,仍会从核心社区Lean 3存储库中删除或迁移其他引理和定义,并将其迁移到mathlib。

核心精益3的当前部分可以在精益3社区存储库,对于精益4同样地.

宣言#

精益环境中的单个精益运行时对象。

或者,模糊地,可以定义或声明这些对象的许多精益命令中的任何一个。

此类命令的示例有定义,定理,常数例子命令(在精益3中引理命令)等。

有关更多详细信息,请参阅精益文档.

依赖型理论#

A类类型理论在这种情况下,可以另外具有依赖于参数的类型,例如“日历月的天数”的类型,其特定值取决于特定的月份,因为不同的月份具有不同的天数。更多示例可以在下面的参考资料中找到。精益实施依赖型理论的基础是构造微积分允许在复杂的数学推理和软件验证中使用它。

另请参见#

钻石#

多重冲突的存在条款在typeclass中找到实例图表。钻石可能会在类型类推理,它试图构造类的单个术语,因此可能无法这样做。当不合格时,“钻石”通常指的是这种不受欢迎的情况,其中-定义菱形中的术语可能会导致错误,导致目标无法通过证明回流或者可能根本不相等。马特里布,钻石因其众多而丰富层次结构.修复或减少菱形通常涉及重构冒犯类的字段或实例优先级。跨越库边界的菱形——例如类型类图的一部分位于mathlib中,另一部分位于库中,取决于添加新实例或类的methlib——如果不进行修改,可能特别难以修复或避免。

另请参见#

点符号/广义场符号/广义投影#

语法糖允许以下符号((foo a b c).bar x.y).baz.

Lean对语法提供了两种解释foo.bar按钮:它可以表示声明酒吧在中foo公司名称空间,或者它可以是通用字段表示法。我们在这里对后者进行扩展。

假设foo公司具有类型C x1。。。x个,使用C类一些常数和x1。。。x个任意,并假设上下文中有一个名为钢筋它接受类型为的参数C x1。。。xn公司.然后foo.bar按钮糖是用来吃的吗C.bar foo公司.对于窗体调用foo.bar __通过(隐式或显式)论据,精益足够聪明,可以扩展到钢筋_。。。食品__,以便所有内容都能进行检查。在上述示例中,foo公司也可以是更复杂的表达式,例如中的函数应用程序(foo bar baz).quux.

相等的 #

与数学等式不同,相等的允许定义类型的等价或同余。需要注意的一件重要事情是相等的 保存数据而不仅仅是证据.

目标#

在Lean中交互式证明定理的上下文中,每个目标语句的证明都在进行中。

或者更广泛地说,从理论上讲,一种单独的类型学期将展出。对于命题,显示学期等价于上述的证明思想。

打高尔夫球#

使特定工作代码尽可能短的尝试或努力;在精益的背景下,通常是一个证明的长度,这是高尔夫球或优化。高尔夫球打样经常利用术语模式通常,简洁优先于可读性。这种模糊处理常常被有意或有利地用来向读者表明证明是机械的或琐碎的。

重的射频识别/沉重的回流 #

使用射频识别(或回流)当它被精益评估时,表现缓慢。一个沉重的射频测井在以下情况下发生射频识别要求一次执行多个定义简化步骤,从而产生一个很小但需要Lean进行大量计算以确保其类型检查的证明项。

本次Zulip讨论有一个特别慢的例子。

等级制度#

一组连续受到更多约束的类型类在相关的数学领域。马特里布,我们有代数层次结构(半环,戒指,领域, ...), 这个订单层次结构(预先订购,部分顺序(_O),线性订单, ...), 这个拓扑层次(t1_空间,t2空间,法线_空间, ...), 这个范畴层次(前加法的,阿贝尔的,单体的, ...) 而且还有标量层次结构(多个操作(_A),分布_多个操作,模块, ...), 这个范数层次以及之前的交叉点,如序代数层次,的拓扑代数层次和其他。

HoTT公司#

同伦类型理论,一个类型理论以包含额外的单价公理,这就明确了一个概念,即一个类型的两个不同实现在数学意义上也是相等的,这两个实现被认为是等价的。

在精益2中,内部有本地支持核心精益它本身是并排的基于同伦类型理论的库.

精益3内核引入了单子消除,这与HoTT的单价公理不一致。因此,核心精益3不再提供HoTT库。精益4也是如此。Lean 3的Lean 2 HoTT库的部分端口是在Gabriel Ebner和其他贡献者的外部项目.

作为一个具体的示例,有许多自然数类型的定义可以看作是构造等价的数学对象。核心精益有一个豌豆般的实施其中,以及马特里布还有一个基于二进制表示的这被证明是等效的。考虑到精益有了单价公理,这两种类型是等价的,但它们是不可证明的平等的作为类型。基于HoTT的语言(或库)还将这些类型称为相等。

国际商会,图标,国际奥委会,Ioo公司,Ici公司,Ioi公司,Iic公司,Iio公司 #

内部使用的速记符号马特里布指8种数学区间之一。8间隔类型,取决于间隔是否为c(c)失去了,o(o)笔或跑向两端的nfinity。通过调用每个间隔,名称变得紧凑+它如何在左边结束+它如何在右边结束。(ii)在命名约定中,它在两端表示无限间隔,但未使用。

另请参见#

信息视图#

在交互式编辑精益文件的上下文中,显示增量的窗口或界面目标状态、诊断、错误和精益小部件输出。

实例#

两个密切相关的概念之一:

内核#

在精益实施的背景下(和证明助理更一般地说)内核是验证每个证明正确性的核心组件。

与精益的规模相比,精益的核心实现相对较小战术实现代码[1^],或者与马特里布,这样可以更自信地证明证明没有错误,而不依赖于大型或复杂的更高级别的构造。

[1^]:这种相对较小且与能量无关的可验证性称为德布鲁因准则用于校对助理的实现

另请参见#

一起倾斜#

年会对于精益用户社区马特里布图书馆用户以及更广泛的定理证明者社区。

之前的会谈或活动介绍在社区YouTube频道上共享.

皮棉#

A类短绒是一个查找代码中难以发现的错误的小程序。马特里布定义两者风格短绒代码过梁.Mathlib在每个CI运行提交拉请求时。

马特里布#

A类社区维护的大型数学收藏精益4。

数学实验室3#

精益3的弃用数学库。

马特波特#

A类工具用于将精益3代码自动或半自动翻译为精益4代码。它包括精益4的全自动生成奥利安档案来自精益3源文件(二进制端口)以及尽最大努力将精益3源代码转换为精益4源代码(合成端口).从mathport工作和数学实验室4通常会导致mathlib的后端口更改,从而将Lean 3代码带入更具未来兼容性的状态。

模式#

在编写精益代码的上下文中,一组相关的语法元素或关键字,它们使形式推理或构造具有特定风格证明条款高效。精益,尤其限于马特里布,具有少量此类模式--战术模式,术语模式,计算模式转换模式.特定模式可能会朝着特定类型的目标更容易的。然而,在构造证明条款.

模块#

包含精益源代码的单个文件。

不要误会模块在数学中,即向量空间的推广。

模块docstring#

模块-级别注释总结了文件中的内容。我们要求每个文件都有一个,但是一些旧文件仍然没有。

MWE公司#

最小工作示例这是一种通过将精益代码片段简化为其基本部分而更容易获得帮助的方法,同时仍然可以由其他人运行。

有关更多信息,请访问MWE页面.

非终端简单 #

调用简单战术,这不是对某个特定调用的最后一个战术子目标,也不使用仅限simp明确限制simp引理它考虑了一下。非终端简单避免使用,因为它们很难维护,因为它们的行为或运行时会随着mathlib添加或修改简单随时间变化的引理。

另请参见#

这个“非终结符简单“节简单文档

奥利安锉#

Lean生成的缓存、编译的二进制文件,作为构建Lean的一部分模块.奥利安文件与构建它们的特定精益版本相关联,并且它们的名称与它们对应的模块相匹配(因此,一个名为foo.lean(美食)将有相应的foo.olean公司文件)。构建奥利安文件可以手动完成(例如。精益--使foo.lean)但对于协作项目,如马特里布它们是通过CI公司作为共享奥利安缓存,然后可以由每个mathlib用户简单地检索。

橙色地狱酒吧#

在VSCode(或其他编辑器)中对Lean进行交互式编辑通常反应相当迅速。

橙色地狱酒吧然而,偶尔也会出现这样的情况,即精益文件旁边的侧边栏中的橙色条不会消失或更新。通常,这些条形图表示Lean仍在评估文件的哪些部分,但如果这些条形图持续存在,则表示没有取得进展。修复这些栏通常可以通过关闭任何不活动的编辑器选项卡,然后打开VSCode命令调色板来完成(ctrl-shift-pcmd-移位-p)和运行精益:重启.发生这种情况的另一个常见原因是,如果Lean必须(重新)编译所有导入的马特里布由于一组不匹配的缓存的 奥利安档案.在这些情况下,确保mathlib缓存通过leanpkg配置&&leanproject get-mathlib-cache应该解决这个问题。

性能#

命题等式.两个学期a b:α如果我们能证明a=b.这比定义的句法平等。

另请参见#

平等、规范和实施,来自Xena项目

简单引理#

带有标记的引理属性这使得它能够与简单战术。

很好简单引理引导简单将复杂表达式简化为简单表达式的策略,通常到简单战术本身就能够完成许多目标。

有关更多详细信息,请参阅简单mathlib文件.

简单-正规形式#

内部约定马特里布用于在单个常规形式中表达具有多种等价形式的命题。

有关示例和更多详细信息,请参阅这个简单第页.

风格短绒#

A类风格短绒是一个短绒试图确保内部代码的外观或风格一致马特里布,而不影响其工作行为。具体来说,mathlib包括一个简短的Python程序它检查行的长度是否小于100个字符,每个文件是否有模块docstring等。Mathlib的持续集成确保新代码通过定义的linter。允许的样式linting异常存储在样式异常文件在存储库中。

战术模式#

A精益模式其特点是依赖序列战术这通常有助于进行与基于纸张的推理非常相似的证明,尽管经常使用复杂的策略来自动完成繁琐的证明部分。有多种方法可以进入战术模式.可以使用通过关键字来自术语模式尽管在精益3中,它通常是通过开始。。。结束只要它的主体由多个命令组成,就阻止它。其他模式也可以在其中穿插,通常是为了协同产生可理解、高效、简短或可读的整体证明。最终,战术模式块的结果是学期通过其内部的策略进行组合。

另请参见#

术语模式#

A精益模式它组装单个学期通过使用函数子表达式。与…对比战术模式,术语模式证明通常长度较短,但对人类来说可能更难阅读。有多种方式可以进入术语模式。的主体宣言以术语模式开始,或在战术模式它通常使用准确的 战术.有效项模式证明通常有助于规范高尔夫.

命令,如,足够了、和显示可用于编写结构化术语模式证明,该证明比纯证明术语更清晰。

TPIL公司#

"精益中的定理证明Jeremy Avigad、Leonardo de Moura和Soonho Kong编写的免费在线教科书,“旨在教您开发和验证精益证明”。首先简单介绍类型理论在Lean中使用,文本继续解释如下主题战术,归纳类型、和类型类.

类型理论#

包含两种基本对象的形式系统,条款和类型。它也可以指这类语言的研究领域,因为特定类型理论可能包含的各种附加属性或特征之间存在细微差别。

Lean的依赖的与集合论相比,类型论是其数学基础体系的基础。在集合论的基础上,所有对象在形式上都是由一种单一的原始对象集合构成的。关于构造集是否是其他集的成员的一个原因。这种隶属度概念可能会被问及任何两个形式集,它们可以使语句具有形式上的意义,即使它们对人类来说在数学上没有意义——例如,询问数字2是否是数字37的成员(定义了数字理论上设定).相比之下,在类型论中,每个术语都有一个相关的类型,陈述或命题本身也是如此。例如,自然数的类型(in马特里布,),或命题类型(道具),或的类型证据属于2 + 2 = 4、或中函数的道具(ℕ → 道具),并可以构造这些类型的术语--可能是术语2,2 + 2 = 37,射频识别、和λn,真分别是。不是每个学期然而,一种类型,因此与上述集合论困难相比,人们可能不会构造语句来询问37是否属于类型2如果这样做没有意义。

unicode缩写#

在编辑精益文件的上下文中,缩写是一种使用描述性快捷方式输入标准键盘布局中通常没有的符号的方法。

例如,可以使用序列输入不相等符号“≠”\neq(国家标准).

可以找到缩写(及其替换)的完整列表在中vscode含义4储存库.

白色荧光灯#

Lean表达式位于弱水头标准形,通常缩写为白色荧光灯,如果它符合下面链接的资源中提到的一些标准化标准。非正式地,whnf中的表达式已对其最外层进行了求值,但内部子表达式可能尚未求值。

它也可以指将表达式简化为这种形式的命令。

另请参见#

小装置#

一个可扩展的框架,用于通过精益代码定义交互式、组件化的图形元素信息视图在交互式定理证明中。

小部件还可以指由上述框架呈现的单个图形元素。

小部件提供了一种机制来显示在交互式定理证明过程中更新的附加上下文或信息。

精益3和精益4都提供了支持,尽管具有不同的现成功能。

另请参见#