为什么 Agda 拒绝 Set₁ → Set₁?

Why is Agda refusing Set₁ → Set₁?

代码如下:

Continuation : Set → Set₁ → Set₁
Continuation R X = (X → R) → R

Selection : Set → Set₁ → Set₁
Selection R X = (X → R) → X

dagger : {R : Set} → Selection R → Continuation R
dagger S X k = k (S k)

出于其他原因,我需要延续和选择才能使用更高的宇宙。但随后 dagger 的定义引发了一个错误:

(Set₁ → Set₁) should be a sort, but it isn't when checking that the inferred type of an application Set₁ → Set₁ matches the expected type _16

在 Agda 中 _→_ 是函数 space 不属于任何类别,而是类型和 职能。我的猜测是您想要以下内容:

dagger : {R : Set} → ∀ X → Selection R X → Continuation R X
dagger X S k = k (S k)

即索引类型和索引保留函数的函数 space。

或者,您可以使用 stdlib 的 Relation.Unary 态射的概念并写成:

open import Relation.Unary

dagger : {R : Set} → Selection R ⊆ Continuation R
dagger S k = k (S k)