Agda:证明,当值相等时,它们的构造函数参数是相等的

时间:2015-06-16 23:12:49

标签: types logic agda dependent-type formal-verification

我试图编写以下功能:

justEq : ∀ {A} -> (x y : A) -> (just x ≡ just y) -> (x ≡ y)
justEq x y pf = {!!}

我不知道怎么写这个。对我来说,直言不讳的是公理化,但编译器并不接受refl作为证据。

我经常需要证明这些事情,例如,如果两个非空列表相等,那么他们的头是相等的。

通用方法是什么?这与Conor McBride" green-goo"在构造函数的返回中有函数吗?

1 个答案:

答案 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