Как можно сформулировать логику с зависимой типизацией в 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 ...
Googleвыполняет поиск «встраивания зависимых типов в Agda» и т. п. просто возвращает совпадения для зависимо-типизированного программирования в Agda ...