2013-02-19 36 views
0
B = {1^k y | k >= 1, y in {0, 1}* and y contains at least k 1's } 

这种语言是否经常?如果是这样,你如何证明它,以及如何用Python中的正则表达式来表示它?这是常用语言吗?如果是这样,那么正则表达式是什么?

这是为班级工作,所以如果你可以解释你的答案背后的原因和过程,它将不胜感激。

+0

我们还没有研究过上下文无关的语言 - 你怎么知道? – camdroid 2013-02-19 05:45:44

+2

这是不规则的,因为你不能在有限数量的状态下存储任意大小'k'。对于形式证明使用抽象引理。 – starblue 2013-02-19 05:47:57

+0

@starblue - 是不是必要的抽水引理,但不够? – camdroid 2013-02-19 05:56:53

回答

6

你的语言是等同于这种语言:

B' = {1 y | y in {0, 1}* and y contains at least one 1} 

可以证明,B“是B的子集,因为在B中的条件”是与B相同,但其中k为1

证明B是B'的子集涉及证明B中的所有单词,其中k> = 1也属于B',这很容易,因为我们可以拿走B中所有单词中的前1,并设置y成为字符串的其余部分,那么y将总是包含至少一个1.

因此,我们可以得出结论B = B'


因此,我们的工作简化为确保第一个字符是1,至少有1 1在字符串的其余部分。

正则表达式(CS表示法)将是:

10*1(0 + 1)* 

在以共同正则表达式引擎中使用的符号:

10*1[01]* 

的DFA:

DFA

这里q2是最终状态。

“至少”是解决这个问题的关键。如果这个词变得“平等”,那么故事会有所不同。

+0

@GrijeshChauhan:你的反例是什么? – ibid 2013-02-19 08:27:33

+0

@nhahtdh更新您的答案,以便我可以投票。你是正确的一个[相关的问题在这里](http://stackoverflow.com/questions/14521300/why-l-wxwr-wx-belongs-to-ab-is-a-regular-language) – 2013-02-19 09:41:21

+0

@GrijeshChauhan :更新**什么**? – nhahtdh 2013-02-19 11:26:17