Logic 求解Isabelle中的~(P/\Q)|-Q->~P

Logic 求解Isabelle中的~(P/\Q)|-Q->~P,logic,isabelle,Logic,Isabelle,~p/\Q |-Q->~p 我不知道从哪里开始。 否定使我困惑 我必须在Isabelle a程序中解决这个问题,但如果有人解释如何使用自然演绎法解决,这将是足够的帮助。假设你谈论的是Isabelle/HOL,你可以使用“单步策略”,如rule、erule、带有基本自然演绎规则的假设。您的提议可能需要的是: 介绍规则notI、CONGI、disjE impI 消除规则,如notE、conjE、disjE、impE 破坏规则,如mp modus ponens、CONCONCONNCT1、CONCON

~p/\Q |-Q->~p

我不知道从哪里开始。 否定使我困惑


我必须在Isabelle a程序中解决这个问题,但如果有人解释如何使用自然演绎法解决,这将是足够的帮助。

假设你谈论的是Isabelle/HOL,你可以使用“单步策略”,如rule、erule、带有基本自然演绎规则的假设。您的提议可能需要的是:

介绍规则notI、CONGI、disjE impI 消除规则,如notE、conjE、disjE、impE 破坏规则,如mp modus ponens、CONCONCONNCT1、CONCONNCT2 如果你想知道某个特定规则的含义,只需写下例如thm notI,Isabelle将显示该定理的陈述

你可以设定一个像这样的目标

lemma "¬(P ∧ Q) ⟹ Q ⟶ ¬P"
然后写下

apply (rule impI)
将引入规则应用于隐含,这将为您留下更新的目标状态

goal (1 subgoal):
 1. ¬ (P ∧ Q) ⟹ Q ⟹ ¬ P
现在,您找到下一个合适的规则并应用该规则,等等,直到所有子目标都得到解决。然后你就可以写完了,你的证明就完整了

至于假设和erule:如果你最终的目标有一些p需要证明,而p已经在假设中,你可以使用应用假设来解决它。erule类似于规则,假设直接链接在它之后,通常便于应用消除规则


然而,这样的证明是非常乏味的。更好的方法是使用Isar(伊莎贝尔的结构化证明语言)进行整个证明。对于Isar的介绍,您可以看看的第5章。

假设您谈论的是Isabelle/HOL,您可以使用“单步策略”,如rule、erule、假设和基本自然演绎规则。您的提议可能需要的是:

介绍规则notI、CONGI、disjE impI 消除规则,如notE、conjE、disjE、impE 破坏规则,如mp modus ponens、CONCONCONNCT1、CONCONNCT2 如果你想知道某个特定规则的含义,只需写下例如thm notI,Isabelle将显示该定理的陈述

你可以设定一个像这样的目标

lemma "¬(P ∧ Q) ⟹ Q ⟶ ¬P"
然后写下

apply (rule impI)
将引入规则应用于隐含,这将为您留下更新的目标状态

goal (1 subgoal):
 1. ¬ (P ∧ Q) ⟹ Q ⟹ ¬ P
现在,您找到下一个合适的规则并应用该规则,等等,直到所有子目标都得到解决。然后你就可以写完了,你的证明就完整了

至于假设和erule:如果你最终的目标有一些p需要证明,而p已经在假设中,你可以使用应用假设来解决它。erule类似于规则,假设直接链接在它之后,通常便于应用消除规则


然而,这样的证明是非常乏味的。更好的方法是使用Isar(伊莎贝尔的结构化证明语言)进行整个证明。有关Isar的介绍,请参阅的第5章。

这是一个例子,SO问题的质量在很多情况下取决于答案,而不是问题。我这样回答是为了感谢埃贝尔先生的另一个有用的回答,因为我不能发表评论

对于上面的评论,你可能会问一个家庭作业问题,这个评论是有效的,但是如果你被否定弄糊涂了,那么你基本上是注定要失败的,直到你取得进步,所以即使是一个完整的答案也帮不了你,在这里,没有正确的答案

这个公式是如此的基本,除非通过应用一步一步的规则,否则任何人都很难证明他们理解他们被证明的内容,而不需要经历大量繁琐的步骤

例如:

lemma "~(P ∧ Q) ==> Q --> ~P"
  by auto
如果要求你表现出理解力,那你肯定一无所获

随着时间的推移,我通过吸收的方法在很大程度上取得了进步,在他的回答中,埃贝尔先生对自然演绎的基本原理给出了重要的概述。我对它的兴趣是四处乱逛,看看我是否能吸收更多

关于规则和规则,有一张备忘单:

至于伊莎贝尔的逻辑证明,伊莎贝尔/荷尔是如此庞大和复杂,以至于一次小小的帮助并不能给你带来多少,尽管总体来说,这一切都很重要

一种基本的逻辑等价性 我很久以前就知道了一个隐含的等价陈述。甚至在:

从这一点很容易看出,在HOL.thy的第993行中,你在问题中陈述了一个等价性

当然,不完全是这样,这就是所有麻烦的来源。根据琐碎的等价性重新安排事物,以最终证明等价性。同时也知道符号的含义,比如你的|-将是==>。我使用ASCII是因为我不信任浏览器中的图形

M.Eberl提到了结构化证明。考虑这一点:

lemma "~(P ∧ Q) ==> Q --> ~P"
proof-
  fix P Q :: bool
  assume "~(P ∧ Q)"
  hence "~P ∨ ~Q" by simp
  hence "~Q ∨ ~P" by metis
  thus "Q --> ~P" by metis
qed
我的家庭作业应该得到多少分数?没什么。这实际上证明梅蒂斯知道如何使用基本的一阶逻辑。否则,它怎么知道要做出决定
从~Q跳下∨ ~P到Q->~P?

这是一个例子,SO问题的质量在很多时候取决于答案,而不是问题。我这样回答是为了感谢埃贝尔先生的另一个有用的回答,因为我不能发表评论

对于上面的评论,你可能会问一个家庭作业问题,这个评论是有效的,但是如果你被否定弄糊涂了,那么你基本上是注定要失败的,直到你取得进步,所以即使是一个完整的答案也帮不了你,在这里,没有正确的答案

这个公式是如此的基本,除非通过应用一步一步的规则,否则任何人都很难证明他们理解他们被证明的内容,而不需要经历大量繁琐的步骤

例如:

lemma "~(P ∧ Q) ==> Q --> ~P"
  by auto
如果要求你表现出理解力,那你肯定一无所获

随着时间的推移,我通过吸收的方法在很大程度上取得了进步,在他的回答中,埃贝尔先生对自然演绎的基本原理给出了重要的概述。我对它的兴趣是四处乱逛,看看我是否能吸收更多

关于规则和规则,有一张备忘单:

至于伊莎贝尔的逻辑证明,伊莎贝尔/荷尔是如此庞大和复杂,以至于一次小小的帮助并不能给你带来多少,尽管总体来说,这一切都很重要

一种基本的逻辑等价性 我很久以前就知道了一个隐含的等价陈述。甚至在:

从这一点很容易看出,在HOL.thy的第993行中,你在问题中陈述了一个等价性

当然,不完全是这样,这就是所有麻烦的来源。根据琐碎的等价性重新安排事物,以最终证明等价性。同时也知道符号的含义,比如你的|-将是==>。我使用ASCII是因为我不信任浏览器中的图形

M.Eberl提到了结构化证明。考虑这一点:

lemma "~(P ∧ Q) ==> Q --> ~P"
proof-
  fix P Q :: bool
  assume "~(P ∧ Q)"
  hence "~P ∨ ~Q" by simp
  hence "~Q ∨ ~P" by metis
  thus "Q --> ~P" by metis
qed

我的家庭作业应该得到多少分数?没什么。这实际上证明梅蒂斯知道如何使用基本的一阶逻辑。否则,它怎么知道从~Q跳转∨ ~P到Q->~P?

因为你明确提到了自然演绎。在一种特殊的自然演绎风格中——行被编号,假设的范围由下面用大括号表示的方框明确标记——证明你的陈述的一种方法是:

1. ~(P & Q) premise
2. { Q       assumption
3.   { P     assumption
4.     P & Q and-introduction 3, 2
5.     _|_   negation-elimination 1, 4 }
6.   ~P      negation-introduction 3-5 }
7. Q -> ~P   implication-introduction 2-6
事实上,由于你的目标是证明一个蕴涵,你在一开始只有一个选择,即蕴涵介绍


将上述证明尽可能忠实地转化为结构化Isar证明将是一个很好的练习,例如,使用所谓的原始证明块,顺便说一下,在Isabelle中也用大括号表示。

因为您明确提到了自然演绎。在一种特殊的自然演绎风格中——行被编号,假设的范围由下面用大括号表示的方框明确标记——证明你的陈述的一种方法是:

1. ~(P & Q) premise
2. { Q       assumption
3.   { P     assumption
4.     P & Q and-introduction 3, 2
5.     _|_   negation-elimination 1, 4 }
6.   ~P      negation-introduction 3-5 }
7. Q -> ~P   implication-introduction 2-6
事实上,由于你的目标是证明一个蕴涵,你在一开始只有一个选择,即蕴涵介绍


将上述证明尽可能忠实地转化为结构化Isar证明将是一个很好的练习,例如,使用所谓的原始证明块,顺便说一下,在Isabelle中也用大括号表示。

类似于JIT编译器,这是一个LJEFAATGAA答案,从另一个答案中学习足以给出答案

这更多的是关于我学到了什么,而不是关于其他人可以学到什么,这可以帮助其他人学习;伊莎贝尔的学习曲线相当残酷。我认为是时候让OP需要帮助了

除了M.Eberl对的回答外,为什么规则thm产生特定的目标状态,对于特定的thm,以及为什么规则thm产生的消息未能应用初始证明方法,对我来说仍然是一个谜。 除了Chris给出的精确大纲,加上规则和大括号,我无法填写精确的细节。例如,如果一个人有时间学习,最好给他一个部分答案,让他做一点工作,而不是给他完整的答案。 两大驱动点 在几句评论之后,我展示了大纲中的证明。这让我从不得不解决细节的工作中获得了以下理解,在这里我说话时好像知道我是对的:

applyrule thm的使用被应用于链接事实和目标语句的组合,在输出中显示一个或多个链接事实。 大括号开始和结束本地上下文/范围。上下文/作用域内外的变量按照我们预期的方式工作,也就是说,作用域通常在编程语言中工作。因此,如果我在证明的开头声明fix pq::bool,然后在子上下文中声明fix Q::bool,子上下文中的Q引用的变量与父上下文Q不同 . 在充分信任Chris之后,我在这里插入了他的大纲,因此可以很容易地将其与Isar来源进行比较:

1. ~(P & Q) premise
2. { Q       assumption
3.   { P     assumption
4.     P & Q and-introduction 3, 2
5.     _|_   negation-elimination 1, 4 }
6.   ~P      negation-introduction 3-5 }
7. Q -> ~P   implication-introduction 2-6
资料来源:

lemma "~(P & Q) ==> Q --> ~P"
proof-
  fix P Q :: bool
  assume a1: "~(P & Q)"
  { 
    assume a2: "Q"
    { 
      assume a3: "P"
      have a4: "P & Q" 
        apply(rule conjI) apply(rule a3) by(rule a2)
      (* NOTE: have to set 'notE' up right. Next 'hence False' doesn't do it. *)
      (* hence False apply(rule) by(metis a1) *)
      (* 'rule' applies the default of 'conjI', because there is the fact
         'this: P & Q', which comes from 'hence'; 'rule notE' gives an error.*)
      from a1 a4
      have False (* From 'this' and 'goal': ~(P & Q) ⟹ P & Q ==> False *)
        by(rule notE) (* notE: ~P ==> P ==> R *)
    }
    hence "~P" 
      apply(rule notI) by(assumption)
  }
  thus "Q --> ~P" 
    apply(rule impI) by(assumption)
qed
更好地理解范围 在我的陈述中需要思考的是错误的。我没有把事情安排好。为了看看我是否在正确的轨道上,我会执行sledgehammer,但在这种情况下,它无法证明是错误的

这是因为我在auto pilot上,在两个本地上下文中使用了fix Q::bool和fix p::bool。我把它们拿出来,大锤很容易就找到了证据

这是一个例子,一个人知道一些逻辑,但不知道如何用Isabelle/HOL和Isabelle/Isar语言正确地实现逻辑

接下来,我必须学习如何为applyrule notE正确设置

切题 我对上述来源的部分理解来自于在文章中看到“链接事实”这一短语。对自然演绎规则的少量接触,以及M.Eberl关于统一、实例化和解析的解释,最终帮助理解了输出面板中发生的事情

在上面,我因此将False注释掉,然后使用have False。幸运的是,在伊莎贝尔身上,有多种方法可以做事情,但目标是应用笔记。即使这样,也有不同的Isar关键字可用于设置

不管怎么说,看到链锁的事实如何与规则一起使用是一个令人兴奋的时刻。我猜这是事实上陈述中涉及的内容,因为它与注释有关:

如果我有一个帐户,我会投票表决这个问题,以摆脱-1


感谢Chris给出了精确的大纲。

与JIT编译器类似,这是一个LJEFAATGAA答案,从另一个答案中学习到的知识足以给出答案

这更多的是关于我学到了什么,而不是关于其他人可以学到什么,这可以帮助其他人学习;伊莎贝尔的学习曲线相当残酷。我认为是时候让OP需要帮助了

除了M.Eberl对的回答外,为什么规则thm产生特定的目标状态,对于特定的thm,以及为什么规则thm产生的消息未能应用初始证明方法,对我来说仍然是一个谜。 除了Chris给出的精确大纲,加上规则和大括号,我无法填写精确的细节。例如,如果一个人有时间学习,最好给他一个部分答案,让他做一点工作,而不是给他完整的答案。 两大驱动点 在几句评论之后,我展示了大纲中的证明。这让我从不得不解决细节的工作中获得了以下理解,在这里我说话时好像知道我是对的:

applyrule thm的使用被应用于链接事实和目标语句的组合,在输出中显示一个或多个链接事实。 大括号开始和结束本地上下文/范围。上下文/作用域内外的变量按照我们预期的方式工作,也就是说,作用域通常在编程语言中工作。因此,如果我在证明的开头声明fix pq::bool,然后在子上下文中声明fix Q::bool,子上下文中的Q引用的变量与父上下文Q不同。 在充分信任Chris之后,我在这里插入了他的大纲,因此可以很容易地将其与Isar来源进行比较:

1. ~(P & Q) premise
2. { Q       assumption
3.   { P     assumption
4.     P & Q and-introduction 3, 2
5.     _|_   negation-elimination 1, 4 }
6.   ~P      negation-introduction 3-5 }
7. Q -> ~P   implication-introduction 2-6
资料来源:

lemma "~(P & Q) ==> Q --> ~P"
proof-
  fix P Q :: bool
  assume a1: "~(P & Q)"
  { 
    assume a2: "Q"
    { 
      assume a3: "P"
      have a4: "P & Q" 
        apply(rule conjI) apply(rule a3) by(rule a2)
      (* NOTE: have to set 'notE' up right. Next 'hence False' doesn't do it. *)
      (* hence False apply(rule) by(metis a1) *)
      (* 'rule' applies the default of 'conjI', because there is the fact
         'this: P & Q', which comes from 'hence'; 'rule notE' gives an error.*)
      from a1 a4
      have False (* From 'this' and 'goal': ~(P & Q) ⟹ P & Q ==> False *)
        by(rule notE) (* notE: ~P ==> P ==> R *)
    }
    hence "~P" 
      apply(rule notI) by(assumption)
  }
  thus "Q --> ~P" 
    apply(rule impI) by(assumption)
qed
更好地理解范围 在我的陈述中需要思考的是错误的。我没有把事情安排好。为了看看我是否在正确的轨道上,我会执行sledgehammer,但在这种情况下,它无法证明是错误的

这是因为我在auto pilot上,在两个本地上下文中使用了fix Q::bool和fix p::bool。我把它们拿出来,大锤很容易就找到了证据

这是一个例子,一个人知道一些逻辑,但不知道如何用Isabelle/HOL和Isabelle/Isar语言正确地实现逻辑

接下来,我必须学习如何为applyrule notE正确设置

切题 我对上述来源的部分理解来自于在文章中看到“链接事实”这一短语。对自然演绎规则的少量接触,以及M.Eberl关于统一、实例化和解析的解释,最终帮助理解了输出面板中发生的事情

在上面,我因此将False注释掉,然后使用have False。幸运的是,在伊莎贝尔身上,有多种方法可以做事情,但目标是应用笔记。即使这样,也有不同的Isar关键字可用于设置

不管怎么说,看到链锁的事实如何与规则一起使用是一个令人兴奋的时刻。我猜这是事实上陈述中涉及的内容,因为它与注释有关:

如果我有一个帐户,我会投票表决这个问题,以摆脱-1


感谢Chris给出了准确的提纲。

我投票决定结束这个问题
pic因为这看起来像是一个家庭作业练习,你想让我们帮你解决它,所以这样做的目的不是这样的。@chris是的,这是一个家庭作业练习,然后呢?我试着去解,研究,搜索,但还是答不上来,现在我要看看是怎么解的。这也是一个编程语言问题,所以我可以在这里提问。好的,同时我了解到关于家庭作业问题有两个阵营,见下文。所以,仅仅因为这是一个家庭作业问题,我可能不应该投票结束它,将来也不会这样做。然而,适用于每个SO问题的是,OP应该给出具体的证据和/或代码,以表明这一点以及她/他是如何试图解决问题的。我投票将这个问题作为离题题来结束,因为它似乎是你希望我们为你解决的家庭作业,而不是这样做的目的。@chris是的,这是一个家庭作业练习,然后呢?我试着去解,研究,搜索,但还是答不上来,现在我要看看是怎么解的。这也是一个编程语言问题,所以我可以在这里提问。好的,同时我了解到关于家庭作业问题有两个阵营,见下文。所以,仅仅因为这是一个家庭作业问题,我可能不应该投票结束它,将来也不会这样做。然而,适用于每个SO问题的是OP应该给出具体的证据和/或代码,以表明这一点以及她/他如何试图解决问题。