簡體   English   中英

如何在Coq中證明反對稱

[英]How to prove antisymmetric in coq

通過說[m <= n]成立自然數上的關系[<=],如果存在一個[k]使得[m = k + n]。

反身和傳遞已被證明。

reflexive: ref: forall n:nat, n <= n.
transitive: trans: forall l m n:nat, l <= m -> m <= n -> l <= n

現在,如何證明所有forall lm : nat, l <= m -> m <= l -> m = l

我認為您的意思是“如果存在k使得n = m + k ,則m <= n成立”。

我需要證明反對稱性的唯一其他引理是:

Lemma le_S_n : forall m n, le (S m) (S n) -> le m n.

然后我的反對稱證明是歸納法。 這是完整的腳本:

Require Import Arith.

Definition le (m n :nat) := exists k, n = m + k.

Lemma le_refl : forall m, le m m.
Proof.
intro m; exists 0.
now rewrite <- plus_n_O.
Qed.

Lemma le_trans: forall m n p, le m n -> le n p -> le m p.
Proof.
intros m n p [k1 hk1] [k2 hk2]; exists (k1 + k2).
now rewrite plus_assoc, <- hk1.
Qed.

Lemma le_S_n : forall m n, le (S m) (S n) -> le m n.
Proof.
intros m n [k hk]; exists k.
simpl in hk.
now injection hk; intros.
Qed.

Lemma le_antisym: forall m n, le m n -> le n m -> m = n.
Proof.
induction m as [ | m hi]; destruct n as [ | n ]; simpl in *; intros h1 h2.
- reflexivity.
- destruct h2 as [k hk].
  simpl in hk; discriminate hk.
- destruct h1 as [k hk].
  simpl in hk; discriminate hk.
- now rewrite (hi n); [ reflexivity | apply le_S_n | apply le_S_n ].
Qed.

這是一個簡短的解決方案:

Require Omega.

Definition le (n m:nat)  := exists k, n + k = m.

Theorem le_nm_mn_eq: forall n m, le n m -> le m n -> n = m.
Proof.
  intros n m Hnm Hmn.
  inversion Hnm; inversion Hmn.
  omega.
Qed.

它使用歐米茄(Omega),這樣我就不必擺弄nat平等了。

暫無
暫無

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

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