如何解决Coq中的矛盾

时间:2020-07-22 06:44:48

标签: coq

我在假设中有陈述true <> false。我想证明 true = false。我能解决吗?问题在于,矛盾不能解决。

1 个答案:

答案 0 :(得分:1)

我同意您应该提供一个更好的例子。就是这样!您需要清楚... true <> false是在直线上方(例如假设)还是在直线下方(目标)?

我假设这是一个目标,因为作为假设,它实际上并没有告诉您任何信息(这只是重言式)。

如果这是一个目标:

Goal (true <> false)
intros contra; discriminate.

有许多处理矛盾的一般方法。区分和倒置很常见。但是一个更清晰的例子会更好。

一般需要注意的是A <> B只是A=B->False的一种表示法,这就是为什么上面的“ intros相反”起作用的原因,因为它提取了假设。如果您不确定该怎么做,则可以使用简介将等式放在首位,然后得出矛盾。

如果您在行上方有true <> true (这很重要),则可以应用它。

示例

Goal (true <> true -> 0 = 1).                                                                   
intros contra.
exfalso.
apply contra.
reflexivity.

exfalso清除当前目标并将其替换为False -当您有一个不可能的目标但假设存在矛盾时(在行上方),这很有用。 apply contra使用了一个事实,如我上面提到的,<>是-> False。