язык Дик

Язык, состоящий из сбалансированных строк скобок

В теории формальных языков информатики , математики и лингвистики слово Дика — это сбалансированная строка скобок. Набор слов Дика образует язык Дика . Самый простой, Дика-1, использует всего две парные скобки, например ( и ) .

Слова и язык Дайка названы в честь математика Вальтера фон Дайка . Они применяются в синтаксическом анализе выражений, которые должны иметь правильно вложенную последовательность скобок, таких как арифметические или алгебраические выражения.

Формальное определение

Пусть будет алфавитом, состоящим из символов [ и ]. Пусть обозначает его замыкание Клини . Язык Дика определяется как: Σ = { [ , ] } {\displaystyle \Sigma =\{[,]\}} Σ {\displaystyle \Сигма ^{*}}

{ ты Σ |  все префиксы  ты  содержат не больше ] чем [  и количество ['s в  ты  равно количеству ] } . {\displaystyle \{u\in \Sigma ^{*}\vert {\text{ все префиксы }}u{\text{ содержат не больше ]-х символов, чем ['s}}{\text{ и количество ['s в }}u{\text{ равно количеству ]-х символов}}\}.}

Контекстно-свободная грамматика

В некоторых ситуациях может быть полезно определить язык Dyck через контекстно-свободную грамматику . Язык Dyck генерируется контекстно-свободной грамматикой с одним нетерминалом S и продукцией:

Сε | "[" С "]" С

То есть S — это либо пустая строка ( ε ), либо «[», элемент языка Dyck, соответствующий «]», и элемент языка Dyck.

Альтернативная контекстно-свободная грамматика для языка Дика задается следующей продукцией:

С → ("[" С "]") *

То есть S представляет собой ноль или более вхождений комбинации «[», элемента языка Дика, и соответствующего «]», где несколько элементов языка Дика в правой части последовательности могут свободно отличаться друг от друга.

Альтернативное определение

В других контекстах может быть полезно определить язык Дика, разбив его на классы эквивалентности следующим образом. Для любого элемента длины мы определяем частичные функции и с помощью Σ {\displaystyle \Сигма ^{*}} ты Σ {\displaystyle u\in \Сигма ^{*}} | ты | {\displaystyle |u|} вставлять : Σ × Н Σ {\displaystyle \operatorname {insert} :\Sigma ^{*}\times \mathbb {N} \rightarrow \Sigma ^{*}} удалить : Σ × Н Σ {\displaystyle \operatorname {delete} :\Sigma ^{*}\times \mathbb {N} \rightarrow \Sigma ^{*}}

вставлять ( ты , дж ) {\displaystyle \operatorname {вставить} (u,j)} с " " вставленным в th позицию ты {\displaystyle u} [ ] {\displaystyle []} дж {\displaystyle j}
удалить ( ты , дж ) {\displaystyle \operatorname {удалить} (u,j)} с удаленным " " из th позиции ты {\displaystyle u} [ ] {\displaystyle []} дж {\displaystyle j}

с пониманием того, что не определено для и не определено, если . Мы определяем отношение эквивалентности на следующим образом: для элементов мы имеем тогда и только тогда, когда существует последовательность из нуля или более применений функций и , начинающаяся с и заканчивающаяся . То , что последовательность из нуля операций допустима, объясняет рефлексивность . Симметрия следует из наблюдения, что любая конечная последовательность применений к строке может быть отменена с помощью конечной последовательности применений . Транзитивность очевидна из определения. вставлять ( ты , дж ) {\displaystyle \operatorname {вставить} (u,j)} дж > | ты | {\displaystyle j>|u|} удалить ( ты , дж ) {\displaystyle \operatorname {удалить} (u,j)} дж > | ты | 2 {\displaystyle j>|u|-2} Р {\displaystyle R} Σ {\displaystyle \Сигма ^{*}} а , б Σ {\displaystyle a,b\in \Сигма ^{*}} ( а , б ) Р {\displaystyle (a,b)\in R} вставлять {\displaystyle \operatorname {вставить} } удалить {\displaystyle \operatorname {удалить} } а {\displaystyle а} б {\displaystyle б} Р {\displaystyle R} вставлять {\displaystyle \operatorname {вставить} } удалить {\displaystyle \operatorname {удалить} }

Отношение эквивалентности разбивает язык на классы эквивалентности. Если взять для обозначения пустой строки, то язык, соответствующий классу эквивалентности, называется языком Дика . Σ {\displaystyle \Сигма ^{*}} ϵ {\displaystyle \epsilon} Кл ( ϵ ) {\displaystyle \operatorname {Cl} (\epsilon )}

Обобщения

Типизированный язык Дайка

Существуют варианты языка Dyck с несколькими разделителями, например, Dyck-2 на алфавите "(", ")", "[" и "]". Слова такого языка - это те, которые хорошо заключены в скобки для всех разделителей, т. е. можно прочитать слово слева направо, вставить каждый открывающий разделитель в стек, и всякий раз, когда мы достигаем закрывающего разделителя, мы должны иметь возможность вытолкнуть соответствующий открывающий разделитель с вершины стека. (Приведенный выше алгоритм подсчета не обобщается).

Например, следующее предложение является допустимым в Dyck-3:

( [ [ ] { } ] ( ) { ( ) } ) [ ]

Конечная глубина

Предложение языка Dyck можно представить как спуск и подъем по уровням вложенных скобок. При чтении предложения Dyck каждая открывающаяся скобка увеличивает глубину вложенности на 1, а каждая закрывающаяся скобка уменьшает на 1. Глубина предложения — это максимальная глубина, достигнутая в пределах предложения.

Например, мы можем аннотировать следующее предложение, указывая глубину на каждом шаге:

0 ( 1 [ 2 [ 3 ] 2 { 3 } 2 ] 1 ( 2 ) 1 { 2 ( 3 ) 2 } 1 ) 0 [ 1 ] 0

и все предложение имеет глубину 3.

Мы определяем Dyck-(k, m) как язык с k типами скобок и максимальной глубиной m. Это имеет приложения в формальной теории рекуррентных нейронных сетей . [1]

Характеристики

  • Язык Dyck закрыт относительно операции конкатенации .
  • Рассматривая как алгебраический моноид при конкатенации, мы видим, что структура моноида переносится на фактор , в результате чего получается синтаксический моноид языка Дика . Класс будет обозначаться . Σ {\displaystyle \Сигма ^{*}} Σ / Р {\displaystyle \Сигма ^{*}/R} Кл ( ϵ ) {\displaystyle \operatorname {Cl} (\epsilon )} 1 {\displaystyle 1}
  • Синтаксический моноид языка Дика не является коммутативным : если и то . ты = Кл ( [ ) {\displaystyle u=\operatorname {Cl} ([)} в = Кл ( ] ) {\displaystyle v=\operatorname {Cl} (])} ты в = Кл ( [ ] ) = 1 Кл ( ] [ ) = в ты {\displaystyle uv=\operatorname {Cl} ([])=1\neq \operatorname {Cl} (][)=vu}
  • С обозначениями выше, но ни один из них не обратим в . ты в = 1 {\displaystyle uv=1} ты {\displaystyle u} в {\displaystyle v} Σ / Р {\displaystyle \Сигма ^{*}/R}
  • Синтаксический моноид языка Дика изоморфен бициклической полугруппе в силу свойств и описанных выше. Кл ( [ ) {\displaystyle \operatorname {Cl} ([)} Кл ( ] ) {\displaystyle \operatorname {Cl} (])}
  • По теореме Хомского–Шютценбергера о представлении любой контекстно-свободный язык является гомоморфным образом пересечения некоторого регулярного языка с языком Дика по одному или нескольким видам пар скобок. [2]
  • Язык Дика с двумя различными типами скобок можно распознать в классе сложности . [3] Т С 0 {\displaystyle TC^{0}}
  • Число различных слов Дика с ровно n парами скобок и k самыми внутренними парами (т.е. подстрокой ) называется числом Нараяны . [   ] {\displaystyle [\ ]} Н ( н , к ) {\displaystyle \operatorname {N} (n,k)}
  • Число различных слов Дика с ровно n парами скобок является nкаталонским числом . Обратите внимание, что язык Дика слов с n парами скобок равен объединению по всем возможным k языков Дика слов из n пар скобок с k самыми внутренними парами , как определено в предыдущем пункте. Поскольку k может принимать значения от 0 до n , мы получаем следующее равенство, которое действительно выполняется: С н {\displaystyle C_{n}}
С н = к = 1 н Н ( н , к ) {\displaystyle C_{n}=\sum _{k=1}^{n}\operatorname {N} (n,k)}

Примеры

Решетка из 14 слов Дика длиной 8 - [ и ] интерпретируются как вверх и вниз

Мы можем определить отношение эквивалентности на языке Дика . Для нас имеет место тогда и только тогда, когда , т.е. и имеют одинаковую длину. Это отношение разбивает язык Дика: . Мы имеем , где . Обратите внимание, что пусто для нечетного . Л {\displaystyle L} Д {\displaystyle {\mathcal {D}}} ты , в Д {\displaystyle u,v\in {\mathcal {D}}} ( ты , в ) Л {\displaystyle (u,v)\in L} | ты | = | в | {\displaystyle |u|=|v|} u {\displaystyle u} v {\displaystyle v} D / L = { D 0 , D 1 , } {\displaystyle {\mathcal {D}}/L=\{{\mathcal {D}}_{0},{\mathcal {D}}_{1},\ldots \}} D = D 0 D 2 D 4 = n = 0 D n {\displaystyle {\mathcal {D}}={\mathcal {D}}_{0}\cup {\mathcal {D}}_{2}\cup {\mathcal {D}}_{4}\cup \ldots =\bigcup _{n=0}^{\infty }{\mathcal {D}}_{n}} D n = { u D | u | = n } {\displaystyle {\mathcal {D}}_{n}=\{u\in {\mathcal {D}}\mid |u|=n\}} D n {\displaystyle {\mathcal {D}}_{n}} n {\displaystyle n}

Введя слова Дика длины , мы можем ввести отношение на них. Для каждого мы определяем отношение на ; для нас есть тогда и только тогда, когда можно достичь из с помощью серии правильных замен . Правильная замена в слове меняет вхождение '][' на '[]'. Для каждого отношение превращается в частично упорядоченный набор . Отношение рефлексивно , потому что пустая последовательность правильных замен занимает до . Транзитивность следует, потому что мы можем расширить последовательность правильных замен, которая занимает до , объединив ее с последовательностью правильных замен, которая занимает до , образовав последовательность, которая занимает до . Чтобы увидеть, что это также антисимметрично , мы вводим вспомогательную функцию, определенную как сумма по всем префиксам : n {\displaystyle n} n N {\displaystyle n\in \mathbb {N} } S n {\displaystyle S_{n}} D n {\displaystyle {\mathcal {D}}_{n}} u , v D n {\displaystyle u,v\in {\mathcal {D}}_{n}} ( u , v ) S n {\displaystyle (u,v)\in S_{n}} v {\displaystyle v} u {\displaystyle u} u D n {\displaystyle u\in {\mathcal {D}}_{n}} n N {\displaystyle n\in \mathbb {N} } S n {\displaystyle S_{n}} D n {\displaystyle {\mathcal {D}}_{n}} S n {\displaystyle S_{n}} u {\displaystyle u} u {\displaystyle u} u {\displaystyle u} v {\displaystyle v} v {\displaystyle v} w {\displaystyle w} u {\displaystyle u} w {\displaystyle w} S n {\displaystyle S_{n}} σ n : D n N {\displaystyle \sigma _{n}:{\mathcal {D}}_{n}\rightarrow \mathbb {N} } v {\displaystyle v} u {\displaystyle u}

σ n ( u ) = v w = u ( ( count of ['s in  v ) ( count of ]'s in  v ) ) {\displaystyle \sigma _{n}(u)=\sum _{vw=u}{\Big (}({\text{count of ['s in }}v)-({\text{count of ]'s in }}v){\Big )}}

Следующая таблица иллюстрирует, что она строго монотонна относительно правильных обменов. σ n {\displaystyle \sigma _{n}}

Строгая монотонность σ n {\displaystyle \sigma _{n}}
частичные суммы σ n ( u ) {\displaystyle \sigma _{n}(u)} P {\displaystyle P} P 1 {\displaystyle P-1} P {\displaystyle P} Q {\displaystyle Q}
u {\displaystyle u} {\displaystyle \ldots } ][ {\displaystyle \ldots }
u {\displaystyle u'} {\displaystyle \ldots } [] {\displaystyle \ldots }
частичные суммы σ n ( u ) {\displaystyle \sigma _{n}(u')} P {\displaystyle P} P + 1 {\displaystyle P+1} P {\displaystyle P} Q {\displaystyle Q}
Разность частичных сумм0200

Следовательно , когда есть правильный обмен, который принимает в . Теперь, если мы предположим, что и и , то есть непустые последовательности правильных обменов, такие принимаются в и наоборот. Но тогда , что бессмысленно. Поэтому, когда оба и находятся в , мы имеем , следовательно, является антисимметричным. σ n ( u ) σ n ( u ) = 2 > 0 {\displaystyle \sigma _{n}(u')-\sigma _{n}(u)=2>0} σ n ( u ) < σ n ( u ) {\displaystyle \sigma _{n}(u)<\sigma _{n}(u')} u {\displaystyle u} u {\displaystyle u'} ( u , v ) , ( v , u ) S n {\displaystyle (u,v),(v,u)\in S_{n}} u v {\displaystyle u\neq v} u {\displaystyle u} v {\displaystyle v} σ n ( u ) < σ n ( v ) < σ n ( u ) {\displaystyle \sigma _{n}(u)<\sigma _{n}(v)<\sigma _{n}(u)} ( u , v ) {\displaystyle (u,v)} ( v , u ) {\displaystyle (v,u)} S n {\displaystyle S_{n}} u = v {\displaystyle u=v} S n {\displaystyle S_{n}}

Частично упорядоченный набор показан на иллюстрации, сопровождающей введение, если мы интерпретируем [ как движение вверх, а ] как движение вниз. D 8 {\displaystyle D_{8}}

Смотрите также

Примечания

  1. ^ Хьюитт, Джон; Хан, Майкл; Гангули, Сурья; Лян, Перси; Мэннинг, Кристофер Д. (15.10.2020). «RNN могут генерировать ограниченные иерархические языки с оптимальной памятью». arXiv : 2010.07515 [cs.CL].
  2. ^ Камбитс, Сообщения в алгебре Том 37 Выпуск 1 (2009) 193-208
  3. ^ Баррингтон и Корбетт, Information Processing Letters 32 (1989) 251-256

Ссылки

  • Язык Дика на PlanetMath .
  • Доказательство теоремы Хомского-Шютценбергера
  • Запись в блоге AMS о словах Дика
Retrieved from "https://en.wikipedia.org/w/index.php?title=Dyck_language&oldid=1249270558"