6 Предисловие
несколько вычислительных моделей, которые основаны на реальных
языках программирования, и ограничиваемся изучением свойств этих
моделей. Мы не вдаемся в такие понятия как «разрешимость» или «ре-
курсивная перечислимость», свойственные теории алгоритмов. С другой
стороны мы предельно абстрактизировали и упростили выбранные мо-
дели, в связи с чем имеем возможность аксиоматически определять, что
такое программа и ее семантика, а также доказывать их свойства. Из-за
близости вводимых моделей к реальным языкам программирования эти
свойства легко переносятся на практически используемые языки.
При изложении материала мы придерживаемся следующего поряд-
ка. В первой главе мы пытаемся дать краткие исторические сведения
о том, как развивались представления об алгоритмах, а так же приве-
сти несколько примеров, которые проиллюстрировали бы понятие «ал-
горитм» на хорошо известных примерах.
Вторая глава является кратким справочным пособием по тем раз-
делам математики, которые потребуются при изучении материала, но
которые могут быть еще не известны студентам первого курса. Посколь-
ку изложение этих сведений не есть основная цель книги, то мы даем
эти определения на «полуформальном» уровне, прибегая к некоторым
интуитивным примерам.
Изложение основного материала начинается с третьей главы. Мы
определяем некоторый простой язык, на котором в дальнейшем будем
писать программы. В качестве базовых синтаксических конструкций мы
берем стандартный набор для построения структурных программ: при-
сваивание, следование, ветвление и цикл. Такой набор, с одной стороны,
является достаточным для того, чтобы построенный язык был универ-
сальным и чтобы доказанные результаты можно было распространить
на все алголоподобные языки, с другой стороны, он достаточно прост, и
можно легко доказывать утверждения о построенных программах.
Мы определяем семантику программы как некоторое преобразование
конечных функций, определенных на натуральных числах. Это дает воз-
можность излагать материал на уровне доступном как для тех, кто имел
опыт программирования, так и для тех, у кого его нет. Остаток этой гла-
вы посвящен изучению свойств построенного языка и его семантики. Мы
получаем некоторые хорошо известные в программировании факты как
теоремы, доказанные исходя из определений алгоритма и его семантики
В четвертой главе мы рассматриваем другую концепцию программи-