在Agda中键入Hierarchy

时间:2013-04-10 11:24:54

标签: types hierarchy agda

我试图弄清楚类型层次结构在Agda中是如何工作的。

假设我定义了一个集合类型X:

X : Set 

然后继续构建归纳型

data Y : X -> Set where

X -> Set的类型是什么?是设置还是类型?

谢谢!

1 个答案:

答案 0 :(得分:12)

那么,为什么不问阿格达呢?我将为Emacs使用出色的Agda模式。我们从:

开始
module Hierarchy where

postulate
  X : Set

data Y : X → Set where
  -- empty

我们必须使用C-c C-l加载文件;这样可以检查文件,将?转换为空洞,进行语法高亮等等。

现在,C-c C-d有一个命令“推断(演绎)类型”,所以让我们使用:

> C-c C-d
Expression:
> Y
X → Set

是的,这是有道理的。我们定义了Y : X → Set,所以它应该不足为奇。我们再问一遍:

> C-c C-d
Expression:
> X → Set
Set₁

所以,你有它:Y : X → Set : Set₁


虽然第一部分回答了问题,并向您展示了如何自己检查这些内容,但每次这样做都会变得乏味,至少。以下是它的工作原理:

为避免悖论,我们需要

Set i : Set (i + 1)

它为您提供Set s的(无限)层次结构。如果您有Set : Set(Agda允许通过--type-in-type标记),您可能会导致this one之类的矛盾。

这也为我们提供了一个简单的函数规则:

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₁