学习命题和谓词逻辑的原因


14

我能理解计算机科学家或任何与软件开发相关的工程师应该理解基础逻辑研究的重要性。

但是,除了需要使用任何形式的知识表示的任务之外,是否有任何任务/工作明确需要有关这些知识的知识Knowledge Base?我想听听任务的类型,而不是概念上的回应。

我问这个的原因仅仅是出于好奇。虽然CS学生必须在该主题上花费一定的时间,但一些实用性强的课程(例如AI类)完全跳过了该主题。而且我只是想知道,例如了解predicate logic可能有助于绘画,ER diagram但可能不是必需的。


更新5/27/2012)感谢您的回答。现在我想我完全理解并同意logicCS在其大量应用中的重要性。从Windows“蓝屏问题” 解决方案中获得的深刻印象中,我才真正选择了最佳答案。


4
在写答案时,我发现您的问题范围不清楚。您是要限制自己使用CS还是行业,或者两者兼而有之?
戴夫·克拉克

@Dave Clarke是的,我也发现不够清楚。我想知道的第一件事是在哪个行业要求具备特定逻辑的素养(尽管我很感谢您的回答,只是为了使自己确信与软件相关的任何工程师都不应跳过此主题)。
IsaacS 2012年

如果您可以更改问题以捕获真正的需求,那就太好了。
戴夫·克拉克2012年

if没有命题逻辑的情况下,如何精确地写一个条件?
edA-qa mort-ora-y

Answers:


22

我倾向于喜欢统一以及与此相关的任何东西。如果您不了解命题和谓词逻辑,那么您将跳过逻辑的基础知识。如果您对列出的任何内容都感兴趣,那么就像对数学感兴趣并且跳过加法和乘法运算。逻辑不仅仅适用于AI。

作为一个实际的答案,请记住英特尔浮点问题,以及您怎么再也看不到它们了?由于使用了定理证明,它们已经成为过去。记住微软的蓝屏死机。由于SAT求解器,模型检查和其他基于逻辑的解决方案,它们是濒临灭绝的物种。


3
濒危物种[引用nee- 分割错误。核心转储。
JeffE 2012年

@JeffE如果您正在寻找引用,我将提供实际证据。您上次看到是什么时候?:)
Guy Coder'5

3
我从未见过。我使用Mac。
JeffE 2012年

1
@JeffE Mac是紧密耦合的系统,从机器体系结构到应用程序的所有内容均由一个团队/组织决定。Windows系统是开放的,各种各样的制造商和团队在其中提供的解决方案可以仅根据已指定的标准和接口(通常是松散和含糊地)而结合在一起。它们对计算机科学的挑战更大。开发了定理证明/静态分析技术以安全地进行此操作的Microsoft团队在我们的领域取得了根本性的进步。
乌代·雷迪

1
@UdayReddy:我毫不怀疑微软的研究人员已经取得了根本性的进步,或者说BSOD不再像以前那样普遍。但是“濒临灭绝的物种”是不受支持的夸张;错误代码不是崩溃的唯一原因。
JeffE 2012年

22

有极 深刻的普遍的逻辑和计算机科学之间的连接。在理解它们可能是什么时,请记住计算机科学也被称为“信息技术”或“信息学”,这意味着计算机系统捕获,处理和传递信息。好吧,逻辑是类似的事情。它研究如何在句子中捕获信息,以及一个陈述如何可能成为另一个陈述的结果,即,其信息内容如何已经存在于另一陈述(或陈述集合)中。从这个意义上讲,逻辑和计算机科学本质上是相同的纪律,侧重于不同方面。逻辑学家(Church,Kleene,Turing,Post及其学生和同事)创建了计算机科学专业,许多逻辑学家继续为计算机科学做出贡献,最著名的是让·伊夫·吉拉德(Jean-Yves Girard)和他的学生。

以下是计算机科学中逻辑的一些标准应用程序:

  • 的设计 数字电路完全基于建议逻辑,以至于其工程师称其为“逻辑设计”,而不是“电路设计”。人们甚至认为编写计算机程序都涉及设计其“逻辑”。(请注意,后一种意义上的“逻辑”是一种非正式概念,而不是形式逻辑,用于指代程序中的信息流以及信息是否被正确处理。)

  • 谓词逻辑及其数学表亲,集合论被用于各种 计算语言(例如用于关系数据库查询的SQL)中使用。还有一些基于逻辑的编程语言,称为“逻辑编程语言”。

  • 您已经提到的知识表示形式具有许多基于逻辑的形式主义。即使使用非逻辑形式主义,其中许多仍然具有逻辑含义,因此是基于逻辑的。

  • 陈述式不仅具有真/假值,而且具有确定性/不确定性级别的概率逻辑,正日益成为机器学习系统的基础。

  • 如果要正式说明程序的功能,即给出程序说明,最终将使用某种形式的逻辑语言。确实,有很多程序规范语言,例如Z和B,都是基于谓词逻辑和集合论的。也有基于等式​​逻辑的规范语言,例如Larch。计算机科学家经常发明新的逻辑来表示计算机科学的需求,例如Hoare逻辑和分离逻辑,或者他们选择并开发各种未充分使用的传统逻辑形式,例如时间逻辑和模态逻辑,并进一步加以发展。

  • 如果要验证程序是否按照预期执行操作,则最终不仅要使用逻辑语言,还要使用整个机器的逻辑:证明论,模型理论和决策程序。验证技术现在正在突飞猛进地发展,我希望在再过十年左右的时间里,验证技术将被常规用于几乎所有的软件开发。

实际上,逻辑与计算机科学之间的联系是如此深入和普遍,以至于我想说,如果没有对逻辑的透彻了解,很难成为一名优秀的计算机科学家。

一些AI科学家此时低估了逻辑的原因是,一些早期的AI开发人员已提出将现成的逻辑作为一种逻辑进行了广泛的解释工具而不是基础。从本质上讲,人工智能有望带来魔力。我们不必费心编写系统编程来获得结果。他们将能够自己弄清楚如何产生解决方案,因为它们将是“智能的”。逻辑似乎指明了方向,因为如果计算机系统理解逻辑并知道如何使用逻辑规则处理信息,则它们将能够传递魔术。回想起来,这种对逻辑的信念被放错了地方。首先,现成的逻辑同时太强和太弱。从某种意义上说,逻辑规则太笼统,无法设计有效的程序,这太强了。它也太弱了,因为它是数学家为满足数学需求而设计的逻辑,它并没有 拥有处理AI系统必须处理的许多其他种类的现实世界信息所需的词汇表(例如不确定性,时间,变化,知识,代理等上下文信息)。因此,人工智能目前正遭到逻辑的强烈反对。但是我认为,当他们克服这种强烈反对时,人工智能科学家将意识到,所有新方法仍然基于


添加关系数据库!
reinierpost,2012年

非常好的和完整的答案,请提及让·伊夫·吉拉德(Jean-Yves Girard)。您是否认为概率逻辑与模糊逻辑属于同一研究领域?在文献中,我们碰到两个词,我想知道它们是否表示相同的研究领域。
zurgl 2013年

@zurgl。我的理解是,没有一个形式主义被牢牢地称为“概率逻辑”。模糊逻辑确实是这种形式主义中的一种,但也有其他形式主义。贝叶斯推理是当今在人工智能中最成功的概率推理形式。但是,其逻辑基础尚未牢固奠定。
Uday Reddy

17

逻辑是所有理论计算机科学的基础。如果不学习这些知识,您将无法正确掌握编程语言的语义,图灵机,逻辑编程,可计算性等。没有它,即使对程序进行推理也将变得更加困难。当然,几乎不可能尝试对某些CS概念进行数学证明。

也许您正在询问工业用途。学习逻辑构成了学习如何清晰地推理和观察他人争论的基础。无论是否使用形式符号,逻辑都是最基本的。


您缺少算法。
尤瓦尔电影

4
这包括在“等等”中。
戴夫·克拉克

9

CS从业人员和理论家面临的重复任务之一是对其代码的正确性充满信心。

主要有两种方法:

  1. 证明:设计一个逻辑证明,证明系统的一部分具有某些属性,可能需要前提条件,按合同设计,代码检查器的帮助。
  2. 测试:测试某些属性对于各种输入是否成立,然后推断该属性对于其他输入成立。

首先,基于逻辑方法,通常是

  1. 没有典型的输入。例如,在测试安全性属性时,您必须担心的是非典型输入,因此,除非您可以从逻辑上推断出哪些输入是非典型的,否则您不太可能获得良好的覆盖率。
  2. 配置空间很大,因此必须在本地测试之前通过逻辑推理哪些部分会影响哪些其他部分来将其分解为多个部分。
  3. 您只有文档描述了控件外部系统的极端情况行为。您可能能够模拟它们,但无法测试外部依赖项失败时会发生什么,因为您不能基于法律或道德原因使它失败。

在没有证据的情况下进行经验测试基本上可以代替证据。在设计可测试的系统时,您将构建一个证明草图,在其中用“此处测试X,Y和Z”填充证明的各个部分。逻辑推理的能力对于构建可测试系统至关重要。如果该系统不可测试或无法证明,则其设计者/架构师没有业务说它适合其预期用途。


6

逻辑起着至关重要的作用的两个最重要的领域是:

  1. 正式语言规范和验证
  2. 固定参数可处理类

Z

简而言之:1.语言的定义需要逻辑,2:语言程序的正义需要逻辑,3.验证程序需要逻辑。

我应该提到这与编译器设计或...不同,这是语言的“正式”定义,这样做的主要原因是证明语言或模型的正确性,也有形式证明。这可以用于软件模型的验证,在实现之前发现错误,在实现之前再次发现死锁,....,对于模拟该模型的软件,可以看看NModel

现在,为什么在固定参数可处理性问题中需要使用逻辑,为什么可以将固定参数可处理性的类别划分为不同级别的逻辑,所以它们可以彼此转换:逻辑到自动机,自动机到图,反之亦然,但是如果您是逻辑方面的专家,可以简单地对它们进行划分和决定,这是最重要的定理(在Robertson和Seymour定理之后),在该领域中是Courcelle定理。有关更多信息,请阅读元算法定理调查。


尽管可以使用逻辑来定义语言,但根据我的经验,这几乎不是“重要角色”。我完全看不到逻辑与FPT的关系。
拉斐尔

@Raphael,我认为对您评论的回答不只一行,我更新了我的回答。我想我已经回答了您,但是如果您仍然认为还不行,请告诉我有关我的“正式”部分的信息,我认为我的第一个Wiki链接不够好,我添加了更多信息,此外,对于第二部分,我添加了一篇不错的文章,如果您想进一步了解它,可以阅读它。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.