我的问题是:为什么直觉'在我的例子中有用吗?
我试图证明
Lemma 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
然后&#39;直觉&#39; /&#39; firstorder&#39; /&#39; auto&#39;所有工作都在目前的目标。
但为什么他们有效呢? Coq手册说他们会进行一些搜索工作。这是否意味着它可以用其他一些简单的策略重写?
谢谢!
编辑:可以看出我在上面的证明中对n和m应用了归纳法。根据@Vinz的回答,它没有必要进行这样的诱导过程。 intros
在第一步intro
在n <> m
的目标,它将与H产生矛盾的假设。
答案 0 :(得分:6)
intuition
,firstorder
或auto
等策略尝试通过一些自动推理来解决您的目标,但您可以随时用手工制作的一个替换其中一个证明。
在以前版本的Coq中,您可以info intuition
来获取校样脚本,但我听说它不再起作用了。也许你可以尝试一下。您可以在Show Proof
之后intuition
获得证明条款,但它不会为您提供所使用的策略。
在您的特定情况下,通过在目标末尾引入S n = S m
,使用injection
在其中获取n = m
,然后派生,证明非常简单与(n =? m) = false
矛盾。
为xywang编辑:任何形状A <> B
的陈述只是A = B -> False
的语法糖。因此,intros
策略可以应用于任何目标P1 -> ... Pn -> A <> B
,n+1
(请注意+1
)名称。例如,考虑:
=============================
P -> Q -> A <> B
通过应用策略intros p q eqAB.
,目标变为
p : P
q : Q
eqAB : A = B
=============================
False