如何在精益中使用 Pi 类型编写非依赖产品的定义?
How to write a definition of the non-dependent product using Pi types in Lean?
我正在完成 "Theorem Proving in Lean" 的 chapter 7 – Inductive Types。
我想知道如何以更扩展或 "primitive" 的形式编写 依赖 非依赖产品的定义。
看起来教程中给出的定义自动推断出一些细节:
inductive prod1 (α : Type u) (β : Type v)
| mk : α → β → prod1
一些实验允许填写细节
inductive prod2 (α : Type u) (β : Type v) : Type (max u v)
| mk : α → β → prod2
但是以完全展开的形式给出定义,使用 Pi 类型无法进行类型检查:
inductive prod3 : Π (α : Type u) (β : Type v), Type (max u v)
| mk : α → β → prod3
prod3
的正确写法是什么?
最后,下面的定义是否等同于 prod1
和 prod2
,即类型检查器是否总能为 α
和 β
推断出正确的类型域?
inductive prod4 (α : Type) (β : Type)
| mk : α → β → prod4
首先,请注意您的类型没有任何依赖性。 相关产品 只是 Pi 类型本身的另一个名称(Pi 源自索引产品的常用数学符号)。
您的 prod2
类型是 prod1
的正确的最大显式版本。在 prod3
中,您将 α 和 β 从归纳 参数 更改为 指数 ,如您所见,这不适用于 universe-相关原因。通常,索引用于定义归纳类型族,如第 7.7 节所述。
最后,你在prod4
中使用的原子Type
是Type 1
的缩写。您可以使用 Type*
自动推断 Universe 参数。
我正在完成 "Theorem Proving in Lean" 的 chapter 7 – Inductive Types。
我想知道如何以更扩展或 "primitive" 的形式编写 依赖 非依赖产品的定义。
看起来教程中给出的定义自动推断出一些细节:
inductive prod1 (α : Type u) (β : Type v) | mk : α → β → prod1
一些实验允许填写细节
inductive prod2 (α : Type u) (β : Type v) : Type (max u v) | mk : α → β → prod2
但是以完全展开的形式给出定义,使用 Pi 类型无法进行类型检查:
inductive prod3 : Π (α : Type u) (β : Type v), Type (max u v) | mk : α → β → prod3
prod3
的正确写法是什么?
最后,下面的定义是否等同于 prod1
和 prod2
,即类型检查器是否总能为 α
和 β
推断出正确的类型域?
inductive prod4 (α : Type) (β : Type) | mk : α → β → prod4
首先,请注意您的类型没有任何依赖性。 相关产品 只是 Pi 类型本身的另一个名称(Pi 源自索引产品的常用数学符号)。
您的 prod2
类型是 prod1
的正确的最大显式版本。在 prod3
中,您将 α 和 β 从归纳 参数 更改为 指数 ,如您所见,这不适用于 universe-相关原因。通常,索引用于定义归纳类型族,如第 7.7 节所述。
最后,你在prod4
中使用的原子Type
是Type 1
的缩写。您可以使用 Type*
自动推断 Universe 参数。