【发布时间】:2016-07-12 14:00:37
【问题描述】:
我想知道 Agda 中是否有任何类似于 Haskell 的 deriving Eq 子句的东西 --- 然后我在下面也有一个相关的问题。
例如,假设我有一种玩具语言的类型,
data Type : Set where
Nat : Type
Prp : Type
然后我可以通过模式匹配和C-c C-a来实现可判定相等,
_≟ₜ_ : Decidable {A = Type} _≡_
Nat ≟ₜ Nat = yes refl
Nat ≟ₜ Prp = no (λ ())
Prp ≟ₜ Nat = no (λ ())
Prp ≟ₜ Prp = yes refl
我很好奇这是否可以机械化或自动化,类似于在 Haskell 中完成的方式:
data Type = Nat | Prp deriving Eq
谢谢!
当我们讨论类型时,我想将我的形式类型实现为 Agda 类型:Nat 只是自然数,而 Prp 是小命题。
⟦_⟧Type : Type → Set ?
⟦ Nat ⟧Type = ℕ
⟦ Prp ⟧Type = Set
很遗憾,这不起作用。我试图通过提升来解决这个问题,但失败了,因为我不知道如何使用水平提升。任何帮助表示赞赏!
上述函数的一个示例用法是,
record InterpretedFunctionSymbol : Set where
field
arity : ℕ
src tgt : Type
reify : Vec ⟦ src ⟧Type arity → ⟦ tgt ⟧Type
谢谢你逗我开心!
【问题讨论】: