Поскольку мы хотели бы иметь возможность вводить в устройство и числовые данные, то нам потребуется некий способ описания обычных чисел (под которыми я здесь имею в виду целые неотрицательные числа 0, 1, 2, 3, 4….) как части входной информации. Для представления числа
1 -> 1,
2 -> 11,
3 -> 111,
4 -> 1111,
5 -> 11111 и т. д.
Эта примитивная схема нумерации называется (хотя и довольно нелогично)
0
0 -> 0 0R0
1 -> 1 1L1
0 -> 10 1R1
1 -> 1 1L10
0 ->1010 0R10
1 -> 11 0R11
0 -> 100 0R11
1 -> 11 1R100
0 -> 100 0R100
1 -> 101 0R101
0 -> 111 0L101
1 -> 110 1L110
0 -> 110 0L110
1 -> 1 1L111
0 -> 111 0L111
1 -> 1000 1L1000
0 -> 1001 0L1000
1 -> 1000 1L1001
0 -> 10 0R1001
1 -> 1 1L1010
0 -> 0 0.STOP1010
1 -> 1010 1RОднако я бы порекомендовал такому читателю начать не с этого упражнения, а с чего-нибудь гораздо более простого, например, с машины Тьюринга
UN + 1, которая просто прибавляет единицу к числу в унарном представлении:0
0 -> 0 0R0
1 -> 1 1R1
0 -> 0 1.STOP11 -> 1
1RЧтобы убедиться в том, что
UN +1на самом деле производит такую операцию, давайте мысленно применим ее, скажем, к ленте вида…00000111100000…,
соответствующей числу четыре. Мы будем полагать, что наше устройство сначала находится где-то слева от последовательности единиц. Находясь в исходном состоянии
0, оно считывает 0, в соответствии с первой инструкцией сохраняет его неизмененным, после чего перемещается на шаг вправо, оставаясь во внутреннем состоянии 0. Оно продолжает последовательно передвигаться вправо до тех пор, пока не встретит первую единицу. После этого вступает в силу вторая инструкция: устройство оставляет единицу как есть и сдвигается на шаг вправо, но уже в состоянии 1. В соответствии с четвертой инструкцией оно сохраняет внутреннее состояние 1, равно как и все считываемые единицы, двигаясь вправо до встречи с первым после набора единиц нулем. Тогда начинает действовать третья инструкция, согласно которой устройство заменяет этот нуль на 1, перемещается на один шаг вправо (вспомним, что командаВ качестве несколько более трудного упражнения можно проверить, что машина
UN х 2, определяемая набором инструкций0
0 -> 0 0R0
1 -> 1 0R1
0 -> 10 1L1
1 -> 1 1R10
0 -> 11 0R10
1 -> 100 0R11
0 -> 0 1.STOP11
1 -> 11 1R100
0 -> 101 1L100
1 -> 100 1R101
0 -> 10 1L101
1 -> 101 1LЧтобы понять, как работает машина
EUC, нужно явным образом задать пару подходящих чисел, скажем, 6и 8. Как и ранее, изначально машина находится во внутреннем состоянии 0и расположена слева, а лента выглядит следующим образом:… 0000011111101111111100000….
После того, как машина Тьюринга после большого числа шагов останавливается, мы получаем ленту с записью вида
…000011000000000000…,
при этом машина располагается справа от ненулевых цифр. Таким образом, найденный наибольший общий делитель равен
2(как и должно быть).