簡體   English   中英

如何證明所有人n:nat,〜n

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM