如何证明对于所有 n m, n <= m -> m <= n -> n = m

问题描述 投票:0回答:1

定理 le_trans: forall n m o, n <= m -> m <= o -> n <= o. Proof. intros n m o Lnm Lmo. generalize dependent Lnm.
概括依赖 n. 感应Lmo。 -介绍。应用Lnm。 -介绍。应用 le_S。适用国际人道主义法。应用Lnm。 问了。

如何证明: 定理 le_antisym: forall n m, n <= m -> m <= n -> n = m.

我不知道这两个命题之间是否有关系,是否需要用第一个命题来辅助证明第二个命题,如果有,如何证明,如果没有,如何证明

coq
1个回答
0
投票

这些问题很有趣,但常常被忽视。它们很大程度上取决于

<=
的定义。使用 StdLib 中的归纳表征,可以进行如下操作:

Fact le_trans n m p : n <= m -> m <= p -> n <= p.
Proof. 
  induction 2.
  + trivial.
  + now constructor.
Qed.

Fact le_n_Sn n : n <= S n.
Proof. do 2 constructor. Qed. 

Fact le_S_inv n m :
      n <= m
   -> match n, m with 
      | 0, _     => True
      | S _, 0   => False
      | S n, S m => n <= m
      end.
Proof.
  induction 1 as [ | m H _ ]; destruct n; auto.
  apply le_trans with (2 := H), le_n_Sn.
Qed.

Fact le_anti n m : le n m -> le m n -> n = m.
Proof.
  induction n in m |- *; destruct m;
    intros ?%le_S_inv ?%le_S_inv; tauto || auto.
Qed.

反演引理

le_S_inv
在这里是一个关键工具。它包括研究归纳谓词和参数形状的模式匹配之间的相互作用。

© www.soinside.com 2019 - 2024. All rights reserved.