Является ли этот контекстно-свободный язык обычным?

Если у меня есть язык {0,1}, определенный следующей контекстно-свободной грамматикой с начальной переменной S, является ли это обычным языком? S → TS, S → 1T, S → 1S T → TT, T → 0T1, T → 1T0 T → ε

Это обычный язык?

Мне кажется, что этот язык не может быть регулярным, потому что это практически любая комбинация терминалов и переменных. В то время как обычный язык должен быть линейным по правому или левому краю. Я прав, или мое мышление здесь неверно? Есть ли какой-нибудь конкретный процесс, рекомендуемый для определения регулярности контекстно-свободной грамматики?


person Archeofuturist    schedule 27.01.2017    source источник
comment
Если бы эта грамматика генерировала все строки из единиц и нулей, она была бы правильной. Но это не так. Например, попробуйте сгенерировать 00100. Или даже 0 или 00   -  person rici    schedule 27.01.2017
comment
00100 будет палиндромом - я думал, вы не сможете создать палиндром из обычных языков. Так разве тот факт, что он не может произвести 00100, означает, что это обычный язык?   -  person Archeofuturist    schedule 27.01.2017
comment
Очевидно, что вы можете создавать палиндромы из обычного языка (S- ›00100 - обычный язык). Язык всех палиндромов нестандартный, но это вам мало помогает. Подумайте, какой на самом деле ваш язык.   -  person rici    schedule 27.01.2017
comment
@blazs, как это утверждение противоречит всему, что я сказал?   -  person rici    schedule 27.01.2017


Ответы (1)


Язык, связанный с грамматикой, не является регулярным. Остальная часть поста посвящена доказательству этого утверждения.

Во-первых, обратите внимание, что L(T) = {w over {0,1} | w contains equal number of 0s and 1s}.

Вы легко можете это доказать.

Доказательство идеи. (==>) Предположим, w в L(T). Тогда, очевидно, имеет одинаковое количество нулей и единиц.

(<==) Предположим, что w содержит равное количество нулей и единиц. По индукции покажем, что w выводится из T. Если |w|<=2, то он, очевидно, выводится из T. Предположим, для индуктивной гипотезы, что все строки длины k (четной длины) с равным количеством нулей и единиц выводятся из T. Пусть w будет иметь длину k+2. Если первый и последний символы w совпадают (оба 0 или оба 1), применить результат T -> TT; первая и последняя части выводятся из T с помощью индуктивной гипотезы; здесь мы используем очевидное свойство: если w[0]=w[|w|-1], то существует индекс i, такой, что w[0..i] и w[i+1..|w|-1] оба находятся в L(T), и оба выводятся из T по индуктивной гипотезе. В противном случае, если первый и последний символы w не совпадают, используйте T -> 0T1 или T -> 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)*, язык, состоящий из двоичных строк, содержащих как минимум столько же единиц, сколько нулей.

Этот язык нестандартный. Вы можете доказать это, используя лемму о перекачке.

Доказательство. Предположим, для противодействия, что L(S) регулярно. Затем, согласно лемме о накачке, существует n>0 такое, что каждый w из L(S) длины не менее n может быть разбит на w=xyz так, что:

  1. |xy| <= n,
  2. y непусто,
  3. для всех k >= 0, xy^ky в L(S).

Пусть w=0^n1^n будет строкой длины m=2n из L(S). (В лемме говорится о всех достаточно длинных строках из L(S), поэтому мы можем выбрать любую строку, которая нам нравится, и при этом сохранить свойства.) Пусть w=xyz будет разбиением, существующим по лемме. Очевидно, поскольку m=2n и |xy|<=n, y состоит только из 0 (и по крайней мере один 0, поскольку y не пуст).

Очевидно, что xy^2z имеет больше нулей, чем единиц, и поэтому не входит в L(S). Это противоречит лемме о накачке. Таким образом, L(S) не является регулярным. QED.

person blazs    schedule 27.01.2017
comment
закрытие для обычных языков применяется только к языкам, которые ЯВЛЯЮТСЯ обычными, а не к языкам, которые НЕ ЯВЛЯЮТСЯ регулярными. В частности, объединение двух нерегулярных языков может быть правильным. - person Chris Dodd; 27.01.2017
comment
Ваш шаг индукции в первом доказательстве неверен (или, по крайней мере, неполон). считают 001110. Это начинается и заканчивается на 0, поэтому вы разделите его, но две половины (001 и 110) НЕ находятся в L (T). - person Chris Dodd; 27.01.2017
comment
@ChrisDodd, спасибо, это легко исправить: такую ​​строку можно разбить подходящим способом. Вы абсолютно правы насчет свойств замыкания; Я не знаю, как закончить доказательство нерегулярности L (S). - person blazs; 28.01.2017
comment
К вашему сведению, я не использовал эти свойства в общем виде (я прекрасно понимаю, что нерегулярность для них не закрыта в целом), но это было неоправданно, и, подумав об этом в ближайшее время, я не вижу, как закончить доказательство таким образом. - person blazs; 28.01.2017
comment
Я не подвергаю сомнению вашу интуицию, только ваше доказательство - ваша интуиция, что L (T) - это все строки с одинаковым количеством нулей и единиц, верна. Подсказка: какова взаимосвязь между числами нулей и единиц в L (S)? Можете ли вы применить лемму о накачке к L (S), используя (почти) то же самое, что и для T? Можете ли вы применить лемму о накачке непосредственно к грамматике T / S, а не к интуиционистскому определению? - person Chris Dodd; 28.01.2017
comment
Ах, да, L (S) - это язык, состоящий из двоичных строк, которые содержат как минимум столько же единиц, сколько нулей. Причем доказательство нерегулярности аналогично доказательству для L (T). - person blazs; 28.01.2017