常规语言是否关闭?


10

具体来说,我所说的加法是将定义为字母。由于正规语言和在某些字母,看看。 { 0 1 2 } Σ × Σi{0,1,2,...,i}ABΣiA×B

对于每个有序对 x,将此有序对的“和”定义为,其中和是以i为底的数字。前导0被忽略,因此在每个接受的字符串前面。这意味着被定义为0。一个+ b 一个b 0 * ε(a,b)A×Ba+bab0ϵ

语言是代表所有此类可能总和的字符串集。A+B

到目前为止,我知道:

  • 一元()中是这样。Σ1
  • 对于任何有限的规则语言和都是如此,因为任何有限的语言都是规则的,而是有限的。B A + BABA+B
  • 语言 = { s | s为n的基极b的倍数}Σ b是定期对任何b > = 1。这意味着也可以添加任何形式为C n的语言,因为C i + C j = C i + j也是规则的。但是,有些语言像D = { s | s的开头和结尾均以1}表示,不符合此条件,因此这里并不能描述所有常规语言。Cn{|}Σbb>=1CnCi+Cj=Ci+jD{|

2
这是不正确的,如果A在基地2规律,这也是基地3经常考虑,例如,2的幂
domotorp

我知道,你是对的。我相应地编辑了问题。我试图证明它是正确的,然后我误解了同构是什么,并认为它是正确的。但这不是,对此感到抱歉。如果某种语言在a> 1的基础b ^ a中是正规的,但是对于任何1 <= c <a的基础b ^(ac)也是正规的。(因此,例如,如果一种语言在base 8中是常规语言,那么只需模拟base-8 dfa,它在base 4和2中也是常规语言)。
菲利达2014年

“这意味着ϵ被定义为0”。我不明白那是什么意思。如果0和ϵ相同,则可以将所有0都删除,并且数字解释不再起作用。
babou 2014年

重点很简单,如果一个空字符串in在有序对中,则它将0添加到另一个字符串。对于给定的任何以前导0开头的字符串,也可以将其删除。例如,这意味着000101与101相同。这就是我的意思,如果一个ϵ 本身出现在一个字符串中,那么就其和而言,其值等于0或00或000 本身是等效的。如果这些字符串在另一个字符串中,则所有投注都将关闭,并且此替换不再有效。
菲利达2014年

Answers:


14

对,他们是。

首先,考虑字母其符号的位数(上下堆叠彼此成三位数字的一堆)三元组。在这个字母上,我们可以定义一种常规语言A 其中由三个数字的最高位构成的字符串属于A;一种常规语言B 其中由三个数字的中位数构成的字符串属于B;以及常规语言C,其中前两个字符串与下一个字符串相加。A 'B '仅对AB使用修改过的自动机,而CΣi3AABBCAB一个C 使用以下事实:您可以通过从右到左扫描来进行加法,同时仅将进位的一位保留为状态。

然后是(由下相交闭合)识别三个串,一个在堆正则语言,一个在,和在和第三。从堆栈中剥离出前两位数字的同态只剩下底部的一位,将其带到您想要的语言,结果是同态下的闭包。一个C一个


真的很棒 我没有意识到您可以通过这种方式使用这些堆栈。谢谢!
菲利达2014年

诚然,这有点麻烦,因为在这种情况下,它仅包含相同大小的字符串总和,但是,因为我们可以通过在左侧添加零来“模拟”不同大小的字符串总和,并且很容易将dfa修改为另一个dfa,它会在所有接受的字符串前面识别0 *(一旦构造求和dfa即可识别具有同态的C)。
菲利达2014年

我想最大的关键是A和B必须以相同的方式进行“技术修改”,使其分别为0 * A和0 * B,一旦这样做,对于a和b的每一对来说,找到0 * a + 0 * b之和st这两个值都具有足够的前导0以匹配大小,然后由于可以用相同的方式修改C,因此可以根据需要去除结果0。是暗含的,还是有一种更简单的方法来查看我所缺少的内容?
菲利达2014年

是的,有一些涉及填充的技术,但是它们并没有真正改变基本思想,因此我省略了它们。
David Eppstein 2014年

太酷了,这很有意义。
菲利达2014年

9

是。我提供了一个从末尾开始读取单词的NFA,因为即使这样的自动机也只能识别常规语言。我们还假设B由此类自动机M AM B给出。NFA在每个步骤中猜测ab的相应数字是什么,检查加法是否正确,并计算M AM B的新的相应状态。在单词的末尾,当且仅当M AM B都接受时,它接受。一个中号一个中号一个b中号一个中号中号一个中号

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.