证明某种语言是正常的

时间:2014-02-26 02:20:34

标签: regex regular-language

在我的计算理论课中,我们有一个证明语言是正常的任务。 该语言定义为:

  

B = {1ky | y位于{0, 1}*y至少包含k 1,k >= 1}

这种语言在我看来,它需要一个下推自动机来为此创建一台机器,但是如果有人能够推动我朝着正确的方向努力来证明这是一种常规语言。向我展示其中一种证明方法:创建NFA,DFA,正则表达式或常规语法会很有帮助。

1 个答案:

答案 0 :(得分:8)

语言L:

  

L = {1ky | y位于{0, 1}*y k包含至少1, k >= 1'0'

是一种常规语言。确实,这种语言非常简单。 L的简单英文描述是:“所有字符串的集合由'1''1'组成,其限制是:每个字符串以'1'开头,并且还包含至少两个{{ 1}}”。

有问题的语言描述被有目的地收集,使问题变得棘手。解决这类问题的简单方法是:阅读语言尝试理解语言中的字符串模式。尝试编写所有可能的最小字符串,然后写出第二个最小的字符串,依此类推......
此外,尝试找到那些属于该语言的最小长度字符串。下面我展示了我的方法,用你的例子来写英文描述中的RE或FA。

让我们在前几个步骤中尝试理解语言L中允许使用哪种字符串。阅读以下几点:

  1. 语言L中的所有字符串都由'0''1'
  2. 组成
  3. 根据1kyk >= 1,语言L中的所有字符串必须 '1'开头,因为k的格式大于0。
  4. 语言字符串的模式为11...y(或者我们可以说1+y)。要进一步解释,字符串以一些1开头,并且后缀为y,其中y可以是零0 s和{{1}的任意子字符串}}秒。
    注意:因为1可以是大于0的任何数字,所以只有一个简单的约束,即在子字符串k之前必须至少有一个y。在第一个'1'之后,您可以将后缀视为子字符串'1'的一部分。
  5. 换句话说,我们也可以解释语言y
  6. 现在,正如我所说,尝试用语言编写一些示例字符串:

    1. 一些最小的字符串可以是:

      L = { 1y, where y contains at least a 1}
    2. 还有一个例子:

      1
    3. 还有一个示例'11' where k = 1 and y = '1' '101' where k = 1 and y = '01' '110' where k = 1 and y = '10' ,现在可以是'111' where k = 1 and y = 11 #remember in `y` there must be atleat k ones '1111'?字符串k可以通过以下方式解释:

      y
    4. 语言中的一些示例字符串:

      1. 不能在L中的字符串是'1111''1111' with k = 1 and y = 111 #remember in `y` there must be atleat k ones or k = 2 and y = 11 #remember in `y` there must be atleat k ones '0',因为字符串必须以'00'开头。因此,所有带有'01111'模式的字符串都以'1'开头,而不是语言。

      2. 还有其他可能的字符串以0(0 + 1)*开头,但仍然没有语言。例如'0'因为如果'1'(最小值为'10'),则k = 1k。出于同样的原因,string = y不是语言。因此,模式'0'的所有字符串'1'后跟任意数量的零10*不在语言中。

      3. 因此语言中的所有字符串都以'1'开头,而'0'部分也至少包含'1'y没有限制可以显示'1'的地方。子字符串y可以是任意字符串,其中至少有一个字符串,'1'的正则表达式为:y

        L的正则表达式为:y

        现在,类似的方法可以帮助为语言编写DFA,可以参考答案@ drawing minmal DFA for the given regular expression并编写常规语法阅读答案@ Left-Linear and Right-Linear Grammars