自动机理论有多实用?


37

在与理论计算机科学相关的主题中总有一种应用方法。但是,教科书和本科课程通常无法解释自动机理论成为重要课题的原因,也无法解释其在实践中是否仍具有应用价值。因此,大学生可能难以理解自动机理论的重要性,并可能认为它已不再具有实际用途。

自动机理论在实践中仍然有用吗?

它应该成为本科CS课程的一部分吗?


4
我认为这是题外话;请参阅常见问题解答
Jukka Suomela 2011年

3
我对这种“偏离主题”的感觉百感交集。这显然不是研究水平,但是这个关于自动机理论相关性的特殊问题经常出现。
Suresh Venkat

18
我认为这完全是话题。有限自动机理论的应用是什么?与“现实世界”中的“ Vertex Cover Applications”没有什么不同,我们也没有解决这个问题。
Peter Shor

4
顺便说一句,这个问题是紧密相关的,它的答案也可能为有限自动机理论的研究提供一些实践动机:“ 正则表达式有什么用? ”。
Jukka Suomela 2011年

2
我不得不说,答案的质量和多样性使“范围”问题变得无关紧要。我希望已经获得三票赞成,这个问题不会在边缘徘徊。
Suresh Venkat

Answers:


51
  1. 曾经使用过grep / awk / sed之类的工具吗?正则表达式构成了这些工具的核心。

  2. 您会惊讶于通过原则上使用正则表达式可以避免多少编码-在“实际项目”中,例如电子邮件服务器。

  3. 如果您是CS专业的学生,​​那么肯定会为(至少是一种很小的)语言编写编译器/解释器。如果您曾经尝试过此任务而陷入困境,那么您将不胜感激,一点点理论(即上下文无关文法)可以为您提供帮助。这个理论将过去不可能完成的任务变成了可以在一个周末完成的任务。(它为发明家赢得了图灵奖-Google BNF)。

  4. 如果您是CS专业的学生,​​则有时需要坐下来考虑计算的哲学基础,而不只是考虑下一版Android API有多酷。与此相关的是,大学的工作不是为您的下一个五年做好准备,而是为您的下一个五十年做好准备。在这方面,他们唯一可以做的就是帮助您思考-思考自动机理论作为这些课程之一。


32

CS的更实际的体现之一是编译器构造。1965年,Knuth开始研究LR解析器。很快(不到十年),我们有了LALR解析器,它是确定性下推自动机的子集,可让我们实现移位/缩减解析器。

LALR解析的可行性和效率的核心是Knuth的证明,证明该语言的“前缀”是规则的(有限自动机)。这是自动解析器生成器(如yacc / bison等)的起源。

可以肯定地说,我们所知道的编程语言很大程度上归功于这些发展。

这是另一个示例:TCP / IP协议的核心是有限状态机。它可以获得多少实用性?

每个认真的CS学生,尤其是实践型学生,都应注意自动机理论。它是计算机科学丰富性的基础。


源文件的解析并不是编译器真正有趣的部分,因此我不能认为“我们所知道的编程语言很大程度上要归功于这些开发,这是不安全的”。此外,可以使用不同的工具来解析语言,例如PEG或解析组合器(即parsec)。
1月Špaček2013年

30

你能听到那声音吗?这是在自动机理论的天堂里笑出的上千种出色定理,应用和工具的声音。

语言和自动机是优雅而强大的概念,您可以在计算机科学的各个领域中找到它们。语言不是计算史前的枯燥,形式主义的惯用语。语言理论的观点将关于复杂,不透明对象的看似复杂的问题提炼成关于单词和树的简单陈述。形式语言在计算机科学中扮演着类似于代数和拓扑学为经典数学带来的基本观点和改变游戏规则的观点。这是通过语言理论解决的一些实际,相当复杂的实际问题。

  1. 您要发现文档中某个短语的重复出现并删除第二个出现的短语。本质上,您要替换语言中的序列。
  2. 程序是否包含断言冲突?与内核进行交互时,设备驱动程序是否遵守某些协议?程序的行为是一组执行。换句话说,一种语言。正确性属性是另一种语言。程序正确性问题相当于语言包含检查。
  3. 您的软件会陷入无限循环吗?分布式算法是否包含活动锁?我们需要无限词以上的语言,但是语言包含视图仍然适用。
  4. 您想要构建一个消毒程序来检测输入到Web应用程序中的恶意Javascript。恶意字符串集是一种语言。以另一种语言输入到表单中的字符串集。您要确定这些语言的交集是否为非空。
  5. 反应性和关键任务系统的运行时监视。您想要设计一个软件监视器来监视化学过程的运行或跟踪财务数据库的更新。这些都是语言包容和交集的核心问题。
  6. 模式识别及其众多应用。您想要在一系列错误报告中检测基因组数据,文本中的模式。这些问题是给我们提供来自未知语言的单词并且必须猜测该语言的问题。这些是语言推断问题。
  7. 给定一组XML文档,您想对适用于这些文档的架构进行反向工程。XML文档可以被理想化。那么,模式是树语言的规范,而模式推断问题是树语言之上的语言推断问题。
  8. 许多应用程序需要自动算术推理。假设我们修复了诸如Presburger算术之类的逻辑理论,其中我们拥有自然数,加法和小于谓语。具有n个变量的公式表示一组n维向量。向量是一个数字序列,可以被编码为一个单词。谓词就是一组单词。一种语言。诸如合取,析取和取反之类的逻辑运算成为语言的交集,并集和补语(存在量化是一种投影)。

上面暗示的减少将语言视为抽象的数学对象。为了在实践中应用这些思想,我们需要一个数据结构来表示语言和算法来操纵这些数据结构。

输入自动机。自动机使我们能够将有关抽象数学对象(如语言)的问题减少为有关标记图的具体算法问题。语言和自动机理论除了数量众多的实际应用之外,还提供了非常重要的智力服务。我们可以考虑各种问题,从格式化邮政编码到统一且整齐的概念空间中单子二阶逻辑的决策程序。那太神奇了!

关于逻辑和决策程序,我什么也没说。(是的,它们有实际应用。)有关权威概述,请参见Kaveh的答案。


哈哈,讽刺的是
Praveen Soni,


15

不只是香草自动机。您正在学习(计算)模型的基础知识(接受状态,ε转换等),该模型有助于推理哪些可以,更重要的是某些查询语言无法表达的内容。一些有趣的结果包括:

(当然,我正在跳过很多其他课程)

基本上,这是一个非常通用的模型。您的课程可能会强调自动机,语言和逻辑之间的联系。

如果我想将其与具体的“世俗”工具联系起来,我会在图书馆度过一个悠闲的早晨,阅读Abiteboul等人的《数据库基础》中的几篇文章(AB?),然后尝试将其与课堂资料联系起来。 。当然,这只是一个的找一个自动机类的应用程序(很多)的方式,我想不是最明显的-但是这正是为什么它是一个有趣的练习。


14

正如在各种答案中已经指出的那样,UG课程中的自动机理论提供了一个基本的概念框架,用于介绍更高级的(和实际的)主题,并指出了被忽略的联系。例如:二元决策图(它们是最小化的DFA;在教过DFA之后,我经常教基于BDD的难题解决方法);脚本编写,包括BioPerl和BioPython中的脚本编写(以及一个强大的设置,可以增强现实脚本正则表达式中可能隐藏了多少意外匹配),正式调试(状态属性为否定FA,相交),甚至VCR或家庭入侵者警报编程(每天通过指定不完整​​的示例来说明自动机指定不当的压力情况;也许可以使用基于用户界面综合的Harel的播放/播放场景来形式化)。我还使用该设置来教Python


1
欢迎,Ganesh!
Suresh Venkat

1
一种教授自动机的好方法。您愿意分享您的演讲笔记吗?
马丁·伯杰

9

我将从完全不同的实践角度提出另一个答案:有限状态机(或至少对它们进行一些简单的概括/扩展)经常用于游戏编程的AI端。事实证明,它们为封装角色行为提供了一个出色的模型。例如,一个敌人可能具有代表“巡逻”,“搜索”,“进近”,“攻击”,“防御”,“撤退”,“死亡”等状态,并且它们之间有明确的过渡。这不涉及诸如常规语言之类的自动机的任何形式方面,但是自动机的概念是一个非常核心的概念


8

我们已经看到,将语言与理论和实践进行对比,将一种语言置于另一种之上,是对无知的完美体现,它证明了一个人不了解思想的第一要素,并且是证明他的思想的绝妙途径。头脑变得如此变态以至于无法被教导。

—詹姆斯·米尔(James Mill,化名“ PQ”),“理论与实践”,伦敦和威斯敏斯特评论,1836年4月


8

在业界使用的模型检查中,已经有很多与自动机理论相关的研究。查看Moshe Vardi最近在Fields Institute的演讲,特别是第三次演讲“逻辑,自动机,游戏和算法”,以了解为什么自动机理论仍然重要和有用。

抽象:

由Buechi,Elgot,Rabin和Trakhtenbrot在1950年代和1960年代提出的决策程序自动理论方法是决策程序的最基本方法之一。近来,这种方法已经在硬件和软件系统的形式验证中找到了工业应用。从逻辑到实用算法的路径不仅通过自动机,而且还通过游戏,其算法方面由Chandra,Kozen和Stockmeyer在1970年代后期进行了研究。在本概述演讲中,我们描述了通过自动机和游戏从逻辑到算法的路径。

幻灯片和演讲的音频文件,可浏览这里:123


6

我们应该考虑“实用”和“应用”这两个词的语义。对于某些学生来说,实用是可以帮助他们通过考试的任何东西。对于其他人来说,任何可以在工作中完成的事情。在这两种情况下,自动机理论确实非常实用。

正如其他人指出的那样,例如,在研究编译器时,将使用语法。但是,不仅如此:了解整个状态的概念和状态之间的转换规则可以使您成为一名更好的程序员,例如,当您意识到自己的代码在这里和那里都是多余的,而当您对其进行改进时,在您的代码中应用了相同的概念了DFA最小化背后。

对于“应用程序”也是如此。那个字你懂什么?即使您是“脚踏实地的工程师”,您也将在现实世界的项目中看到并使用类似于“自动机理论”的想法:编程代码,流程图,甚至是简单而精巧的堆栈概念。对于理论书呆子像我一样,我认为应用在其他领域的自动机理论,如逻辑,代数和有限元模型理论。当然,在超市购物时,我可能永远不需要使用抽引式引理,但是像这样的定理帮助我理解了某些类语言的结构,更不用说它们所对应的逻辑和代数结构了。这是我比任何实用性评估都更有价值的东西。


5

自动机与逻辑一起抛出,可以提供检查政治家的方法,例如

Aφ

AφAφ

φAφAφL(A)L(Aφ)


3

有限自动机,通常被描述为在不同上下文中的有限状态机,或者具有它们的概率变体,可以将隐马尔可夫模型应用于模式识别和量化模式结构。例如,最小的随机有限自动机将或多或少地根据给定的概率分布生成字符串,或者根据某种分布匹配字符串样本(或时间序列)的统计属性。

例如参见CSSR,一种用于盲目重建隐藏状态的算法。它比隐马尔可夫模型更有效,更灵活。


1
为了增加实用性,在语音识别程序(如Kurzweil)中使用了隐马尔可夫模型。
tdyen 2011年

3

自动机理论的另一个更实际的应用是人工智能的发展。人工智能是从有限自动机的概念发展而来的。机器人的神经网络是基于自动机理论构建的。毕竟机器人也是自动机。


2

在与行业的关系方面,有些人给出了很好的答案。重要的是它的科学价值,自动机理论通常是首先理解本科生研究中更高层次的计算理论的大门。自动机理论具有大量的定理,在理论计算机科学中无处不在,尤其是当人们想谈论诸如编译器之类的应用时。它的科学价值(尚未过时,怎么可能?它是该领域的核心理论。)对任何对计算感兴趣的科学家都是实用的。它是实用的,因为对于那些了解或想要了解计算本质的人来说,知识是有用的。如果您无法在其中找到用处,那么我会质疑一些研究,甚至是打算学习CS,因为它不是编程工具(那是

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.