Isabelle 伊莎贝尔:证明义务——用反例证明

Isabelle 伊莎贝尔:证明义务——用反例证明,isabelle,Isabelle,对于这样一个引理示例: lemma someFuncLemma: "∀ (e::someType) . pre_someFunc 2 e" 使用“快速检查”时,将显示以下内容: Auto Quickcheck found a counterexample: e = - 1 或者在使用挑剔时(这并不是本文的重点): 那么我怎样才能用这个反例来完成证明呢 正如你所看到的,我对伊莎贝尔和波斯特不太熟悉 谢谢你的帮助 反例的出现通常表明你将无法证明你的主张,除非可能 反例是假的 基本逻辑是不一

对于这样一个引理示例:

lemma someFuncLemma: "∀ (e::someType) . pre_someFunc 2 e"
使用“快速检查”时,将显示以下内容:

Auto Quickcheck found a counterexample:
  e = - 1
或者在使用挑剔时(这并不是本文的重点):

那么我怎样才能用这个反例来完成证明呢

正如你所看到的,我对伊莎贝尔和波斯特不太熟悉


谢谢你的帮助

反例的出现通常表明你将无法证明你的主张,除非可能

  • 反例是假的

  • 基本逻辑是不一致的


反例的出现通常表明你无法证明你的主张,除非可能

  • 反例是假的

  • 基本逻辑是不一致的


我假设你想证明存在一些
e
,这样
pre\u someFunc 2e
是假的。您必须将引理更改为使用exists而不是forall,并在谓词前面加not:

然后,您可以使用
规则exI[其中x=…]
提供反例,该规则将
exI
中的自由变量
x
设置为某个值。在Isabelle JEdit中按住
Ctrl
,点击
exI
可以查看它的定义以及如何使用
x

一个简单的例子:

lemma "∃n :: nat. ¬ odd n"
apply (rule exI[where x=2])
apply simp
done

我假设你想证明存在一些
e
,这样
pre_someFunc 2e
是假的。您必须将引理更改为使用exists而不是forall,并在谓词前面加not:

然后,您可以使用
规则exI[其中x=…]
提供反例,该规则将
exI
中的自由变量
x
设置为某个值。在Isabelle JEdit中按住
Ctrl
,点击
exI
可以查看它的定义以及如何使用
x

一个简单的例子:

lemma "∃n :: nat. ¬ odd n"
apply (rule exI[where x=2])
apply simp
done

或者挑剔/快速检查中存在错误。来自Nittick/quickcheck的反例不会经过Isabelle内核,也就是说,仅仅因为Nittick/quickcheck告诉您某些东西是反例,您不会自动得到Isabelle定理,即它实际上是一个反例。如果你想这样,你必须自己证明。(在大多数情况下,可以通过简单的重写实现)或者在挑剔/快速检查中存在错误。来自Nittick/quickcheck的反例不会经过Isabelle内核,也就是说,仅仅因为Nittick/quickcheck告诉您某些东西是反例,您不会自动得到Isabelle定理,即它实际上是一个反例。如果你想这样,你必须自己证明。(在大多数情况下,可以通过简单的重写实现)
lemma "∃n :: nat. ¬ odd n"
apply (rule exI[where x=2])
apply simp
done