回答
這引理是在標準庫:
Require Import Arith.
Lemma not_lt_refl : forall n:nat, ~n<n.
Print Hint.
當中的結果是lt_irrefl
。意識到的更直接的辦法就是
info auto with arith.
證明了該目標,並說明如何:
intro n; simple apply lt_irrefl.
既然你知道在哪裏可以找到一個證明,我只是就如何做一個提示它從最初的原則(我認爲這是你作業的重點)。
首先,你需要證明一個否定。這幾乎意味着你推動n<n
作爲一個假設,並證明你可以推斷出矛盾。然後,在n<n
上推理,將其展開至其定義。
intros h H.
red in H. (* or `unfold lt in H` *)
現在您需要證明S n <= n
不會發生。要做到這一點從第一原則,你有兩個選擇:你可以嘗試導入n
,或者你可以嘗試導入<=
。謂詞通過歸納定義,通常在這些情況下需要對它進行歸納 - 也就是說,通過對假設的證明進行歸納推理。在這裏,儘管如此,你最終需要對n
進行推理,以表明n
不能成爲S n
的後繼者,並且你可以立即開始在n
上進行歸納。
induction n
之後,您需要證明基本情況:您有假設1 <= 0
,並且您需要證明這是不可能的(目標是False
)。通常,要將歸納假設分解爲案例,可以使用induction
策略或其變體之一。這種策略對假設構建了一個相當複雜的依賴案例分析。看看發生了什麼的一種方法是撥打simple inversion
,這留給你兩個子目標:或者假設1 <= 0
的證明使用le_n
構造函數,這要求1 = 0
,或者證明使用le_S
構造函數,這需要S m = 0
。在這兩種情況下,要求與S
的定義明顯矛盾,所以策略discriminate
證明了子目標。您可以使用inversion H
,而不是simple inversion H
,在這種特殊情況下,它直接證明了目標(不可能的假設情況非常普遍,並且已經融入了全面的inversion
策略)。
現在,我們轉到感應情況,我們很快來到我們想要從S (S n) <= S n
證明S n <= n
的點。我建議你把它作爲一個單獨的引理(首先要證明),這可以概括爲:forall n m, S n <= S m -> n <= m
。
Require Import Arith.
auto with arith.
- 1. 如何在Coq中證明(n = n)=(m = m)?
- 2. 證明所以(0 < m) ->(N ** M = S n中)
- 3. 證明是n^5 <= 5^N對於n> = 5
- 4. 證明5^n = o(n!)
- 5. 證明lg(n!)= O(n!)
- 6. 證明log(n!)是Ω(n log(n))
- 7. 如何證明Quicksort是O(n * lg n)有特殊情況?
- 8. 如何證明[在Coq證明助手]中的所有x,(R x \ /〜R x)?
- 9. 證明O(max {f(n),g(n)} = O(f(n)+ g(n))
- 10. 證明最大(O(f(n)),O(g(n)))= O(max(f(n),g(n))
- 11. 證明2 ^(n a)= O(2^n)?
- 12. Coq:我如何用「S n」替換「n + 1」這樣的詞?
- 13. 如何證明coq中的反對稱
- 14. 類型包含Coq中的N個元素的所有功能
- 15. 如何證明3^n不是O(n^2)?
- 16. 就在COQ證明
- 17. Rails - escape_javascript並不是所有的\ n \ n \ n \ n \ n
- 18. 證明任何a> b> 0,b^n在Big-O a^n
- 19. 如何證明西格馬(I/2^I)<= 2(i = 1至N)
- 20. 證明coq中列表中的所有元素
- 21. 在Coq中證明終止
- 22. 如何定義Coq中N個元素的有限集合?
- 23. 如何證明Coq中的證明定義
- 24. 證明或反駁n^2 - n + 2∈O(n)
- 25. 證明ñ^ K =Ω(C^N)
- 26. 證明(先前N)<= M選自正開始<=米
- 27. 下面的清單N的所有素數使用素證明
- 28. 在漸近分析中,證明:O表示大O. O(f(n)+ g(n))= O(max {f(n),g(n)})
- 29. 在Coq中的證明參數
- 30. Coq證明策略
它的工作原理。但是我想知道如果沒有Arith,你是否可以提供證明。對此,我真的非常感激。 –