Isabelle 如何更换&x22C0;和⟹;带有∀;和⟶;假定
我是伊莎贝尔的新手,我对他们之间的关系有点(实际上,很多)困惑⋀ 及∀, 和之间⟹ 及⟶. 我有以下目标(这是一个高度简化的版本,我在一个真实的证明中得到了): 我想通过专门研究x和y来证明这一点⟦P y⟹ pz;P y⟧ ⟹ pz,然后使用ponens方法。这可以证明外观非常相似:Isabelle 如何更换&x22C0;和⟹;带有∀;和⟶;假定,isabelle,Isabelle,我是伊莎贝尔的新手,我对他们之间的关系有点(实际上,很多)困惑⋀ 及∀, 和之间⟹ 及⟶. 我有以下目标(这是一个高度简化的版本,我在一个真实的证明中得到了): 我想通过专门研究x和y来证明这一点⟦P y⟹ pz;P y⟧ ⟹ pz,然后使用ponens方法。这可以证明外观非常相似: ⟦∀x. P x ⟶ P z; P y⟧ ⟹ P z 但是我不能让它为上面的目标工作 有没有办法将前一个目标转化为后一个目标?如果不是,这是因为它们是逻辑上不同的语句,在这种情况下,有人能帮助我理解它们的区别吗?
⟦∀x. P x ⟶ P z; P y⟧ ⟹ P z
但是我不能让它为上面的目标工作
有没有办法将前一个目标转化为后一个目标?如果不是,这是因为它们是逻辑上不同的语句,在这种情况下,有人能帮助我理解它们的区别吗?这两个前提
!!十,。Px==>Py
和全部x。P x-->P y
在逻辑上是等价的,可以通过以下证明来证明
lemma
"(⋀x. P x ⟹ P y) ≡ (Trueprop (∀x. P x ⟶ P y))"
by (simp add: atomize_imp atomize_all)
lemma
"⟦⋀x. P x ⟹ P z; P y⟧ ⟹ P z"
apply (subst (asm) atomize_imp)
apply (unfold atomize_all)
apply (drule spec [of _ y])
apply (erule rev_mp)
apply assumption
done
然而,当我尝试用同样的推理来证明你的例子时,我遇到了一个问题。我打算做以下证明
lemma
"(⋀x. P x ⟹ P y) ≡ (Trueprop (∀x. P x ⟶ P y))"
by (simp add: atomize_imp atomize_all)
lemma
"⟦⋀x. P x ⟹ P z; P y⟧ ⟹ P z"
apply (subst (asm) atomize_imp)
apply (unfold atomize_all)
apply (drule spec [of _ y])
apply (erule rev_mp)
apply assumption
done
但是在unfolize\u all
Failed to apply proof method:
当尝试显式实例化引理时,我得到一个更清晰的错误消息,即
apply (unfold atomize_all [of "λx. P x ⟶ P z"])
屈服
Type unification failed: Variable 'a::{} not of sort type
我觉得这很奇怪,因为据我所知,每个类型变量都应该是排序类型
。我们可以通过添加显式排序约束来解决此问题:
lemma
"⟦⋀x::_::type. P x ⟹ P z; P y⟧ ⟹ P z"
然后证明工作如上图所示
长话短说。我通常使用Isar
结构化证明,而不是apply
脚本。然后,这些问题往往被避免。对于你的陈述,我真的会这么做
lemma
"⟦⋀x. P x ⟹ P z; P y⟧ ⟹ P z"
proof -
assume *: "⋀x. P x ⟹ P z"
and **: "P y"
from * [OF **] show ?thesis .
qed
或者更地道一些
lemma
assumes *: "⋀x. P x ⟹ P z"
and **: "P y"
shows "P z"
using * [OF **] .
C.Sternagel回答了你的标题问题“如何?”,这满足了你的最后一句话,但我继续根据他的回答填写一些细节,试图“帮助[你]理解差异” 有
==>
和-->
、元蕴涵和HOL蕴涵,并且它们都具有逻辑蕴涵的属性,这可能会令人困惑。(关于!!
和!
、meta all和HOL all,我没有说太多,因为关于==>
和-->
的内容大部分可以转移到他们身上。)
(注意:我尽可能将图形字符转换为等效的ASCII,以确保它们在所有浏览器中正确显示。)
首先,我提供一些参考:
- []Isabelle/Isar参考手册李>
- []HOL/HOL.thy
- []计算机科学中的逻辑,由Huth和Ryan编写
- []Wiki序列条目
- []Wiki直觉逻辑条目
==>
又有-->
的事实感到困惑。大部分的困惑都消失了,剩下的只是挖掘特定源语句含义的细节,比如C.Sternagel的第一个引理的公式
"(!!x. P x ==> P y) == (Trueprop (!x. P x --> P y))"
C.Sternagel不再花时间给我重要的答案,但他上面给你的公式与他刚才给我的公式相似,目的是让我相信公式中的所有自由变量都是普遍量化的
简短回答:与==>
之间的区别在于==>
(多少)扮演了旋转栅门符号的一部分,-
,在非广义序列中,右手侧只有一个结论。也就是说,Isabelle/Pure的元逻辑蕴涵运算符===>
用于定义Isabelle/HOL蕴涵对象逻辑运算符-->
,如HOL.thy
[]中的公理化中的impI
所示
在上面,我展示了另外三个公理的定义:mp
(modus ponuns)、iff
,以及True\u or\u False
(排除中间法则)。我这样做是为了反复演示如何使用==>
定义HOL逻辑的公理和运算符。我还加入了判断
,以表明Isar语言中使用了一些后续词汇
我还展示了公理True\u或\u False
来说明Isabelle/HOL逻辑有一个Isabelle/Pure没有的公理,即排除中间法则[]。这在回答你的问题“有什么不同?”
对我来说,a.Lochbihler最近的回答最终赋予了“直觉主义”的意义[]。我在伊莎贝尔的文学作品中多次看到“直觉主义”,但它并没有被理解
如果您能够理解下一个源代码中的差异,那么您可以看到=>
和-->
,以及类型prop
和bool
,其中prop
是元逻辑命题的类型,与bool
相反,这是逻辑命题的类型。在HOL对象逻辑中,False
表示任何命题Q::bool
。然而,False::bool
并不意味着任何命题Q::prop
类型prop
是元逻辑团队的重要组成部分代码>、==>
和==
theorem "(!!P. P::bool) == Trueprop (False::bool)"
by(rule equal_intr_rule, auto)
theorem HOL_False_meta_implies_any_prop_Q:
"(!!P. P::bool) ==> PROP Q"
(*Currently, trying by(auto) will hang my machine due to blast, which is know
to be a problem, and supposedly is fixed in the current repository. With
`Auto methods` on in the options, it tries `auto`, thus it will hang it.*)
oops
theorem HOL_False_meta_implies_any_bool_Q:
"(!!P. P::bool) ==> Q::bool"
by(rule meta_allE)
theorem HOL_False_obj_implies_any_bool_Q:
"(!P. P::bool) --> Q::bool"
by(auto)
当您了解到Isabelle/Pure meta logic==>
用于定义HOL逻辑以及其他差异时,例如由于没有排除中间值,meta logic较弱,那么您就了解到meta运算符之间存在显著差异,与HOL对象逻辑运算符相比,==>
和==
代码>、-->
和=
从这里开始,我写了更多的细节,部分是为了让任何专家相信我并没有完全滥用sequent
这个词,我在这里的用法主要是基于它在引用中的用法
试图不写一本书
我加入了一些引用和参考,以表明se和
(*line 166*)
axiomatization where
impI: "(P ==> Q) ==> P-->Q"
(*706*)
lemma --"atomize_all [atomize]:"
"(!!x. P x) == Trueprop (ALL x. P x)"
by(rule atomize_all)
(*715*)
lemma --"atomize_imp [atomize]:"
"(A ==> B) == Trueprop (A --> B)"
by(rule atomize_imp)
(*line 304*)
lemma --"allI:"
assumes "!!x::'a. P(x)"
shows "ALL x. P(x)"
by(auto simp only: assms allI
lemma impI_again:
assumes "P ==> Q"
shows "P --> Q"
by(simp add: assms)
P |- Q
-------
P --> Q
lemma "⟦⋀(x::'a). P x ⟹ P z ; P y⟧ ⟹ P z"
apply atomize
⟦ ∀x. P x ⟶ P z; P y ⟧ ⟹ P z