Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

Язык $\mathcal{L}$ называется ограниченным, если существует конечное число слов $w_1$, ..., $w_k$ таких, что $\mathcal{L} \subseteq w_1^*w_2^*\dots w_k^*$. Зная множество $\{w_1,\dots, w_k\}$, можно описать ограниченный язык $\mathcal{L}$ в терминах кортежей натуральных степеней, которые могут быть у опорных слов языка. Например, $\{a^n b^{k+n}\mid n,k\geq 0\}\cup\{a^n b \mid n>0\}$ можно описать через множество кортежей $\{\langle n,m\rangle\mid n,m\geq 0\land (n\leq m \lor m=1)\}$. Поскольку отрицательные степени слов не определены, первое условие в дальнейшем будем опускать. Множество кортежей опорных слов ограниченного языка $\mathcal{L}$ будем называть характеристическим множеством для $\mathcal{L}$.

Оказывается, что контекстно-свободные ограниченные языки можно достаточно точно описать. А именно, их характеристические множества:
- мультилинейны, то есть являются объединениями линейных комбинаций векторов, а именно могут быть представлены в виде $\bigcup\sum_{j} k_j\cdot \langle v_{1,j},v_{2,j},\dots, v_{k,j}\rangle$;
- и стратифицированы, то есть в каждом из кортежей $\langle v_{1,j},v_{2,j},\dots, v_{k,j}\rangle$ не больше двух ненулевых компонент, и не существует двух кортежей вида $\langle 0,v_{i},0,\dots, v_{i+m},\dots, 0\rangle$, $\langle 0,v_{i+r_1},0,\dots, v_{i+m+r_2},\dots, 0\rangle$, $r_1 < m$.
Тем самым запрещены подъязыки, изоморфные ограниченным языкам $\{a^k b^k c^k\mid k\geq 0\}$, $\{a^n b^k c^n d^k \mid n,k\geq 0\}$ - известным примерам не контекстно-свободных языков.

Главной проблемой при применении данного утверждения становится построение корректного характеристического множества для ограниченного языка. Поупражняемся в этом построении.

Для уже упомянутого языка $\{a^n b^{k+n}\mid n,k\geq 0\}\cup\{a^n b \mid n>0\}$ характеристическим будет объединение $\{k_1\cdot \langle 1,1\rangle + k_2\cdot \langle 0,1\rangle\mid k_1, k_2 \geq 0\} \cup \{k'_1\cdot \langle 1,0\rangle + \langle 1,1\rangle\mid k'_1\geq 0\}$. Действительно, первая часть объединения строит вектора степеней, первый из которых не больше второго. Вторая часть объединения позволяет добавлять сколько угодно букв $a$ при наличии хотя бы одной буквы $a$ и единственной буквы $b$. Но это простой для представления язык, поскольку в нём нет неравенств.
С неравенствами помогает справиться объединение - можно упорядочить неравные степени по строгому возрастанию и перебрать все случаи этого упорядочения. Для примера рассмотрим язык $\{a^n b^m a^n \mid m,n\geq 0\land m\neq n\}$. Его характеристическое представление - это $\{k_1\cdot\langle 1,1,1\rangle + (k_2+1)\cdot\langle 0,1,0\rangle\mid k_1, k_2\geq 0\}\cup \{k'_1\cdot\langle 1,1,1\rangle + (k'_2+1)\cdot\langle 1,0,1\rangle\mid k'_1,k'_2\geq 0\}$. Первая часть объединения соответствует случаю, когда $m>n$, вторая - обратному ему.

Однако следует проявлять осторожность в вопросе построения характеристических множеств, если опорные слова могут сливаться в неразличимые блоки. Например, язык $\{(ab)^n a (ba)^n (ab)^n\mid n>0\}$ так и хочется представить множеством $\{k\cdot\langle 1, 0, 1, 1\rangle + \langle 0, 1 , 0,0\rangle \mid k> 0\}$, очевидно не стратифицированным. Однако, если заметить, что первые два блока сливаются в один, и только на стыке двух последних возникает неоднородность - то есть переписать язык в форме $\{(ab)^{2n}a(ab)^n\mid n>0\}$, то удастся построить и стратифицированное характеристическое множество: $\{k\cdot \langle 2, 0, 1\rangle + \langle 0, 1 , 0\rangle \mid k>0\}$.

Также при построении характеристических множеств нужно проверить, чтобы объединения нельзя было представить более простым способом (чаще всего это происходит, если границы между объединяемыми множествами нет). Например, язык $a^* b^*$, очевидно, характеризуется множеством $\{k_1 \cdot \langle 1,0\rangle + k_2\cdot \langle 0,1\rangle\mid k_1,k_2\geq 0\}$. Но можно записать его и так: $\{k_1 \cdot \langle 1,1\rangle + k_2\cdot \langle 0,1\rangle\mid k_1,k_2\geq 0\}\cup \{k'_1 \cdot \langle 1,1\rangle + k'_2\cdot \langle 1,0\rangle\mid k'_1,k'_2\geq 0\}$. Хотя оба представления стратифицированы, легко понять, что экстраполяция этого же примера на язык $a^*b^* c^*$ уже даст неверное представление, если пользоваться вторым методом.