显示count(1s)= count(0s)的位串不常规

时间:2012-05-20 11:26:25

标签: regex algorithm regular-language automata proof

设L是由字母{0,1}上的字符串组成的语言,包含相同数量的1和0。

例如:

000111
10010011
10
1010101010

如何证明L不是常规语言?

3 个答案:

答案 0 :(得分:3)

我认为你可以使用完全相同的参数来表示{0 ^ n 1 ^ n:n> 0}不规则,因为你可以自由选择与泵浦引理相矛盾的字符串。

假设L是正常的。因此它必须满足某些整数n(泵送长度)的泵浦引理。取字符S=0^n 1^n,属于L.根据引理,它可以被分为S=xyz|xy| <= n|y|>0x y^i z属于L,适用于所有i>=0。请注意y必须仅包含零。现在泵y,你只是在字符串中添加零,这不再属于L.所以你有一个矛盾。所以L不规律。

答案 1 :(得分:0)

我不知道一个正式的证据,但直觉是你不能构造一个DFA来识别这种语言(考虑到它需要一个无限数量的状态来跟踪形式{{1}的字符串或类似的。)

答案 2 :(得分:0)

可以使用常规语言的抽取引理给出正式证据,如下所示:

假设语言是常规的。因此它必须满足const整数p的泵浦引理。设s为任意数字为0和1的字符串。然后s可以分为3个部分x,y,z,使得|xy|<=p|y|>0,然后是x(y^i)z,其中i>=0也应该属于L.

让我按如下方式划分字符串:

  • y是字符串的一部分,它具有不等数量的0和1。
  • x可能是s之前y的子字符串。
  • z可能是y之后的部分。

现在,如果我通过取i = 0“抽空”字符串,那么剩下的字符串将只有xz,肯定会有不等数量的0和1不属于该语言升。

因此,我们已经达成了矛盾,因为我们之前认为L是规则的。

因此,这不常规。

如果对上述部分有点了解,请考虑一个例子。 令p为整数5.设0+1000+11101为L中的字符串(+表示连接) 我将x设为“0”,y为"1000",z为剩余部分11101。 然后,如果我们使用x(y^i)z执行i=0,则剩余的字符串将是011101,这不是L的一部分。因此不规则。

注意:该示例只是一个让您理解逻辑的示例。人们无法随机决定p的值。