确定两种语言是否相等[正则表达式]

时间:2013-12-06 05:09:05

标签: regex regular-language kleene-star

准备考试并正在解决这个问题:

确定R1表示的字符串集是否是R2的子集?

R1 = (01 +10)*      R2 = ((01)* + (10)*)

我的尝试:  由于代表相同的表达,我试图证明它们是相同的   R1⊆R2

我试图显示R2与R1相同: 所以我尝试了这个,使用正则表达式等价定理:

((01 +ε)* +(10 +ε))=(01 +ε) +(10 +ε)*

现在我被卡住了,我正在考虑在这里应用关联性规则并显示出来  (01 +ε)* +(10 +ε)* =(01 + 10)* +(ε+ε)* =(01 + 10)* //我认为这一步可能是错误的

因此R2 = R1

步骤:  (01 +ε)* +(10 +ε)* =(01 + 10)* +(ε+ε)* =(01 + 10)*

我认为是错误的,我认为我正在应用相关性法则错误,我不知道如何在它上面使用它时如何使用它。任何帮助将不胜感激。请:)

2 个答案:

答案 0 :(得分:2)

为了矛盾而假设R1⊆R2。因此R1中的每个字符串s也在R2中。
令s =“1001”,它是R1的成员;但是,s不是R2的成员。 =>< =

由于R1不是R2的子集,因此您需要显示的只是一个反例。

答案 1 :(得分:1)

我在一段时间内没有做过证明,但我认为这样一个简单的反例就足够了。

首先断言R1是R2的一个子集(严格或不重要)。

请注意,R1可以生成以下字符串(假设+表示OR,因此R1可以无限制地以任何模式生成0110):

10 01

您可以观察到在R2中无法生成此字符串,因为R2的定义使其必须只有01对,或者只有10对。

因此,由于R1可以在R2域之外产生字符串,因此R1不可能是R2的一个子集,严格或不严格。