为什么';直觉';在Coq的例子中起作用?

为什么';直觉';在Coq的例子中起作用?,coq,Coq,我的问题是:为什么“直觉”在我的例子中起作用 我想证明 Lemma eqb_false : forall n m : nat, eqb n m = false -> n <> m. 引理eqb_false:forall n m:nat,eqb n m=false->n m。 在最后一步,我可以看到 n : nat IHn : forall m : nat, (n =? m) = false -> n <> m m : nat IHm : (S n =? m

我的问题是:为什么“直觉”在我的例子中起作用

我想证明

Lemma eqb_false : forall n m : nat, eqb n m = false -> n <> m.
引理eqb_false:forall n m:nat,eqb n m=false->n m。 在最后一步,我可以看到

n : nat
IHn : forall m : nat, (n =? m) = false -> n <> m
m : nat
IHm : (S n =? m) = false -> S n <> m
============================
 (n =? m) = false -> S n <> S m
n:nat
IHn:forall m:nat,(n=?m)=false->n m
m:纳特
IHm:(SN=?m)=错误->SN m
============================
(n=?m)=false->S n S m
然后“直觉”/“第一顺序”/“自动”都能实现当前目标

但它们为什么起作用呢?Coq手册说他们会做一些搜索工作。这是否意味着它可以用其他一些简单的策略重写

谢谢大家!


编辑:可以看出,我在上面的证明中对n和m应用了归纳法。根据@Vinz的回答,没有必要进行这样的归纳过程
intros
在第一步和
intro
NM
的目标中,它将产生一个与H相矛盾的假设。

直觉
一阶
自动
这样的策略尝试用一些自动推理来解决你的目标,但是你总是可以用你手工制作的证据来替换他们的证据

在Coq的前一个版本中,您可以通过
info intuition
来获得校对脚本,但我听说它已经不起作用了。也许你可以试试。您总是可以在
直觉
之后
显示证明
,以获得证明术语,但它不会给出所使用的策略

在您的特殊情况下,通过从目标末尾引入
sn=sm
,在其上使用
injection
在上下文中获得
n=m
,然后推导出与
(n=?m)=false
的矛盾,证明非常简单

为xywang编辑:任何形式为
ab
的语句都只是
A=B->False
的语法糖。因此,
intros
策略可以应用于任何目标
P1->。。。Pn->AB
,带有
n+1
(注意
+1
)名称。例如,考虑:

=============================
 P -> Q -> A <> B

请您详细说明如何从当前目标中引入“sn=sm”好吗?我知道为什么这样做,但不知道哪些策略可以工作…XYWAN,我编辑了我的帖子更多的信息,毫不犹豫地多问,或阅读Coq的介绍,像Benjamin Pierce的软件基础教程。谢谢你的指导!请让我更清楚地回答:在推导(n=?m)=false的矛盾时,我应该重新引入(n=m)作为假设,然后将引理beq_nat_false应用于(n=?m)=false和最后的“矛盾”,对吗?我现在没有Coq客户机,但这似乎是正确的
p : P
q : Q
eqAB : A = B
=============================
False