Isabelle 如何更换&x22C0;和⟹;带有∀;和⟶;假定

Isabelle 如何更换&x22C0;和⟹;带有∀;和⟶;假定,isabelle,Isabelle,我是伊莎贝尔的新手,我对他们之间的关系有点(实际上,很多)困惑⋀ 及∀, 和之间⟹ 及⟶. 我有以下目标(这是一个高度简化的版本,我在一个真实的证明中得到了): 我想通过专门研究x和y来证明这一点⟦P y⟹ pz;P y⟧ ⟹ pz,然后使用ponens方法。这可以证明外观非常相似: ⟦∀x. P x ⟶ P z; P y⟧ ⟹ P z 但是我不能让它为上面的目标工作 有没有办法将前一个目标转化为后一个目标?如果不是,这是因为它们是逻辑上不同的语句,在这种情况下,有人能帮助我理解它们的区别吗?

我是伊莎贝尔的新手,我对他们之间的关系有点(实际上,很多)困惑⋀ 及∀, 和之间⟹ 及⟶.

我有以下目标(这是一个高度简化的版本,我在一个真实的证明中得到了):

我想通过专门研究x和y来证明这一点⟦P y⟹ pz;P y⟧ ⟹ pz,然后使用ponens方法。这可以证明外观非常相似:

⟦∀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运算符之间存在显著差异,
==>
==
-->
=

从这里开始,我写了更多的细节,部分是为了让任何专家相信我并没有完全滥用
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