这种上下文免费语言是否定期?

时间:2017-01-27 12:47:55

标签: context-free-grammar context-free-language

如果我的语言{0,1}由以下无上下文语法定义并带有起始变量S,那么它是常规语言吗? S→TS,S→1T,S→1S T→TT,T→0T1,T→1T0 T→ε

这种语言有规律吗?

在我看来,这种语言不能定期,因为它基本上是终端和变量的任意组合。而常规语言需要是正确的或线性的。我是对的,还是我的想法不正确?是否存在任何人建议用于确定无上下文语法是否规则的特定过程?

1 个答案:

答案 0 :(得分:2)

与语法相关的语言不规律。该帖的其余部分涉及该声明的证明。

首先,请注意L(T) = {w over {0,1} | w contains equal number of 0s and 1s}

你可以很容易地证明这一点。

证明自己的想法。 (==>)假设w中有L(T)。那么显然有相同数量的0和1。

(<==)假设w包含相同数量的0和1。我们通过归纳表明w可以从T推导出来。如果|w|<=2,则显然可以从T推导出来。假设对于归纳假设,具有相等数量的0和1的所有长度为k(偶数长度)的字符串可以从T导出。设w的长度为k+2。如果w的第一个和最后一个字符匹配(均为0或均为1),则应用生产T -> TT;第一部分和最后部分都可以通过归纳假设从T推导出来;在这里,我们使用明显的属性,如果w[0]=w[|w|-1],则存在索引iw[0..i]w[i+1..|w|-1]都在L(T),并且都可以通过归纳假设从T推导出来。否则,如果w的第一个和最后一个字符不匹配,请使用T -> 0T1T -> 1T0;结果字符串的长度为k,并且可以通过归纳假设从T导出。的 QED。

现在,语法的语言是S可以生成的字符串集。请注意S生成(T+1)*1T形式的字符串(终端和变量)。换句话说,对于语法可导出的任何终端字符串w,必须是S =>* α =>* wα位于(T+1)*1T的情况。

现在显而易见的是,S可以生成的所有可能终端的集合由正则表达式(L(T)* + 1)*1L(T)*表征。 (您可以通过检查可以从(T+1)*1T生成的终端字符串集来达到此目的。)

您可以简化L(S)(L(T)+1)*1L(T)=(L(T)+1)*的表达式,因为1L(T)的语言是(L(T)+1)^2语言的子集。因此L(S) = (L(T)+1)*,该语言由二进制字符串组成,其中包含至少与0一样多的1。

此语言不是常规。您可以使用pumping lemma来证明这一点。

证明。假设为了矛盾,L(S)是正常的。然后,通过抽取引理,n>0使w长度至少为L(S) n的{​​{1}}分为w=xyz|xy| <= n的是:

  1. y
  2. k >= 0非空,
  3. 适用于xy^ky中的所有L(S)w=0^n1^n
  4. m=2n为来自L(S)的长度为L(S)的字符串。 (该引理讨论了来自w=xyz所有足够长的字符串,因此我们可以选择我们喜欢的任何字符串并且仍具有属性。)让m=2n成为存在的分区引理。显然,由于|xy|<=ny0仅由0组成(至少有一个y,因为xy^2z不为空)

    显然,L(S)的零比一些零更多,因此不在L(S)。这与泵浦引理相矛盾。因此,array:4 [ "_token" => "SQjQpOxCec5lal5tzFgW1FMtrcOaaIqjoii2fuCb" "_previous" => array:1 [ "url" => "http://my-url" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "lang" => "en" ] 不常规。的 QED。