簡體   English   中英

證明少於

[英]Proof about less than

我正在嘗試證明有關Coq中less_than一些定理。 我正在使用以下歸納定義:

Inductive less_than : nat->nat->Prop :=
   | lt1 : forall a, less_than O (S a)
   | lt2 : forall a b, less_than a b -> less_than a (S b)
   | lt3 : forall a b, less_than a b -> less_than (S a) (S b).

而且我總是需要顯示lt3的倒數,

Lemma inv_lt3, forall a b, less_than (S a) (S b) -> less_than a b.
Proof.
   ???

我被困住了,如果有人對如何進行操作有任何提示,將不勝感激。

(我的less_than歸納定義有less_than嗎?)

謝謝!

首先,在第二個構造函數是多余的意義上,您對less_than的定義有點不幸。 您應該考慮切換到更簡單的方法:

Inductive less_than : nat -> nat -> Prop :=
| ltO : forall a, less_than O (S a)
| ltS : forall a b, less_than a b -> less_than (S a) (S b)
.

然后,該反轉將與coq的反轉匹配,從而使證明變得微不足道:

Lemma inv_ltS: forall a b, less_than (S a) (S b) -> less_than a b.
Proof. now inversion 1. Qed.

第二個子句是多余的,因為對於每對(a, b) st。 你想要的證據less_than ab ,您可以隨時申請lt3 a時間,然后應用lt1 實際上,您的lt2是其他兩個構造函數的結果:

Ltac inv H := inversion H; subst; clear H; try tauto.

(* there is probably an easier way to do that? *)
Lemma lt2 : forall a b, less_than a b -> less_than a (S b).
Proof.
  intros a b. revert a. induction b; intros.
  inv H.
  inv H.
  apply ltO.
  apply ltS. now apply IHb.
Qed.

現在,如果您真的希望保留自己的特定定義,則可以嘗試以下方法:

Lemma inv_lt: forall a b, less_than (S a) (S b) -> less_than a b.
Proof.
  induction b; intros.
  inv H. inv H2.
  inv H. apply lt2. now apply IHb.
Qed.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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