![](/img/trans.png)
[英]Why can IHn' (n' = n' + 0) from induction be used to prove n = n + 0 in Coq?
[英]How to prove forall n:nat, ~n<n in Coq?
我已經困惑了幾個小時,我不知道該怎么證明
forall n:nat, ~n<n
在Coq。 我真的需要你的幫助。 有什么建議么?
這個引理在標准庫中:
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
第 m 個后繼,並且可以立即開始對n
歸納。
在induction n
,您需要證明基本情況:假設1 <= 0
,並且需要證明這是不可能的(目標是False
)。 通常,要將歸納假設分解為個案,您可以使用induction
策略或其變體之一。 該策略根據該假設構建了一個相當復雜的相關案例分析。 了解發生什么情況的一種方法是調用simple inversion
,這給您留下了兩個子目標:假設1 <= 0
的證明使用le_n
構造函數(需要1 = 0
,或者證明使用le_S
構造函數,這要求S m = 0
。 在這兩種情況下,要求顯然都與S
的定義矛盾,因此戰術discriminate
證明了這一目標。 除了使用simple inversion H
,您還可以使用inversion H
,在這種特殊情況下,它可以直接證明目標(不可能的假設情況非常普遍,並已融入成熟的inversion
策略中)。
現在,我們轉到歸納情況,在這里我們很快要從S (S n) <= S n
證明S n <= n
S (S n) <= S n
。 我建議您將其聲明為一個單獨的引理(首先要證明),可以將其概括為: forall nm, S n <= S m -> n <= m
。
Require Import Arith.
auto with arith.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.