Участник:Rzakhar2/Черновик: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
= Формальные языки и формальные грамматики. =
= Формальные языки и формальные грамматики. =


=== Множества и операции над ними. ===
== Множества и операции над ними. ==
Множество - это совокупность, набор элементов, объединенных общими свойствами.
Множество - это совокупность, набор элементов, объединенных общими свойствами.


Строка 37: Строка 37:
Последовательность выполнения операций над множествами, как и обычно, может быть задана скобками. При отсутствии скобок сначала выполняются унарные операции (дополнение), затем — [[Пересечение множеств|пересечения]], затем — [[Объединение множеств|объединения]] и [[Разность множеств|разности]], которые имеют одинаковый приоритет. Операции одного приоритета выполняются слева направо. При этом надо иметь ввиду, что в отличии от арифметических сложения и вычитания, для которых верно, что <math>(a+b)-c = a + (b-c)</math>, для аналогичных операций над множествами это неверно. Например, если <math>A=\{1,3\}, B=\{1,2\}, C=\{2,3\},</math> то <math>(A\cup B)\setminus C=\{1\},</math> но, в то же время, <math>A\cup (B\setminus C)=\{1, 3\}</math>.
Последовательность выполнения операций над множествами, как и обычно, может быть задана скобками. При отсутствии скобок сначала выполняются унарные операции (дополнение), затем — [[Пересечение множеств|пересечения]], затем — [[Объединение множеств|объединения]] и [[Разность множеств|разности]], которые имеют одинаковый приоритет. Операции одного приоритета выполняются слева направо. При этом надо иметь ввиду, что в отличии от арифметических сложения и вычитания, для которых верно, что <math>(a+b)-c = a + (b-c)</math>, для аналогичных операций над множествами это неверно. Например, если <math>A=\{1,3\}, B=\{1,2\}, C=\{2,3\},</math> то <math>(A\cup B)\setminus C=\{1\},</math> но, в то же время, <math>A\cup (B\setminus C)=\{1, 3\}</math>.


=== Комбинаторика ===
== Комбинаторика ==
'''Комбинато́рика''' (комбинаторный анализ) — раздел [[Математика|математики]], изучающий дискретные объекты, [[Множество|множества]] ([[Сочетание|сочетания]], [[Перестановка|перестановки]], [[размещения]] и [[Перечисление (комбинаторика)|перечисления]] элементов) и отношения на них (например, [[Частичный порядок|частичного порядка]]). Комбинаторика связана с другими областями [[Математика|математики]] — [[Алгебра|алгеброй]], [[Геометрия|геометрией]], [[Теория вероятностей|теорией вероятностей]] и применяется в различных областях знаний (например, в [[Генетика|генетике]], [[Информатика|информатике]], [[Статистическая физика|статистической физике]]).
'''Комбинато́рика''' (комбинаторный анализ) — раздел [[Математика|математики]], изучающий дискретные объекты, [[Множество|множества]] ([[Сочетание|сочетания]], [[Перестановка|перестановки]], [[размещения]] и [[Перечисление (комбинаторика)|перечисления]] элементов) и отношения на них (например, [[Частичный порядок|частичного порядка]]). Комбинаторика связана с другими областями [[Математика|математики]] — [[Алгебра|алгеброй]], [[Геометрия|геометрией]], [[Теория вероятностей|теорией вероятностей]] и применяется в различных областях знаний (например, в [[Генетика|генетике]], [[Информатика|информатике]], [[Статистическая физика|статистической физике]]).


Строка 56: Строка 56:
:* [[Разбиение числа|Разбиением числа]] ''n'' называется всякое представление ''n'' в виде неупорядоченной суммы целых положительных чисел.
:* [[Разбиение числа|Разбиением числа]] ''n'' называется всякое представление ''n'' в виде неупорядоченной суммы целых положительных чисел.


=== Операции A* и A<sup>+</sup> над множеством A ===
== Операции A* и A<sup>+</sup> над множеством A ==


=== Степень множества ===
=== Степень множества ===
Строка 80: Строка 80:
Как видим, отличается тем, что пропущено <math> V^0 </math>, содержащее пустую строку.
Как видим, отличается тем, что пропущено <math> V^0 </math>, содержащее пустую строку.


== Свойства ==
=== Свойства ===
* Связь операций:
* Связь операций:
*# <math> V^+ = V^*V </math>
*# <math> V^+ = V^*V </math>
Строка 98: Строка 98:
\varnothing \ne V \ne \{\varepsilon\} </math>.
\varnothing \ne V \ne \{\varepsilon\} </math>.


== Примеры ==
=== Примеры ===
; Для множества строк
; Для множества строк
: <nowiki>{"Go", "Russia"}* = {ε, "Go", "Russia", "GoGo", "GoRussia", "RussiaGo", "RussiaRussia", "GoGoGo", "GoGoRussia", "GoRussiaGo", …}</nowiki>.
: <nowiki>{"Go", "Russia"}* = {ε, "Go", "Russia", "GoGo", "GoRussia", "RussiaGo", "RussiaRussia", "GoGoGo", "GoGoRussia", "GoRussiaGo", …}</nowiki>.
Строка 105: Строка 105:
:
:


=== Понятие символа, цепочки символов и конечного алфавита. ===
== Понятие символа, цепочки символов и конечного алфавита. ==
'''Алфави́т''' формального языка — [[множество]] атомарных (неделимых) символов какого-либо [[Формальный язык|формального языка]] (иногда называемых буквами по аналогии с [[Алфавит|алфавитами]] естественных языков). Из символов алфавита формального языка строятся [[Слово (формальный язык)|слова]], а заданием [[Формальная грамматика|формальной грамматики]] — допустимые выражения языка.
'''Алфави́т''' формального языка — [[множество]] атомарных (неделимых) символов какого-либо [[Формальный язык|формального языка]] (иногда называемых буквами по аналогии с [[Алфавит|алфавитами]] естественных языков). Из символов алфавита формального языка строятся [[Слово (формальный язык)|слова]], а заданием [[Формальная грамматика|формальной грамматики]] — допустимые выражения языка.


Строка 112: Строка 112:
'''Слово''' формального языка (также — ''цепочка'', ''строка'') — произвольная последовательность символов из данного [[Алфавит (формальный язык)|алфавита]]. Число символов в слове <math>\alpha</math> называют его длиной и обозначают <math> |\alpha| </math>. Может допускаться существование единственного слова длины 0, ('''пустое слово'''), не содержащее ни одного символа (обозначается <math>e</math>, <math>\varepsilon</math> или <math>\Lambda</math>).
'''Слово''' формального языка (также — ''цепочка'', ''строка'') — произвольная последовательность символов из данного [[Алфавит (формальный язык)|алфавита]]. Число символов в слове <math>\alpha</math> называют его длиной и обозначают <math> |\alpha| </math>. Может допускаться существование единственного слова длины 0, ('''пустое слово'''), не содержащее ни одного символа (обозначается <math>e</math>, <math>\varepsilon</math> или <math>\Lambda</math>).


=== Формальный язык над конечным алфавитом ===
== Формальный язык над конечным алфавитом ==
'''Формальный [[язык]]''' в [[Математическая логика|математической логике]] и [[Информатика|информатике]] — [[множество]] конечных [[Слово (математика)|слов]] (строк, цепочек) над конечным [[Алфавит (формальный язык)|алфавитом]]. Понятие языка чаще всего используется в [[Теория автоматов|теории автоматов]], [[Теория вычислимости|теории вычислимости]] и [[Теория алгоритмов|теории алгоритмов]]. Научная теория, которая имеет дело с этим объектом, называется теорией формальных языков.
'''Формальный [[язык]]''' в [[Математическая логика|математической логике]] и [[Информатика|информатике]] — [[множество]] конечных [[Слово (математика)|слов]] (строк, цепочек) над конечным [[Алфавит (формальный язык)|алфавитом]]. Понятие языка чаще всего используется в [[Теория автоматов|теории автоматов]], [[Теория вычислимости|теории вычислимости]] и [[Теория алгоритмов|теории алгоритмов]]. Научная теория, которая имеет дело с этим объектом, называется теорией формальных языков.


Строка 122: Строка 122:
* Словами, порождёнными [[Форма Бэкуса — Наура|БНФ-конструкцией]].
* Словами, порождёнными [[Форма Бэкуса — Наура|БНФ-конструкцией]].


=== Формальные грамматики ===
=== Формальные грамматики. Алфавиты терминальных и нетерминальных символов. ===
'''Формальная грамматика''' или просто '''грамматика''' в теории [[Формальный язык|формальных языков]] — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного [[Алфавит (математика)|алфавита]]. Различают ''порождающие'' и ''распознающие'' (или ''аналитические'') грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит ли оно в язык или нет.
'''Формальная грамматика''' или просто '''грамматика''' в теории [[Формальный язык|формальных языков]] — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного [[Алфавит (математика)|алфавита]]. Различают ''порождающие'' и ''распознающие'' (или ''аналитические'') грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит ли оно в язык или нет.
* '''Терминал (терминальный символ)''' — объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение (обобщение понятия «буквы»). В формальных языках, используемых на компьютере, в качестве терминалов обычно берут все или часть стандартных символов [[ASCII]] — латинские буквы, цифры и спец. символы.
* '''Терминал (терминальный символ)''' — объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение (обобщение понятия «буквы»). В формальных языках, используемых на компьютере, в качестве терминалов обычно берут все или часть стандартных символов [[ASCII]] — латинские буквы, цифры и спец. символы.
Строка 185: Строка 185:
: (<u>ЦИФРА</u> ЦИФРА + 5) <math>\stackrel{7}{\to}</math> (<u>1</u> ЦИФРА + 5)
: (<u>ЦИФРА</u> ЦИФРА + 5) <math>\stackrel{7}{\to}</math> (<u>1</u> ЦИФРА + 5)
: (1 <u>ЦИФРА</u> + 5) <math>\stackrel{7}{\to}</math> (1 <u>2</u> + 5)
: (1 <u>ЦИФРА</u> + 5) <math>\stackrel{7}{\to}</math> (1 <u>2</u> + 5)

=== Пораждающие и распознающие грамматики. ===
Порождающие грамматики — не единственный вид грамматик, однако наиболее распространенный в приложениях к программированию. В отличие от порождающих грамматик, '''аналитическая (распознающая) грамматика''' задает алгоритм, позволяющий определить, принадлежит ли данное слово языку. Например, любой [[регулярный язык]] может быть распознан при помощи грамматики, задаваемой [[Конечный автомат|конечным автоматом]], а любая контекстно-свободная грамматика — с помощью [[Автомат со стековой памятью|автомата со стековой памятью]]. Если слово принадлежит языку, то такой автомат строит его вывод в явном виде, что позволяет анализировать [[Семантика|семантику]] этого слова.

Версия от 10:58, 9 августа 2017

Формальные языки и формальные грамматики.

Множества и операции над ними.

Множество - это совокупность, набор элементов, объединенных общими свойствами.

Бинарные операции

Основные бинарные операции, определяемые над множествами:

  • пересечение:
    .
  • объединение:
    .
Если множества и не пересекаются, то . Их объединение обозначают также: .
  • разность:
    .
  • симметрическая разность:
    .
  • декартово или прямое произведение:
    .

Унарные операции

Диаграмма Венна для

Дополнение определяется следующим образом:

.

Операция дополнения подразумевает некоторый зафиксированный универсум (универсальное множество , которое содержит ), и сводится к разности множеств с этим универсумом:

.

Система множеств с фиксированным универсумом, замкнутая относительно операций объединения, пересечения с введённым таким образом дополнением образует булеву алгебру.

Булеан — множество всех подмножеств:

.

Обозначение происходит из свойства мощности множества всех подмножеств конечного множества:

.

Булеан порождает систему множеств с фиксированным универсумом , замкнутую относительно операций объединения и пересечения, то есть, образует булеву алгебру.

Приоритет операций

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

Комбинаторика

Комбинато́рика (комбинаторный анализ) — раздел математики, изучающий дискретные объекты, множества (сочетанияперестановкиразмещения и перечисления элементов) и отношения на них (например, частичного порядка). Комбинаторика связана с другими областями математики — алгебройгеометриейтеорией вероятностей и применяется в различных областях знаний (например, в генетикеинформатикестатистической физике).

В комбинаторике размеще́нием (из n по k) называется упорядоченный набор из k различных элементов из некоторого множества различных n элементов.

Пример 1:  — это 4-элементное размещение из 6-элементного множества .

Количество размещений из n по k, обозначаемое , равно убывающему факториалу:

В комбинаторике перестано́вка — это упорядоченный набор чисел обычно трактуемый как биекция на множестве , которая числу i ставит в соответствие i-й элемент из набора. Число n при этом называется порядком перестановки. Как синоним слову «перестановка» в этом смысле некоторые авторы используют слово расстановка.
В комбинаторике сочетанием из по называется набор элементов, выбранных из данного множества, содержащего различных элементов. Наборы, отличающиеся только порядком следования элементов (но не составом), считаются одинаковыми, этим сочетания отличаются от размещений.

Число сочетаний из по равно биномиальному коэффициенту

  • Композицией числа n называется всякое представление n в виде упорядоченной суммы целых положительных чисел.
  • Разбиением числа n называется всякое представление n в виде неупорядоченной суммы целых положительных чисел.

Операции A* и A+ над множеством A

Степень множества

Нулевая степень любого множества неизменна:

.

Остальные степени определяются рекурсивно:

, где .
Если  — множество символов
то  — множество строк длиной символов, взятых из .

Звезда Клини

Замыкание Клини множества есть

.

То есть это множество всех строк конечной длины́, порождённое элементами множества .

Плюс Клини

Есть операция, аналогичная звезде Клини, — плюс Клини:

.

Как видим, отличается тем, что пропущено , содержащее пустую строку.

Свойства

  • Связь операций:
  • Идемпотентность:
.
  • Замыкание Клини включает в себя порождающее множество:
.
  • Замыкание Клини всегда содержит пустую строку:
.
.

Примеры

Для множества строк
{"Go", "Russia"}* = {ε, "Go", "Russia", "GoGo", "GoRussia", "RussiaGo", "RussiaRussia", "GoGoGo", "GoGoRussia", "GoRussiaGo", …}.
Для множества символов
{'a', 'b', 'c'}* = {ε, "a", "b", "c", "aa", "ab", "ac", "ba", "bb", "bc", "ca", "cb", "cc", "aaa", …}.

Понятие символа, цепочки символов и конечного алфавита.

Алфави́т формального языка — множество атомарных (неделимых) символов какого-либо формального языка (иногда называемых буквами по аналогии с алфавитами естественных языков). Из символов алфавита формального языка строятся слова, а заданием формальной грамматики — допустимые выражения языка.

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

Слово формального языка (также — цепочка, строка) — произвольная последовательность символов из данного алфавита. Число символов в слове называют его длиной и обозначают . Может допускаться существование единственного слова длины 0, (пустое слово), не содержащее ни одного символа (обозначается , или ).

Формальный язык над конечным алфавитом

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

Формальный язык может быть определён по-разному, например:

Формальные грамматики. Алфавиты терминальных и нетерминальных символов.

Формальная грамматика или просто грамматика в теории формальных языков — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного алфавита. Различают порождающие и распознающие (или аналитические) грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит ли оно в язык или нет.

  • Терминал (терминальный символ) — объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение (обобщение понятия «буквы»). В формальных языках, используемых на компьютере, в качестве терминалов обычно берут все или часть стандартных символов ASCII — латинские буквы, цифры и спец. символы.
  • Нетерминал (нетерминальный символ) — объект, обозначающий какую-либо сущность языка (например: формула, арифметическое выражение, команда) и не имеющий конкретного символьного значения.

Словами языка, заданного грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального нетерминала по правилам вывода.

Чтобы задать грамматику, требуется задать алфавиты терминалов и нетерминалов, набор правил вывода, а также выделить в множестве нетерминалов начальный.

Итак, грамматика определяется следующими характеристиками:

  •  — набор (алфавит) терминальных символов
  • N — набор (алфавит) нетерминальных символов
  • P — набор правил вида: «левая часть» «правая часть», где:
    • «левая часть» — непустая последовательность терминалов и нетерминалов, содержащая хотя бы один нетерминал
    • «правая часть» — любая последовательность терминалов и нетерминалов
  • S — стартовый (или начальный) символ грамматики из набора нетерминалов.

Вывод

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

Существование вывода для некоторого слова является критерием его принадлежности к языку, определяемому данной грамматикой.

Типы грамматик

По иерархии Хомского, грамматики делятся на 4 типа, каждый последующий является более ограниченным подмножеством предыдущего (но и легче поддающимся анализу):

Кроме того, выделяют:

  • Неукорачивающиеся грамматики. Каждое правило такой грамматики имеет вид , где . Длина правой части правила не меньше длины левой.
  • Линейные грамматики. Каждое правило такой грамматики имеет вид , или , то есть в правой части правила может содержаться не более одного вхождения нетерминала.

Пример — арифметические выражения

Рассмотрим простой язык, определяющий ограниченное подмножество арифметических формул, состоящих из натуральных чисел, скобок и знаков арифметических действий. Стоит заметить, что здесь в каждом правиле с левой стороны от стрелки стоит только один нетерминальный символ. Такие грамматики называются контекстно-свободными.

Терминальный алфавит:

 = {'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')'}

Нетерминальный алфавит:

  { ФОРМУЛА, ЗНАК, ЧИСЛО, ЦИФРА }

Правила:

1. ФОРМУЛА  ФОРМУЛА ЗНАК ФОРМУЛА                (формула есть две формулы, соединенные знаком)
2. ФОРМУЛА  ЧИСЛО                               (формула есть число)
3. ФОРМУЛА  ( ФОРМУЛА )                         (формула есть формула в скобках)
4. ЗНАК  + | - | * | /                          (знак есть плюс или минус, или умножить, или разделить)
5. ЧИСЛО  ЦИФРА                                 (число есть цифра)
6. ЧИСЛО  ЧИСЛО ЦИФРА                           (число есть число и цифра)
7. ЦИФРА  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (цифра есть 0 или 1, или ... 9 )

Начальный нетерминал:

ФОРМУЛА

Вывод:

Выведем формулу (12+5) с помощью перечисленных правил вывода. Для наглядности, стороны каждой замены показаны попарно, в каждой паре заменяемая часть подчеркнута.

ФОРМУЛА (ФОРМУЛА)
(ФОРМУЛА) (ФОРМУЛА ЗНАК ФОРМУЛА)
(ФОРМУЛА ЗНАК ФОРМУЛА) (ФОРМУЛА + ФОРМУЛА)
(ФОРМУЛА + ФОРМУЛА) (ФОРМУЛА + ЧИСЛО)
(ФОРМУЛА + ЧИСЛО) (ФОРМУЛА + ЦИФРА)
(ФОРМУЛА + ЦИФРА) (ФОРМУЛА + 5)
(ФОРМУЛА + 5) (ЧИСЛО + 5)
(ЧИСЛО + 5) (ЧИСЛО ЦИФРА + 5)
(ЧИСЛО ЦИФРА + 5) (ЦИФРА ЦИФРА + 5)
(ЦИФРА ЦИФРА + 5) (1 ЦИФРА + 5)
(1 ЦИФРА + 5) (1 2 + 5)

Пораждающие и распознающие грамматики.

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

  1. Виленкин Н.Я. Глава III. Комбинаторика кортежей и множеств. Размещения с повторениями // Популярная комбинаторика. — М.: Наука, 1975. — С. 80. — 208 с.
  2. Теория конфигураций и теория перечислений
  3. Глава 3. Элементы комбинаторики. // Лекции по теории вероятностей.
  4. Дональд Э. Кнут — Искусство программирования. Том 1. Основные алгоритмы. 1.2.5. Перестановки и факториалы