
- •Введение
- •Глава 1
- •§ 1. «Алгоритмические джунгли»
- •§ 2. Исходные данные и результаты. Массовость алгоритма
- •§ 4. Понятность алгоритма
- •§ 5. Рекурсивные определения
- •§ 6. Определенность алгоритма
- •§ 7. Выводы
- •Глава 2 создание алгоритмов
- •§ 1. Роль алгоритмов в науке и технике
- •§ 2. Как возникают алгоритмы
- •§ 3. Алгоритмы в математике
- •§ 4. Алгоритм Евклида
- •§ 5. Решето Эрагосфена
- •§ 6. Алгоритм разложения на простые множители. Определение наименьшего кратного двух чисел
- •§ 7. Распознавание алгебраического тождества
- •§ 8. Задачи на построение алгоритмов
- •Глава 3 кризис математики в начале XX века
- •§ 1. Арифметизация математики
- •§ 2. Теория множеств
- •§ 3. Кардинальные числа
- •§ 4. Антиномии
- •§ 5. Выводы из антиномий
- •Глава 4 логические теории алгоритмов
- •§ 1. Рекурсивные функции
- •§ 2. Машины Тьюринга
- •§ 3. Нормальные алгоритмы Маркова
- •§ 4. Эквивалентность описанных теорий
- •Глава 5
- •§ 1. Массовые проблемы. Неразрешимость проблем
- •§ 2. Экстраалгоритм и три неразрешимые проблемы
- •§ 3, Некоторые замечания
- •Глава 6 электронные вычислительные машины и программирование
- •§ 1. Устройство эвм
- •§ 2. Процессоры эвм. Рабочий цикл
- •§ 3. Что такое программа
- •§ 4. Особенности современных эвм
- •§ 5. Входные языки программирования
- •§ 6. Необходимость содержательной теории алгоритмов. Какой она должна быть
- •Г л а в а 7 формальные языки
- •§ 1. Анализ естественного языка
- •§ 2. Искусственные языки. Формальные языки
- •§ 3. Буквы, связи, оболочки, конструкции
- •§ 4. Формальные грамматики
- •§ 5. Нотация Бекуса. Тезаурусы
- •§ 1. Что такое операция?
- •§ 2. Натуральные операции
- •§ 4. Первичные алгоритмы
- •§ 5. Натуральные алгоритмы
- •§ 6. Ограничения на структуру исходных данных сняты
- •§ 8. Соотношение с алгоритмами в интуитивном смысле
- •§ 10. Исследование тупиков (клинчей)
- •§ 11. Формальная семантика формального языка
- •Глава 9 математическое обеспечение эвм
- •§ 1. Анализ эвм и программ
- •§ 2. Что такое математическое обеспечение эвм
- •§ 3. Функциональная классификация программ математического обеспечения эвм
- •§ 4. Операционные системы
- •И автоматизация процессов
- •§ I. Использование эвм для управления
- •§ 2. Информационные системы
- •§ 3. Алгоритмизация процессов
- •§ 4. Язык алгоритмизации процессов
- •§ 5. Наука и искусство алгоритмизации
- •Заключение
- •§ 1. Может ли машина мыслить? Может ли человек решить алгоритмически неразрешимую проблему?
- •§ 2. Детерминированность машин. Самообучение
- •§ 3. Сознание машин. Алгоритмическое моделирование
§ 3. Буквы, связи, оболочки, конструкции
Если мы хотим употреблять термин «язык программ», а это нам нужно, чтобы считать программы алгоритмами, мы должны допускать возможность очень сложной структуры предложений языка. Автор думает, что полезность трактовки программ для ЭВМ как алгоритмов уже не вызывает у читателя сомнений, и потому не будет второй раз ее обосновывать.
Читатель помнит, что программа, размещенная в машине, состоит из команд, среди которых присутствуют и команды перехода, причем связь между командами программы установлена с помощью команд перехода и определенного размещения команд в оперативной памяти. Все эти связи можно проследить и в программе, написанной на бумаге.
В последнем случае вместо особого способа размещения команд мы имеем (даже более наглядный) способ обозначения их связей с помощью собственных адресов (и, конечно, команд перехода).
Анализируя программы, мы видим, что основным строительным материалом для них являются символы (в теории алгоритмов мы их называли буквами). Из этих букв образованы более сложные конструкции (элементы кода программы: адреса и код операций), являющиеся словами. Эти слова объединены в системы, называемые командами. Причем даже в составе команды каждое из указанных слов сохраняет свою индивидуальность. Команды можно считать словами, о разделении которых на более простые слова задана информация. Но это неудобно, так как равносильно тому, что каждая команда имеет к себе «примечание». Лучше считать команду структурной, образованной не непосредственно из букв, а из более простых слов. Приказ имеет аналогичную, но еще более усложненную структуру. Наконец, программа на бумаге есть некоторая конструкция, образованная из приказов. Можно считать, что любая программа построена с помощью элементов трех видов: букв, связей, которые могут связывать буквы и еще некоторые другие объекты (чуть ниже мы их назовем), и оболочек, которые могут «облекать» (объединять в одно целое) конструкции, полученные с помощью связей из букв или из простых конструкций, заключенных в оболочки (именно эти объекты мы имели в виду несколько выше). Те объекты, которые могут быть связаны связями, будем называть конструктивными элементами. Таким образом, заключая некоторую конструкцию в оболочку, мы тем самым превращаем ее в конструктивный элемент, из которого можно образовывать более сложную конструкцию.
Приведенное описание несколько туманно. Сформулируем его более точно в виде следующих пунктов.
1. Конструктивным элементом является либо отдельная буква, либо конструкция, заключенная в оболочку.
2. Конструкцией называется либо пустое множество, либо несколько конструктивных элементов, связанных несколькими связями так, что «способности» связей к связыванию полностью использованы (связи насыщены), а любые два конструктивных элемента можно соединить цепочкой из конструктивных элементов и связей (конструктивные элементы связаны).
Нужно точнее пояснить, что мы понимаем под буквами,
оболочками и связями.
Буквы — это применяемые нами символы, которые в процессе их использования уже нельзя делить на части или как-либо деформировать.
Оболочки являются подобием скобок. По существу, открывающая и закрывающая скобки, рассматриваемые вместе, являются не чем иным, как оболочкой, облекающей некоторую строку символов. Нам пришлось пойти на такое видоизменение скобок в связи с тем, что среди конструкций мы будем допускать более сложные, чем цепочки букв или других конструктивных элементов.
Наконец, связи — это условные знаки, обозначающие взаимодействие между конструктивными элементами. Понятие связи так же естественно, как и понятие буквы. Связи мы постоянно наблюдаем, хотя до сих пор не говорили о них.
В слове
«мама» присутствуют три вида связей,
которые в своей совокупности образуют
связи следования букв. В этом слове
связи не изображены никакими символами.
Они переданы особым расположением букв.
Тем не менее они там есть. Если ввести
символы для обозначения связей следования
букв, обозначив их соответственно через
и
,
то слово «мама» следует представить в
виде
Здесь
означает «одноместную» связь, называемую
начинающей,
знак
означает «двухместную» связь, называемую
продолжающей.
Наконец,
знак
означает «одноместную» связь, называемую
заканчивающей.
Однобуквенное
слово «а» (союз) имеет вид:
В нем нет продолжающих связей, но есть начинающая и заканчивающая.
Мы, говоря о связях, иногда будем их обозначать особыми знаками, иногда будем передавать особым способом расположения конструктивных элементов, но всегда будем иметь в виду их наличие.
Читателю
следует обратить внимание на то, что,
фиксируя и учитывая наличие связей, мы
начинаем глубже понимать структуру
предложении языка, начинаем в ряде
случаев улавливать различия, которые
без учета связей остаются незаметными.
Например, буква «а» и слово
являются конструкциями различного
вида. Не замечая связей, мы не замечаем
и этого различия. В некоторых случаях
подобное различие бывает существенным.
Кроме
связей следования букв, нам очень знакомы
(и одновременно очень незнакомы) многие
другие связи. Например, введем
обозначения
для начинающей, продолжающей и
заканчивающей связи между словами. В
фразе «Мама идет» присутствуют такие
связи.
…
бы речь шла о наручниках, с помощью которых человека можно сковать со слоном. Здесь была бы связь второго ранга и второго жанра («ветви» связи были бы различны). Ремни, висящие во многих автобусах и предназначенные для того, чтобы стоящий пассажир во время движения за них держался, можно считать связями второго ранга и второго жанра. При этом одна ветвь «связывает» автобус, а другая «связывает» пассажира.
Итак, теперь мы имеем достаточно ясно представление о связях. Подчеркнем только еще раз, что если два конструктивных элемента связаны ветвями одинакового жанра какой-либо связи, то невозможно отличить, какая из ветвей соответствует любому из них. Обмен между ними одинаковыми ветвями не вызвал бы никаких перемен.
Оболочку можно считать особым видом буквы. Если некоторая конструкция заключена в оболочку, то удобно считать, что каждый конструктивный элемент этой конструкции связан некоторой связью с оболочкой. Эти связи мы для упрощения явно не указываем, но можем сказать, каковы они: они все одинаковы, так что оказать предпочтение тому или другому из конструктивных элементов они не позволяют. Кроме того, эти связи имеют второй ранг и второй жанр и всегда одинаково подключены к оболочке именно своими ветвями первого жанра.
Если какой-либо конструктивный элемент является конструкцией, облеченной в оболочку, то связи, которые его связывают «в целом», своими ветвями «подключены» к его оболочке. Мы допустим расширение понятия конструкции, если скажем, что после того, как конструкция получена способом, описанным в ее определении выше, можно наложить на нее еще некоторое количество связей, «проникающих» сквозь оболочки ее конструктивных элементов на какую угодно глубину. То, что получится, снова будем называть конструкцией и допускать в качестве строительного материала для более сложных конструкций. Заметим только, что если все связуемые элементы какой-либо связи находятся внутри некоторой оболочки, то считается, что она сама тоже находится внутри этой оболочки. На рис. 16 приведена схема конструкции, образованной из букв с помощью оболочек и связей. На этом рисунке α, β, γ — имена связей, кроме того, показаны связи следования букв, имена которых не обозначены. Замкнутые линии изображают собой оболочки. Одна из оболочек, связанная ветвью жанра 3 связи α, облекает собой пустую конструкцию. Связь β проникает ветвью второго ранга через две оболочки, На практике обычно встречаются менее замысловатые конструкции, чем показанная на рис. 16, например, «деревья» и «кольца», образованные с помощью связей следования из букв, матрицы и т. п. Эти виды конструкций пояснены на рис. 17.
В некоторых случаях удобно ограничить класс рассматриваемых конструкций. С этой целью задают алфавит букв, алфавит (перечень) связей и знак, являющийся обозначением оболочки. При этом алфавиты считают не только перечнями, но учитывают и порядок расположения в них перечисляемых элементов. Другими словами, алфавиты можно считать словами, но по отношению к «языку» рассматриваемых конструкций будем их считать метасловами (т. е. словами, принадлежащими метаязыку).
Условным обозначением класса конструкций является запись (А, В, Σ), в которой А — алфавит букв, В — алфавит связей, Σ — символ, говорящий о возможности применения оболочек. В конкретных случаях вместо А и В могут быть записаны в виде слов конкретные алфавиты, а символ Σ всегда будет включаться без всякой конкретизации.