Types Agda中的类型层次结构

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 我

我试图弄清楚类型层次结构在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
我们必须使用
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₁

非常感谢您的详细回答!