下层一元关系与宇宙多态性

时间:2017-01-21 22:56:42

标签: agda

背景:我对Agda有一些基本的了解,而我正试图理解 这里的要点:

https://gist.github.com/copumpkin/5945905

但我在理解所有Pred内容和使用时遇到了问题 宇宙。

这是Pred的定义:

Pred : ∀ {a} → Set a → (ℓ : Level) → Set (a ⊔ suc ℓ)
Pred A ℓ = A → Set ℓ

-- Unary relations can be seen as sets

为什么我会想要这样的类型,这个评论意味着什么?它的存在 在任何地方使用,所以我无法在不理解的情况下继续前进。

接下来,有拓扑空间的记录定义:

record Space x ℓ : Set (Level.suc x ⊔ Level.suc ℓ)  where

这是什么魔法?我有点明白x是我们"积分的水平" 但是什么是和结果类型?

1 个答案:

答案 0 :(得分:2)

关于二元关系有a related question

A Set类型Set ℓ下(或宇宙多态设置中的P)下是一个命题。因此,某些A -> Set类型A的{​​{1}}是在A元素上定义的谓词。

考虑例如谓词Positive,仅对suc n格式的n的自然数字保留(我的机器之外的因此是ASCII):

data Positive : Nat -> Set where
  positive : forall n -> Positive (suc n)

positive nPositive (suc n)的(或更确切地说)证据。拥有Pred A = A -> Set后,我们可以将Positive的类型签名写为

data Positive : Pred Nat where

另一个例子是来自标准库中All模块的Data.List.All。它被定义为

data All {a p} {A : Set a}
         (P : A → Set p) : List A → Set (p ⊔ a) where
  []  : All P []
  _∷_ : ∀ {x xs} (px : P x) (pxs : All P xs) → All P (x ∷ xs)

All P是一个谓词,只要xs为列表的每个元素保留,就会保留任何列表P。使用Pred的Universe多态定义,我们可以将All的类型签名写为

data All {a p} {A : Set a}
         (P : Pred A p) : Pred (List A) (p ⊔ a) where

(并明确All是谓词变换器)。所以Pred主要是符号方便。

对于宇宙多态性,旧的Agda wiki中有一些Curry–Howard interpretation。在您的示例中,x是点的类型(X)所在的Universe级别。 中使用了Pred (Pred X ℓ) ℓ - 在X元素上定义的谓词上定义的谓词类型(我无法评论此表达式的拓扑意义)。 Set x位于Set (suc x),而Pred (Pred X ℓ) ℓ (X -> Set ℓ) -> Set ℓ位于Set (suc ℓ)Space x ℓ位于Set (suc x ⊔ suc ℓ),因此$_整个/位于${_%/*}