【问题标题】:proving Predicate logic with Isabelle用 Isabelle 证明谓词逻辑
【发布时间】:2021-01-15 16:47:11
【问题描述】:

我试图证明以下引理:

lemma myLemma6: "(∀x. A(x) ∧ B(x))= ((∀x. A(x)) ∧ (∀x. B(x)))"

我试图从消除 forall 量词开始,所以这是我尝试过的:

lemma myLemma6: "(∀x. A(x) ∧ B(x))= ((∀x. A(x)) ∧ (∀x. B(x)))"
  apply(rule iffI)
  apply ( erule_tac x="x" in allE)
  apply (rule allE)
  (*goal now: get rid of conj on both sides and the quantifiers on right*)
  apply (erule conjE) (*isn't conjE supposed to be used with elim/erule?*)
  apply (rule allI)
  apply (assumption)
  
  
  apply ( rule conjI) (*at this point, the following starts to make no sense... *)
    
   apply (rule conjE) (*should be erule?*)
   apply ( rule conjI)
   apply ( rule conjI)

  ...

最后我只是根据之前申请的结果开始行动,但对我来说似乎不对,可能是因为一开始有一些错误......有人可以向我解释我的错误以及如何完成这个证明正确吗?

提前致谢

【问题讨论】:

    标签: predicate isabelle proof hol


    【解决方案1】:

    在这个早期阶段消除全称量词并不是一个好主意,因为你甚至没有任何可以插入的值(你提供的 x 在那个时候不在范围内,这这就是为什么它在 Isabelle/jEdit 中以橙色背景打印的原因)。

    在你做iffI之后你有两个目标:

    goal (2 subgoals):
     1. ∀x. A x ∧ B x ⟹ (∀x. A x) ∧ (∀x. B x)
     2. (∀x. A x) ∧ (∀x. B x) ⟹ ∀x. A x ∧ B x
    

    现在让我们专注于第一个。您应该首先应用右侧的介绍规则,即conjIallI。剩下的就是

    goal (3 subgoals):
     1. ⋀x. ∀x. A x ∧ B x ⟹ A x
     2. ⋀x. ∀x. A x ∧ B x ⟹ B x
     3. (∀x. A x) ∧ (∀x. B x) ⟹ ∀x. A x ∧ B x
    

    现在您可以应用x 实例化的allE,第一个目标变为⋀x. A x ∧ B x ⟹ A x,然后您可以使用erule conjEassumption 解决此问题。第二个目标的作用类似。

    对于最后一个目标,也类似:先应用引入规则,然后应用消除规则和assumption,就完成了。

    当然,Isabelle 的所有标准证明者,如 autoforceblast,甚至像 metismesoniprover 这样简单的证明者都可以轻松自动解决这个问题,但仅此而已可能不是你想要的。

    【讨论】:

    • 附录:myLemma6 已经在标准库中作为all_conj_distrib 提供:因此,可以使用by (rule all_conj_distrib) 来证明它;此外,可以避免显式实例化,从而更简洁地证明整个定理:by (rule iffI; (intro conjI allI; elim allE conjE))(此评论是我之前发布的评论的修改变体)。
    • 我非常感谢代码行之间的解释。我明白了这个想法。整个绝招不是淘汰太早!非常感谢这个提示。另外,您介意解释一下当我以错误的顺序做事时我得到了什么奇怪的?PXX ?那是一种以后会被证明的“占位符”吗?
    • @user9716869 ,感谢您的补充,我也很感激。我把事情放慢了,这是我第一次学习 Isabelle,所以这就是为什么我不使用任何“快速作弊”,如 all_conj_distrib、auto、blast 等。但是当我开始使用时,你的提示肯定会派上用场它用于一些现实生活中的用途,并超出了学习的步骤。我也想问一下,如果我们这样做 all_conj_distrib,“ex_disj_distrib”是否相似?只是将所有“conj”更改为“disj”,将所有“All”更改为“ex”?还是需要更智能的东西?
    • nvm 最后一个关于ex_disj_distrib的问题,我自己试了一下:)
    • ? 开头的变量是示意图变量。这些基本上是您可以随时填写的内容。您可以通过使用正确的值来实例化您正在应用的规则来避免它们。一般来说,目标状态中的示意图变量不能很好地与自动化混合,我会说现在人们试图避免它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 2016-08-12
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多