Примеры неавтоматных языков
Рассмотрим несколько примеров применения теоремы о разрастании.
Пример 6.4. Покажем, что язык L1 ={ w =0i 1i | i
1 } не является автоматным.Предположим, что он автоматный. Тогда для него имеется n из утверждения теоремы 6.3. Рассмотрим следующее ("специальное" !) слово w = 0n 1n. Очевидно, что w
L1. Предположим, что существует разбиение w = xyz, удовлетворяющего условиям (1) и (2) теоремы. Так как по условию (2) |xy| n, то y = 0i для некоторого i>0. Но тогда слово w0 = xz= 0n-i1n L1, что противоречит условию (3) теоремы. Следовательно язык L1 не автоматный.Пример 6.5. Покажем, что язык СКОБ правильных скобочных последовательностей в алфавите { (, ) } не является автоматным.
Схема доказательства та же. В качестве специального слова выберем слово w = (n )n, оно, очевидно, принадлежит СКОБ. Тогда для всякого разбиения w = xyz такого, что |xy|
n слово y = (i для некоторого i>0. И, как и в предыдущем примере, слово w0 = xz= (n-i)n СКОБ, что противоречит условию (3) теоремы. Следовательно, язык СКОБ не автоматный.Пример 6.6.
Покажем, что язык L2 ={ w =0i 1j | i
2j+1 } не является автоматным.Здесь, предположив, что L2 автоматный язык и зафиксировав константу n из теоремы 6.3, рассмотрим слово w = 0{2n+1}1n
L2. Для всякого разбиения w = xyz такого, что |xy| n слово y = 0i для некоторого i>0. Рассмотрим слово w2 = x y2 z = 0{2n+1+i}1n. Но . Следовательно, w2 L2 и язык L2 не является автоматным.Пример 6.7. Рассмотрим язык "квадратов" в унарном алфавите { | }:
Здесь, предположив, что L3 автоматный язык и зафиксировав константу n из теоремы 6.3, рассмотрим слово w = |{n2}. Для всякого разбиения w = xyz такого, что |xy|
n слово y = |i для некоторого 0 < i n. Тогда . Но n2 - i n2 -n > n2 -2n +1 =(n-1)2. Следовательно, n2 - i не является полным квадратом и w0 L3, т.е. язык "квадратов" L3 не является автоматным.Пример 6.8.
Рассмотрим язык "простых чисел" в унарном алфавите { | }:
Предположим, что Lpr - автоматный язык и зафиксируем для него константу n из теоремы 6.3.
Выберем простое число p > n и рассмотрим слово w = |p. Пусть w = xyz - произвольное разбиение w такое, что |xy|
Еще один прием доказательства неавтоматности языка L состоит в том, чтобы вместо L рассмотреть некоторый язык L' = op(L,L1,… , Lk), полученный из L и автоматных языков L1,… , Lk
с помощью операций op, сохраняющих автоматность. Если доказать, что L' не является автоматным, то и исходный язык L не автоматен.
Пример 6.9. Рассмотрим язык L4 ={ 0i 1j | i j }.
Пусть L5= {0i1j | i 1, j 1}. Очевидно, что язык L5 автоматный. Нетрудно заметить, что его пересечение с дополнением L4 совпадает с языком L1
из примера 6.4, т.е. L1 = L5 overline{L4}. Так как мы установили, что L1 не автоматный, то и L4 не является автоматным.
Являются ли условия теоремы 6.3 достаточными для того, чтобы язык оказался автоматным? Следующий пример показывает, что ответ на этот вопрос отрицателен.
Пример 6.10.Пусть L6 ={cr ai bi | r 1 , i 0 }, L7= { aibj | i 0, j 0}. Рассмотрим язык L8 = L6 L7.
Для этого языка можно в качестве n выбрать 1. Каждое слово w из L8 принадлежит L6 или L7. Если слово w= cr ai bi L6 , то оно представимо в виде xyz, где x=?, y=c, z= cr-1 ai bi ( r 1, i 0 ). Тогда w0 = z= cr-1 ai bi ( r 1, i 1 ) и при r=1 слово w0 = ai bi L7, а при r > 1, очевидно, w0 L6. При k 1 имеем wk =cr+k-1 ai bi L6. Если слово w= ai bj L7 и i 1, то его можно представить как в виде xyz, где x=?, y=a, z= ai-1 bj ( i 1, j 0 ) и для каждого k 0 wk = aka i-1 bj L7. Если же i =0, то w= bj ( j 1 ) и его можно разбить на части x=?, y=b, z= bj-1 ( j 1 ). И в этом случае для каждого k 0 wk =bk bj-1 L7. Во всех случаях wk L8 и, следовательно язык L8 удовлетворяет условиям теоремы 6.3.
Но этот язык не автоматный. Действительно, пусть : {a, b, c}* {0, 1 }* - это гомоморфизм, заданный как (a)=0, (b) = 1, (c) =?. Тогда (L8 \ L7) = (L6) = L1 из примера 6.4. Так как язык L7 является автоматным, а L1 - нет, то и язык L8 не является автоматным.