为什么我们需要证明这两个命题才能在Isabelle中应用析取消元法?

为什么我们需要证明这两个命题才能在Isabelle中应用析取消元法?,isabelle,theorem-proving,Isabelle,Theorem Proving,我看到了析取消除的证明规则,我注意到我们必须证明这两个语句才能使用它: ?P ∨ ?Q ⟹ (?P ⟹ ?R) ⟹ (?Q ⟹ ?R) ⟹ ?R 为什么呢?就像在正常逻辑中,如果我知道一个是真的,那么我就知道整个事情都是真的,所以谁在乎另一个的真值是什么。同样,如果我至少能证明一次,为什么我不能消除析取/或 就上下文而言,我试图证明: proof (prove) goal (1 subgoal): 1. ∀s. P s ∨ Q s ⟹ ∀s. P s ⟶ R s ⟹ ∀s. Q s ⟶ R

我看到了析取消除的证明规则,我注意到我们必须证明这两个语句才能使用它:

?P ∨ ?Q ⟹ (?P ⟹ ?R) ⟹ (?Q ⟹ ?R) ⟹ ?R

为什么呢?就像在正常逻辑中,如果我知道一个是真的,那么我就知道整个事情都是真的,所以谁在乎另一个的真值是什么。同样,如果我至少能证明一次,为什么我不能消除析取/或

就上下文而言,我试图证明:

proof (prove)
goal (1 subgoal):
 1. ∀s. P s ∨ Q s ⟹ ∀s. P s ⟶ R s ⟹ ∀s. Q s ⟶ R s ⟹ ∀s. R 
但最终我陷入了循环,我不知道为什么:

 apply (rule allI)
  apply (rule_tac P="λs. P s ∨ Q s" in allE)
   apply assumption
  apply (erule_tac P="λs. P s ⟶ R s" in allE)
  apply (erule_tac P="λs. Q s ⟶ R s" in allE)
  apply (erule impE)
   defer
   apply assumption
  apply auto
  apply (erule allE)
  apply (erule disjE)

证明似乎很明显,但得不到伊莎贝尔遵守…

< P>使用自动书写中的详细应用证明是很奇怪的。你的问题是你应用disjE太晚了:你需要在impE之前应用它,而不是在它是->vs=>的问题之后应用它:有了impE,你就要选择P

lemma ‹∀s. P s ∨ Q s ⟹ ∀s. P s ⟶ R s ⟹ ∀s. Q s ⟶ R s ⟹ ∀s. R s›
 apply (rule allI)
  apply (rule_tac P="λs. P s ∨ Q s" in allE)
   apply assumption
  apply (erule_tac P="λs. P s ⟶ R s" in allE)
  apply (erule_tac P="λs. Q s ⟶ R s" in allE)
  apply (erule disjE) 
  apply (erule impE)
    apply assumption+ 
  apply (rotate_tac 2)
  apply (erule impE)
    apply assumption+
  done
下面是另一个更接近于你在纸上想要的工作证明:

lemma ‹∀s. P s ∨ Q s ⟹ ∀s. P s ⟶ R s ⟹ ∀s. Q s ⟶ R s ⟹ ∀s. R s›
  apply (rule allI)
  apply (drule_tac x=s in spec)
  apply (elim disjE)
  apply (drule_tac x=s in spec)
   apply (erule impE)
    apply assumption+
  apply (rotate_tac)
  apply (drule_tac x=s in spec)
   apply (erule impE)
    apply assumption+
  done

请注意,除非您有特定的理由这样做,否则您应该使用blast来解决完整的目标。

您要应用的规则,即析取消除析取,允许您消除析取∨ 在不知道P或Q是真的前提下。在这种情况下,你需要分别考虑这两种情况,即假设P是真的,并且假设Q是真的,以便安全地消除析取。更准确地说,如果你能在两种情况下证明结论R,那么你就可以安全地消除析取P∨ 当你说如果我知道一个是真的,那么我就知道整个事情都是真的,那么谁在乎另一个的真值是什么呢?我想你实际上分别指的是析取引入析取1和析取2⟹ ?P∨ ?Q和?Q⟹ ?P∨ ?问:

我认为解释矿石和安第斯山脉的规则并对它们进行比较是有成效的。让我们从或析取开始:

析取消除 回想一下规则:disjE=OrE:⟦ P∨ QP⟹ RQ⟹ R⟧ ⟹ R.解释它考虑以下故事:

你知道p或Q,但你不知道是哪一个。假设此语句意味着cup P或cup Q下面有一张10美元的钞票。如果你想用这个事实来总结R,例如R=买午餐,那么你必须确保你确实得到了10美元的账单。由于您不知道哪一个有10美元的钞票,您需要创建一个工具,即举起两个杯子,以保证您得到10美元的钞票。因此,为了在证明中使用这个事实,您需要为P=>R和Q=>R构造一个证明,因为您不知道哪一个是真的

现在让我们用共轭消去法/AndE来解释它

连词消除 回想一下表达规则的不同方式:

安第尔山脉[|P/\Q;P=>R |]=>R AndER[|P/\Q;Q=>R |]=>R 联合:⟦ P∧ Q⟦ PQ⟧ ⟹ R⟧ ⟹ R

解释下面的故事:

10美元钞票的类比。如果我们有P/\Q,那么我们知道P杯和Q杯下面都有一张10美元的钞票。因此,我们只需要一个工具,即一个证明来提出一个到达R,比如说买午餐。因此,对于这个规则,因为我们知道双方都有10美元的钞票,我们只需要构造一个工具证明来提起其中一个杯子。因此,这就是为什么我们只需要证明和E规则的一个语句。事实上,伊莎贝尔所做的是压缩规则并说“如果你举起任何一只杯子,即。⟦ P、 Q⟧ 这意味着你可以使用任何一种假设,然后你可以得出“R”

注意:注意⟦ PQ⟧ ⟹ 实际上,R意味着只需要假设P或Q中的任何一个就可以得出R。因此,把AndE都放在一个里是一种压缩的方式,因为你可以使用任意一个假设来得出R

奖金:allE&exE 所有 所有的∀x、 P?x;?P?x⟹ ?R |]⟹ ?R 这是一个无限的“连词”/“AND”。基本上要去掉一个孔,我们只需要一个具体的例子,就像我们去掉一个具体的和。 [| ∀x、 P?x;?P?x⟹ ?R |]⟹ ?R 我们需要“移除无界和”的特定x是?x。 exE exE[|∃x、 ?px;⋀x、 ?Px⟹ ?Q |]⟹ ?Q 这是一个无界的“连词”//或。基本上,要删除它,我们需要对所有实例证明它。因此,我们使用meta-forall和meta-abstraction/\的原因当然是一个新的变量实例!因为它必须对所有实例保持不变,不管具体术语是什么,只要我们还没有引用该术语就行。 [|∃x、 ?px;⋀x、 ?Px⟹ ?Q |]⟹ ?Q 我们引入的新变量是⋀x以删除无界或。
如果我知道其中一个是真的,那么我就知道整个事情都是真的,那么谁在乎另一个的真值是什么呢?我想你实际上是指析取引入,分别是析取1和析取2⟹ ?P∨ ?Q和?Q⟹ ?P∨ ?不是。我指的是消除。你的回答只是一个关于规则是什么的陈述。我知道规则是什么。我不知道为什么会这样。对我来说,有意义的是,如果我们有一个析取的证明,并且我们
为了消除它得出R,我们应该只需要析取中两个语句中的一个。不是两者都有。也许我混淆的是析取引入和析取消除的不对称性。@Pinocchio,如果你有析取P的证明的话∨ 你通常不知道P或Q是否为真,这就是为什么你需要分别从P和Q中推断R,以消除析取并得出R。这基本上就是我在回答中解释的。@Pinocchio当然,这些规则的不对称可能会引起混淆。我建议你读一下自然演绎,一本好的入门书是自然演绎的:Prawitz.why的一个证明理论研究是这个奇怪的,在一个手写的详细应用中,自动证明很奇怪吗?我是伊莎贝尔的新手。@Pinocchio auto能够直接解决整个目标。那么为什么不直接使用它呢?这也是一种不好的做法