Regex 显示带有计数(1s)=计数(0s)的位字符串为';不规则
设L是由字母表{0,1}上包含相等数量的1和0的字符串组成的语言 例如:Regex 显示带有计数(1s)=计数(0s)的位字符串为';不规则,regex,algorithm,regular-language,automata,proof,Regex,Algorithm,Regular Language,Automata,Proof,设L是由字母表{0,1}上包含相等数量的1和0的字符串组成的语言 例如: 000111 10010011 10 1010101010 你怎么能证明L不是一种常规语言呢?我不知道形式证明,但直觉是你不能构造一个DFA来识别这种语言(考虑到它需要一个无边界的状态数来跟踪111…111000…000或类似形式的字符串).我认为你可以使用与用来证明{0^n 1^n:n>0}不是正则的参数完全相同的参数,因为你可以自由选择与泵引理相矛盾的字符串 假设L是正则的。所以它必须满足某个整数n(泵浦长度)的泵浦
000111
10010011
10
1010101010
你怎么能证明L不是一种常规语言呢?我不知道形式证明,但直觉是你不能构造一个DFA来识别这种语言(考虑到它需要一个无边界的状态数来跟踪
111…111000…000或类似形式的字符串).我认为你可以使用与用来证明{0^n 1^n:n>0}不是正则的参数完全相同的参数,因为你可以自由选择与泵引理相矛盾的字符串
假设L是正则的。所以它必须满足某个整数n(泵浦长度)的泵浦引理。以属于L的字符串S=0^n1^n
为例。根据引理,它可以被拆分为S=xyz
,其中|xy | 0
,而xy^iz
属于L,因为所有i>=0
。请注意y
只能由零组成。现在泵入y,您只需在字符串中添加零,该字符串不再属于L。因此,您有一个矛盾。因此L不是正则的。可以使用正则语言的泵引理给出形式证明,如下所示:
假设语言是正则的。所以它必须满足常数整数p的泵引理。设s
为0和1数量相等的任意字符串。然后s可以分为3部分x,y,z,这样|xy | 0
,然后x(y^i)z
,其中i>=0
也应该属于L
让我按如下方式划分字符串:
y
是字符串的一部分,其0和1的数量不等
x
可以是s
在y
之前的子字符串
z
可以是y
之后的零件
现在,如果我通过取i=0
来“压缩”字符串,那么剩余的字符串将仅是xz
,它肯定具有不相等的0和1,这不属于语言L
因此,我们得出了一个矛盾,正如我们先前假设L是正则的一样
因此,它是不规则的
如果对上述部分有点难以理解,请考虑一个例子。
设p为整数5。将
0+1000+11101
设为L中的字符串(+表示串联)
让我假设x是“0
”,y是“1000”
,z是剩余部分11101
。
然后,如果我们用i=0
执行x(y^i)z
,剩下的字符串将是011101
,它不是L的一部分。因此不规则
注意:这个例子只是一个让你理解逻辑的例子。一个人不能随机决定p的值。你可能是指count
,而不是sum
@Kobi你有什么深奥的语言理论观点吗?否则,“n”1s的总和与“n”1s的计数相同。这有帮助吗?@Alnitak-但不是零。我同意这是一种迂腐的语言。@Kobi啊,是的-关于零的观点很好:)这不是语言{0^n1^n:n>0},数字可以是任意顺序。你怎么能用泵引理来表示Q中描述的语言是非规则的?@Andrewtomazo Fathomling:但这是你感兴趣的语言的一个子语言。它也是0*1*
的一个子语言,这是规则的。@Andrewtomazo Fathomling:这是一个很好的观点。在这种情况下,我将把我的答案限制在直观的论点上!安德鲁:如果你的语言L是正则的,那么交集L和0*1*将是正则的(因为正则语言在交集下是封闭的)。但是交叉点是0^n 1^n,这是不规则的。@Kobi:我想我选择的字符串可以作为证明。根据维基百科和rparree的链接,它应该是| xy|