首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Undersand一元关系与宇宙多态

Undersand一元关系与宇宙多态
EN

Stack Overflow用户
提问于 2017-01-22 06:56:42
回答 1查看 112关注 0票数 1

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

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

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

这是Pred的定义:

代码语言:javascript
复制
Pred : ∀ {a} → Set a → (ℓ : Level) → Set (a ⊔ suc ℓ)
Pred A ℓ = A → Set ℓ

-- Unary relations can be seen as sets

为什么我会想要这样的类型,这条评论是什么意思?它在任何地方都在使用,所以我不能在不理解的情况下继续。

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

代码语言:javascript
复制
record Space x ℓ : Set (Level.suc x ⊔ Level.suc ℓ)  where

这是什么魔法?我有点理解x是我们的“点”的级别,但是和结果类型是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-22 14:26:59

有关于二元关系的a related question

Curry–Howard interpretation下,每个Set类型的A (或者在全域多态设置中的Set ℓ )都是一个命题。因此,对于某些AA -> Set类型的P是在A的元素上定义的谓词。

例如,考虑一个谓词Positive,它只适用于某些suc n形式的自然数(我不在我的机器上,因此使用了n ):

代码语言:javascript
复制
data Positive : Nat -> Set where
  positive : forall n -> Positive (suc n)

positive nPositive (suc n)的一个(或者更确切地说,是)证明。有了Pred A = A -> Set,我们就可以把Positive的类型签名写成

代码语言:javascript
复制
data Positive : Pred Nat where

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

代码语言:javascript
复制
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是一个谓词,只要P对列表中的每个元素都成立,它就会对任何列表xs成立。使用Pred的通用多态定义,我们可以将All的类型签名写成

代码语言:javascript
复制
data All {a p} {A : Set a}
         (P : Pred A p) : Pred (List A) (p ⊔ a) where

(并明确指出All是一个谓词转换器)。所以Pred在很大程度上是一种符号上的便利。

至于宇宙的多态性,在旧的Agda维基中有一些docs。在您的示例中,x是点类型(X)所在的宇宙级别。Pred (Pred X ℓ) ℓ中使用-在X元素上定义的谓词上定义的谓词类型(我不能评论这个表达式的拓扑含义)。Set x位于Set (suc x)中,而Pred (Pred X ℓ) ℓ (展开为(X -> Set ℓ) -> Set ℓ)位于Set (suc ℓ)中,因此整个Space x ℓ位于Set (suc x ⊔ suc ℓ)中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41785429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档