如何在Agda中构建一个依赖类型的逻辑,但不“作弊”地重复使用Agda类型系统本身?
我可以很容易地定义一个独立类型的逻辑:
我也大致能够跟随LambdaPi教程实现Haskell中的依赖类型λ演算。但它是隐式类型的,不像我的Agda代码,我甚至不知道从哪里开始修改我的代码,因为迄今为止想到的路径导致无限回归:
谷歌搜索 "在Agda中嵌入依赖类型" 等相关内容,只会返回与Agda中的依赖类型编程相关的结果...
我可以很容易地定义一个独立类型的逻辑:
infixr 5 _⇒_
data Type : Set where
_⇒_ : Type → Type → Type
infix 4 _⊢_
data _⊢_ : List Type → Type → Set where
var : {a : Type} → [ a ] ⊢ a
λ' : {a b : Type} {γ : _} → a ∷ γ ⊢ b → γ ⊢ a ⇒ b
ply : {a b : Type} {γ δ : _} → γ ⊢ a ⇒ b → δ ⊢ a → γ ++ δ ⊢ b
weak : {a b : Type} {γ : _} → γ ⊢ b → a ∷ γ ⊢ b
cntr : {a b : Type} {γ : _} → a ∷ a ∷ γ ⊢ b → a ∷ γ ⊢ b
xchg : {a : Type} {γ δ : _} → γ ↭ δ → γ ⊢ a → δ ⊢ a
我也大致能够跟随LambdaPi教程实现Haskell中的依赖类型λ演算。但它是隐式类型的,不像我的Agda代码,我甚至不知道从哪里开始修改我的代码,因为迄今为止想到的路径导致无限回归:
data _⊢_ : List (? ⊢ ?) → (? ⊢ ?) → Set where ...
谷歌搜索 "在Agda中嵌入依赖类型" 等相关内容,只会返回与Agda中的依赖类型编程相关的结果...