Допустим, я постоянно покупаю вино в одном магазине. Для того, чтобы получить бутылку вина я расплачиваюсь. Речь идет о соответствии между суммой денег и бутылкой вина определенной марки. Это соответствие также функциональным не является. Во-первых, это вино постоянно дорожает как в зависимости от инфляции так и по неизвестным мне причинам, так что когда я составляю домашний бюджет одному и тому же вину соответствует несколько сумм денег. Как-то раз под Новый год хозяин магазина сделал мне как постоянному покупателю подарок – он подарил мне бутылку. Я никогда с точностью не знаю на какую сумму мне рассчитывать, чтобы купить вино, сколько мне нужно выложить продавцу, чтобы получить бутылку.
В конце концов я выкладываю сумму денег в магазине за какой-либо товар, предполагая получить не только товар, но и сдачу. Моей сумме денег соответствует два значения– «товар» и «сдача». Но таким образом это действие не является функцией. Однако если спросить человека в здравом уме является ли это действие чем-то «единым», «одним», является ли для него естественным заплатить сумму денег за товар и получить товар и сдачу или он считает, что он совершает два разных действия, то, я полагаю, человек в здравом уме согласится, что это одно действие. Это действие я называю инструкцией и противопоставляю функции.
Допустим, я играю на рулетке. Предполагая выиграть, я делаю ставку. «Делать ставку» это инструкция, которая очевидно может иметь два значения – выигрыш и проигрыш. Любой здесь заявит: «да в данном случае мы не имеем дело с функцией».
Однако все эти соответствия могут быть формализованы, для них могут быть заданы алгоритмы.
Допустим
(z, y) = 2x
при z=2x, если x-четное,
y=2x, если x-нечетное.
Скажут, вы в данном случае задали две функции, для четных и нечетных чисел. Я этого не делал. Я просто записал одну инструкцию. Надеюсь, эта инструкция совершенно интуитивно ясна человеку в здравом уме, однако термина для нее в математике не существовало.
Фундаментальной идеей, с которой вы должны ознакомиться, является не идея функции, как функционального соотвествия, а машина Тюринга-Поста. Этот термин действительно имеет фундаментальное значение для математики, программирования, а, как я убежден, и общенаучный смысл. Я изложу его содержание.
Исходным материалом для нас будет служить такое соответствие как лента, разделенная на равные участки, называемые ячейками. Лента будет считаться конечной длины в каждый момент времени, неограниченно продолжаемой в обе стороны и направленной, так что у каждой ячейки есть соседняя справа и соседняя слева. Каждая ячейка ленты может находиться в различных состояниях и эти состояния сравнимы, так что можно однозначно решить, находятся ли две произвольные ячейки ленты в одинаковых состояниях или в разных. Одно из возможных состояний ячеек называется исходным. Ячейки, находящиеся в этом состоянии называются пустыми. Остальные состояния обозначаются буквами, занимающими соответствующие ячейки. Произвольная конечная совокупность букв называется алфавитом. Если говорят, что имеют алфавит состоящий из букв А, В то это значит, что рассматривается лента, ячейки которой могут находиться в состояниях, условно обозначаемых символами А, В. Последовательность ячеек, занятых некоторыми буквами, называется словом. Словом в данном алфавите называется каждое слово, все буквы которого принадлежат этому алфавиту. Если алфавит состоит из букв А, В, С, то слова А, ВАА, СА, ВВ, ССАВВ будут словами в этом алфавите. Длиной слова называется число входящих в него символов. Так длинами написанных выше слов являются числа 1, 3, 2, 2, 5. Два слова называются графически равными если они имеют одинаковые длины и на соответствующих местах в них находятся равные буквы. Операции применяемые к словам, есть инструкции. Мы говорим, что инструкция примененная к слову 1 переводит слово 1 в слово 2. Слово 1 и слово 2 – слова в одном алфавите.
На сегодняшний момент соответствием соответствий является соответствие: «рабочая лента машины Тюринга-Поста»:
рабочая лента машины Тюринга-Поста | |
---|---|
ячейка1 | содержимое ячейки (символ1) |
ячейка2 | содержимое ячейки (символ2) |
ячейка3 | содержимое ячейки (символ3) |
ячейка4 | содержимое ячейки (символ1) |
ячейка5 | содержимое ячейки (символ3) |
ячейка6 | содержимое ячейки (символ2) |
и т. д.
Рабочая лента бесконечна. О символы, которые могут записываться как содержание ячейки говорят, что они заданы на определенном алфавите.
Машина Тюринга-Поста– механическое устройство состоящее из следующих основных частей.
1) В машине имеется потенциально неограниченная память, разбитая на отдельные линейно-упорядоченные ячейки. В каждой ячейке может быть записан символ из некоторого конечного алфавита, или она может быть пустой. Считают, что в ячейке записан особый символ, называемый пустым. В каждый момент времени память, обычно называемая рабочей лентой машины, состоит из конечного числа ячеек, однако при необходимости к ней могут быть пристроены слева или справа новые ячейки с записанных в них пустым символом. Рабочая лента и информация, записанная в ней, представляются конечной цепочкой символов над словарем рабочей ленты.
2) Помимо рабочей ленты в машине Тюринга имеется еще и другое запоминающее устройство. Это регистр состояний – особая память, рассчитанная на хранение одного символа. Символ, который запоминается в регистре, выбирается из конечного множества, определяющего множество состояний машины.
3) В каждый момент времени машина Тюринга анализирует не всю информацию, хранящуюся на рабочей ленте, а содержимое лишь одной ячейки этой ленты. Для определения этой ячейки служит управляющая головка, которая всегда указывает на некоторую ячейку рабочей ленты.
Выполняя заданный алгоритм, машина Тюринга последовательно производит ряд элементарных действий, причем каждое такое действие выполняется за один рабочий такт машины. Элементарные действия можно разбить на следующие три группы:
1) Машина изменяет состояние в регистре (т. е. стирая символ, хранящийся в регистре, записывает в него новый символ) и содержимое ячейки, на которую указывает управляющая головка.
2) Машина изменяет состояние и продвигает управляющую головку на одну ячейку влево.
3) Машина изменяет состояние и продвигает управляющую головку на одну ячейку вправо.
В последних двух случаях может оказаться, что до такта управляющая головка указывала на самую левую или самую правую ячейку рабочей ленты. Если требуется произвести сдвиг влево (или, соответственно, вправо), то к рабочей ленте пристраивается новая ячейка с записанным в ней пустым символом.
Машина Тюринга может использоваться для вычисления инструкций, аргументы и значения которых представляются цепочками символов конечных алфавитов. При этом машина начинает работу в так называемой начальной ситуации, которая характеризуется следующим образом:
1) на рабочей ленте записан аргумент вычисляемой инструкции;
2) управляющая головка указывает на ячейку, в которой записан самый левый символ аргумента;
3) машина находится в некотором заранее выбранном состоянии, которое называется начальным.
Начиная работу в начальной ситуации, машина работает до тех пор, пока не окажется в некотором особом состоянии, называемом заключительным. Значением вычисляемой инструкции считается цепочка непустых символов, выписанных слева направо из рабочей ленты после окончания работы машины.
Игра на рулетке при ставке 10 рублей на цифру с выигрышем на третьей ставке и десятью ставками будет отражено на рабочей ленте машины Тюринга-Поста следующим образом:
Исходное состояние ленты: | 10 10 10 10 10 10 10 10 10 10 |
Результат: | 0 0 350 0 0 0 0 0 0 0 |