В Агда есть Set n. Насколько я понимаю, Set n расширяет иерархию типа типа Haskell до бесконечных уровней. То есть, Set 0 вселенная нормальных типов, Set 1 вселенная нормальных видов, Set 2 вселенная
Это определение min ниже работает на двух церковных номерах и возвращает наименее большой. Каждое число становится продолжением, которое отправляет его pred в другое, zig и zag, до тех пор, пока не бу
Вот определение похоже на тот, в Data.List.All: open import Data.Vec
data All {α π} {A : Set α} (P : A -> Set π) : ∀ {n} -> Vec A n -> Set π where
[]ₐ : All P []
_∷ₐ_ : ∀ {n x} {xs : Vec A
Скажем, у меня есть тип данных: data Term : Type -> Type where
Id : Term (a -> a)
...
App : Term (a -> b) -> Term a -> Term b
с доказательством чего-либо App: data So : Bool -> Type w
Зависимые типы часто рекламируются как способ, позволяющий утверждать, что программа соответствует спецификации. Так, например, вас попросят написать код, который сортирует список - вы можете доказать
Какова цель назначения типа So? Транслитерации в Agda: data So : Bool → Set where
oh : So true
So поднимает логическое суждение до логической единицы. В вводной статье Oury и Swierstra The Powe