为什么';直觉';在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