使用;对称性“;在Coq表达式中

使用;对称性“;在Coq表达式中,coq,Coq,我正试图找出如何在Coq中执行以下操作。假设我们已经证明了以下几点: 反引理:a=b->b=c->a=c 我们想用它来推断 b=a->c=b->a=c 无论我做什么,我似乎都不能让“应用trans_引理…”来工作。看起来我需要用反引理重写方程,这样变量就会以相同的顺序匹配。是否有一些简单的方法可以做到这一点而不必责备引理,例如,我是否可以对表达式中的方程应用“对称”策略 (我知道我可以不用引理证明我想要的东西,只需使用一些介绍和重写,但我想知道是否有一种语法方法可以重用我已经得到的结果。)你不能

我正试图找出如何在Coq中执行以下操作。假设我们已经证明了以下几点:

反引理:a=b->b=c->a=c

我们想用它来推断

b=a->c=b->a=c

无论我做什么,我似乎都不能让“应用trans_引理…”来工作。看起来我需要用反引理重写方程,这样变量就会以相同的顺序匹配。是否有一些简单的方法可以做到这一点而不必责备引理,例如,我是否可以对表达式中的方程应用“对称”策略


(我知道我可以不用引理证明我想要的东西,只需使用一些介绍和重写,但我想知道是否有一种语法方法可以重用我已经得到的结果。)

你不能对引理应用某些东西,从而神奇地改变它的形状。这里你可以做的是引入你的等式
b=a
c=b
,然后应用你的引理,给你留下两个目标,这两个目标很容易被
=
的对称性所证明

总的来说,我不认为你能以你希望的方式运用战术


现在还有几件事:

  • 如果这里的
    =
    是Coq等式,实际上你不需要引理,因为传递性是由系统给你的

  • 你的引理应该是多态的:
    反引理:对于所有{T}(abc:T),a=b->b=c->c=d
    。也许你给我们看这一个是因为你在一个部分,但是一旦你结束了这个部分,你应该推断出第二个目标

(您可能还对重用
Coq.Classes.RelationClasses
中的
Transitive
类型类感兴趣。)