В теории формальных языков информатики , математики и лингвистики слово Дика — это сбалансированная строка скобок. Набор слов Дика образует язык Дика . Самый простой, Дика-1, использует всего две парные скобки, например ( и ) .
Слова и язык Дайка названы в честь математика Вальтера фон Дайка . Они применяются в синтаксическом анализе выражений, которые должны иметь правильно вложенную последовательность скобок, таких как арифметические или алгебраические выражения.
Формальное определение
Пусть будет алфавитом, состоящим из символов [ и ]. Пусть обозначает его замыкание Клини . Язык Дика определяется как:
Контекстно-свободная грамматика
В некоторых ситуациях может быть полезно определить язык Dyck через контекстно-свободную грамматику . Язык Dyck генерируется контекстно-свободной грамматикой с одним нетерминалом S и продукцией:
С → ε | "[" С "]" С
То есть S — это либо пустая строка ( ε ), либо «[», элемент языка Dyck, соответствующий «]», и элемент языка Dyck.
Альтернативная контекстно-свободная грамматика для языка Дика задается следующей продукцией:
С → ("[" С "]") *
То есть S представляет собой ноль или более вхождений комбинации «[», элемента языка Дика, и соответствующего «]», где несколько элементов языка Дика в правой части последовательности могут свободно отличаться друг от друга.
Альтернативное определение
В других контекстах может быть полезно определить язык Дика, разбив его на классы эквивалентности следующим образом. Для любого элемента длины мы определяем частичные функции и с помощью
с " " вставленным в th позицию
с удаленным " " из th позиции
с пониманием того, что не определено для и не определено, если . Мы определяем отношение эквивалентности на следующим образом: для элементов мы имеем тогда и только тогда, когда существует последовательность из нуля или более применений функций и , начинающаяся с и заканчивающаяся . То , что последовательность из нуля операций допустима, объясняет рефлексивность . Симметрия следует из наблюдения, что любая конечная последовательность применений к строке может быть отменена с помощью конечной последовательности применений . Транзитивность очевидна из определения.
Отношение эквивалентности разбивает язык на классы эквивалентности. Если взять для обозначения пустой строки, то язык, соответствующий классу эквивалентности, называется языком Дика .
Обобщения
Типизированный язык Дайка
Существуют варианты языка Dyck с несколькими разделителями, например, Dyck-2 на алфавите "(", ")", "[" и "]". Слова такого языка - это те, которые хорошо заключены в скобки для всех разделителей, т. е. можно прочитать слово слева направо, вставить каждый открывающий разделитель в стек, и всякий раз, когда мы достигаем закрывающего разделителя, мы должны иметь возможность вытолкнуть соответствующий открывающий разделитель с вершины стека. (Приведенный выше алгоритм подсчета не обобщается).
Например, следующее предложение является допустимым в Dyck-3:
( [ [ ] { } ] ( ) { ( ) } ) [ ]
Конечная глубина
Предложение языка Dyck можно представить как спуск и подъем по уровням вложенных скобок. При чтении предложения Dyck каждая открывающаяся скобка увеличивает глубину вложенности на 1, а каждая закрывающаяся скобка уменьшает на 1. Глубина предложения — это максимальная глубина, достигнутая в пределах предложения.
Например, мы можем аннотировать следующее предложение, указывая глубину на каждом шаге:
Мы определяем Dyck-(k, m) как язык с k типами скобок и максимальной глубиной m. Это имеет приложения в формальной теории рекуррентных нейронных сетей . [1]
Характеристики
Язык Dyck закрыт относительно операции конкатенации .
Рассматривая как алгебраический моноид при конкатенации, мы видим, что структура моноида переносится на фактор , в результате чего получается синтаксический моноид языка Дика . Класс будет обозначаться .
Синтаксический моноид языка Дика не является коммутативным : если и то .
С обозначениями выше, но ни один из них не обратим в .
Синтаксический моноид языка Дика изоморфен бициклической полугруппе в силу свойств и описанных выше.
Язык Дика с двумя различными типами скобок можно распознать в классе сложности . [3]
Число различных слов Дика с ровно n парами скобок и k самыми внутренними парами (т.е. подстрокой ) называется числом Нараяны .
Число различных слов Дика с ровно n парами скобок является n -м каталонским числом . Обратите внимание, что язык Дика слов с n парами скобок равен объединению по всем возможным k языков Дика слов из n пар скобок с k самыми внутренними парами , как определено в предыдущем пункте. Поскольку k может принимать значения от 0 до n , мы получаем следующее равенство, которое действительно выполняется:
Примеры
Мы можем определить отношение эквивалентности на языке Дика . Для нас имеет место тогда и только тогда, когда , т.е. и имеют одинаковую длину. Это отношение разбивает язык Дика: . Мы имеем , где . Обратите внимание, что пусто для нечетного .
Введя слова Дика длины , мы можем ввести отношение на них. Для каждого мы определяем отношение на ; для нас есть тогда и только тогда, когда можно достичь из с помощью серии правильных замен . Правильная замена в слове меняет вхождение '][' на '[]'. Для каждого отношение превращается в частично упорядоченный набор . Отношение рефлексивно , потому что пустая последовательность правильных замен занимает до . Транзитивность следует, потому что мы можем расширить последовательность правильных замен, которая занимает до , объединив ее с последовательностью правильных замен, которая занимает до , образовав последовательность, которая занимает до . Чтобы увидеть, что это также антисимметрично , мы вводим вспомогательную функцию, определенную как сумма по всем префиксам :
Следующая таблица иллюстрирует, что она строго монотонна относительно правильных обменов.
Следовательно , когда есть правильный обмен, который принимает в . Теперь, если мы предположим, что и и , то есть непустые последовательности правильных обменов, такие принимаются в и наоборот. Но тогда , что бессмысленно. Поэтому, когда оба и находятся в , мы имеем , следовательно, является антисимметричным.
Частично упорядоченный набор показан на иллюстрации, сопровождающей введение, если мы интерпретируем [ как движение вверх, а ] как движение вниз.