Введение

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

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

Свойства

Язык Дайка замкнут относительно операции конкатенации. Рассматривая его как алгебраический моноид относительно конкатенации, мы видим, что моноидная структура переносится на фактор-группу, в результате чего получается синтаксический моноид языка Дайка. Класс будет обозначаться Синтаксический моноид языка Дайка некоммутативен: если и тогда С использованием вышеуказанной нотации, но ни , ни не обратимы в Синтаксический моноид языка Дайка изоморфен бициклической полугруппе благодаря свойствам и , описанным выше. Согласно теореме о представлении Чомского — Шюценбергера, любой контекстно-свободный язык является гомоморфным образом пересечения некоторого регулярного языка с языком Дайка на одном или нескольких типах скобочных пар. Язык Дайка с двумя различными типами скобок может быть распознан в классе сложности Число различных слов Дайка ровно с n парами скобок и k внутренними парами (а именно, подстрока ) — это число Нараяны. Число различных слов Дайка ровно с n парами скобок — это n-е число Каталана. Заметьте, что язык Дайка слов с n парами скобок равен объединению по всем возможным k языков Дайка слов с n парами скобок с k самыми внутренними парами, как определено в предыдущем пункте. Поскольку k может изменяться от 0 до n, мы получаем следующее равенство, которое действительно верно:

Обобщения

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