在计算理论课程中,通常显示具有两个或更多计数器的计数器机器等效于图灵机。但是,我还没有看到对一台计数器可以识别哪些语言的正式分析。这些语言是否等同于上下文无关的语言(也许是通过某种巧妙的构造将它们与PDA相关联),还是它们是完全不同的一类语言?
在计算理论课程中,通常显示具有两个或更多计数器的计数器机器等效于图灵机。但是,我还没有看到对一台计数器可以识别哪些语言的正式分析。这些语言是否等同于上下文无关的语言(也许是通过某种巧妙的构造将它们与PDA相关联),还是它们是完全不同的一类语言?
Answers:
一个计数器自动机是下推式自动机,在堆栈中仅允许使用一个符号(加上固定的底部符号)。一个计数器自动机识别的语言构成上下文无关语言的适当子集。
例如,一个1计数器自动机可以识别不规则的语言,但是不能识别不带上下文的语言也可以由2计数器自动机识别。
如果k-DCA是确定性 k计数器自动机,而k-NCA是不确定性 k计数器自动机,则我们具有以下适当的包含:
DFA(常规语言) 1-DCA 2-DCA⋐
1-DCA 1-NCA
如果我们不允许转换(切换为实时),则k-DCA k'-DCA为k <k'。&Subset;
只是为了完成:有些语言没有上下文,但是无法被计数器自动机识别(带有k 2的k-DCA )(例如),以及被计数器自动机识别的不是上下文的语言免费(例如)。计数器自动机(尤其是两个计数器自动机)只有在其输入和输出经过正确编码的情况下才能图灵完成(有关详细信息,请参阅Wikipedia条目)。{ w w R } { a n b n c n }
美国和法国团队(Ginsberg,Greibach,...,Nivat,Berstel,...)在AFA和AFL理论(自动机和语言的抽象家族)的背景下,对反自动机进行了深入的研究。
计数器自动机通常定义为配备有外部存储器的有限状态自动机,该存储器由自然数组成(如果有多个计数器,则为多个)。此数字可以递增,递减和(通常)测试为零。计算从零开始,并且仅在计数器末尾为零时才接受计算,这与下推空堆栈接受相当。
如果这样的机器至少具有两个这样的计数器,那么即使在确定的情况下,它也等效于图灵机。明斯基证明了这一事实,可以在您链接的维基百科文章中找到该事实。该模型当然与同一维基百科页面中提到的注册机有关。维基百科文章中提到的编码问题在此设置中并不重要,因为我们考虑使用带有输入磁带的自动机(毕竟我们必须读取输入字符串),而本页上的维基百科仅假设计数器。
计数器自动机可以看作是一种特殊的pda类型,它只有一个堆栈符号和一个堆栈底部(永远不会移动)。这使自动机可以测试计数器/堆栈是否为零,并采取相应的措施。
实际上,存在三种类型的计数器自动机。因此,明智地合并结果,否则您最终会遇到矛盾(就像我过去发生的那样)。这三种类型都(严格地)包含在针对计数器的无上下文语言中。
上面的类型存储一个整数(或自然数,这无关紧要),并且可以测试其内容为零。 盲计数器自动机存储一个整数,但不能测试零。它们可以显式地计数为零以下。 部分盲计数器自动机无法测试零,但可以存储自然数。如果机器试图降到零以下,它会暂停而不接受。这是对Petri网建模的自然存储类型。它也与PDA相关,现在只有一个堆栈符号,没有特殊的底部标记(因此存在测试零的问题:弹出最后一个堆栈元素时我们只会卡住)。有时,响应计数器模型定义的族的名称是OCL,ROCL和1-BLIND。
对所有这些族进行了研究,它们都是(但我在AFA / AFL理论上还是生锈的)主要全三重奏(=有理锥),这意味着它们在(逆)同态下是封闭的,并且与常规语言相交,可以得到从单一语言开始使用这些操作。对于最大的家庭OCL(零测试),您可以从语言,其中是“放在支架上的双面Dyck语言”(用适合主题的术语)。有与此语言有关的重要直觉。符号和弹出和推动,是零测试。 d = { 瓦特∈ { 一个,b } * | #一个(瓦特)= #b(瓦特)} 一b Ç
作为相关研究的一个例子,Latteux等人发表了一篇不重要的论文“单反语言族群在商机下是封闭的”(实际上是关于ROCL)。