lt_index在哪里?

时间:2016-08-03 23:06:54

标签: coq

我在coq中使用了一个名为lt_index的引理,我记得它说明了

n < 2 * m + 1 -> (n - 1) / 2 < m

现在,我不能再使用这个引理了,当我SearchAbout lt_index时,coq回答

Error: The reference lt_index was not found in the current environment.

我的导入如下

Require Import Coq.Numbers.Natural.Peano.NPeano.
Require Import Arith.

我错过了什么吗?

编辑:显然,我梦见这个lt_index引理并且从未存在过。无论如何,我想出了相同结果的证明,我添加了1 <= n作为前提条件。这是

Lemma lt_solve:forall (n m:nat), 1 <= n -> n < 2 * m + 1 -> (n - 1) / 2 < m.
Proof.
intros.
assert (n <= n - 1 + 1).
apply Nat.sub_add_le.
inversion H1.
rewrite <-H2.
rewrite H2 in H0.
rewrite plus_comm in H0.
assert (2*m+1=1+2*m).
apply plus_comm.
rewrite H3 in H0.
apply plus_lt_reg_l in H0.
apply Nat.div_lt_upper_bound in H0.
trivial.
discriminate.
rewrite plus_comm in H2.
rewrite (le_plus_minus_r 1 n) in H2.
eapply (le_lt_trans n m0 (S m0)) in H3.
rewrite H2 in H3.
contradict H3.
apply lt_irrefl.
apply lt_n_Sn.
trivial.
Qed.

如果你意识到这个证据有所改进,我很高兴听到它。

2 个答案:

答案 0 :(得分:2)

尽管尝试用手工解决这些问题是好的,但从长远来看,如果你真的想在其他方面工作,它会变得单调乏味。

有一些策略可以帮助你解决具有不等式的方程组。例如,您可以使用lia中的Psatzomega中的Omega中的策略。证明条款不是很好看,但如果这不重要,那么为什么不呢。

不幸的是他们没有处理分裂,所以他们无法解决这个系统,但是库中有一个可以用来摆脱/的引理。我通过Search ( _ / _ < _ ).

找到了它
Require Import Coq.Numbers.Natural.Peano.NPeano.
Require Import Psatz. (* this provides 'lia' for solving linear integer arithmetic *)

Lemma lt_solve:forall (n m:nat), 
   1 <= n -> n < 2 * m + 1 -> (n - 1) / 2 < m.
Proof.
   intros; apply Nat.div_lt_upper_bound; lia.
Qed.

答案 1 :(得分:0)

如果您出于某种原因希望获得&#34;手册&#34;解决方案,使用标准库,然后在这里。

Require Import Coq.Arith.Arith.

Lemma lt_solve : forall (n m:nat),
    1 <= n -> n < 2 * m + 1 -> (n - 1) / 2 < m.
Proof with auto.
  intros.
  apply Nat.div_lt_upper_bound...
  destruct n.
  - inversion H.
  - rewrite Nat.sub_succ.
    rewrite Nat.sub_0_r.
    rewrite (Nat.add_lt_mono_r _ _ 1).
    rewrite Nat.add_1_r...
Qed.