如何在假设中用∀和replace代替⋀和。

时间:2014-01-29 11:47:58

标签: isabelle

我是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

但我无法让它为上述目标而努力。

有没有办法将前一个目标转变为后者?如果不是,这是因为它们在逻辑上是不同的陈述,在这种情况下有人可以帮助我理解差异吗?

4 个答案:

答案 0 :(得分:5)

可以通过以下证明显示两个前提!!x. P x ==> P yALL 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,以确保它们在所有浏览器中都能正确显示。)

首先,我提供一些参考资料:

  • [1] Isabelle / Isar参考手册。
  • [2] HOL / HOL.thy
  • [3]计算机科学中的逻辑,作者:Huth和Ryan
  • [4] Wiki后续条目。
  • [5] Wiki直觉逻辑词条。

如果你理解了一些基础知识,那么同时存在==>-->这一事实并不令人困惑。大部分的混乱都离开了,剩下的只是挖掘特定源语句含义的细节,比如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),iffTrue_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是完整的高阶逻辑,具有完整的谓词逻辑连接词集,例如∀∃∧∨⟶⟷,以及更多的图书馆资料。对于这些连接词,allIallEexIexE等规范性引言规则正式解释了推理如何运作。纯框架。 HOL∀和⟶以某种方式对应于Pure⋀和⟹,但它们属于不同类别,不应该被扔进同一个盒子里。

请注意,除了用于打印此类定理的基本thm命令之外,使用print_statement来获取Isar读取这些自然演绎推理形式有时会有所帮助。