我在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.对于这样一个简单的任务,这种方法对我来说似乎有点“非正统”。有没有更好/更简单的方法来做到这一点?
发布于 2017-04-11 00:04:27
是的,有更好的方法。你的引理是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的语法糖。
发布于 2017-04-11 00:02:44
我并没有经常练习haven,所以我不能真正判断这是否可以被打下来,但基本上,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.https://stackoverflow.com/questions/43333052
复制相似问题