我是Isabelle新手,我对⋀和∀之间以及⟹和between之间的关系感到困惑(实际上,很多)。
我有以下目标(这是我在真实证明中最终得到的高度简化的版本):
⟦⋀x. P x ⟹ P z; P y⟧ ⟹ P z
我想通过专业化x与y得到⟦Py⟹Pz来证明; Py⟧⟧Pz,然后使用modus ponens。这有助于证明非常相似:
⟦∀x. P x ⟶ P z; P y⟧ ⟹ P z
但我无法让它为上述目标而努力。
有没有办法将前一个目标转变为后者?如果不是,这是因为它们在逻辑上是不同的陈述,在这种情况下有人可以帮助我理解差异吗?
答案 0 :(得分:5)
可以通过以下证明显示两个前提!!x. P x ==> P y
和ALL 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
但在unfold atomize_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
我发现这很奇怪,因为据我所知,每个类型变量应该是排序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 **] .
答案 1 :(得分:2)
C.Sternagel回答了你的标题问题"如何?",这满足了你的最后一句话,但我继续根据他的回答填写一些细节,试图帮助[#34;你了解差异"。
令人困惑的是,==>
和-->
,元蕴涵和HOL蕴涵,并且它们都具有逻辑蕴涵的属性。 (我不会对!!
和!
,meta-all和HOL-all说太多,因为关于==>
和-->
的所说的可以主要是转移给他们。)
(注意:我尽可能将图形字符转换为等效的ASCII,以确保它们在所有浏览器中都能正确显示。)
首先,我提供一些参考资料:
如果你理解了一些基础知识,那么同时存在==>
和-->
这一事实并不令人困惑。大部分的混乱都离开了,剩下的只是挖掘特定源语句含义的细节,比如C.Sternagel的第一个引理的公式。
"(!!x. P x ==> P y) == (Trueprop (!x. P x --> P y))"
C.Sternagel停止花时间给我重要的答案,但他给你的上述公式与他刚才给我的相似,以说服公式中的所有自由变量都是普遍量化的。
简短回答:==>
和-->
之间的区别在于==>
(有点)扮演旋转门符号|-
的一部分一个非广义的序列,其中右边只有一个结论。也就是说,==>
,Isabelle / Pure的元逻辑蕴涵运算符,用于定义Isabelle / HOL蕴涵对象逻辑运算符-->
,如下所示impI
axiomatization
[2]中的HOL.thy
。
(*line 56*)
typedecl bool
judgment
Trueprop :: "bool => prop"
(*line 166*)
axiomatization where
impI: "(P ==> Q) ==> P-->Q" and
mp: "[| P-->Q; P |] ==> Q" and
iff: "(P-->Q) --> (Q-->P) --> (P=Q)" and
True_or_False: "(P=True) | (P=False)"
上面,我展示了其他三个公理的定义:mp
(modus ponuns),iff
和True_or_False
(排除中间的法则)。我这样做是为了反复说明如何使用==>
来定义HOL逻辑的公理和运算符。我还投入了judgement
来表明在Isar语言中使用了一些后续词汇。
我还展示公理True_or_False
,以证明伊莎贝尔/ HOL逻辑具有Isabelle / Pure没有的公理,被排除在中间的法则[5]。这对于回答你的问题非常重要"有什么区别?"
这是A.Lochbihler最近的一个答案,最终给我的意思是直觉主义" [5]。我曾多次见过"直觉主义"在伊莎贝尔的文献中,但它并没有沉入其中。
如果你能理解下一个来源的差异,那么你可以看到==>
和-->
之间以及类型prop
和{{之间存在很大差异1}},其中bool
是元逻辑命题的类型,而不是prop
,这是HOL逻辑命题的类型。在HOL对象逻辑中,bool
表示任何命题False
。但是,Q::bool
并不代表任何命题False::bool
。
类型Q::prop
是元逻辑团队prop
,!!
和==>
的重要组成部分。
==
当您了解Isabelle / Pure元逻辑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)
用于定义HOL逻辑以及其他差异时,例如由于没有排除中间而导致元逻辑较弱,那么您理解那里与HOL对象逻辑运算符==>
,!!
相比,元运算符==>
,==
和!
之间存在显着差异,和-->
。
从这里开始,我提供了更多详细信息,部分是为了说服任何专家我没有完全滥用=
这个词,我在这里使用的主要是基于它如何用于参考[3, Huth and Ryan]。
我引用一些引用和引用来表明序列和sequent
之间存在关系。
从我的研究中,我无法看到“" sequent"是标准化的。据我所知,在[3.pg 5]中,Huth和Ryan使用" sequent"表示在右侧只有一个结论的序列。
......我们用
表示这个意图phi1,phi2,...,phiN | - psi
此表达式称为后续表达式;如果可以找到证据,则有效。
更为狭隘的后续定义,其中右侧只有一个结论,与==>
的使用非常匹配。
我们可以责怪L.Paulson通过将元逻辑与对象逻辑分开来混淆我们,尽管我们可以感谢他为我们提供了一个更大的逻辑操场。
也许为了避免与后续的共同定义发生冲突,如在[4, Wiki]中,他在文献的不同地方使用了短语==>
。无论如何,使用natural deduction sequent calculus
与在Isabelle / HOL逻辑中实现自然演绎规则完全相关。
即使有广义序列,L.Paulson更喜欢==>
符号:
你问过差异。我再次提供了与C.Sternagel的答案相关的一些来源,以及==>
公理化:
impI
我将(*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
置于结构化校样格式中:
impI
现在,考虑lemma impI_again:
assumes "P ==> Q"
shows "P --> Q"
by(simp add: assms)
使用后续旋转门,==>
为后续符号水平栏,然后你有以下后续内容:
shows
这是自然演绎含义引入规则,正如公理名称所说,P |- Q
-------
P --> Q
(Cornell Lecture 15)。
大家伙长期以来一直处于这一切之上。有关impI
,!!
和==>
的概述,请参见[1, Section 2.1, page 27]。特别是,它说
纯逻辑[38,39]是高阶逻辑的直觉片段 [13]。在类型理论的说法中,有三个级别的lambda演算 相应的箭头
==
/ !! / ==>`...
该陈述的一个重要意义是,在使用Isabelle / HOL时,您使用的是两个逻辑,一个元逻辑和一个对象逻辑,其中这两个术语来自L.Paulson,其中&#34 ;直觉"是元逻辑的关键定义点。
另见[1, Section 9.4.1, Simulating sequents by natural deduction, pg 206]。根据M.Wenzel在IsaUsersList上的说法,L.Paulson写了这一部分。在页205,保尔森首先将序列的定义作为广义定义。在206页,然后他展示了如何使用=>
排列一种类型的序列,这是通过否定一个序列右侧的每个命题,除了其中一个。
从各方面来看,这是horn clause,我对此一无所知。
对我来说,使用==>
似乎是使用有限形式的序列。无论如何,这就是我如何看待它,并且这样思考让我理解==>
和==>
之间的差异,以及元逻辑具有的这一事实。没有被排除在中间。
如果A.Lochbhiler没有指出缺少被排除的中间人,我就不会看到-->
可能存在的重要区别,以及&# 39;可以使用==>
。
也许C.Sternagel会再次回头给我一些重要的答案。
请原谅长期答案。
答案 2 :(得分:2)
其他人已经解释了元逻辑和逻辑之间差异的一些原因,但错过了简单的策略apply atomize
:
lemma "⟦⋀(x::'a). P x ⟹ P z ; P y⟧ ⟹ P z"
apply atomize
产生目标:
⟦ ∀x. P x ⟶ P z; P y ⟧ ⟹ P z
根据需要。
(由于chris提到的原因,需要额外的类型约束⋀(x::'a)
。)
答案 3 :(得分:2)
已经有很多文字,所以只是简单的几点说明:
Isabelle / Pure是最小 - 高阶逻辑,主要连接词⋀和⟹以声明的方式规定自然演绎规则。系统知道如何通过基本方法组合它们,例如,在Isar样张中,证明方法如rule
,属性如OF
。
Isabelle / HOL是完整的高阶逻辑,具有完整的谓词逻辑连接词集,例如∀∃∧∨⟶⟷,以及更多的图书馆资料。对于这些连接词,allI
,allE
,exI
,exE
等规范性引言规则正式解释了推理如何运作。纯框架。 HOL∀和⟶以某种方式对应于Pure⋀和⟹,但它们属于不同类别,不应该被扔进同一个盒子里。
请注意,除了用于打印此类定理的基本thm
命令之外,使用print_statement
来获取Isar读取这些自然演绎推理形式有时会有所帮助。