【发布时间】:2026-01-18 02:05:01
【问题描述】:
我正在观看一个讲座,讲师说在 Agda 中定义 Pi 类型是不可能的,或者至少非常困难。但我坚信一定有办法。给定 Universe 中的类型和从类型到 Universe 的族,从类型到族中某个类型的任何函数都将属于 Pi 类型。所以我认为使用 lambda 是有意义的:
data Pi (A : Set) (B : A -> Set) : Set where
\ (a : A) -> (b : B a) : Pi A B
当我尝试加载它时,它给了我一个解析错误。我不确定为什么,也许它不希望 \ 成为类型构造函数,但将 lambda 视为函数类型的类型构造函数是有道理的。请注意,我在 Emacs 中为 Agda 使用了乳胶功能,但我认为我不能在堆栈溢出中编写乳胶。话虽如此,我尝试用大写的 lambda 替换小写的 lambda,看看它是否需要一个唯一的类型构造函数,但无济于事。
【问题讨论】:
-
“定义 Pi 类型”是什么意思?它们已经在语言中并且一直在使用。
-
@AndrásKovács 我猜你说这是一个无用的问题,但我只是对如果不内置定义会是什么样子感兴趣
-
您的构造函数具有 pi 类型,因此您并没有真正从较小的第一原则添加任何新内容。
-
我的意思是这个构造函数(嗯,下面@asr 的答案中的正确构造函数)需要包装一些已经是 Pi 类型的东西。如果您没有 Pi 类型,则无法键入构造函数。
-
@Cactus 是的,我明白你的意思了