如何在精益中使用 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" 的形式编写 依赖 非依赖产品的定义。

  1. 看起来教程中给出的定义自动推断出一些细节: inductive prod1 (α : Type u) (β : Type v) | mk : α → β → prod1

  2. 一些实验允许填写细节 inductive prod2 (α : Type u) (β : Type v) : Type (max u v) | mk : α → β → prod2

  3. 但是以完全展开的形式给出定义,使用 Pi 类型无法进行类型检查: inductive prod3 : Π (α : Type u) (β : Type v), Type (max u v) | mk : α → β → prod3

prod3的正确写法是什么?

最后,下面的定义是否等同于 prod1prod2,即类型检查器是否总能为 αβ 推断出正确的类型域?

  1. inductive prod4 (α : Type) (β : Type) | mk : α → β → prod4

首先,请注意您的类型没有任何依赖性。 相关产品 只是 Pi 类型本身的另一个名称(Pi 源自索引产品的常用数学符号)。

您的 prod2 类型是 prod1 的正确的最大显式版本。在 prod3 中,您将 α 和 β 从归纳 参数 更改为 指数 ,如您所见,这不适用于 universe-相关原因。通常,索引用于定义归纳类型族,如第 7.7 节所述。

最后,你在prod4中使用的原子TypeType 1的缩写。您可以使用 Type* 自动推断 Universe 参数。