为什么直觉'在Coq的例子中工作?

时间:2015-05-19 11:46:54

标签: coq

我的问题是:为什么直觉'在我的例子中有用吗?

我试图证明

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在第一步intron <> m的目标,它将与H产生矛盾的假设。

1 个答案:

答案 0 :(得分:6)

intuitionfirstorderauto等策略尝试通过一些自动推理来解决您的目标,但您可以随时用手工制作的一个替换其中一个证明。

在以前版本的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 <> Bn+1(请注意+1)名称。例如,考虑:

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

通过应用策略intros p q eqAB.,目标变为

p : P
q : Q
eqAB : A = B
=============================
False