- •Введение
- •1. Формальные языки
- •1.1. Алфавит и цепочки
- •1.2. Языки и операции над ними
- •1.3. Способы задания языков
- •2. Грамматики
- •2.1. Формальное определение грамматики
- •2.2. Классификация грамматик по Хомскому
- •2.3. Свойства языков и грамматик
- •3. Иерархия автоматов
- •3.1. Конечные автоматы
- •3.2. Автоматы с магазинной памятью
- •3.3. Линейно ограниченные автоматы
- •3.4. Машины Тьюринга
- •4. Регулярные и контекстно-свободные языки
- •4.1. Регулярные множества и регулярные выражения
- •4.2. Самовставленные языки
- •4.3. Лемма о накачке для регулярных языков
- •4.4. Деревья вывода и однозначность грамматик типа 2
- •4.5. Преобразования КС-грамматик
- •4.6. Лемма о накачке для КС-языков
- •Список литературы
- •Оглавление
Пример 10. Пусть над алфавитом {0,1,2} задан язык L = {00,010,1210, 210, 2220} для которого задана подстановка σ:
σ(0) = {1}; σ(1) = {ε}; σ(2) = {0}.
Тогда
σ(00) = σ(0)σ(0) = {1}{1} = {11}; σ(010) = σ(0)σ(1)σ(0) = {1}{ε}{1} = {11};
σ(1210) = σ(1)σ(2)σ(1)σ(0) = {ε}{0}{ε}{1} = {01}; σ(210) = σ(2)σ(1)σ(0) = {0}{ε}{1} = {01};
σ(2220) = σ(2)σ(2)σ(2)σ(0) = {0}{0}{0}{1} = {0001}.
Объединяя результаты подстановки от всех слов исходного языка, получим результат подстановки σ в язык L:
σ(L) = {01,11,0001}.
Определение 20 (Гомоморфизм). Подстановку, в которой для всex a Σ
#σ(a) = 11, называют гомоморфизмом.
Очевидно, что подстановка в примере 10 является гомоморфизмом.
1.3. Способы задания языков
Любой конечный язык можно задать перечислением всех его слов. Данная процедура невозможна для бесконечных языков. Для таких языков необходима процедура, позволяющая определить язык конечными средствами.
Существует несколько способов задания языков. Все их можно разделить на три группы: спецификаторы свойств языка, конструкторы и распознаватели.
Определение 21 (Спецификаторы свойств языка). Спецификаторы свойств языка – описание совокупности свойств, которой должны удовлетворять все и только все слова языка.
К спецификаторам свойств языка можно отнести регулярные выражения, описание множеств слов с использованием предикатов.
Определение 22 (Конструктор). Конструктор языка L – набор правил (абстрактное порождающее устройство), с помощью которого можно построить абсолютно все слова языка L.
Таким образом, с помощью конструктора языка L нельзя построить слово, не принадлежащее языку L. К конструкторам языков относятся грамматики, синтаксические диаграммы, формы Бэкуса – Наура.
1Здесь и далее #A ообзначает количество элементов в множестве A.
8
Определение 23 (Распознаватель). Распознаватель языка L – абстрактное устройство (набор правил проверки), которое при получении на входе любого слова определяет принадлежность этого слова языку L.
К распознавателям можно отнести конечные автоматы, линейно ограниченные автоматы, машины Тьюринга.
Пример 11. Пусть L – язык над алфавитом {0,1}, определенный следующим образом:
1)ε L;
2)если α L то 0α1 L;
3)никакие другие слова не принадлежат L. Можно утверждать, что
L = {0i1i | i > 0}. |
(1.1) |
Действительно, из пункта 1) следует, что 0010 L. Предполагая по индукции, что 0i1i L, из 2) получаем 0i+11i+1 L. Следовательно, множество в правой части равенства (1.1) содержится в L. Так как 0i1i единственное слово длины 2i в L, приходим к выводу, что 0i+11i+1 – единственное слово длины 2(i + 1) в L. В L нет ни одного слова нечетной длины, поэтому делаем заключение, что L содержится в правой части (1.1), т. е. равенство (1.1) имеет место.
Заметим, что пункты 1)–3) представляют собой описание порождающего устройства для языка L, а равенство (1.1) – спецификатор свойств языка. 
Пример 12. Пусть L1 – язык над алфавитом {0,1}, определенный следующим образом:
1)ε L1;
2)если α L то 0α1 L и 1α0 L1;
3)если α L1 и β L1 то αβ L1;
4)никакие другие слова не принадлежат L1.
Легко показать, что L1 = {w {0,1} | N0(w) = N1(w)}.
Пример 13. Пусть L2 – язык над алфавитом {0,1}, состоящий из всевозможных слов, которые сворачиваются в ε последовательностью замен подцепочек 01 на ε.
Очевидно, что L2 является подмножеством языка L1, определенного в примере 12, а также то, что L2 – собственное подмножество языка L1, так как ни одно из слов 10, 0110 или 011001 не принадлежит L2. Если в L2 заменить 0 и 1 соответственно на левую и правую скобки, то можно определить L2 как множество цепочек, составленных из правильно сбалансированных скобок.
Определение языка L2 является описанием распознавателя.
9
Определение 24 (Система текстовых замен). Системой текстовых замен
называется упорядоченная пара RW = (Ω,P) где
1)Ω – алфавит;
2)P – конечное множество правил P Ω × Ω , т. е. каждый элемент множества P – пара цепочек (α,β), где α и β – произвольные цепочки над алфавитом Ω.
Пару (α,β) P называют правилом замены, или продукцией, и обычно записывают в виде α → β.
Определение 25 (Отношение непосредственной выводимости). Пусть α → → β P – правило в системе текстовых замен RW = (Ω,P) , а γ,ϕ Ω . Тогда говорят, что цепочка γβϕ непосредственно выводится из γαϕ (или цепочка γαϕ непосредственно порождает цепочку γβϕ) по системе текстовых замен RW , и пишут γαϕ RW γβϕ. Отношение RW на множестве Ω называют отношением непосредственной выводимости в системе текстовых замен RW .
Определение 26 (Отношение нетривиальной выводимости). Транзитивное замыкание отношения RW обозначают +RW и называют отношением нетривиальной выводимости в системе текстовых замен RW . Если α,β Ω и α +RW β, то говорят, что цепочка β выводится из α нетривиальным образом.
Определение 27 (Отношение выводимости). Рефлексивное транзитивное замыкание отношения RW обозначают RW и называют отношением выводимости в системе текстовых замен RW . Если α,β Ω и α RW β, то говорят, что цепочка β выводится из α.
Определение 28 (Вывод цепочки). Если β выводится из α по системе текстовых замен RW , то последовательную запись
α RW γ1 RW γ2 RW ... RW γk RW β
будем называть выводом цепочки β из цепочки α.
Часто, когда известно, о какой системе текстовых замен идет речь, ее имя (в нашем случае RW ) в вышеперечисленных обозначениях отношений будем опускать.
Пример 14. Рассмотрим систему текстовых замен RW = (Ω,P), в которой
Ω = {0,1,2,3},
P = {01 → 210, 03 → 33, 123 → 021, ε → 0, 221 → 3}.
10
В такой системе текстовых замен возможны выводы:
123 021 0201 02210 030 330; 3 03 33 033 333 0333 3333;
1232323 0212323 0202123 020202102020201 020202210 0202030.
Имея в виду вышеприведенные выводы цепочек, можем написать:
123 330; |
3 3333; |
1232323 0202030. |
Система текстовых замен может рассматриваться как конструктор языка и как распознаватель. Следующие определения демонстрируют это.
Определение 29 (Язык, порожденный системой текстовых замен). Пусть задана система текстовых замен RW = (Ω,P) и определено некоторое множество AX Ω . Множество слов
Lg(RW,AX ) = {β | α β, α AX }
называют языком, порожденным системой текстовых замен RW с помощью множества аксиом AX .
Определение 30 (Язык, допускаемый системой текстовых замен). Пусть задана система текстовых замен RW = (Ω,P) и определено некоторое множество AX Ω . Множество слов
La(RW,AX ) = {α | α β, β AX }
называют языком, допускаемым системой текстовых замен RW с помощью множества аксиом AX .
Пример 15. Рассмотрим язык из примера 13. Этот язык может распознаваться системой текстовых замен RW = ({0,1},{01 → ε}) и быть представлен в виде La(RW,{ε}).
Пример 16. Рассмотрим язык из примера 11. Этот язык может быть определен с помощью системы текстовых замен
RW = ({0,1,S},{S → ε,S → 0S1}) |
|
и быть представлен в виде |
|
Lg(RW,{S}) ∩ {0,1} . |
(1.2) |
В данном случае система тестовых замен рассматривается как порождающее устройство. Пересечение в (1.2) означает, что из всех порождаемых системой текстовых замен цепочек рассматриваются только те, что составлены из символов алфавита {0,1}. 
11
Пример 17. Рассмотрим язык из примера 12. Этот язык может определен с помощью системы текстовых замен
RW = ({0,1,S},{S → ε,S → 0S1,S → 1S0,S → SS}) |
|
и представлен в виде |
|
Lg(RW,{S}) ∩ {0,1} . |
(1.3) |
В данном случае система тестовых замен рассматривается как порождающее устройство. Так же как и в предыдущем примере, пересечение в (1.3) означает, что из всех порождаемых системой текстовых замен цепочек рассматриваются только те, в которых отсутствует символ S. 
Контрольные вопросы и задания
1.Какое множество может являться алфавитом?
2.Сколько языков можно определить над алфавитом {0,1}?
3.Поясните различие между устройствами для порождения и распознавания языков.
4.Приведите пример определения языка с помощью спецификаторов свойств.
5.На каком множестве задается отношение выводимости в системе текстовых замен?
6.Какими свойствами обладает отношение выводимости в системе текстовых замен?
7.Объясните, как система текстовых замен может порождать язык.
