为什么常规语言的补充仍然是常用语言?

时间:2011-10-29 04:20:53

标签: computer-science discrete-mathematics regular-language formal-languages

根据我的教科书,只要L1是常规语言,L1 = A * - L1的补语就是常规语言。
A *不包括Context Free语言,Context Sensitive语言和Recursively Enumerable语言吗? A * -L1也包括所有这些,不是吗?那怎么可能是常规的?
在有限状态机的表示下,我理解为什么补码仍然是常规语言。但是,我无法理解它背后的理论。

此外,A * - L1 = A *交叉补充(L1)。是不是用补语定义的一个补语定义了一个补语?我真的不明白这是如何有效的。

感谢。

3 个答案:

答案 0 :(得分:5)

我认为你感到困惑的是当你说“不A*还包括上下文无关语言,上下文敏感语言和递归可枚举语言?”您将{{1>}(一组字符串)与A*混淆,后者是一组语言

Powerset(A*)确实是一个包含“上下文无关语言,上下文敏感语言和递归可枚举语言”的集合,但它实际上与刚才所说的定理无关:给定任何常规语言{{ 1}}(一组字符串),然后语言Powerset(A*) - {L1},也一组字符串,也是一种常规语言。

TL; DR你的问题中的关卡之间存在混淆:字符串集与语言集。 L A*-LA*L常规的任何两个分区也必须定期A*-LL不会也不能“包含语言”,因为它是一组字符串。

关于你的第二个问题:

  

此外,A * - L1 = A *交叉补充(L1)。是不是用补充定义的某种东西定义了补语?

好问题。我怀疑这是否作为定义呈现,这只是定义运算符A*-L。据我所知,它没有定义“补充功能”。也许已经定义了“补语”,你的书现在正试图定义减法运算符。否则这是一个定理而不是定义。

答案 1 :(得分:3)

我找不到Hopcroft & Ullman的副本,但我认为我找到了正则语here的补语的正确定义。 似乎是正确的,并且在会话上更明确地说L的补充是接受任何字符串的DFA,除了属于L的成员。所以你移动了接受状态对所有(以前)不接受的国家和你已完成。由于补语只是DFA的排列,因此结果仍然是DFA。

就符号而言,我认为您应该将其作为L1 = A* - L1阅读,因为complement L1 = A* - L1 complement是补充运算符。

答案 2 :(得分:0)

如果你能理解自动机证明,那么你拥有一切。它背后的直觉是,如果你能通过运行自动机识别常规语言并查看它是否在最终状态停止,那么你就可以通过运行相同的自动机来识别该语言的补语(在所有字符串的集合上)并查看非最终状态是否停止。由于所有字符串都停止在某个状态,并且当且仅当语言在最终状态停止时,语言是常规的,那么当且仅当它停止在非最终状态时,它是非常规的。我想这很直观。此外,你需要向自己证明一种语言是常规的,就是为它构建一个自动机:只需交换所有最终和非最终状态。