Существует много вариантов счетной машины , среди них Hermes , Ershov , Péter , Minsky , Lambek , Shepherdson and Sturgis и Schönhage . Они описаны ниже.
Шепердсон и Стерджис (1963) отмечают, что «доказательство этой универсальности [цифровых компьютеров для машин Тьюринга] ... по-видимому, было впервые записано Гермесом, который показал в [7 — их номер ссылки], как идеализированный компьютер может быть запрограммирован для копирования поведения любой машины Тьюринга» , и: «Подход Капенгста интересен тем, что он дает прямое доказательство универсальности современных цифровых компьютеров, по крайней мере, когда они идеализированы до такой степени, что допускают бесконечное число регистров хранения, каждый из которых способен хранить произвольно длинные слова» . [1]
Единственные две арифметические инструкции:
Остальные операции представляют собой переносы из регистра в аккумулятор или из аккумулятора в регистр или тестовые переходы.
Статья Капенгста написана на немецком языке; в переводе Шепердсона и Стерджиса используются такие термины, как «мельница» и «заказы».
Машина содержит «мельницу» (аккумулятор). Капенгст обозначает свою мельницу/аккумулятор символом «бесконечность», но в следующем описании мы будем использовать «A». Она также содержит «регистр порядка» («порядок» как в «инструкции», а не как в «последовательности»). (Это использование пришло из описания отчета Беркса–Голдстайна–фон Неймана (1946) «...электронного вычислительного прибора».) Регистр порядка/инструкции — это регистр «0». И, хотя это не ясно из описания Шепердсона и Стерджиса, модель содержит «регистр расширения», обозначенный Капенгстом как «бесконечность-простое»; мы будем использовать «E».
Инструкции хранятся в регистрах:
Таким образом, эта модель фактически является машиной с произвольным доступом . В дальнейшем "[ r ]" указывает на "содержимое" регистра r и т. д.
Действие: | Описание | ||
---|---|---|---|
Д1: | С(г, А) | [ р ] → А, [ р ] → р | Копировать содержимое регистра r в аккумулятор A |
Д2: | Машина) | [ А ] → г, [ А ] → А | Копируем содержимое аккумулятора A в регистр r |
С1: | О(А) | 0 → А | Нулевой (чистый) аккумулятор А |
А1: | П(А) | [ А ] + 1 → А | Увеличить (прибавить 1) содержимое аккумулятора A |
Ф1: | Дж(А) [Э1] | ЕСЛИ [ A ] = 0 ТО перейти к «Выходу 1» | Переход, если содержимое аккумулятора A = 0 |
Г1: | Вкл(А) | ЕСЛИ [ A ] = [ r ] ТО 0 → < A > ИНАЧЕ 1 → A | Очистить содержимое A, если содержимое A = содержимому r, в противном случае "установить" A=1 |
Г2: | О'(А) | 1 → А | «Установить» содержимое A = 1 |
Шепердсон и Стерджис (1963) удаляют мельницу/аккумулятор A и сокращают инструкции Капенгста до "копирования" регистр-регистр, арифметической операции "инкремент" и "сравнения регистр-регистр". Обратите внимание, что нет декремента . Эту модель, почти дословно, можно найти у Мински (1967); см. больше в разделе ниже.
Действие: | Описание: | ||
---|---|---|---|
а: | П(А) | [ А ] + 1 → А | Увеличить (прибавить 1) содержимое аккумулятора A |
г. | C( rj , rk ) | [ р j ] → р k , [ р j ] → р j | Копировать содержимое регистра r j в регистр r k |
ж: | Дж(р) [Э1] | ЕСЛИ [ r ] = 0 ТО перейти к "Выходу 1" ИНАЧЕ следующая инструкция | Переход, если содержимое регистра r = 0 |
с: | E( rj , rk ) | ЕСЛИ [ r j ] = [ r k ] ТО 0 → E ИНАЧЕ 1 → E | Очистить содержимое регистра E, если содержимое r j = содержимому r k , в противном случае "установить" E=1 |
Шепердсон и Стерджис (1963) отмечают, что модель Эрсова допускает хранение программы в регистрах. Они утверждают, что модель Эрсова выглядит следующим образом:
Действие: | Описание: | ||
---|---|---|---|
г. | C( rj , rk ) | [ р j ] → р k , [ р j ] → р j | Копировать содержимое регистра r j в регистр r k |
д'. | C' ( rj , rk ) | [rj ] +1 → rk , [rj ] → rj | Копировать увеличенное содержимое регистра r j в регистр r k |
е. | Дж[Э1] | Перейти к «Выходу 1» | Безусловный переход к «Выходу №1» |
ж*: | J(r j , r k )[E1, E2] | ЕСЛИ [ r j ] ≤ [ r k ] ТО перейти к "Выходу 1" ИНАЧЕ перейти к "Выходу 2" | Перейти к выходу E1, если содержимое регистра r j меньше или равно содержимому r k , в противном случае перейти к E=2 |
Шепердсон и Стерджис (1963) отмечают, что "лечение" Петера (они не слишком конкретны здесь) имеет эквивалентность инструкциям, показанным в следующей таблице. Они комментируют эти инструкции конкретно, что:
Действие: | Описание: | ||
---|---|---|---|
с: | На) | 0 → [ н ] | Нулевой (чистый) регистр n |
г. | С(м,н) | [ м ] → н, [ м ] → [ м ] | Копировать содержимое регистра m в регистр n |
д'. | С'(м,н) | [ м ] + 1 → [ н ], [ м ] → [ м ] | Копировать увеличенное содержимое регистра m в регистр n |
е. | J(м, н)[Э1, Э2] | ЕСЛИ [m]=[n] перейти к E1 ИНАЧЕ перейти к E2 | Условный переход к E1, если содержимое m равно содержимому n, в противном случае переход к E2. |
Исследование проблем Эмиля Поста ( система тегов ) и 10-й проблемы Гильберта ( проблемы Гильберта , диофантовы уравнения ) привело Минского к следующему определению:
Его «Теорема Ia» утверждает, что любая частично рекурсивная функция представлена «программой, работающей с двумя целыми числами S1 и S2, используя инструкции Ij следующего вида (ср. Минский (1961) стр. 449):
Действие: | Описание: | ||
---|---|---|---|
а. | ДОБАВИТЬ (r, I j1 ) | [ r ] + 1 → r; перейти к инструкции I j1 . | Увеличить (прибавить 1) содержимое регистра r и перейти к инструкции I j1 . |
б. | SUB (r, I j1 ,I j2 ) | Если [ r ] ≤ 0 ТО перейти к инстр. I j2 ИНАЧЕ [ r ] -1 → r и перейти к инстр. I j1 | ЕСЛИ содержимое регистра r равно нулю, ТО перейти к инструкции I j2 ; ИНАЧЕ уменьшить (вычесть 1) содержимое регистра r и перейти к инструкции I j1 . |
Первая теорема является контекстом второй «Теоремы IIa», которая
Действие: | Описание: | ||
---|---|---|---|
а. | МУЛЬТ (К j , I j1 ) | [ r1 ]*K j → r1; перейти к инструкции I j1 . | Умножить содержимое регистра r1 на константу K j |
б. | DIV (К j , I j1 , I j2 ) | [ r1 ]/Kj = 0, то переходим к инструкции I j2, иначе переходим к инструкции I j1 . | Если при делении содержимого регистра 1 на константу K j нет остатка, то инстр. I j1, иначе инстр. I j2 |
Во второй форме машина использует числа Гёделя для обработки «целого числа S». Он утверждает, что первой машине/модели не нужно этого делать, если у нее есть 4 доступных регистра.
Если использовать контекст его модели, то «ведение счета» означает «прибавление последовательными приращениями» (бросание камешков) или «вычитание последовательными убавлениями»; перенос означает перемещение (а не копирование) содержимого из отверстия A в отверстие B, а сравнение чисел самоочевидно. Похоже, это смесь трех базовых моделей.
Физическая модель Мелзака представляет собой отверстия {X, Y, Z и т. д.} в земле вместе с неограниченным запасом гальки в специальном отверстии S (Сток или Запас, или и то, и другое? Мелзак не говорит).
Инструкция представляет собой одну «троичную операцию», которую он называет «XYZ»:
Из всех возможных операций некоторые не допускаются, как показано в таблице ниже:
Допустимый | Инструкция | Отверстие "X" | Отверстие "Y" | Отверстие "Z" | Значение инструкции |
---|---|---|---|---|---|
НЕТ | XXX | ||||
ХХУ | ([ X ] - [ X ])=0 → X | [ Y ] + [ X ] → Y | [ Я ] → Я | Все камешки X взяты из X и добавлены к Y. | |
XXS | ([ X ] - [ X ])=0 → X | [ Й ] → Й | [ Я ] → Я | Все камешки X взяты из X и помещены в сток/источник S | |
НЕТ | XYX | ||||
КСИИ | [ X ] - [ Y ] → X | [ Й ] + [ Й ] → Й | [ Я ] → Я | Количество камней Y, взятых из X и помещенных в Y, удваивает количество камней Y. | |
КСИС | |||||
НЕТ | XSX | ||||
НЕТ | XSY | ||||
НЕТ | XSS | ||||
XYZ | [ X ] - [ Y ] → X | [ Й ] → Й | [ Я ] + [ Я ] → Я | Количество камешков Y, взятых из X и добавленных к Z, | |
СЫЫ | [ X ] → X | [ Й ] + [ Й ] → Й | [ Я ] → Я | Количество камней Y, взятых из S и добавленных к Y, удваивает количество камней Y. | |
СИЗ | [ X ] → X | [ Й ] → Й | [ Я ] + [ Я ] → [ Я ] | Количество камней Y, взятых из S и добавленных к Z |
Некоторые наблюдения о модели Мелзака :
Оригинальная модель «абака» Ламбека (1962):
Ламбек ссылается на статью Мелзака. Он атомизирует единственную 3-параметрическую операцию Мелзака (на самом деле 4, если считать адреса инструкций) в 2-параметрический инкремент "X+" и 3-параметрический декремент "X-". Он также дает как неформальное, так и формальное определение "программы". Эта форма фактически идентична модели Мински (1961) и была принята Булосом, Берджесом и Джеффри (2007, стр. 45, Abacus Computability).
Действие: | Описание: | ||
---|---|---|---|
а. | X+ (р, I а ) | [ r ] + 1 → r; перейти к инструкции I a . | Увеличить (прибавить 1) содержимое регистра r |
б. | X- (р, I а , I б ) | Если [ r ] ≤ 0, перейти к инстр.I b, иначе [ r ]-1 → r и перейти к инстр.I a | Сначала проверьте на ноль, затем уменьшите (вычтите 1) содержимое регистра r |
Модель Абакуса Булоса, Берджесса и Джеффри : [3]
В различных изданиях, начиная с 1970 года, авторы используют модель «бесконечного счеты» Ламбека (1961). Эта серия статей Википедии использует их символику, например, «[ r ] +1 → r» «содержимое регистра, идентифицированного как число „r“, плюс 1 заменяет содержимое [помещается в] регистр с числом „r“».
Они используют название Ламбека «абак», но следуют модели «камешки в дырках» Мелзака, модифицированной ими до модели «камни в ящиках». Как и оригинальная модель абака Ламбека, их модель сохраняет использование Мински (1961) непоследовательных инструкций – в отличие от «обычного» последовательного выполнения инструкций по умолчанию, как у компьютеров, следующая инструкция I a содержится внутри инструкции.
Однако следует отметить, что BB и BBJ не используют переменную «X» в мнемонике с уточняющим параметром (как показано в версии Lambek) — то есть «X+» и «X-» — а вместо этого мнемоника инструкции указывает сами регистры, например «2+» или «3-»:
Действие: | Описание: | ||
---|---|---|---|
а1. | 1+ (Я а ) | [ r1 ] + 1 → r1 затем перейти к инструкции I a . | Увеличить (прибавить 1) содержимое регистра №1 |
б1. | 1- (Я а , Я б ) | Если [ r1 ] ≤ 0 ТО перейти к I b иначе [ r1 ] -1 → r1 и перейти к I a . | Перейти к инструкции I b , если содержимое регистра r1 равно нулю, ИНАЧЕ уменьшить (вычесть 1 из) содержимое регистра № 1 |
Шепердсон и Стерджис (1963) ссылаются на работу Мински (1961), представленную им в форме отчета лаборатории Линкольна Массачусетского технологического института :
В разделе 10 мы показываем, что теоремы (включая результаты Мински [21, их ссылка]) о вычислении частично рекурсивных функций с помощью одной или двух лент могут быть довольно легко получены из одной из наших промежуточных форм.
— Шепердсон и Стерджис (1963, стр. 218)
Их модель находится под сильным влиянием модели и духа Хао Вана (1957) и его B-машины Вана (см. также Машина Пост-Тьюринга ). Они «подводят итог, говоря»:
...мы попытались продвинуться на шаг дальше в «сближении» практических и теоретических аспектов вычислений, предложенном и начатом Ваном.
Неограниченная регистровая машина URM : [4] Это их «самая гибкая машина... состоит из счетной последовательности регистров, пронумерованных 1, 2, 3, ..., каждый из которых может хранить любое натуральное число... Каждая конкретная программа, однако, включает только конечное число этих регистров» (стр. 219). Другими словами, число регистров потенциально бесконечно, и «размер» каждого регистра бесконечен.
Они предлагают следующий набор инструкций [1] и следующие «Примечания»:
Модель УРМ: | Действие: | Описание: | |
---|---|---|---|
а. | П(н) | [ р ] + 1 → р | Увеличить (прибавить 1) содержимое регистра r |
б. | Д(н) | [ р ] - 1 → р | Уменьшить (вычесть 1 из) содержимое регистра r |
с: | На) | 0 → р | Нулевой (чистый) регистр r |
г. | С(м,н) | [rj ] → rk , [rj ] → rk , | Копировать содержимое регистра r j в регистр r k |
е. | Дж[Э1] | Перейти к «Выходу 1» | Безусловный переход к «Выходу №1» |
ж: | Дж(р) [Э1] | ЕСЛИ [ r j ] = 0 ТО перейти к "Выходу 1" ИНАЧЕ следующая инструкция | ЕСЛИ содержимое регистра r = 0, то перейти к инструкции «Выход 1», иначе далее инструкция |
Примечания.
Действительно, они показывают, как можно еще больше сократить этот набор до следующего (для бесконечного числа регистров, каждый из которых имеет бесконечный размер):
Уменьшенный УРМ: | Действие: | Описание: | |
---|---|---|---|
а1. | П(р) | [ р ] + 1 → р | Увеличить (прибавить 1) содержимое регистра r |
б1. | Д(н) | [ р ] - 1 → р | Уменьшить (вычесть 1 из) содержимое регистра r |
~ф1: | Дж(р) [Э1] | ЕСЛИ [ r ] ≠ 0 ТО перейти к «Выходу 1» | Если содержимое регистра m ≠ 0, ТО перейти к инструкции «Выход 1», ИНАЧЕ продолжить |
Машина с ограниченным регистром LRM : Здесь они ограничивают машину конечным числом регистров N, но также позволяют «вводить» или удалять больше регистров, если они пусты (ср. стр. 228). Они показывают, что инструкция удаления регистра не обязательно требует пустого регистра.
Однорегистровая машина SRM : Здесь они реализуют систему тегов Эмиля Поста и тем самым позволяют записывать только до конца строки и стирать с начала. Это показано на их рисунке 1 как лента с головкой чтения слева и головкой записи справа, и она может перемещать ленту только вправо. «A» — это их «слово» (стр. 229):
Они также предлагают модель в виде «стопки карт» с символами {0, 1} (стр. 232 и Приложение C, стр. 248):
В конечном счете, в задаче 11.7-1 Мински замечает, что многие базы вычислений могут быть сформированы из небольшого набора:
Ниже приведены определения различных инструкций, которые он рассматривает:
Действие: | Описание: | ||
---|---|---|---|
а. | [ 0 ] | 0 → р | Нулевой (чистый) регистр r |
б. | [ ' ] | [ р ] + 1 → р | Увеличить (прибавить 1 к) содержимое регистра r (апостроф ' означает «последователя») |
в. | [ - ] | ЕСЛИ [ r ] = 0 ТО перейти к инструкции z ИНАЧЕ следующая инструкция | Проверяет регистр r и переходит к инструкции z, если содержимое равно нулю; если нет, уменьшает (вычитает 1) содержимое регистра r |
г. | [ О- ] | Если [ r ] ≠ 0 ТО [ r ] -1 → r ИНАЧЕ следующая инструкция | ЕСЛИ содержимое регистра r не равно нулю, то уменьшить содержимое регистра r и перейти к z-й инструкции, иначе, если 0, то к следующей инструкции. |
е. | [ → ] | [ р j ] → р k , [ р j ] → р j | Копировать содержимое регистра r j в регистр r k |
ф. | [РПТ] | RPT a:[m,n]. Повтор не может работать в пределах своего собственного диапазона. | Выполнять до тех пор, пока содержимое регистра [ r ] не станет равным 0: Повторять инструкции m–n. Когда [ r ] = 0, перейти к следующей инструкции. |
г. | [ Ч ] | ОСТАНОВИТЬ | |
час | перейти(z) | Перейти к инструкции z | Безусловный переход к инструкции z |
я. | [ ≠ ] | Если [ r j ] ≠ [ r k ] ТО перейти к z-й инструкции ИНАЧЕ следующая инструкция | Условный переход: если содержимое регистра r j не равно содержимому регистра r k ТО перейти к инструкции z ИНАЧЕ следующая инструкция |
дж. | [РПТ]* | RPT a:[m,n]. Повтор может работать в пределах своего диапазона. | * Примечание: RPT должен быть в бесконечном регистре. |
Минский (1967) начинает с модели, состоящей из трех операций плюс HALT:
Он замечает, что мы можем обойтись без [ 0 ], если допустим, что определенный регистр, например, w уже «пустой» (Minsky (1967) стр. 206). Позже (стр. 255 и далее) он сжимает три { [ 0 ], [ ' ], [ - ] } в два { [ ' ], [ - ] }.
Но он признает, что модель становится проще, если добавить несколько [псевдо]-инструкций [ O- ] (объединенных [ 0 ] и [ - ]) и "go(n)". Он строит "go(n)" из регистра w, предварительно установленного в 0, так что [O-] ( w , (n)) является безусловным переходом.
В разделе 11.5 «Эквивалентность программных машин с общерекурсивными функциями» он вводит две новые подпрограммы:
Он продолжает показывать, как заменить набор "последователь-предшественник" { [ 0 ], [ ' ], [ - ] } на набор "последователь-равенство" { [ 0 ], [ ' ], [ ≠ ] }. А затем он определяет свой "REPEAT" [RPT] и показывает, что мы можем определить любую примитивную рекурсивную функцию с помощью набора "последователь-повтор" { [ 0 ], [ ' ], [RPT] } (где диапазон [RPT] не может включать себя. Если это так, мы получаем то, что называется оператором mu (см. также mu рекурсивные функции ) (стр. 213)):
Шёнхаге (1980) разработал свою вычислительную модель в контексте «новой» модели, которую он назвал моделью модификации машины хранения (SMM), его разновидностью указателя . Его разработка описала модель RAM ( машина с произвольным доступом ) с замечательным набором инструкций, не требующим никаких операндов вообще, за исключением, возможно, «условного перехода» (и даже его можно было достичь без операнда):
Интересно, как это сделал Шёнхаге. Он (i) разбивает обычный регистр «адрес:датум» на две части: «адрес» и «датум», и (ii) генерирует «адрес» в определенном регистре n, к которому инструкции конечного автомата (т. е. «машинный код») будут иметь доступ, и (iii) предоставляет регистр «аккумулятор» z , где должны происходить все арифметические операции.
В его конкретной модели RAM0 есть только две «арифметические операции» – «Z» для «установки содержимого регистра z в ноль» и «A» для «прибавления единицы к содержимому регистра z ». Единственный доступ к адресному регистру n осуществляется через инструкцию копирования из A в N, называемую «установка адреса n ». Чтобы сохранить «данные» в аккумуляторе z в заданном регистре, машина использует содержимое n для указания адреса регистра и регистра z для предоставления данных, которые должны быть отправлены в регистр.
Особенности: Первая особенность Schönhage RAM0 заключается в том, как он «загружает» что-либо в регистр z : регистр z сначала предоставляет адрес регистра, а затем, во-вторых, получает данные из регистра — форма косвенной «загрузки». Вторая особенность заключается в спецификации операции COMPARE. Это «переход, если регистр-аккумулятор z = ноль» (а не, например, «сравнить содержимое z с содержимым регистра, на который указывает n »). Очевидно, если тест не пройден, машина пропускает следующую инструкцию, которая всегда должна быть в форме «goto λ», где «λ» — адрес перехода. Инструкция — «сравнить содержимое z с нулем » отличается от модели Schonhage successor-RAM1 (или любой другой известной модели-преемника) более традиционной «сравнить содержимое регистра z с содержимым регистра a на равенство».
В первую очередь для справки — это модель ОЗУ, а не модель контрмашины — ниже приведен набор инструкций Schönhage RAM0:
Инструкция | Действие: | Описание: | |
---|---|---|---|
1 | З | 0 → z | Очистить регистр аккумулятора z |
2 | А | [ з ] + 1 → з | Увеличить содержимое регистра-аккумулятора z |
3 | Н | [ з ] → н, [ з ] → з | «Установить адрес n»: копировать содержимое аккумулятора z в адресный регистр n |
4 | Л | [ [ я ] ] → я | Косвенно копировать в аккумулятор z содержимое регистра, на который указывает аккумулятор z |
5 | С | [ я ] → [ н ] | Косвенно сохранить содержимое аккумулятора z в регистре, на который указывает содержимое адресного регистра n |
6 | С | Если [ z ] = 0, пропустить следующую инструкцию (которая должна быть инструкцией goto I λ ) | Если содержимое аккумулятора z = 0, ТО пропустить следующую инструкцию, иначе продолжить |
7 | перейти к I λ | Безусловная инструкция goto (переход к) I λ | Безусловная инструкция goto (переход к) I λ |
Опять же, приведенный выше набор инструкций предназначен для машины с произвольным доступом , ОЗУ – счетчиковой машины с косвенной адресацией; инструкция «N» позволяет осуществлять косвенное сохранение аккумулятора, а инструкция «L» позволяет осуществлять косвенную загрузку аккумулятора.
Несмотря на свою необычность, модель Шёнхаге показывает, как набор инструкций «регистр-регистр» или «чтение-модификация-запись» обычной счетной машины можно свести к простейшей форме с 0 параметрами.