这是关于类别理论的初学者教科书的一个标准例子,认为预编号会产生一个类别(其中同源集hom(x,y)
是单例或空的,取决于是否{{1 }})。当尝试在coq中形式化这个想法时,很自然地会看到一个三x <= y
的箭头,其中(x,y,pxy)
(x y:A
是我们预先订购的类型)和{{ 1}}是A
的证据。当然,在尝试定义两个箭头pxy
和x <= 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
这似乎有效。这有点神奇和令人困惑,但我会绕过它。