使用'护航模式'获得模式匹配相等代码内的证明

时间:2017-11-12 15:26:12

标签: coq

这是关于类别理论的初学者教科书的一个标准例子,认为预编号会产生一个类别(其中同源集hom(x,y)是单例或空的,取决于是否{{1 }})。当尝试在coq中形式化这个想法时,很自然地会看到一个三x <= y的箭头,其中(x,y,pxy)x y:A是我们预先订购的类型)和{{ 1}}是A的证据。当然,在尝试定义两个箭头pxyx <= y的合成时,我们需要在(x,y,pxy)(或(y',z,pyz)否则)时返回Some箭头。这意味着我们能够测试函数内的相等性,并计算证明(我们的三元组的最后一个字段,这可能依赖于事物相等的事实)。

为了这个问题,假设我有:

y = y'

None

让我们假设我尝试的东西比定义箭头之间的组合更简单,通过编写一个函数,该函数在Parameter eq_dec : forall {A:Type}, A -> A -> bool. 时返回Axiom eq_dec_correct : forall (A:Type) (x y:A), eq_dec x y = true -> x = y. (* don't care about equivalence here *) 的证据。

x = y

当然,这不起作用,但可能会让你知道我想要实现的目标。任何建议都非常感谢。

编辑:好吧,这似乎是&#39;护航模式&#39;。我找到this link向我建议:

x = y

这似乎有效。这有点神奇和令人困惑,但我会绕过它。

0 个答案:

没有答案