在Coq中,我有两个假设H
和H0
,它们相互矛盾。问题是,对于某些专业化而言,它们只相互矛盾,而且在证据的这个时刻,背景并不是那么专业化。
此时我的证据上下文如下:
color : Vertex -> bool
v : V_set
a : A_set
x0, x1 : Vertex
H : v x0 -> v x1 -> a (A_ends x0 x1) \/ a (A_ends x1 x0) -> color x0 <> color x1
H0 : v x0 -> v x1 -> a (A_ends x0 x1) \/ a (A_ends x1 x0) -> color x0 = color x1
______________________________________
False
由于此证明是关于图形(v
=顶点集,a
=弧集,color
=顶点颜色),我可以很容易地显示自然的矛盾语言:假设某些图形包含顶点x0
和x1
(它们是相邻的),x0
和x1
不能同时具有相同和不同的颜色。因此,H
和H0
不能同时为真,因此当前背景暗示了目标。
我应该如何在Coq中进行此操作,而不是始终生成v x0
,v x1
和a (A_ends x0 x1) \/ a (A_ends x1 x0)
作为新的子目标?棘手的部分是:“假设某些图形存在v
和a
这样的形式”。
到目前为止,我尝试了auto, eauto, trivial, intuition, apply H in H0, contradiction H, omega
。
答案 0 :(得分:4)
通常,您需要确保您的上下文符合您的非正式推理。你说:
假设某些图形包含顶点
x0
和x1
(它们是相邻的),x0
和x1
不能同时具有相同和不同的颜色。
但是,这不是您的上下文所说的。您的上下文显示&#34;假设您有一个图形和两个顶点x0
和x1
(可能或可能不在该图的顶点集中)。如果发生x0
和x1
特别是在该图的顶点集中并且是相邻的,那么它们必须具有不同的颜色(这是H0
)。但是,在这种情况下,我们已经知道x0
和x1
具有相同的颜色(这是H1
)。&#34;绘制的明显结论不是荒谬,而是简单地说这些x0
和x1
不在图表上,或者不是相邻的。具体而言,图形可能为空,或者只有一个顶点而没有边缘。
我建议通过策略逐步完成证明策略,将每个上下文和目标转换回自然语言,并寻找从真正的定理到虚假定理的点。