Types Agda中的类型层次结构
我试图弄清楚类型层次结构在Agda中是如何工作的 假设我定义了一个集合类型X:Types Agda中的类型层次结构,types,hierarchy,agda,Types,Hierarchy,Agda,我试图弄清楚类型层次结构在Agda中是如何工作的 假设我定义了一个集合类型X: X : Set 然后继续构造一个归纳类型 data Y : X -> Set where X->Set的类型是什么?它是固定的还是类型的 谢谢大家! 那么,为什么不问问Agda自己呢?我将为Emacs使用优秀的Agda模式。我们从以下几点开始: module Hierarchy where postulate X : Set data Y : X → Set where -- empty 我
X : Set
然后继续构造一个归纳类型
data Y : X -> Set where
X->Set的类型是什么?它是固定的还是类型的
谢谢大家! 那么,为什么不问问Agda自己呢?我将为Emacs使用优秀的Agda模式。我们从以下几点开始:
module Hierarchy where
postulate
X : Set
data Y : X → Set where
-- empty
我们必须使用C-C-l
加载文件;这种类型检查文件,将?
变为洞,进行语法突出显示等
现在,有一个命令“推断(推断)类型”可通过C-C-d
获得,因此让我们使用它:
> C-c C-d
Expression:
> Y
X → Set
对,这是有道理的。我们定义了Y:X→ 设置
,所以这并不奇怪。让我们再问一次:
> C-c C-d
Expression:
> X → Set
Set₁
所以,你有了它:Y:X→ 套装:套装₁代码>
虽然第一部分回答了这个问题,并向您展示了如何亲自检查这些内容,但至少每次这样做都会很枯燥。下面是它的工作原理:
为了避免悖论,我们需要
Set i : Set (i + 1)
这为您提供了Set
s的(无限)层次结构。如果您有Set:Set
(Agda通过--type-in-type
标志允许该设置),那么您可以派生如下矛盾
这也为我们提供了一个简单的函数规则:
A : Set i
B : A → Set j
(a : A) → B a : Set (max i j)
将此应用于您的示例:
X : Set
Set : Set₁
X → Set : Set (max 0 1)
X → Set : Set₁
非常感谢您的详细回答!