Высота итерации языка

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

В теоретической информатике, точнее, в теории формальных языков, высота итерации — это мера структурной сложности регулярных выражений — высота итерации регулярного выражения равна максимальной глубине вложенности звёздочек, присутствующих в регулярном выражении. Понятие высоты итерации первым ввёл и изучал Эгган (1963).

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

Формально, высота итерации регулярного выражения E над конечным алфавитом A определяется индуктивно следующим образом:

  • [math]\displaystyle{ \scriptstyle h\left(\emptyset\right)\,=\,0 }[/math], [math]\displaystyle{ \scriptstyle h\left(\varepsilon\right)\,=\,0 }[/math] и [math]\displaystyle{ \scriptstyle h\left(a\right)\,=\,0 }[/math] для любого символа a из алфавита A.
  • [math]\displaystyle{ \scriptstyle h\left(E F\right)\,=\, h\left(E\, \mid\, F\right)\,=\,\max \left(\, h(E), h(F)\,\right) }[/math]
  • [math]\displaystyle{ \scriptstyle h\left(E^*\right)\,=\,h(E)+1. }[/math]

Здесь [math]\displaystyle{ \scriptstyle \emptyset }[/math] обозначает пустое множество, ε означает пустую строку, а E и F — произвольные регулярные выражения.

Высота итерации h(L) регулярного языка L определяется как минимальная высота итерации всех регулярных выражений, представляющих L. Интуитивно понятно, что если язык L имеет высокую высоту итерации, он сам по себе сложен, поскольку не может быть описан в терминах «простых» регулярных выражений с низкой высотой итерации.

Примеры

Хотя вычисление высоты итерации регулярного выражения просто, определения высоты итерации языка может иногда оказаться запутанным. В качестве примера регулярное выражение

[math]\displaystyle{ \scriptstyle \left(b\, \mid\, a a^*b\right)^*a a^* }[/math]

над алфавитом A = {a, b} имеет высоту итерации 2. Однако описываемый язык представляет собой множество всех слов, оканчивающихся на a. Тот же язык можно описать с помощью выражения

[math]\displaystyle{ \scriptstyle (a\, \mid\, b)^*a }[/math],

высота итерации которого лишь 1. Чтобы доказать, что высота итерации языка равна 1, нужно исключить возможность описания языка регулярным выражением с меньшей высотой итерации. Например, это может быть сделано косвенно путём доказательства, что язык с высотой итерации 0 содержит лишь конечное число слов. Поскольку наш язык бесконечен, он не может иметь высоту итерации 0.

Высота итерации группового языка[англ.] вычислима. Например, высота итерации языка над {a,b}, в котором число вхождений a и b сравнимы по модулю 2n, равна n[1].

Теорема Эггана

Пример автомата с циклическим рангом 1. Алгоритм Клини[англ.] преобразует его в регулярное выражение a*b*ba ((a|b)b*a|ε)* (a|b)b* | a*b*b, которое имеет высоту итерации 2. По теореме Эггана должно существовать эквивалентное регулярное выражение с высотой итерации ≤1 must exist. Фактически a*b(b|a(a|b))* описывает тот же язык.

В своих основополагающих исследованиях высоты итерации регулярных языков Эгган[2] установил связь между теорией регулярных выражений, теорией конечных автоматов и ориентированными графами. В последующем эта связь получила известность как теорема Эггана[3]. Напомним некоторые понятия из теории графов и теории автоматов.

В теории графов циклический ранг r(G) ориентированного графа (орграфа) G = (VE) определяется индуктивно следующим образом:

  • Если G является ацикличным, r(G) = 0. Циклический ранг равен нулю также в случае пустого графа G.
  • Если G строго связен и E не пусто, то
[math]\displaystyle{ r(G) = 1 + \min_{v\in V} r(G-v),\, }[/math] где G — v — орграф, полученный удалением вершины v и всех дуг, имеющих v в качестве начала или конца.
  • Если G не строго связен, то r(G) равен максимальному циклическому рангу среди всех строго связных компонент графа G.

В теории автоматов недетерминированный конечный автомат с ε-переходами (ε-НКА) определяется как кортеж (Q, Σ, δ, q0, F), состоящий из

  • конечного множества состояний Q
  • конечного множества входных символов Σ
  • множества помеченных дуг δ, называемых переходами: [math]\displaystyle{ Q \times (\Sigma \cup \{\varepsilon\}) \times Q }[/math]. Здесь ε обозначает пустую строку.
  • начальное состояние q0Q
  • множество состояний F, называемых поглощающими, FQ.

Слово w ∈ Σ* принимается ε-НКА, если существует ориентированная цепь из начального стостояния q0 до некоторого конечного состояния F, использующая диги из δ, так что конкатенация всех меток вдоль пути образует слово w. Множество всех слов над Σ*, принимаемых автоматом, является языком, принимаемым автоматом A.

Если говорить о недетерминированном конечном автомате A со множеством состояний Q как об ориентированном графе, мы естественным образом имеем в виду граф с множеством вершин Q, порождённым переходами. Теперь можно сформулировать теорему.

Теорема Эггана: Высота итерации регулярного языка L равна наименьшему циклическому рангу среди всех недетерминированных конечных автоматов с ε-переходами, принимающих язык L.

Доказательство этой теоремы дал Эгган[2], и, позднее, Сакарович[3].

Обобщённая проблема высоты итерации

Вышеприведённое определение предполагает, что регулярное выражение строится на элементах алфавита A, используя только стандартные операции объединения множеств, конкатенации и замыкания Клини. Обобщённое регулярное выражение определяется как регулярное выражение, но включает также операцию дополнение множества (дополнение всегда берётся относительно всех слов над A). Если мы будем считать, что взятие дополнения не увеличивает высоту итерации, то есть

[math]\displaystyle{ \scriptstyle h\left(E^c\right)\,=\,h(E) }[/math],

мы можем определить обобщённую высоту итерации регулярного языка L как минимальную высоту итерации среди всех обобщённых регулярных выражений, представляющих язык L.

Заметим, что в то время как языки с нулевой (обычной) высотой итерации содержат конечное число слов, существуют бесконечные языки с нулевой обобщённой высотой итерации.

Пример. Регулярное выражение

[math]\displaystyle{ \scriptstyle (a\, \mid\, b)^*a, }[/math]

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

[math]\displaystyle{ \scriptstyle \emptyset^c a }[/math],

поскольку дополнение пустого множества — это в точности все слова над алфавитом A. Таким образом, множество всех слов над алфавитом A, кончающихся буквой a, имеют высоту итерации один, в то время как обобщённая высота итерации равна нулю.

Языки с нулевой высотой итерации называются языками без звёздочек[англ.]. Можно показать, что язык L является языком без звёздочек тогда и только тогда, когда его cинтаксический моноид[англ.] является апериодичным[англ.][4].

См. также

Примечания

Литература