Логические теории алгоритмов
Рекурсивные функции
Для ученых, которых интересуют лишь факты существования или несуществования алгоритмов, а не сами алгоритмы, вовсе не обязательно изучать именно алгоритмы. Достаточно найти такие объекты, которые существуют или не существуют в точности тогда же, когда и алгоритмы. Считают, что такими объектами являются рекурсивные функции. Покажем, как могут функции быть связанными с алгоритмами.
Как известно, величину w называют функцией, а величины x1, х2, ..., хп — аргументами, или независимыми переменными, если известен закон, который для различных наборов конкретных значений величин x1, х2, ..., хп задает определенные значения величины w. При этом для каждого набора допускается одно-единственное значение функции. В частном случае функция может иметь одно независимое переменное (аргумент). Что за закон применяется для определения функции? Математика не накладывает никаких ограничений на него. Она допускает любой мыслимый закон. Но таким законом может быть некоторый алгоритм. В этом случае функцию называют вычислимой, так как имеется способ получения ее значений.
Рекурсивными функциями называют один частный класс вычислимых функций. Алгоритмы, являющиеся законами их задания, мы будем называть алгоритмами, сопутствующими рекурсивным функциям.
Напомним читателю, что, имея в виду некоторую функцию, нужно различать три стороны: 1) ее имя (обозначающую ее букву), 2) ее (функциональную) запись, имеющую вид w=f(x1, х2, . . ., хп), 3) ее значение. Буква f, присутствующая в записи функции, называется функциональным знаком (кроме f в качестве функционального знака можно использовать и другие символы). Значение функции, отвечающее конкретным значениям аргументов, иногда обозначают строкой символов, которая получается из правой части функциональной записи, если имена независимых переменных заменить их значениями. Например, для функции, имеющей функциональную запись, указанную выше в 2), ее значение, полученное при х1=1, х2=7,. .. . . ., хn = 105,можно обозначить f(1, 7, . . ., 105).
Построение четко выделенного класса вычислимых функций сопряжено с рядом трудностей; для достижения такой цели нужны некоторые упрощающие соглашения. Уже в гл. 2 мы говорили о возможности арифметизировать математику, т. е. выразить самые разные математические понятия с помощью целых неотрицательных чисел. Поэтому вполне естественно ограничиться случаем, в котором и независимые переменные, и функции могут принимать только целые неотрицательные значения.
Совокупность рекурсивных функций мы построим следующим образом. Непосредственно опишем наиболее простые из них и назовем базовыми. Сопутствующие этим функциям алгоритмы будут наиболее простыми, одношаговыми. Затем опишем три приема, называемых в теории рекурсивных функций операторами, с помощью которых исходя из рекурсивных функций можно получить новые функции; их, по определению, тоже будем считать рекурсивными. Эти операторы, по существу, будут алгоритмами; соединяя их, можно получать новые алгоритмы. Итак, строим класс рекурсивных функций.
Базовые функции бывают трех типов, а) Функции любого числа независимых переменных, тождественно равные нулю. Их будем обозначать φn, где п — число аргументов. Например, к числу таких функций относятся y=φi(x), w=φ3(x, у, z), w=φn(xl, x2,…, хп). Сопутствующий алгоритм для этих функций гласит: «Если функциональный знак имеет вид φn, то любой совокупности значений аргументов данной функции ставится в соответствие ее значение 0». Например, φ1(0)=0; φ3(3, 5, 7)=0; φn(7, 8, …, 125)=0.
Будем считать, что п может быть равно нулю, т. е. что возможна функция этого вида, не зависящая ни от одного аргумента. Эта функция равна 0. Обозначим ее φ0( )[13], или, для краткости, φ0. Аналогичную ситуацию мы видели в теории множеств: там было принято соглашение считать, что в частном случае множество может быть пустым (не содержать ни одного элемента).
б) Тождественные функции любого числа независимых переменных. Обозначим их ψn,i, где п — число аргументов, i — номер одного из аргументов (1≤i≤n). Сопутствующий этим функциям алгоритм гласит: «Если функциональный знак имеет вид ψn,i, то значением функций считать значение 1-го (считая в функциональной записи слева направо) независимого переменного». Например, для функций w= ψ3,4(x,y,z), v= ψ1,1(u) имеем соответственног ψ3,2(5,8,0)= =8, ψ1,1(6)=6. А вот запись ψ3,4(х, у, z) не имеет смысла; в ней n=3, i=4 и, следовательно, не выполнено условие 1≤i≤n. Для тождественных функций ни п, ни i не может быть равно нулю.
в) Функции следования (иначе — получения последователя) одного независимого переменного. Обозначим их с помощью функционального знака λ. Например, функциями следования будут λ(х), λ(w). Сопутствующий этим функциям алгоритм гласит: «Если функциональный знак имеет вид λ, то значением функции считать число, непосредственно следующее за числом, являющимся значением аргумента».
Заметим, что, создавая рекурсивные функции, опираясь на которые мы хотим обосновать математику, нельзя пользоваться нашими знаниями даже арифметических действий. Удобно на некоторое время вообразить, что математика нами полностью позабыта (во всяком случае, до тех пор, пока мы не построим класс рекурсивных функций). Операция «получения последователя», по-видимому, проще сложения. Дети сперва учатся считать, а потом уже овладевают сложением. Первобытные люди тоже сперва овладели счетом, и лишь много позже возникла идея сложения чисел. Это вполне естественно, так как в ту пору числа изображали как последовательности черточек (зарубок). Последователь получали, добавляя еще одну зарубку. Мы операцию получения последователя будем обозначать с помощью штриха, например 0' = 1, 1' =2, 10' = 11 и т. д. Таким образом, λ(х)=х'; λ(5)=6.
Считается, что базовые функции имеют значения только если даны значения их аргументов.
Оператор суперпозиции или подстановки. Слова суперпозиция и подстановка в данном случае имеют одно и то же значение. Этот оператор по функции F от п аргументов и по функциям f1, f2, …, fn строит новую функцию Ф такую, что для нее справедливо тождество
.
Алгоритм, сопутствующий этому оператору, гласит: «Значения функций f1, f2, …, fn принять за значения аргументов функции F и вычислить ее значение».
Например, если в качестве F принять λ(х), а в качестве f1 взять функцию λ(у), то с помощью операции суперпозиции получим функцию τ(y) = λ(λ(y)) = λ(y') = y"; в частности, τ(5)=7.
Введем знак «::=», который читается как «по определению есть». Оператор подстановки (суперпозиции) обозначим буквой S. Построение функции Ф из функций F и fi, с помощью оператора суперпозиции будем записывать так:
.
Например, для нашей функции τ(у)можно написать
.
Оператор рекурсии. Этот оператор по двум функциям, одна из которых имеет п — 1 независимых переменных, а другая, кроме указанных независимых переменных, имеет еще два (т. е. зависит от n+1 переменных), строит функцию п независимых переменных. Один из дополнительных аргументов войдет вместе с аргументами первой функции в число аргументов вновь получаемой функции, а другой играет вспомогательную роль при выполнении оператора рекурсии. Оператор рекурсии будем обозначать буквой R; его применение будем записывать в виде строки:
,
где f означает получаемую функцию, f1 — функцию п—1 независимых переменных, f2 — функцию n+1 независимых переменных, х — главный из дополнительных аргументов, у — вспомогательный аргумент.
При описании существа оператора рекурсии удобно не указывать аргументов первой из заданных функций ни в ее функциональной записи, ни в записях двух других функций, подразумевая эти аргументы. Тогда можно сказать, что оператор рекурсии задает функцию с помощью двух условий, в которые входят функции f1 и f2:
.
Алгоритм, сопутствующий оператору рекурсии, гласит: «Значением получаемой функции для нулевого значения главного дополнительного аргумента считать значение исходной функции п—1 аргументов; значением определяемой функции для каждого последующего значения главного аргумента считать значение второй из заданных функций при предыдущем значении главного аргумента и при значении вспомогательного аргумента, совпадающем с предыдущим значением определяемой функции».
Для примера рассмотрим случай, в котором в качестве f1 взята функция φ0, а в качестве f2 — функция ψ2,1(х, у) = х. Определяемую функцию обозначим пр(х). Для нее имеем
пр(x) ::=R [φ0, ψ2,1(х, у); х, (у)].
Эта функция определяется условиями
пр(0)=φ0, пр(i')= ψ2,1(i, пр(i)),
другими словами,
пр(0)=0, пр(i')=i.
Полученная нами функция называется функцией предшествования; ее значениями являются пр(0)=0, пр(1)=0, пр(2) = 1, пр(3)=2 и т. д. Поскольку рекурсивные функции могут принимать только целые неотрицательные значения, то предшественником числа 0 мы считаем не —1, а 0.
Оператор построения по первому нулю (его называют обычно оператором наименьшего числа, а в некоторых книгах — оператором минимизации; по мнению автора, наше название лучше отражает его существо). Этот оператор по заданной функции, зависящей от п+1аргументов, строит новую функцию от п аргументов. Исчезающий аргумент является вспомогательным и используется при выполнении оператора. Обозначают оператор построения по первому нулю буквой μ; его применение обозначают строкой вида
f::=μ[f1; (x)],
где х — исчезающий аргумент. С помощью оператора построения по первому нулю получают функцию f значения которой определяются при выполнении сопутствующего ей алгоритма, который гласит: «Придавать вспомогательному аргументу последовательные значения, начиная с 0, до тех пор, пока не окажется, что функция f1 стала (в первый раз) равной нулю. Полученное значение вспомогательного аргумента принять за значение определяемой функции, соответствующее тем значениям основных аргументов, при которых осуществлялся описанный процесс». Заметим, что базовые функции и функции, получаемые при помощи операторов подстановки и рекурсии, но без применения оператора построения по первому нулю, определены (имеют значения) для любых значений аргументов. Иначе обстоит дело с функциями, полученными при помощи оператора построения по первому нулю. Для некоторых комбинаций значений аргументов (даже для очень многих) они могут быть не определены, потому что исходная функция не принимает нулевых значений.
Для примера в качестве f1 возьмем базовую функцию ψ2,1(x, у). Пусть
ρ(х)::=μ[ψ2,1(x, у); (у)].
Полученная функция ρ(х) обладает следующими свойствами: ρ(0)=0, ρ(i) не существует при i≠0; проверим это для случая i=2. Будем иметь ψ2,1(2, 0)=2; ψ2,1(2, 1)=2, ψ2,1(2, 2)=2 и т. д. Ясно, что оператор построения по первому нулю не позволит нам получить ρ(2), так как функция ψ2,1(х, y) при x=2 ни для какого значения у не будет равной нулю.
Итак, рекурсивными называются базовые функции и любые функции, получаемые из них с помощью конечного числа операторов подстановки, рекурсии и построения по первому нулю. При этом функции, получаемые без использования оператора построения по первому нулю, называются примитивно рекурсивными. Это наиболее простые из рекурсивных функций. Примитивно рекурсивные функции, вместе с теми рекурсивными функциями, которые невозможно получить, не прибегая к оператору построения по первому нулю, но которые определены для любых значений аргументов, называют общерекурсивными. Оказывается, что существуют общерекурсивные функции, которые не примитивно рекурсивны. Рекурсивные функции, которые определены не для всех возможных значений аргументов, называют частично рекурсивными. Построенная нами выше функция р(х) является частично рекурсивной.
Теперь, когда класс рекурсивных функций построен, можно вспомнить всю математику, которую мы на некоторое время забыли, и посмотреть, нет ли среди хорошо знакомых нам функций рекурсивных. Оказывается есть — и немало. Например, функция у=х-1совпадает с базовой функцией λ(х) и, следовательно, рекурсивна.
С помощью оператора подстановки функции z+1 вместо z в функцию ψ3,3(х, у, z)мы можем получить функцию трех переменных f*(х, у, z)=z+1, а с помощью этой функции и базовой функции ψ1,1(x)определить новую функцию s(x, у) путем рекурсии:
s(x, у)::=R[ψ1,1(x), f*(x, y, z); y, (z)].
Эта функция удовлетворяет условиям
s(x, 0)=ψ1,1(x)=x, s(x, 1)=s(x, 0)+1=x+1,
s(x, 2)=s(x, 1)+1=x+2, …, s(x, y)=x+y,
т. е. является функцией w=x+y. Значит, и эта функция рекурсивна. Легко показать, что и функция w=x-y рекурсивна, и т. д. Оказывается, что многие простейшие известные нам функции рекурсивны.
Американский математик А. Черч высказал мнение о том, что понятием рекурсивной функции исчерпывается понятие вычислимой функции. Это мнение является гипотезой, подтверждающейся всем предыдущим опытом математиков. Она известна под названием тезиса Черча.
Тезис Черча. Какова бы ни была вычислимая неотрицательная целочисленная функция от неотрицательных целочисленных аргументов, существует тождественно равная ей рекурсивная функция.
Перенося тезис Черча на алгоритмы, сопутствующие рекурсивным функциям, мы можем высказать для них следующую гипотезу.
Основной тезис. Каков бы ни был алгоритм, перерабатывающий наборы целых неотрицательных чисел в целые неотрицательные числа, существует алгоритм, сопутствующий рекурсивной функции, который ему эквивалентен.
Интересную форму этой гипотезе, вернее интересное ее обобщение, сделали советские ученые А. Н. Колмогоров и В. А. Успенский. Предположим, что нам задан некоторый алгоритм в интуитивном смысле. На практике всегда удается найти способ нумерации его допустимых исходных данных, а также другой способ нумерации даваемых им результатов. Соответствие номеров исходных данных номерам результатов, устанавливаемое нашим алгоритмом (в интуитивном смысле), всегда совпадает с соответствием между значениями аргумента и значениями некоторой рекурсивной функции от одного независимого переменного. Это значит, что выполнение алгоритма в определенном смысле эквивалентно вычислению значения рекурсивной функции. Это значит, кроме того, что невозможность рекурсивной функции означает и невозможность алгоритма (так как для каждого алгоритма должна быть рекурсивная функция, а ее-то в данном случае и нет).
Заметим, что тезис Черча и следующие из него остальные гипотезы не имеют доказательства и принципиально не могут быть доказаны, так как в них речь идет об алгоритмах в интуитивном смысле, не являющихся математическими объектами.
Машины Тьюринга
Английский математик А. Тьюринг в 1937 г. опубликовал работу, в которой он уточнял понятие алгоритма, прибегая к воображаемой вычислительной машине, известной теперь под названием машины Тьюринга. Идея А. Тьюринга возникла еще до появления электронных вычислительных машин и потому, по-видимому, совершенно не зависит от них.
А. Тьюринг решил, что особого внимания заслуживает поведение исполнителя алгоритма, поэтому его нужно особенно точно и ясно описать. Из первой главы мы помним, что исполнитель должен действовать совершенно механически, не вкладывая в свою работу никакой инициативы.
Но что или кто может в наибольшей степени обладать таким свойством? Конечно, машина. Но ресурсы реальной машины ограничены, а при выполнении алгоритмов мы их считаем неограниченными. Поэтому машина должна быть воображаемой. При желании можно будет создать реальную модель машины Тьюринга, но эта модель уже будет располагать, конечно, только ограниченными ресурсами.
Итак, машина должна перерабатывать какие-то объекты в искомые результаты. Наиболее простыми объектами являются строки, составленные из символов. Символы, из которых образуют строки, называют в теории алгоритмов буквами. Значение этого слова отличается от общепринятого. Мы знаем, что только некоторые символы называют буквами. Именно символы, служащие для записи слов естественного языка (читатель знает русские буквы, латинские буквы, греческие буквы). Кроме таких символов, известны еще символы, применяемые для записи чисел; их называют цифрами. Наконец, читателю известны многие знаки, которые в обиходе не называют ни буквами, ни цифрами. Таковы знаки препинания, знаки математических действий и т. п. В теории алгоритмов любые неделимые и не изменяющие своего вида знаки называют буквами.
Строки букв в теории алгоритмов называют словами. Этот термин по своему смыслу тоже отличен от общепринятого. Например, строку букв «аАлбмв» не считают словом. В теории алгоритмов это — слово. Точно так же словом является строка букв (знаков) .6;+ М— !?
В жизни принято считать словами строчки букв, являющиеся словами языка, в частности, наделенные смыслом. В теории алгоритмов понятие слова не связывают с наличием в нем смысла. Это не значит, что слова должны быть бессмысленными. Они могут иметь смысл и даже обычно имеют какой-то смысл. Но термин «слово» означает лишь структуру объекта, построенного из символов-букв: это строка букв. Чем же обусловлен выбор слов в качестве объектов для применения к ним машин? Для их записи можно ограничиться наиболее простым техническим устройством — бумажной (или магнитной, или какой-нибудь другой) лентой. Ленту будем считать бесконечной в обе стороны и разбитой на клетки равной величины. В каждой клетке может быть записана в точности одна буква. Для удобства можно считать, что пустота клетки означает наличие в ней «пустой буквы». Обозначим пустую букву значком йо. Кроме этой буквы для данной машины должны быть допустимы еще какие-то (уже не пустые) буквы. Допустим, что таких разных между собой букв еще п. Обозначим их а1, а2, ..., ап.
Итак, мы имеем алфавит а0, а1, а2, ..., ап букв, которые могут быть записаны на ленте. Этот алфавит называют внешним алфавитом машины Тьюринга.
Для того чтобы передвигать ленту, машина Тьюринга снабжена простым лентопротяжным механизмом, который может либо быть неподвижным (при этом и лента неподвижна), либо перемещать ленту на одну клетку — вправо или влево.
Для того чтобы читать написанное на ленту или писать что-либо на ней, машина Тьюринга имеет головку чтения-записи. При этом считают, что головка может за один прием прочитать только одну букву, написанную в той клетке ленты, которая расположена под головкой. Чтение буквы не изменяет того, что написано в клетке. Головка записывать может за один прием тоже только одну букву в той клетке ленты, которая стоит под головкой. При этом она сперва стирает прежнюю букву, а затем на ее месте записывает новую (может быть, в частности, одинаковую с прежней).
Наконец, основной частью машины является логический блок. На этом блоке имеется кнопка, при нажиме которой он принимает исходное (для работы) состояние и начинает работать. Кнопка при этом остается утопленной до тех пор, пока машина не остановится сама. Тогда она «выскакивает», и машину можно использовать для новой работы. Одновременно с «выскакиванием» кнопки машина подает достаточно громкий и не очень продолжительный сигнал.
Работает логический блок следующим образом.
1) Он заставляет головку прочитать букву, которая стоит на ленте под нею.
2) В зависимости от прочитанной буквы и того состояния, в котором находится он сам, а) заставляет головку записать на ленте в той клетке, которая находится под головкой, некоторую букву; б) заставляет лентопротяжный механизм передвинуть ленту вправо, влево или остаться на месте, опять-таки в зависимости от прочитанной буквы и своего состояния; в) изменяет свое собственное состояние.
3) Если в результате действий, указанных в п. 2, буква, расположенная под головкой, положение ленты и состояние логического блока машины окажутся теми же, которые были непосредственно перед выполнением этих действий, машина останавливается. В остальных случаях логический блок возвращается к выполнению п. 1.
Логический блок способен находиться в каждый момент в- .одном из определенных состояний. Обозначим его возможные состояния символами р1, р2, ..., рт. Последовательность этих символов называют внутренним алфавитом (состояний) машины.
Введем еще обозначения d-1, d0, d1 соответственно для обозначения движения ленты влево, стояния ленты на месте и движения ленты вправо. Теперь можно описать поведение машины при выполнении логическим блоком п. 2 так: если головка читает букву ai и блок находится в состоянии pj, то поведение машины определяет запись axdypz, означающую: «записать на ленте вместо ai букву аx, совершить перемещение ленты dy, логическому блоку перейти в состояние pz».
Очевидно, различные машины Тьюринга отличаются друг от друга тем, как они реагируют на сочетания аi, рj -для разных i и j. Наиболее компактно можно представить все случаи сочетаний аi, pj и все виды реакций машины на них, если составить так называемую функциональную таблицу с двумя входами, в клетках которой стоят тройки символов вида axdypz.
Читатель, наверное, обратил внимание на то, что в машине Тьюринга можно различить две части: постоянную, которая одинакова для всех машин (устройство машины), и переменную, отличающую одну машину от другой (внутренний и внешний алфавиты и функциональная таблица).
Таблица 1
Функциональная таблица
p1 | p2 | … | pj | … | pm | |
a0 | ||||||
a1 | ||||||
. . . | ||||||
ai | axdypz | |||||
. . . | ||||||
an |
Если записать на ленте машины Тьюринга некоторое слово в алфавите А (внешнем), составленное из букв а1, а2, ..., ап, и установить начальную букву этого слова под читающей головкой, или оставить ленту пустой (т. е. установить пустое слово), а затем нажать пусковую кнопку, машина начнет действовать. При этом возможны два случая: 1) работа машины после конечного числа шагов прекратится с выдачей сигнала; 2) машина никогда не остановится; никакого результата она не даст. В первом случае говорят, что машина применима к исходному данному, во втором случае — что она к исходному данному неприменима.
Если машина применима к исходному данному, то она приводит к результату: а) пустому слову, если под головкой находится буква а0; б) слову из букв а1, а2, ..., ап, ограниченному с двух сторон пустыми буквами, если одна из букв (непустая) этого слова находится под головкой.
Соответствие, устанавливаемое машиной Тьюринга между теми исходными данными, к которым она применима, и результатами ее работы, представляет собой некоторую функцию (в математическом смысле).
Если для функции f(x) имеется машина, реализующая ее, то говорят, что f(x) вычислима по Тьюрингу. Функцию, для вычисления которой существует алгоритм, называют вычислимой. Тьюринг высказал предположение (мы будем его называть основным тезисом Тьюринга), что любая вычислимая функция вычислима по Тьюрингу. Другими словами: для любой вычислимой функции можно построить машину Тьюринга, реализующую ее.
Для примера опишем машину Тьюринга, которая вычисляет функцию λ(х)=х+1, уже знакомую нам из предыдущего параграфа (это одна из базисных рекурсивных функций). Эта функция имеет определенные значения только для целых неотрицательных значений х. Условимся значения х записывать на ленте машины в виде строки, состоящей из букв | (палочек). Кроме этих букв, нам нужна еще одна (пустая) буква. Обозначим ее знаком □ (на ленте она будет изображаться пустой клеткой). Число нуль будем изображать «пустой» строкой палочек.
Записав значение х (если оно не является нулем) в виде строки палочек на ленте машины и расположив ленту так, чтобы самая левая палочка была под головкой чтения-записи, пустим машину (нажимом кнопки).
Логический блок в начальный момент примет состояние р1 Нужно чтобы он, если головка прочитает букву |, заставил ее снова записать эту же букву, ленту — продвинуться влево, а сам перешел снова в первое состояние (т. е. сохранил его). Если же головка прочитает букву □, а логический блок при этом будет находиться в состоянии Pi, то он должен заставить головку написать |, ленту — остаться на месте, а сам перейти в состояние р2.
Находясь в этом состоянии, он при чтении головкой буквы | должен заставлять ее опять писать букву |, ленту — стоять на месте, а сам сохранять свое состояние р2. Мы видим, что при этом машина остановится и подаст сигнал. Какое бы число мы ни записали на ленте, машина Тьюринга, двигая ленту влево, просмотрит все палочки, потом продвинет ленту еще на один шаг, припишет к числу еще одну палочку и остановится. Функциональная таблица машины Тьюринга, вычисляющей значения функции λ(х), представлена в табл. 2.
Таблица 2
Описание работы машины Тьюринга, реализующей функцию λ(х)
p1 | p2 | |
□ | | d0p2 | |
| | | d-1p1 | | d0p2 |
В пустой клетке таблицы можно записать что угодно, потому что ее содержимое не влияет на работу машины. Из этой таблицы видно, что машина будет давать правильный результат и при х=0. При этом под головкой машины нужно установить клетку с буквой □ (а на ленте не должно быть ни одной буквы |). После пуска машины она запишет вместо этой буквы букву | и остановится.
Машины Тьюринга не только соответствуют некоторым алгоритмам специального вида, но и сами являются ими. Действительно, читатель уже понял, что машины Тьюринга — это воображаемые машины, существующие не физически, а «идеально», в наших мыслях, а точнее — в виде некоторых текстов на естественном языке. Сконструировать машину Тьюринга — значит составить ее описание, а не изготовить техническое устройство. Работа машины Тьюринга заключается в том, что человек выполняет определенные действия, руководствуясь описанием машины Тьюринга и ее функциональной таблицей, имея заданное начальное (подлежащее преобразованию) слово и получая на очередном шаге промежуточный результат.
Таким образом, машины Тьюринга — это тексты на некотором языке, а вовсе не машины в обычном смысле слова. Эти тексты имеют «естественный смысл», присущий им как текстам естественного языка, «смысл» описаний некоторых устройств и выполняемых ими действий. Но они имеют и второй «смысл» — математический, определяющий действия человека, якобы наблюдающего за работой машины Тьюринга, а в действительности выполняющего определяемый ее «конструкцией» процесс. При этом основной частью, определяющей действия исполнителя, следует считать функциональную таблицу, так как именно она определяет конкретный процесс преобразования исходного данного. Таким образом, машина Тьюринга представляет собой алгоритм, записью которого можно считать функциональную таблицу, а правилом (алгоритмом) выполнения — описание ее устройства. Приведенный выше пример показывает, что, в частности, можно строить машины Тьюринга для вычисления рекурсивных функций.
Основной тезис Тьюринга является аналогом уже знакомого нам тезиса Черча. Может показаться, что машины Тьюринга приводят к более широкому понятию вычислимости, чем рекурсивные функции. Но это не так, потому что буквы любого алфавита можно закодировать с помощью двух символов 1 и 2 (метод такого кодирования описан в § 2 гл. 5) и тем самым установить соответствие между преобразованиями слов, осуществляемыми машинами Тьюринга, и некоторыми неотрицательными целочисленными функциями неотрицательных целочисленных аргументов.