【发布时间】:2018-05-16 18:11:11
【问题描述】:
假设我们想证明削弱Data.Fin 的上限不会改变数字的值。直观的表述方式是:
weakenEq : (num : Fin n) -> num = weaken num
现在让我们生成定义...等一下!让我们想一想那句话。 num 和 weaken num 有不同的类型。我们可以在这种情况下说明相等吗?
= 上的文档建议我们可以尝试,但我们可能想改用~=~。好吧,无论如何,让我们继续生成定义和大小写,结果
weakenEq : (num : Fin n) -> num = weaken num
weakenEq FZ = ?weakenEq_rhs_1
weakenEq (FS x) = ?weakenEq_rhs_2
weakenEq_rhs_1 洞中的目标是FZ = FZ,从价值的角度来看还是有道理的。所以我们乐观地用Refl替换了这个洞,但结果却失败了:
When checking right hand side of weakenEq with expected type
FZ = weaken FZ
Unifying k and S k would lead to infinite value
一个有点神秘的错误消息,所以我们想知道这是否真的与类型不同有关。
无论如何,让我们再试一次,但现在用~=~ 而不是=。不幸的是,错误仍然相同。
那么,如何陈述和证明weaken x 不会改变x 的值?这样做真的有意义吗?如果这是一个更大的证明的一部分,我可能想用Vect n (Fin (S k)) 和Vect n (Fin (S k)) 在原始向量上获得rewrite 和weaken,我该怎么办?
【问题讨论】:
标签: idris