首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Monad是Set1?

为什么Monad是Set1?
EN

Stack Overflow用户
提问于 2016-06-01 00:15:27
回答 1查看 228关注 0票数 1

我一直在努力对Agda中的Monad打字机进行编码。我已经走了这么远:

代码语言:javascript
运行
复制
module Monad where
  record Monad (M : Set → Set) : Set1 where
    field
      return : {A : Set} → A → M A
      _⟫=_ : {A B : Set} → M A → (A → M B) → M B

所以Monad‘实例’实际上只是传递函数的记录。问题:为什么Monad Set1**?**的 of sort Set注释它会产生以下错误:

代码语言:javascript
运行
复制
The type of the constructor does not fit in the sort of the
datatype, since Set₁ is not less or equal than Set
when checking the definition of Monad

我应该经过什么思考过程来确定MonadSet1而不是Set

EN

Stack Overflow用户

回答已采纳

发布于 2016-06-01 01:59:57

Agda有一个无限层次的宇宙Set : Set1 : Set2 : ...来防止悖论(罗素悖论赫肯斯悖论)。_->_保留了这样的层次结构:(Set -> Set) : Set1(Set1 -> Set) : Set2(Set -> Set2) : Set3,即A -> B所在的宇宙取决于AB所在的宇宙:如果A大于B,那么A -> BA位于同一个宇宙中,否则A -> BB位于同一个宇宙中。

您正在对Set进行量化(在{A : Set}{A B : Set}中),因此return_⟫=_的类型位于Set1中,因此整个过程都在Set1中。对于显式宇宙,代码如下所示:

代码语言:javascript
运行
复制
TReturn : (Set → Set) → Set1
TReturn M = {A : Set} → A → M A

TBind : (Set → Set) → Set1
TBind M = {A B : Set} → M A → (A → M B) → M B

module Monad where
  record Monad (M : Set → Set) : Set1 where
    field
      return : TReturn M
      _⟫=_ : TBind M

更多关于Agda维基中宇宙多态性的信息。

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

https://stackoverflow.com/questions/37557568

复制
相关文章

相似问题

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