需要证明元逻辑连词消除规则

时间:2013-12-11 00:27:42

标签: isabelle

在这里,我要求提供Isabelle元逻辑连词消除规则的证明。

以下来源包含我的评论,这些评论解释了我正在做的一些事情。在理论上,有两对元假定义和连词消除规则。这两对是:

  • falseHandH_E1
  • falseMandM_E1

我的andM连词的格式是(P ==> Q ==> falseM) ==> falseM),而这个格式我无法轻易证明。

将来,我计划使用元逻辑运算符复制HOL.thy自然演绎规则,这与上面的andM类似。作为其中的一部分,运算符==>将被视为原始运算符。因为Pure运算符!!在与==>相同的意义上也是原始运算符,所以我猜测我可能无法开发有助于我使用元错误定义的规则!!P. PROP P {1}},我在下面使用它。不过我可能错了。

我不得不在下面尝试使用falseM,因为falseH有助于已经与HOL一起使用的simp魔法,双关语并不打算。虽然我不必拥有它,但拥有它会很好。

theory i131210a__SO_question_andM_elim
imports Complex_Main 
begin

(*This is conjunct1 from HOL.thy, line 426. Someday, I'll get rules to  
  use by duplicating the HOL rules as meta-logic rules, but my question 
  here is about proving andM_E1 below with what's already available.*)
lemma conjunct1_from_HOL: 
  "[| P & Q |] ==> P"
by(unfold and_def, iprover intro: impI dest: spec mp)

(*Using bool for falseH allows the auto magic to work for andH_E1.*)
definition falseH :: "prop" ("falseH") where
  "falseH == (!!P. P::bool)"

theorem andH_E1: 
  "((P ==> Q ==> falseH) ==> falseH) ==> P"
by(unfold falseH_def, auto)

(*Using Pure &&&, auto-tools work too, but I want a different meta-and.*)
theorem mand_E1: 
  "(P &&& Q) ==> P"
by(linarith)

(*Here I define a pure meta-false. That's what I want, if I can get it.*)
definition falseM :: "prop" ("falseM") where
  "falseM == (!!P. PROP P)"

(*But here, I need an IsaMagician to do what may be easy, or may be hard.
  A proof for this might give me a good template to follow.*)  
theorem andM_E1: 
  "((P ==> Q ==> falseM) ==> falseM) ==> P"
  apply(unfold falseM_def)
oops

end

更新(131211)

我用三件事来更新它,其中两件与Andreas'相关。回答需要排除中间的公理。我在下面所说的并不是对任何事情的真正答案,并且它可以接受更多评论,因为我在简单的事情上可能是错的。

我在这里提出了冗长的意见,以巩固与我的问题的核心思想相关的一些想法,即如何使用元逻辑假来定义元逻辑运算符。

  1. 我展示了我如何在区域设置中添加排除中间的元逻辑公理。
  2. 我展示了什么导致我理解了我需要的被排除中间的公理形式。大多数文献都会说被排除的中间人是P or not P,这是具有欺骗性的,因为我很少考虑被排斥的中间人,因为它根深蒂固了我的想法。
  3. 我注意到"(P &&& Q) ==> P中的conjunctionD1证明了conjunction.ML,并且使用meta_allE证明了展开的版本。我想知道为什么andM在内部而非外部!!不能被操纵,以便可以证明它。
  4. 将元逻辑排除在中间区域

    所以Adreas救了我好几个月,可能至少一年,并且可能多年没有结果的计划,指出Isabelle / Pure没有被排除在外的中间,我需要它。这有助于回答我的相关问题,并帮助我更有意义地了解Isabelle / Pure是什么。

    如果强制使用HOL排除中间人,我只会使用False,而不是(!!P. P::bool)

    如果我想要一个meta-false,我想我会在这样的语言环境中添加一个排除元逻辑的元逻辑:

    abbreviation (input) trueM :: "prop" ("trueM") where
      "trueM == (falseM ==> falseM)"
    
    locale pure_with_em =
      assumes t_or_f: "((P == trueM) ==> falseM) ==> (P == falseM)"
    begin
    theorem andM_E1:
      "((P ==> Q ==> falseM) ==> falseM) ==> P"
    unfolding falseM_def
    oops
    end
    

    就像我说的那样,这不是一个答案,因为我必须解决这个问题。

    根据Andreas提供的证据,HOL中有classical

    lemma classical: 
      assumes prem: "~P ==> P" shows "P"
    apply (rule True_or_False [THEN disjE, THEN eqTrueE])
    ...
    

    像这样的HOL定理的证明步骤告诉我对元逻辑版本的需求。我通过提供语言环境t_or_f来完成简单的部分。其余的只是简单的工作。

    Isabelle / Pure没有排除中间

    在这里,我不是仅仅谈论谈话,我有时会这样做,但是我把我所做的工作放在了==作为排除中间人的一部分。我可能需要再次查看这一切,所以也许它不会被反对我。

    首先,跳过我接下来关于HOL引理excluded_middle的说法,一个人,尤其是我,也想要考虑这个问题。 HOL.thy公理,第171行:

    True_or_False: "(P = True) | (P = False)".
    
    安德烈亚斯指出,需要排除中间的法则,并且Pure不提供它。这是名为HOL.thy的定理 excluded_middle,第604行:

    lemma excluded_middle: "~P | P" by (iprover intro: disjCI)
    

    类似地,我将此声明为使用falseM的元逻辑定理,其中我的meta或者是(P ==> falseM) ==> Q,而meta-not是P ==> falseM

    theorem 
      "(P ==> falseM) ==> (P ==> falseM)"
    by(simp)
    

    如果定义元或符号来模糊它实际上是什么,逻辑新手(当然不是我)可能不会将其识别为"如果P为假,则P为假"而不是& #39; s需要,"如果P不是假,那么它必须是真的"。

      

    更新(131213):我把它放进去因为我可以忘记为什么我做了一些事情,然后当我试图回过头来时,我觉得我搞砸了大部分时间,当时我没有,尽管我逻辑意识可能还没有完成。

         

    我实际上并未实现~P | P的元逻辑版本,而是P | ~P。如果它不是很明显,它可能是,我使用基于真值表的暗示定义以及DeMorgan的定律,并使用逻辑的基本定理,最终必须是真的我

         

    然而,我现在正在研究排除中间词的公理,这使得我使用P | ~P不太可接受的事实,因为它变成"((P ==> falseM) ==> falseM) ==> P",这涉及到双否定,我依旧记得与这一切有关。直到现在,我从未在我的生活中不得不关注被排除在外的中间人。这应该是建构主义者的想法。

         

    我做出转换实际上是偶然的,因为这让我看到=True_or_False的重要性。

    一个有意义的定理是"不是(P而不是P)" (或者会吗?) 因此,我在元数据和表达式中将(P ==> falseM)替换为Q (P ==> Q ==> falseM) ==> falseM

    theorem 
      "((P ==> (P ==> falseM) ==> falseM) ==> falseM) ==> falseM"
    by(auto,assumption)
    

    这已经完全发挥了逻辑 - 傻瓜红色警报,因为falseM 没有必要扩大。现在,我陈述相同的定理,但没有 bool变量而没有falseM,以明确表示它没有任何内容 与falseMbool

    有关
    theorem 
      "((PROP P ==> (PROP P ==> PROP Q) ==> PROP Q) ==> PROP Q) ==> PROP Q"
    by(erule Pure.cut_rl Pure.meta_impE Pure.meta_mp, assumption)
    

    回到我开头跳到的地方,我现在看到一把钥匙 区别在于=中正在使用运算符True_or_False

    现在,我说明True_or_False使用运算符==的元逻辑形式, 使用meta或(P ==> falseM) ==> Q,真实部分为(P == (falseM ==> falseM)),虚假部分为(P == falseM)

    theorem 
      "((P == (falseM ==> falseM)) ==> falseM) ==> (P == falseM)"
    apply(unfold falseM_def)
    oops
    

    这最终让我得到了一个有意义的被排除的元逻辑陈述 中间,falseM需要扩展。我无法证明这一点,哪个 本身没有任何意义,或反驳它,这意味着我可以完全 困惑。

    这说明了为什么我必须研究很多低级逻辑才能工作 当我的最终目标是高级数学时,与定理助手一起, 传统上并不需要这种知识。

    没有很好地理解没有排除中间人的意义 最终杀了我,等等。

    为什么"(P &&& Q) ==> P"可以在上面证明?

    (P &&& Q) ==> P可以证明具有重要意义 上面的方法linarithpresburger&&&中的pure_thy.ML就是这样:

    "(A &&& B) == (!!C::prop. (A ==> B ==> C) ==> C)"
    

    我的meta和使用falseM实际上只是移动!!的使用 在falseM扩展后,从外到内。

    在这里,我证明了扩展的元和消除术语,并使用Pure.conjunctiond1证明了它的未扩展版本。

    theorem 
      "(PROP P &&& PROP Q) ==> PROP P" 
    apply(unfold Pure.conjunction_def)
    by(erule Pure.meta_allE, assumption)
    
    theorem expanded_and_1: 
      "(!!R. (PROP P ==> PROP Q ==> PROP R) ==> PROP R) ==> PROP P"
    by(erule Pure.meta_allE, assumption)
    
    theorem 
      "(PROP P &&& PROP Q) ==> PROP P"
    by(erule Pure.conjunctionD1)
    

    规则conjunctionD1位于conjunction.ML,似乎forall_elim_vars 正在处理运算符!!,我认为它与meta_allE正在做同样的事情。

    我可以使用标准元 - 但是元 - 并且不是目标

    我比较了连词消除规则的两个扩展版本。第一个词使用标准&&&,第二个词使用我的andM

    term "(!!R. (P ==> Q ==> PROP R) ==> PROP R) ==> P"
    term "((P ==> Q ==> (!!P. PROP P)) ==> (!!P. PROP P)) ==> P"
    

    使用&&&可以使用meta_allE轻松证明第一个字词,如上所示。

    在我看来,我应该能够将第二个词操纵到第一个词的形式,但我不会知道。如果这是真的,那么我不需要为这个定理添加排除中间的公理。我在学习了很多自然演绎之后就知道了,就像我需要的那样。

    如果我的目标只是元逻辑运算符,我会使用&&&,但这不是我的目标。我的目标是定义一个meta-false用于缩写元逻辑运算符。我试图略微扩展Isabelle / Pure的自然演绎框架,而不是重复所有HOL。

    我从这个问题得到的主要价​​值是,我现在知道我需要注意是否需要排除中间人的公理。如果我想要一个错误的假,那么我似乎需要一个排除中间的公理。

    这是我离开的地方。感谢您的帮助,请原谅冗长的补充。

1 个答案:

答案 0 :(得分:1)

作为第一步,您可以在不使用任何校对工具的情况下证明HOL版本andH_E1,只需普通rulesubstassumption。然后,您应该能够看到是否可以将证明转换为andM_E1以及如何将其转换为andH_E1。我找到了theorem andH_E1: "((P ==> Q ==> falseH) ==> falseH) ==> P" unfolding falseH_def apply(rule classical) apply(erule meta_allE) apply(erule meta_impE) apply(erule notE) apply assumption apply assumption done 的以下证据:

classical

如您所见,第一步应用规则andM_E1,即我的证明仅适用于经典逻辑。然而,Pure比经典逻辑弱,因为没有排除中间的公理。因此,您将无法将此证明转移到andH_E1。您可以尝试找到不依赖于经典公理的iprover证明,但我怀疑您会找到一个;至少_ ==> falseM没有。否则,除非你将被排除的中间公理引入Pure,否则你无法用纯粹的方法来证明这个定理。

由于被排除的中间等同于经典公理(你可以从另一个得到它),最简单的方法可能是直接添加经典公理,例如,如你所建议的那样在一个语言环境中。然后,证据如下,我将纯粹的否定写为locale classical = assumes pure_classical: "((PROP P ==> falseM) ==> PROP P) ==> PROP P" begin theorem andM_E1: "((PROP P ==> PROP Q ==> falseM) ==> falseM) ==> PROP P" unfolding falseM_def apply(rule pure_classical) apply(erule meta_allE) apply(erule meta_impE) back apply(erule (1) meta_impE) apply(unfold falseM_def) apply(assumption) apply(assumption) done end

{{1}}