【问题标题】:Why is this not a valid definition of dependent function types in agda?为什么这不是 agda 中依赖函数类型的有效定义?
【发布时间】: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 是的,我明白你的意思了

标签: lambda types agda


【解决方案1】:

修正: Pi A B的错别字后可以使用大写的lambda,即

data Pi (A : Set) (B : A -> Set) : Set where
  Λ : ((a : A) -> B a) -> Pi A B

【讨论】:

    最近更新 更多