证明Ssreflect中的简单不等式

时间:2017-04-10 21:19:16

标签: coq ssreflect

我在Coq中使用MathComp库进行反射时遇到了一些非常简单的证据。

假设我想证明这个引理:

From mathcomp Require Import ssreflect ssrbool ssrnat.

Lemma example m n: n.+1 < m -> n < m.
Proof.
      have predn_ltn_k k: (0 < k.-1) -> (0 < k).
          by case: k.
      rewrite -subn_gt0 subnS => submn_pred_gt0.
      by rewrite -subn_gt0; apply predn_ltn_k.
Qed.

这种做法似乎有点“非常规”&#34;对我这么简单的任务。有更好/更简单的方法吗?

2 个答案:

答案 0 :(得分:5)

是的,还有更好的方法。你的引理是ltnW : forall m n, m < n -> m <= n的一个特例:

Lemma example n m : n.+1 < m -> n < m.
Proof. exact: ltnW. Qed.

这是有效的,因为n < m实际上是n.+1 <= m的语法糖。

答案 1 :(得分:1)

我没有练习ssreflect很多,所以我无法确定这是否可以打高尔夫但基本上是n < n.+1 < m

Require Import mathcomp.ssreflect.ssrnat.
Require Import mathcomp.ssreflect.ssrbool.
Require Import mathcomp.ssreflect.ssreflect.

Lemma example m n: n.+1 < m -> n < m.
Proof.
move => ltSnm; apply: ltn_trans; by [apply ltnSn | apply ltSnm].
Qed.