
- •Нижегородский государственный университет им. Н.И. Лобачевского
- •1.Предисловие
- •2.Замечания по терминологии
- •3.Кибернетика и информатика
- •4.Предпосылки информатики
- •4.1.Мечта человека об искусственном человеке
- •4.2.Усилители физической и умственной деятельности человека
- •4.3.Ключевые проблемы информатики
- •5.Формализация естественного языка как средства общения.
- •6.Формализация физических характеристик среды обитания
- •6.1.Дискретные и непрерывные множества
- •6.2. Понятия измерительной шкалы, числа и измерения
- •6.3.Натуральное число
- •6.4.Позиционная система счисления
- •6.5.Натуральная числовая прямая
- •6.6.Целые числа (положительные и отрицательные)
- •6.7.Вещественные числа
- •7.Формализация физических зависимостей
- •7.1.Функции
- •7.2.Элементарные функции
- •7.3.Элементарная алгебра, аналитические и численные вычисления
- •8.Аналоговые и цифровые вычислители
- •9.Простейшие вычислители
- •9.1.Аналоговые вычислительные линейки
- •9.2.Цифровой абак и русские счеты
- •9.3.Цифровые механические арифмометры
- •9.4.Хронология событий.
- •10.Аналитические машины Чарльза Беббиджа.
- •11.Формализация рассуждений
- •11.1.Логика рассуждений
- •11.2.Логические функции и алгебра логики
- •11.3.Алгебра логики и алгебра релейно - контактных схем
- •12.Накануне компьютерной эры
- •12.1. Зарождение цифровых систем управления
- •12.2.Перфокарточные сортировальные машины
- •12.3.Методология моделирования
- •13.Теоретические модели вычислений
- •13.1.Алгоритм и его свойства
- •13.2.Проблема слов в ассоциативном исчислении
- •13.3.Нормальный алгоритм Маркова
- •13.4.Рекурсивные функции
- •13.5.Машина Тьюринга
- •13.6.Равнодоступная адресная машина
- •14.Пионеры зарубежной компьютеризации
- •15.Становление информатики в России. Борьба за признание
- •16.Два типа электронных вычислительных машин
- •16.1.Аналоговая вычислительная машина (авм)
- •16.2.Цифровая электронная вычислительная машина (компьютер, эвм)
- •16.3.Аналог или цифра
- •17.Пионеры отечественной компьютеризации
- •18.Становление информатики в России. Начальный период
- •19.Оригинальные отечественные серийные эвм (компьютеры)
- •19.1.Эвм Стрела
- •Элементная база
- •Программное обеспечение
- •Описание машины
- •Технико-эксплуатационные характеристики
- •Особенности эвм
- •19.2.Семейство эвм "м-20"
- •Структура эвм
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности машины
- •Об использовании эвм м-20
- •Описание машины
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности эвм
- •19.3.Семейство эвм "бэсм"
- •19.3.1.Бэсм-1
- •Структура эвм
- •19.3.2.Бэсм-2
- •Структура эвм
- •19.3.3.Бэсм-4
- •Структура эвм
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •19.4.Семейство эвм "Минск"
- •19.4.1.Минск-1
- •19.4.2.Минск-2
- •19.4.3.Минск -22
- •19.4.4.Минск-23
- •19.4.5.Минск-32
- •Описание машины
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности эвм
- •19.5.Семейство эвм "Урал"
- •19.5.1.Урал-1, Урал-2, Урал-3, Урал-4
- •Описание машины
- •Элементная база
- •Программное обеспечение
- •Основные эксплуатационно-технические данные
- •Особенности эвм
- •19.5.2.Урал-11, Урал-14, Урал-16
- •Описание машины
- •Элементная база
- •Программное обеспечение.
- •Основные эксплуатационно-технические данные машины “Урал-11”
- •Особенности эвм
- •19.6.Эвм "Весна" и "Снег"
- •19.7.Эвм бэсм-6
- •Описание машины
- •Элементная база
- •Программное обеспечение
- •Технико-эксплуатационные характеристики
- •Особенности машины
- •19.8.Многопроцессорные вычислительные комплексы "Эльбрус"
- •Описание машины.
- •Элементная база
- •Программное обеспечение
- •Типовые комплектации
- •Производительность
- •19.9.Управляющие эвм
- •20.Эволюция элементарной базы и поколения эвм
- •20.1.Базисные логические элементы
- •20.2.Элементы регистровой памяти
- •20.3.Элементы памяти на магнитных сердечниках.
- •20.4.Интегральные схемы
- •20.5.Поколения эвм
- •21.Американская система ibm-360
- •22.Семейство Ряд "ес эвм"
- •22.1.Хронология создания
- •22.2.Ес эвм. Крупнейший промах или всеобщее счастье?
- •23.Автоматизация программирования
- •23.1.От двоичных кодов к ассемблерам - языкам символьного кодирования
- •Ассемблеры
- •Программы - загрузчики
- •23.2.Языки программирования высокого уровня
- •23.3.Трансляция программ
- •24.Первые компьютеры Сарова
- •25.Начало компьютеризации Нижегородского госуниверситета
- •26.Они были первыми
- •26.1.Конрад Цузе
- •26.2.А лан Тьюринг
- •26.3.Джон Маулчи и Джон Эккерт
- •26.4.Джон фон Нейман
- •26.5.А ксель Берг
- •26.6.В иктор Глушков
- •26.7.Сергей Лебедев
- •26.8.Исаак Брук
- •26.9.Николай Матюхин
- •26.10.Михаил Карцев
- •26.11.Юрий Базилевский
- •26.12. Башир Рамеев
- •26.13.Георгий Лопато
- •26.14. Всеволод Бурцев
- •27.Приложения
- •27.1.Основные черты кибернетики
- •27.1.1.Общенаучное значение кибернетики
- •27.1.2.Электронные счетные машины и нервная система
- •27.1.3.Прикладное значение кибернетики
- •27.2."Сигнал" Игоря Полетаева
- •27.3.Хронология компьютеростроения
- •Литература
- •Оглавление
13.4.Рекурсивные функции
По мере совершенствования теории численных алгоритмов было выяснено, что любой нечисловой алгоритм можно свести к численному алгоритму. Говоря другими словами, любую алгоритмическую проблему можно свести к вычислению значений некоторой целочисленной функции. Сделать это можно следующим образом.
Включим все условия задачи, доступные для переработки конкретным алгоритмом Alg, в занумерованную неотрицательными числами последовательность:
A0,A1,…An,… (43)
Аналогично, записи возможных решений включим в занумерованную неотрицательными числами последовательность:
B0,B1,…,Bm,… (44)
Очевидно, что выполнение алгоритма Alg можно свести к вычислению значений некоторой целочисленной функции:
m = Falg(n) (45)
Теперь можно говорить, что вычислительный алгоритм Alg преобразует номер записи условий в номер записи решения.
Курт Гёдель предложил способ целочисленной нумерации любых последовательностей () и (), составленных как из цифр, так и из произвольных символов. В частности, любой нормальный алгоритм Маркова с помощью гёделизации может быть сведен к вычислению значений целочисленных функций.
Если алгоритм Alg записан в виде целочисленной функции (45), то решение прикладной задачи происходит следующим образом:
определяется гёделевский номер n исходных данных An;
вычисляется значение m функции (45);
по гёделевскому номеру m определяется набор результирующих данных Bm.
Следующая проблема, которую необходимо решить – к какому классу принадлежат функции вида () и можно ли вычислить любую такую функцию.
Функция вида y = (x1,x2,…,xn) называется целочисленной функцией, если как аргументы, так и сами функции могут принимать значения из множества {0,1,2,…}. Логические функции являются частным случаем целочисленных функций.
Элементарная целочисленная функция получается из неотрицательных натуральных чисел и переменных с помощью конечного числа сложений, арифметических вычитаний (под арифметическим вычитанием подразумевается абсолютная величина (|x-y|), умножений, арифметических делений ( под арифметическим делением понимается целая часть частного [a/b] при b 0) и построений сумм и произведений.
Вычислимость элементарных функций не вызывает сомнения, поскольку хорошо известны алгоритмы для выполнения всех действий, допустимых при построении элементарных функций.
В качестве исходного числа для построения элементарных функций можно взять число 1, ибо
0=|1-1|, 2=1+1, 3=(1+1)+1 и т.д.
Примеры.
(x)x+1, (y)12y, (a,b,c)ab+c, b2
=
min(x,1)
Из всех целочисленных элементарных функций быстрее всего растет произведение. Умножение есть итерация сложения. Возведение в степень, в свою очередь, есть итерация умножения:
an = aa…a ()
Эта функция является еще элементарной, так как она выражается через произведение. Растет эта функция с ростом a и n достаточно быстро. Построим еще более быстро растущую функцию, являющуюся итерацией возведения в степень:
(0,a)=a,
(1,a)=aa, (2,a)=
,…,
(n+1,a)=a(n,a) (46)
Эта функция растет чрезвычайно быстро. Можно доказать, что с помощью построения элементарных функций уже невозможно "угнаться" за ростом функции (n,a). Говоря другими словами, эта функция мажорирует все целочисленные элементарные функции. Таким образом, итерация возведения в степень позволяет получить неэлементарную функцию. Тем не менее, эта функция вычислима.
Пусть необходимо вычислять значение (n,a) при любых значениях n=n*, a=a*. Общую формулу для определения функции (n,a), при заданном значении a* аргумента a, можно записать в виде:
(n+1,a*) = (a*) (n,a*) (47)
Обозначим (a*)m =(m); (m) – целочисленная элементарная, всюду однозначная вычислимая функция. Алгоритм ее вычисления сводится к повторному m раз умножению на a*. Запись:
(n+1,a*) = ((n,a*)) (48)
связывает значение функции в следующей точке с ее значением в предыдущей точке. Достаточно задать начальное значение (0,a*) = a*, чтобы получить вычислительную процедуру, дающую последовательные значения:
(1,a*) = ((0,a*)) = (a*) (49)
(2,a*) = ((1,a*)) = ((a*))
…
Этот процесс следует продолжать до тех пор, пока не будет достигнуто значение (n*,a*).
Из предыдущего примера следует вывод, что класс целочисленных элементарных функций должен быть расширен.
Класс целочисленных элементарных функций расширяется за счет введения примитивно-рекурсивных функций. Различаются понятия примитивно-рекурсивной функции и описания примитивно-рекурсивной функции.
Описанием примитивно-рекурсивной функции (x1,x2,…,xn) называется такая последовательность функций 1,2,…k, что каждая функция из этой последовательности является или базисной или непосредственно зависящей от предыдущих функций последовательности, а последняя функция k есть .
Определению примитивно-рекурсивной функции может быть придана следующая форма. Фиксируется небольшое число чрезвычайно простых базисных целочисленных функций (1-3):
(x) = x+1 – функция следование;
(x1,x2,…,xn) = q – функция константа;
(x1,x2,…,xn) = xi – функция тождества.
Фиксируется также небольшое число операторов, переводящих вычислимые функции снова в вычислимые (4-6).
(x1,x2,…,xn) = (1((x1,x2,…,xn),2((x1,x2,…,xn),…, 1((x1,x2,…,xm)) – схема подстановки;
(0)=q; операторы определения по индукции.
(x+1)=(x,(x))
Примитивно-рекурсивные функции - такие функции, которые можно получить из базисных функци1 (1-3) в результате конечного числа применений операторов (4-5).
Нетрудно показать, что целочисленные элементарные функции являются частным случаем примитивно-рекурсивных функций.
Пример. Определим функцию (y,x) таким образом:
(0,x) = x;
(y+1,x) = (y,x)+1
Согласно этой схеме имеем:
(1,x) = x+1;
(2,x) = (1,x)+1 = x+2;
(3,x) = (2,x)+1 = x+3;
и вообще:
(y,x) = x+y
Примитивно-рекурсивные функции, в свою очередь, являются частным случаем частично-рекурсивных функций, которые, в свою очередь являются частным случаем общерекурсивных функций. При определении последних к операторам (4-6) добавляется оператор минимизации.
Подробное изложение теории рекурсивных функций выходит за рамки данного издания.
Резюме.
Рекурсивные функции вычислимы по определению.
Тезис Черча: если функция может быть представлена в виде частично рекурсивной функции – она вычислима.
[Айзерман, Л.А. Гусев и др.Гос. изд-во ф.м. л-ры, М.: 1960]