ssreflect,Coq 的自动化,同时处理关于自然数的矛盾假设
Automation of ssreflect, Coq while dealing with contradicted hypotheses about nat numbers
在以下引理中使用 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
是否有一些自动化来证明这个引理?
我认为如果你删除一些符号和强制转换,你会更清楚地了解这个目标中发生的事情:
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
确实可以关闭目标
在以下引理中使用 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
是否有一些自动化来证明这个引理?
我认为如果你删除一些符号和强制转换,你会更清楚地了解这个目标中发生的事情:
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
确实可以关闭目标