准备考试并遇到了这个问题:
确定由R1表示的字符串集是否是R2的子集?
R1 = (01 +10)* R2 = ((01)* + (10)*)
我的尝试:既然有相同的表达,我就试图证明它们是相同的R1⊆R2
我试图证明R2与R1相同:所以我尝试了这个,使用正则表达式等价定理:
((01+ε)*+(10+ε)
现在我陷入了困境,我正在考虑在这里应用关联性规则,并展示(01+ε)*+(10+ε)*=(01+10)*+(ε+ε)=(01%10)*/我认为这一步可能是错误的
因此R2=R1
步骤:(01+ε)*+(10+ε)*=(01+10)*+(ε+ε)=(01%10)*
我认为这是错误的,我认为我错误地应用了结合律,当它上面有*时,我不知道如何使用它。如果有任何帮助,我将不胜感激。请:)
为了矛盾起见,假设R1⊆R2。因此,R1中的每个字符串s也在R2中。
设s="1001",它是R1的一个成员;然而,s不是R2的成员。=><=
由于R1不是R2的子集,所以您只需要展示一个反例。
我已经有一段时间没有做证明了,但我认为一个简单的反例证明就足够了。
从断言R1是R2的子集开始(严格与否无关紧要)。
注意,R1可以产生以下字符串(假设+
表示OR,因此R1可以无限地产生任何模式的01
或10
):
10 01
您可以观察到,在R2中不可能产生这个字符串,因为R2被定义为必须只有01
对,或者只有10
对。
因此,由于R1可以在R2的域之外产生字符串,因此R1不可能是R2的子集,无论是否严格。