Формальный язык

Материал из testwiki
Перейти к навигации Перейти к поиску

Шаблон:Не путать

Синтаксическое подразделение в рамках формальной системы.

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

В теории моделей язык строится из множеств символов, функций и отношений вместе с их арностью, а также множества переменных. Каждое из этих множеств может быть бесконечным. Из языка вместе с универсальными логическими символами составляются логические высказывания.

Определение

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

Например, если алфавит задан как {a,b}, а язык L включает в себя все слова над ним, то слово ababba принадлежит L. Пустое слово (то есть строка нулевой длины) допускается и часто обозначается как e, ϵ или Λ.

Некоторые другие примеры формальных языков:

Операции

Некоторые операции могут быть использованы для того, чтобы порождать новые языки из данных. Предположим, что L1 и L2 являются языками, определёнными над некоторым общим алфавитом.

  • Конкатенация (сцепление) L1L2 содержит все слова, удовлетворяющие форме vw, где v — это слово из L1, а w — слово из L2.
  • Пересечение L1L2 содержит все слова, содержащиеся и в L1, и в L2.
  • Объединение L1L2 содержит все слова, содержащиеся в L1 или в L2.
  • Дополнение языка L1 содержит все слова алфавита, которые не содержатся в L1.
  • Правое отношение L1/L2 содержит все слова v, для которых существует слово w в L2 такое, что vw находилось в L1.
  • Замыкание Клини L1* содержит все слова, которые могут быть записаны в форме w1w2...wn, где wi содержится в L1 и n0. Следует помнить, что это включает и пустое слово ϵ, так как n=0 допустимо по условию.
  • Обращение L1R содержит обращённые слова из L1.
  • Смешение L1 и L2 содержит все слова, которые могут быть записаны в форме v1w1v2w2...vnwn, где n1 и v1,...,vn являются такими словами, что связь v1...vn находится в L1, а w1,...,wn являются такими словами, что w1...wn находятся в L2.

История

В XVII веке Готфрид Лейбниц представил и описал идею о «characteristica universalis» — универсальном и формальном языке, использующем пиктограммы. В этот период Карл Фридрих Гаусс также занимался проблемой нотацией Гаусса[1].

Готлоб Фреге попытался воплотить идеи Лейбница в системе обозначений, которая была впервые описана в его работе «Шаблон:Нп3» (1879) и более полно разработана в двухтомнике «Шаблон:Нп3» (1893/1903). Эта система описывала «формальный язык чистой логики»[2].

В первой половине XX века были сделаны несколько разработок, имеющих отношение к формальным языкам. Аксель Туэ опубликовал четыре статьи, связанные с понятиями слов и языка, между 1906 и 1914 годами. В последней из них были представлены теории, которые Эмиль Пост позже назвал системами Туэ, и дал первый пример неразрешимой проблемы — проблемы равенства для полугрупп[3]. Пост позже использовал эту статью в своем доказательстве в 1947 году «о том, что проблема слов для полугрупп является рекурсивно неразрешимой»[4], а также разработал каноническую систему для создания формальных языков.

Ноам Хомский создал абстрактное представление формальных и естественных языков, известное как иерархия Хомского[5]. В 1959 году Джон Бэкус разработал форму для описания синтаксиса языка программирования высокого уровня на основе своей работы по созданию Фортрана. Питер Наур был редактором «Доклада об алгоритмическом языке Алгол 60», в котором он использовал форму Бэкуса — Наура для описания формальной части Алгола 60.

См. также

Примечания

Шаблон:Примечания

Литература

Шаблон:Вс Шаблон:Формальные языки Шаблон:Rq