我试图编写以下功能:
justEq : ∀ {A} -> (x y : A) -> (just x ≡ just y) -> (x ≡ y)
justEq x y pf = {!!}
我不知道怎么写这个。对我来说,直言不讳的是公理化,但编译器并不接受refl作为证据。
我经常需要证明这些事情,例如,如果两个非空列表相等,那么他们的头是相等的。
通用方法是什么?这与Conor McBride" green-goo"在构造函数的返回中有函数吗?
答案 0 :(得分:3)
解决方案的基础是使用pf
等于{{1}的点图案,将refl
y
一起模式匹配 }(因为x
的类型!)。
refl
此时,右侧的洞的类型已统一为justEq : ∀ {A} -> (x y : A) -> (just x ≡ just y) -> (x ≡ y)
justEq x .x refl = {!!}
,因为模式匹配的(x ≡ x)
相等,这意味着您可以使用y = .x
作为一个良好的类型值,给予
refl