ssreflect,Coq的自动化同时处理关于nat数的矛盾假设

时间:2017-07-18 15:17:44

标签: coq ssreflect

在以下引理中使用ssreflect时:

From mathcomp Require Import ssreflect ssrfun ssrbool ssrnat eqtype.

Lemma nat_dec n m: (m <= n) -> (~~ (m <= n)) -> False.
Proof.
  intros A notA.
  (* auto. *)
  red in A.
  red in notA.
  (* auto. *)
  rewrite -> A in notA.
  auto.
Qed.

我可以问为什么我注释掉的那些autos不能在这些证明状态下工作?在我看来,这些国家已经在上下文中观察到了矛盾。

ssreflect是否有一些自动化来证明这个引理?

1 个答案:

答案 0 :(得分:3)

我认为如果你删除一些符号和强制,你会更清楚地了解这个目标的进展情况:

Lemma nat_dec n m: (m <= n = true) -> (negb (m <= n) = true) -> False.

特别是,auto无法正常工作,因为它不足以推理negb的行为。但是,当您重写时,您的目标就变成:

Lemma nat_dec n m: (m <= n = true) -> (negb true = true) -> False.

因此,简化后,false = true位于上下文中,auto确实可以关闭目标。