我正在试图弄清楚如何在Coq中执行以下操作。说我们已经证明了以下内容:
trans_lemma:a = b - > b = c - > a = c
我们想用它来推断
b = a - > c = b - > a = c。
我似乎无法将“应用trans_lemma with ......”用于工作。看起来我需要在trans_lemma中重写方程式,以便变量以相同的顺序匹配。在没有责备引理的情况下,是否有一些微不足道的方法可以做到这一点,即我能否以某种方式将“对称”策略应用于表达式中的方程式?
(我知道我可以通过使用一些介绍和重写来证明我想要的而不使用引理,但我想知道是否有一种重用我已经拥有的结果的语法方法。)
答案 0 :(得分:1)
你不能在你的引理上应用一些神奇地改变它的形状的东西。你在这里可以做的是介绍你的平等b = a
和c =b
,然后应用你的引理,留下两个目标,可以通过=
的对称性轻松证明。
一般来说,我认为你不能以你希望的方式运用术语。
现在增加一些东西:
如果=
这里是Coq的相等,那么你实际上不需要引理,因为系统会给你传递。
你的引理应该是多态的:trans_lemma : forall {T} (a b c : T), a = b -> b = c -> c = d
。也许你告诉我们这个,因为你在一个部分,但是一旦你关闭了部分,你应该推断出第二个目标。
(您可能也有兴趣重用Transitive
中的Coq.Classes.RelationClasses
类型类...)