Формальная семантика формального языка
В свое время, получая понятие формального языка, мы пришли к выводу, что семантика и синтаксис языка должны рассматриваться раздельно.
Во всех предыдущих параграфах, говоря о формальных языках, мы все время следили за их синтаксисом. Лишь один раз, в § 4 настоящей главы, мы имели дело с формальным языком, наделенным семантикой. Теперь можно кое-что сказать о способах наделения языков семантикой. К сожалению, при этом мы не можем сказать, чем же вообще является семантика, а можем разъяснить лишь некоторые частные случаи.
Но сначала введем понятие подъязыка. Этим словом будем называть подмножество предложений формального (или естественного) языка, которое само является формальным языком, т. е. допускает построение формальной грамматики. Первый случай наделения языка семантикой — это присваивание собственных имен. Пусть у нас есть некоторый формальный язык. Можно считать, что каждое предложение, принадлежащее некоторому его подъязыку, является именем, если есть алгоритм, который применим к каждому из предложений этого подъязыка и неприменим к остальным предложениям, причем предложения он перерабатывает в предметы, которые являются именуемыми. Такой алгоритм будем называть семантикой упомянутого подъязыка, а вместе о тем и частью семантики основного языка.
В естественном языке к подъязыку собственных имен относятся такие слова, как «Москва», «Луна», «Эльбрус» и т. п. Когда же этот прием возможен для формального языка? Ведь предметы, в которые алгоритм перерабатывает предложения, сами должны быть предложениями. Прежде всего он применим тогда, когда мы хотим говорить о предложениях какого-то другого языка. Значит, с таким приемом наделения семантикой мы встретимся в метаязыках. Но оказывается, что иногда его применяют и в других случаях. Читатель, наверное, нередко бывал в музеях и видел, что на экспонатах навешены таблички с их наименованиями. Такое навешивание табличек позволяет, зная имя предмета, найти сам предмет (на математическом языке это значит — «переработать» имя предмета в предмет). Правило (очень простое), которым мы при этом пользуемся, есть не что иное, как алгоритм в интуитивном смысле.
Читателя не должно смущать то обстоятельство, что предметы не являются предложениями языка. Ведь каждый символ, если он нам действительно задан, должен существовать как некоторый физический предмет, или как состояние предмета, или как процесс, протекающий в предмете. В рассматриваемом случае предметы можно рассматривать как физические представления символов.
Описанный способ установления соответствия между именами и предметами обычно применяют и на многолюдных международных конференциях и симпозиумах. Каждому участнику выдают небольшой значок, на котором написана его фамилия и название страны, которую он представляет. Участники конференции прикалывают такие значки к пиджакам у себя на груди, и соответствие между именами и предметами установлено.
Второй способ наделения формального языка семантикой заключается в следующем. Предположим, что, кроме нашего формального языка L, имеется еще один язык L1, причем этот второй язык уже наделен семантикой (безразлично как). Обозначим произвольное предложение языка L буквой 7, а правильное предложение языка L1—буквой s. Допустим, что нам задан алгоритм Т, который каждое 1 перерабатывает в одно-единственное соответствующее ему предложение 5. Такой алгоритм называют алгоритмом перевода, а в теории программирования — алгоритмом трансляции. Алгоритм перевода переносит смысл предложения s на то предложение I, из которого получается это s.
Описанный способ (назовем его способом трансляции) имеет очень широкое применение. Семантика языка эсперанто, о котором мы говорили в §2 гл.7, была задана именно таким способом.
Ввиду того, что из естественных языков можно выделять формальные (естественные) подъязыки, способ трансляции дает возможность использовать естественные языки для того, чтобы наделять семантикой (искусственные) формальные языки.
В § 5 гл. 6 мы говорили о входных языках программирования и о трансляторах, которые позволяют делать перевод на язык программ. Как только для входного языка программирования задан транслятор,— он наделен семантикой, так как язык программ имеет семантику.
Третий способ наделения семантикой применяют к алгоритмическим языкам. Этот способ заключается в том, что составляют алгоритм выполнения алгоритмов, записи которых являются, как мы помним, предложениями формального языка.
Этот способ отличается от предыдущих тем, что, кроме формального языка, наделяемого семантикой, требует привлечения второго языка — операндного. Если t — алгоритм, as — исходное данное, то нужен алгоритм W, описывающий применение t к £. Меняя s', но не меняя t, мы можем для каждого t (при желании) получить соответствующий результат р*. Значит, t есть описание некоторой функции вида t (s). Если задан алгоритм, то задана и эта функция.
Возможен еще и такой способ задания семантики. Над некоторым подъязыком основного формального языка задан алгоритм, который предложения этого подъязыка перерабатывает в предложения другого подъязыка того же основного языка.
Поскольку мы условились применять только такие формальные языки, на которых нельзя говорить о них самих, то этот прием может означать лишь так называемую внутреннюю трансляцию. При внутренней трансляции происходит процесс, который обычно называют определением понятий. Например, предложение «Треугольник есть замкнутая ломаная, состоящая из трех прямых отрезков» является простейшим алгоритмом, переводящим слово-предложение «треугольник» в предложение «замкнутая ломаная, состоящая из трех прямых отрезков».
Описанный способ наделения семантикой можно назвать способом определений. Мы с вами, читатель, знаем, что, кроме прямых, бывают и рекурсивные определения. Алгоритмы, реализующие рекурсивные процессы определений, тоже могут служить для наделения языков семантикой, но такие алгоритмы имеют по крайней мере второй ранг. Кроме наделяемого смыслом предложения, нужно задать число, определяющее количество выполнений циклической части определения. Подробнее на этом способе мы останавливаться не будем, так как он очень сложен. Заметим только, что, задавая числа, мы тем самым привлекаем еще один формальный язык, предложения которого играют вспомогательную роль.
Наконец, заметим, что на различных подъязыках основного формального языка семантика может быть задана различными способами. Не исключается и такой случай, в котором некоторые предложения формального языка остаются бессмысленными.
Итак, формальный язык наделен семантикой, если над некоторыми его подъязыками заданы алгоритмы, играющие вышеописанную роль.
Подъязыки, над которыми заданы указанные алгоритмы, не должны пересекаться (иметь общие предложения), иначе это повлечет за собой появление многозначности предложений.
Совокупность алгоритмов, определяющих описанными способами смысл предложений и заданных над непересекающимися подъязыками, представляет собой то, что мы называем формальной семантикой формального языка. Наше описание семантики очень неполно. Понятие семантики в полном объеме еще не изучено.
Содержательно, семантика формального языка — это совокупность способов, с помощью которых его предложения наделяются смыслом. Тогда ясно, что описанные выше способы трансляции и определений являются только первым шагом семантики, требующим продолжения. В тех случаях, когда окончательным содержанием предложения являются предмет или явление реального мира, это продолжение выводит за пределы математики (как, например, в случае навешивания ярлыков). Задать смысл предложения (символьной конструкции) без выхода за границы математики можно лишь тогда, когда содержание предложения само является объектом математической природы.
Теория алгоритмов в качестве средства для определения смысла предложений рекомендует алгоритмы. Точность и определенность алгоритмов гарантирует выполнение требований, предъявляемых к формальным языкам, наделенным семантикой.
Процесс выполнения вышеописанных алгоритмов можно называть формальным пониманием предложений языка. Если существуют алгоритмы, с помощью которых можно (отправляясь от «смысла» предложения) совершить переход к самому предложению, то процессы выполнения таких алгоритмов можно называть формальной речью. Но эта проблема еще менее изучена, чем проблема формального понимания.
Глава 9