在Coq我有兩個假設H
和H0
,這相互矛盾。問題是,他們只是爲了一些專業而互相矛盾,在這個證明的背景下,情況並不那麼專業化。Coq矛盾的假設
這時我的證明背景是這樣的:
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
。
恐怕你必須產生缺失的證明義務,否則證明爲什麼他們不需要。 Coq是關於_proof verification_所以你不能指望非正式推理在這裏繼續工作。如果不知道更多信息,很難知道,但是關鍵可能在於您遵循該目標的路徑。你寫下「假設」,以便假設,應該出現在某個地方,對嗎? – ejgallego
證明自動化的第一步是手動證明。所以,現在忽略了產生子目標的煩惱,你怎麼證明'v x0','v x1'和'a ... \/a ...'? –
我想我需要像'v'和'a'這樣的_specialization_,它具有所需的形式。非正式地說,這應該再好,「當這些假設一般存在時,那麼他們必須爲這個特殊情況而持有」。但是Coq在這裏不允許有這樣的專業化,因爲在其他假設中使用'v'和'a'。 –