Я довольно новичок в теориях типов и зависимо-типизированном программировании, и недавно я экспериментировал с различными функциями Agda. Ниже приведен очень упрощенный пример, который я написал для типа записи C
, который содержит несколько записей компонентов и некоторые ограничения, с которыми мы можем доказать вещи.
open import Relation.Binary.PropositionalEquality
module Sample (α : Set) where
record A (type : α) : Set where
record B : Set where
field
type : α
record C : Set where
field
b₁ : B
b₂ : B
eq : B.type b₁ ≡ B.type b₂
conv : A (B.type b₁) → A (B.type b₂)
conv a rewrite eq = a
Мне кажется привлекательным, что ограничение eq : B.type b₁ ≡ B.type b₂
должно быть объявлено неактуальным путем добавления .
в начале (или, в последней версии dev 2.6.0, для замены отношением эквивалентности вида Prop
например,
data _≡_ {ℓ} {α : Set ℓ} (x : α) : α → Prop ℓ where
refl : x ≡ x
), так что два экземпляра типа C
с одинаковыми компонентами могут быть напрямую объединены через refl
независимо от различных доказательств eq
. Тем не менее, в любом случае, программа прекращает компиляцию, потому что я не могу сопоставить шаблон с не относящимся к делу значением / Prop
.
Я хотел бы знать, возможно ли, чтобы такая же функциональность была реализована в Agda каким-либо образом, или это вообще, почему невозможно переписать с не относящимися к доказательству отношениями эквивалентности в Agda (трудности технической поддержки, или это нарушает некоторые части теории типов Агды и т. д.)?