【发布时间】:2017-04-28 12:22:28
【问题描述】:
我正在阅读 Idris 的书,并且正在做第一个证明练习。
通过证明same_lists 的练习,我能够像这样实现它,因为匹配Refl 强制x 和y 统一:
total same_lists : {xs : List a} -> {ys : List a} ->
x = y -> xs = ys -> x :: xs = y :: ys
same_lists Refl Refl = Refl
但是,当我尝试以相同的方式证明其他事情时,我会遇到不匹配的情况。例如:
total allSame2 : (x, y : Nat) -> x = y -> S x = S y
allSame2 x y Refl = Refl
编译器说:
Type mismatch between y = y (Type of Refl) and x = y (Expected type)
如果我在 = 之后进行大小写匹配,无论是显式还是使用 lambda,它都会按预期工作:
total allSame2 : (x : Nat) -> (y : Nat) -> x = y -> S x = S y
allSame2 x y = \Refl => Refl
这里有什么不同?
另一个有效的修改是隐含有问题的参数:
total allSame2 : {x : Nat} -> {y : Nat} -> x = y -> S x = S y
allSame2 Refl = Refl
【问题讨论】:
标签: idris