Лемма о накачке для обычных языков

редактировать

В теории формальных языков используется лемма о накачке для обычных языков - это лемма, которая описывает существенное свойство всех регулярных языков. Неформально это говорит о том, что все достаточно длинные слова в обычном языке могут быть перекачаны, т. Е. Средняя часть слова повторяется произвольное количество раз, чтобы создать новое слово, которое также находится в том же языке.

В частности, лемма о накачке говорит, что для любого регулярного языка L {\ displaystyle L}L существует константа p {\ displaystyle p}p такое, что любое слово w {\ displaystyle w}w в L {\ displaystyle L}L длиной не менее p {\ displaystyle p}p можно разделить на три подстроки, w = xyz {\ displaystyle w = xyz}{\ displaystyle w = xyz} , где средняя часть y {\ displaystyle y}y не должно быть пустым, например, слова xz, xyz, xyyz, xyyyz,... {\ displaystyle xz, xyz, xyyz, xyyyz,...}{\ displaystyle xz, xyz, xyyz, xyyyz,...} , построенный путем повторения y {\ displaystyle y}y ноль или более раз все еще в L {\ Displaystyle L}L . Этот процесс повторения известен как «накачивание». Кроме того, лемма о накачке гарантирует, что длина xy {\ displaystyle xy}ху будет не более p {\ displaystyle p}p , что накладывает ограничение на способы, которыми w {\ displaystyle w}w может быть разделен. Конечные языки пусто удовлетворяют лемме перекачки, имея p {\ displaystyle p}p , равную максимальной длине строки в L {\ displaystyle L}L плюс один.

Лемма о перекачке полезна для опровержения регулярности конкретного рассматриваемого языка. Впервые это было доказано Майклом Рабином и Даной Скотт в 1959 году, а вскоре вновь обнаружено Иегошуа Бар-Хиллелем, Мишей А. Перлес и Эли Шамир в 1961 году, как упрощение их леммы о перекачке для контекстно-свободных языков.

Содержание
  • 1 Формальное утверждение
  • 2 Использование леммы
  • 3 Доказательство леммы о накачке
  • 4 Общая версия леммы о накачке для регулярных языков
  • 5 Обратное к лемме неверно
  • 6 См. Также
  • 7 Примечания
  • 8 Ссылки
Формальное утверждение

Пусть L {\ displaystyle L}L будет обычным языком. Тогда существует целое число p ≥ 1 {\ displaystyle p \ geq 1}p \ geq 1 , зависящее только от L {\ displaystyle L}L такое, что каждая строка w {\ displaystyle w}w в L {\ displaystyle L}L длиной не менее p {\ displaystyle p}p (p {\ displaystyle p}p называется «длина накачки») может быть записано как w = xyz {\ displaystyle w = xyz}{\ displaystyle w = xyz} (т. Е. w {\ displaystyle w}w можно разделить на три подстроки), удовлетворяющие следующим условиям:

  • | y | ≥ 1 {\ displaystyle | y | \ geq 1}{\ displaystyle | y | \ geq 1}
  • | х у | ≤ п {\ displaystyle | ху | \ leq p}{\ displaystyle | xy | \ leq p}
  • (∀ n ≥ 0) (xynz ∈ L) {\ displaystyle (\ forall n \ geq 0) (xy ^ {n} z \ in L)}{\ displaystyle (\ forall n \ geq 0) (ху ^ {n} z \ in L)}

y {\ displaystyle y}y - это подстрока, которую можно перекачивать (удалять или повторять любое количество раз, и результирующая строка всегда находится в L {\ displaystyle L}L ). (1) означает, что цикл y {\ displaystyle y}y , который нужно прокачивать, должен иметь длину не менее единицы; (2) означает, что цикл должен выполняться в пределах первых символов p {\ displaystyle p}p . | х | {\ displaystyle | x |}| x | должен быть меньше, чем p {\ displaystyle p}p (заключение (1) и (2)), но кроме этого, есть не является ограничением для x {\ displaystyle x}x и z {\ displaystyle z}z .

Простыми словами, для любого обычного языка L {\ displaystyle L}L , любое достаточно длинное слово w {\ displaystyle w}w L {\ displaystyle L}L ) можно разделить на 3 части. т.е. w = xyz {\ displaystyle w = xyz}{\ displaystyle w = xyz} , так что все строки xynz {\ displaystyle xy ^ {n} z}{\ displaystyle xy ^ {n} z} для n ≥ 0 {\ displaystyle n \ geq 0}n \ geq 0 также находятся в L {\ displaystyle L}L .

Ниже приводится формальное выражение леммы о накачке.

(∀ L ⊆ Σ ∗) (регулярный (L) ⇒ ((∃ p ≥ 1) ((∀ w ∈ L) ((| w | ≥ p) ⇒ ((∃ x, y, z ∈ Σ ∗) (вес знак равно xyz ∧ (| y | ≥ 1 ∧ | ху | ≤ p ∧ (∀ n ≥ 0) (xynz ∈ L)))))))) {\ displaystyle {\ begin {array} {l} ( \ forall L \ substeq \ Sigma ^ {*}) \\\ quad ({\ t_dv {regular}} (L) \ Rightarrow \\\ quad ((\ exists p \ geq 1) ((\ forall w \ in L) ((| w | \ geq p) \ Rightarrow \\\ quad ((\ exists x, y, z \ in \ Sigma ^ {*}) (w = xyz \ land (| y | \ geq 1 \ land | xy | \ leq p \ land (\ forall n \ geq 0) (xy ^ {n} z \ in L))))))) \ end {array}}}{\ displaystyle {\ begin {array} {l} (\ forall L \ substeq \ Sigma ^ {*}) \\\ quad ({\ t_dv {regular}} (L) \ Rightarrow \\\ quad ((\ существует p \ geq 1) ((\ forall w \ in L) ((| w | \ geq p) \ Rightarrow \\\ quad ((\ существует x, y, z \ in \ Sigma ^ {*}) (w = xyz \ land (| y | \ geq 1 \ land | xy | \ leq p \ land (\ forall n \ geq 0) (xy ^ {n} z \ in L))))))) \ end {array}}}

Использование леммы

Лемма о накачке часто используется для доказательства того, что конкретный язык не является регулярным: доказательство от противоречия (регулярности языка) может состоять из отображения слова (необходимой длины) в язык, в котором отсутствует свойство, описанное в лемме о накачке.

Например, язык L = {anbn: n ≥ 0} {\ displaystyle L = \ {a ^ {n} b ^ {n}: n \ geq 0 \}}{\ displaystyle L = \ {a ^ {n} b ^ {n}: n \ geq 0 \}} по алфавиту Σ = {a, b} {\ displaystyle \ Sigma = \ {a, b \}}{\ displaystyle \ Sigma = \ {a, b \}} может быть показано как нерегулярное следующим образом:

Пусть w, x, y, z, p {\ displaystyle w, x, y, z, p}{\ displaystyle w, x, y, z, p} и n {\ displaystyle n}n используется в формальном выражении для леммы о накачке выше. Мы предполагаем, что существует некоторая константа p {\ displaystyle p}p . Пусть w {\ displaystyle w}w в L {\ displaystyle L}L задается как w = apbp {\ displaystyle w = a ^ {p } b ^ {p}}{\ displaystyle w = a ^ {p} b ^ {p}} , которая является строкой длиннее, чем p {\ displaystyle p}p . По лемме о накачке должно быть некоторое разложение w = x y z {\ displaystyle w = xyz}{\ displaystyle w = xyz} с | х у | ≤ p {\ displaystyle | xy | \ leq p}{\ displaystyle | xy | \ leq p} и | y | ≥ 1 {\ displaystyle | y | \ geq 1}{\ displaystyle | y | \ geq 1} такой, что xyiz {\ displaystyle xy ^ {i} z}{\ displaystyle xy ^ {i} z} в L {\ displaystyle L}L для каждого i ≥ 0 {\ displaystyle i \ geq 0}i \ geq 0 . Использование | х у | ≤ p {\ displaystyle | xy | \ leq p}{\ displaystyle | xy | \ leq p} , мы знаем, что y {\ displaystyle y}y состоит только из экземпляров a {\ displaystyle a}a . Более того, поскольку | y | ≥ 1 {\ displaystyle | y | \ geq 1}{\ displaystyle | y | \ geq 1} , он содержит по крайней мере один экземпляр буквы a {\ displaystyle a}a . Теперь прокачиваем y {\ displaystyle y}y вверх: xy 2 z {\ displaystyle xy ^ {2} z}xy ^ {2} z имеет больше экземпляров буквы a {\ displaystyle a}a , чем буква b {\ displaystyle b}b, поскольку мы добавили несколько экземпляров a {\ displaystyle a}a без добавления экземпляров b {\ displaystyle b}b. Следовательно, x y 2 z {\ displaystyle xy ^ {2} z}xy ^ {2} z не находится в L {\ displaystyle L}L . Мы пришли к противоречию. Следовательно, предположение, что L {\ displaystyle L}L является регулярным (т.е. существует такой p {\ displaystyle p}p ), должно быть неверным. Следовательно, L {\ displaystyle L}L не является регулярным.

Доказательство того, что язык сбалансированных (т.е. правильно вложенных) скобок не является регулярным, следует той же идее. Для p {\ displaystyle p}p существует строка сбалансированных круглых скобок, которая начинается с более чем p {\ displaystyle p}p левых скобок, так что y {\ displaystyle y}y будет состоять полностью из левых скобок. Повторяя y {\ displaystyle y}y , мы можем создать строку, которая не содержит одинакового количества левых и правых круглых скобок, и поэтому их нельзя сбалансировать.

Доказательство леммы о накачке
Идея доказательства: всякий раз, когда достаточно длинная строка xyz распознается конечным автоматом, он должен достичь некоторого состояния (qs = qt {\ displaystyle q_ {s} = q_ {t}}{\ displaystyle q_ {s} = q_ {t}} ) дважды. Следовательно, после повторения ("прокачки") средней части y {\ displaystyle y}y сколь угодно часто (xyyz, xyyyz,...) слово все равно будет распознаваться.

Для каждого На регулярном языке существует конечный автомат (FSA), который принимает этот язык. Подсчитывается количество состояний в таком FSA, и этот счет используется как длина накачки p {\ displaystyle p}p . Для строки длиной не менее p {\ displaystyle p}p пусть q 0 {\ displaystyle q_ {0}}q_0 будет начальным состоянием и пусть q 1,..., qp {\ displaystyle q_ {1},..., q_ {p}}{\ displaystyle q_ {1},..., q_ {p}} - последовательность следующих p {\ displaystyle p}p состояний, посещенных как строка испускается. Поскольку FSA имеет только p {\ displaystyle p}p состояний, в этой последовательности p + 1 {\ displaystyle p + 1}p + 1 посещенных состояний должны быть по крайней мере одно состояние, которое повторяется. Напишите q s {\ displaystyle q_ {s}}q_ {s} для такого состояния. Переходы, которые переводят машину от первой встречи состояния qs {\ displaystyle q_ {s}}q_ {s} ко второй встрече состояния qs {\ displaystyle q_ {s}}q_ {s} соответствует некоторой строке. Эта строка называется y {\ displaystyle y}y в лемме, и поскольку машина будет соответствовать строке без части y {\ displaystyle y}y , или если строка y {\ displaystyle y}y повторяется любое количество раз, условия леммы удовлетворяются.

Например, на следующем изображении показан FSA.

Автомат, принимающий язык a (bc) * d.svg

FSA принимает строку: abcd . Так как эта строка имеет длину, по меньшей мере, равную количеству состояний, которое равно четырем, принцип ячейки указывает, что должно быть по крайней мере одно повторяющееся состояние среди начального состояния и следующих четырех посещенных состояний. В этом примере только q 1 {\ displaystyle q_ {1}}q_ {1} является повторяющимся состоянием. Поскольку подстрока bc выполняет переходы, которые начинаются в состоянии q 1 {\ displaystyle q_ {1}}q_ {1} и заканчиваются в состоянии q 1 {\ displaystyle q_ {1}}q_ {1} , эта часть может быть повторена, и FSA все равно примет, выдав строку abcbcd . В качестве альтернативы, часть bc может быть удалена, и FSA все равно согласится предоставить строку ad . В терминах леммы о накачке строка abcd разбивается на x {\ displaystyle x}x часть a, a y { \ displaystyle y}y часть bc и z {\ displaystyle z}z часть d.

Общая версия леммы о прокачке для обычных языков

Если язык L {\ displaystyle L}L является регулярным, то существует число p ≥ 1 {\ displaystyle p \ geq 1}p \ geq 1 ( длина накачки) так, чтобы каждая строка uwv {\ displaystyle uwv}{\ displaystyle uwv} в L {\ displaystyle L}L с | w | ≥ p можно записать в виде

uwv = uxyzv {\ displaystyle uwv = uxyzv}{\ displaystyle uwv = uxyzv}

со строками x {\ displaystyle x}x , y {\ displaystyle y}y и z {\ displaystyle z}z такие, что | х у | ≤ п {\ Displaystyle | ху | \ Leq р}{\ displaystyle | xy | \ leq p} , | y | ≥ 1 {\ displaystyle | y | \ geq 1}| y | \ ge 1 и

uxyizv {\ displaystyle uxy ^ {i} zv}{\ displaystyle uxy ^ {i} zv} находится в L {\ displaystyle L}L для каждого целого числа i ≥ 0 {\ displaystyle i \ geq 0}i \ geq 0 .

Отсюда для стандартной версии выше следует особый случай, с обоими u {\ displaystyle u}u и v {\ displaystyle v}v - пустая строка.

Поскольку общая версия предъявляет более строгие требования к языку, ее можно использовать для доказательства нерегулярности многих других языков, таких как {ambncn: m ≥ 1 и n ≥ 1} {\ displaystyle \ {a ^ {m} b ^ {n} c ^ {n}: m \ geq 1 {\ text {and}} n \ geq 1 \}}{ \ displaystyle \ {a ^ {m} b ^ {n} c ^ {n}: m \ geq 1 {\ text {and}} n \ geq 1 \}} .

Обратное утверждение леммы неверно

Хотя лемма о накачке утверждает, что все регулярные языки удовлетворяют описанным выше условиям, обратное утверждение неверно: язык, который удовлетворяет этим условиям, может все же быть нерегулярным. Другими словами, как исходная, так и общая версия леммы о накачке дают необходимое, но не достаточное условие, чтобы язык был регулярным.

Например, рассмотрим следующий язык:

L = {u v w x y: u, y ∈ {0, 1, 2, 3} ∗; v, w, x ∈ {0, 1, 2, 3} ∧ (v = w ∨ v = x ∨ x = w)} ∪ {w: w ∈ {0, 1, 2, 3} ∗ ∧ ровно 1 7 символов в w - тройки} {\ displaystyle {\ begin {matrix} L = \ {uvwxy: u, y \ in \ {0,1,2,3 \} ^ {*}; v, w, x \ in \ {0,1,2,3 \} \ land (v = w \ lor v = x \ lor x = w) \} \\ \ cup \ \ {w: w \ in \ {0,1, 2, 3 \} ^ {*} \ land {\ text {точно}} {\ tfrac {1} {7}} {\ text {символов в}} w {\ text {это тройки}} \} \ end {matrix}}}{\displaystyle {\begin{matrix}L=\{uvwxy:u,y\in \{0,1,2,3\}^{*};v,w,x\in \{0,1,2,3\}\land (v=w\lor v=x\lor x=w)\}\\\cup \ \{w:w\in \{0,1,2,3\}^{*}\land {\text{precisely }}{\tfrac {1}{7}}{\text{ of the characters in }}w{\text{ are 3's}}\}\end{matrix}}}.

Другими словами, L {\ displaystyle L}L содержит все строки в алфавите {0, 1, 2, 3} {\ displaystyle \ {0,1,2,3 \}}{\ displaystyle \ {0,1,2,3 \}} с подстрокой длиной 3, включающей повторяющийся символ, а также все строки в этом алфавите, где ровно 1/7 символов строки - тройки. Это нестандартный язык, но его все еще можно «накачать» с помощью p = 5 {\ displaystyle p = 5}{\ displaystyle p = 5} . Предположим, что некоторая строка s имеет длину не менее 5. Тогда, поскольку в алфавите всего четыре символа, по крайней мере два из первых пяти символов в строке должны быть дубликатами. Они разделены максимум тремя символами.

  • Если повторяющиеся символы разделены 0 или 1 символами, перекачайте один из двух других символов в строке, что не повлияет на подстроку, содержащую дубликаты.
  • Если повторяющиеся символы разделены 2 или 3 символа, прокачивайте 2 символа, разделяющих их. При перекачивании вниз или вверх создается подстрока размером 3, содержащая 2 повторяющихся символа.
  • Второе условие L {\ displaystyle L}L гарантирует, что L {\ displaystyle L}L не является правильным: рассмотрим строку (013) 3 m (012) i {\ displaystyle (013) ^ {3m} (012) ^ {i}}{\ displaystyle (013) ^ {3m} (012) ^ {i}} . Эта строка находится в L {\ displaystyle L}L точно тогда, когда i = 4 m {\ displaystyle i = 4m}{\ displaystyle i = 4m} и, следовательно, L {\ displaystyle L}L не является регулярным по теореме Майхилла – Нероде.

Теорема Майхилла – Нероде предоставляет тест, который точно характеризует обычные языки. Типичный метод доказательства того, что язык является регулярным, состоит в построении либо конечного автомата, либо регулярного выражения для языка.

См. Также
Примечания
  1. ^Рабин, Майкл ; Скотт, Дана (апрель 1959 г.). «Конечные автоматы и проблемы их решения» (PDF). Журнал исследований и разработок IBM. 3 (2): 114–125. doi : 10.1147 / ряд.32.0114. Архивировано 14 декабря 2010 г. CS1 maint: непригодный url (ссылка ) Здесь: Лемма 8, стр.119
  2. ^Бар-Гилель, Ю. ; Perles, M.; Шамир, Э. (1961), «О формальных свойствах грамматик простой фразеологической структуры», Zeitschrift für Phonetik, Sprachwissenschaft und Kommunikationsforschung, 14 (2): 143–172
  3. ^Джон Э. Хопкрофт; Раджив Мотвани; Джеффри Д. Ульман (2003). Введение в теорию автоматов, языки и вычисления. Эддисон Уэсли. Здесь: Раздел 4.6, с.166
  4. ^Берстель, Жан; Лаув, Аарон; Ройтенауэр, Кристоф; Салиола, Франко В. (2009). Комбинаторика слов. Слова Кристоффеля и их повторы. Серия монографий CRM. 27 . Провиденс, Род-Айленд: Американское математическое общество. п. 86. ISBN 978-0-8218-4480-9. Zbl 1161.68043.
  5. ^Савич, Уолтер (1982). Абстрактные машины и грамматики. п. 49. ISBN 978-0-316-77161-0.
  6. ^Джон Э. Хопкрофт и Джеффри Д. Уллман (1979). Введение в теорию автоматов, языки и вычисления. Ридинг / МА: Эддисон-Уэсли. ISBN 978-0-201-02988-8.Здесь: стр. 72, упражнение 3.2 (которое дает несколько менее общую версию, требующую | w | = p) и 3.3
Ссылки
Последняя правка сделана 2021-06-02 10:43:06
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте