我不太理解 Coq 中类型类和依赖记录之间的区别。参考手册提供了类型类的语法,但没有说明它们到底是什么以及应该如何使用它们。经过一番思考和搜索后,发现类型类本质上 是 带有一点语法糖的依赖记录,这使得 Coq 能够自动推断一些隐式实例和参数。当任意给定上下文中只有一个可能的类型类实例时,类型类算法似乎运行得更好,但这并不是大问题,因为我们总是可以将类型类的所有字段移到其参数中,消除歧义。此外,
Instance
声明会自动添加到 Hints 数据库中,这通常可以简化证明,但有时也会导致证明失败,如果实例过于普遍且导致证明搜索循环或爆炸。还有其他问题我需要注意吗?在两者之间做出选择的启发式方法是什么?例如,如果可能的话,我只使用记录并将它们的实例设置为隐式参数,是否会失去什么东西?
times_3
的定义应该是@op _ _ n (op n n)
。或者也可以是op n (op n n)
。否则Coq(v.8.4)会产生与答案中相同的错误信息。 - Anton Trunov