Иерархия типов в Агда

Я пытаюсь выяснить, как иерархии типов работают в Agda.

Предполагая, что я задаю тип набора X:

X : Set 

а затем приступим к построению индуктивного типа

data Y : X -> Set where

Каков тип X -> Set? Установлен ли он или Тип?

Спасибо!

Ответ 1

Хорошо, почему бы не спросить Агда? Я собираюсь использовать отличный режим Agda для Emacs. Начнем с:

module Hierarchy where

postulate
  X : Set

data Y : X → Set where
  -- empty

Мы должны загрузить файл с помощью C-c C-l; эта typechecks файл, превращает ? в отверстия, выделяет синтаксис и т.д.

Теперь существует команда "Infer (выводить) тип", доступный через 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), вы можете получить противоречие, например этот.

Это также дает нам простое правило для функций:

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₁