【发布时间】:2016-09-16 18:20:24
【问题描述】:
我正在尝试在 Idris 中尽可能多地实现 System F(多态 lambda 演算)。我现在面临一个问题,我想用一个例子来证明:
data Foo = Bar Nat
Eq Foo where
(Bar _) == (Bar _) = True
data Baz: Foo -> Type where
Quux: (n: Nat) -> Baz (Bar n)
Eq (Baz f) where
(Quux a) == (Quux b) = ?todo
如您所见,任何两个Foo 值都是相等的。我现在希望能够在 Baz f 上定义相等时使用这个事实:Quux a 的类型为 Baz (Foo a),Quux b 的类型为 Baz (Foo b),并且 Foo a 和 Foo b 是相等的,所以我的直觉是这应该有效。但是编译器拒绝了它,说Baz (Foo a) 和Baz (Foo b) 之间存在类型不匹配。
有没有办法让它工作?这个问题阻止了我实现 alpha 等价。
【问题讨论】:
标签: dependent-type idris