Введение

В информатике машина с произвольным доступом (RAM или RA-машина) — это модель вычислений, описывающая абстрактную машину из общего класса регистровых машин. RA-машина очень похожа на счетную машину, но обладает дополнительной возможностью «косвенной адресации» своих регистров. «Регистры» интуитивно эквивалентны основной памяти обычного компьютера, за исключением дополнительной возможности регистров хранить натуральные числа любого размера. Как и счетная машина, RA-машина содержит инструкции для выполнения в конечном состоянии машины (так называемая Гарвардская архитектура). Эквивалент универсальной машины Тьюринга, с программой и данными, хранящимися в регистрах, называется машиной с хранимой программой произвольного доступа или RASP-машиной. Это пример так называемой архитектуры фон Неймана и наиболее близка к общепринятому представлению о компьютере. Вместе с моделями машины Тьюринга и счетной машины, модели RA-машины и RASP-машины используются для анализа вычислительной сложности. Ван Эмде Боас (1990) объединяет эти три модели вместе с указательной машиной, называя их «последовательными машинами», чтобы отличить их от «параллельных машин с произвольным доступом».

Введение в модель

Концепция машины с произвольным доступом (RAM) начинается с самой простой модели – так называемой модели счетных машин. Однако два дополнения отличают её от счетной машины. Во-первых, машина дополняется удобством косвенной адресации; во-вторых, модель приближается к более традиционному компьютеру, основанному на аккумуляторе, с добавлением одного или нескольких вспомогательных (выделенных) регистров, наиболее распространенным из которых является "аккумулятор".

Ограниченная индиректность и примитивные рекурсивные функции

Если мы откажемся от подхода Минского, заключающегося в использовании одного огромного числа в одном регистре, и уточним, что наша модель машины будет "подобна компьютеру", нам придется столкнуться с проблемой косвенности, если мы хотим вычислять рекурсивные функции (также называемые μ-рекурсивными функциями) – как полные, так и частичные варианты. Наша более простая модель счетчика может выполнять "ограниченную" форму косвенности и, таким образом, вычислять подкласс примитивно рекурсивных функций, используя примитивно рекурсивный "оператор", называемый "определением по случаям" (определено в Kleene (1952) с. 229 и Boolos Burgess Jeffrey с. 74). Такая "ограниченная косвенность" – трудоемкий и утомительный процесс. "Определение по случаям" требует от машины определения/различения содержимого регистр-указателя путем многократных попыток сопоставить это содержимое с числом/именем, которое оператор случаев явно указывает. Таким образом, определение по случаям начинается, например, с нижнего граничного адреса и продолжается бесконечно к верхнему, пытаясь найти совпадение: равно ли число в регистре N нулю? Если нет, то равно ли оно единице? Двум? Трём? 65364? Если нет, то мы достигли последнего числа 65365, и оно должно быть тем самым, иначе у нас проблема! "Ограниченная" косвенность не позволит нам вычислять частичные рекурсивные функции – для этого нам нужна неограниченная косвенность, также известная как μ-оператор. Предположим, что мы смогли бы продолжить до числа 65367, и именно в этом регистре находилось то, что мы искали. Тогда мы могли бы успешно завершить вычисление! Но предположим, что в 65367 нет нужного нам значения. Как далеко нам следует продолжать поиск? Чтобы быть эквивалентной машине Тьюринга, счетчику необходимо либо использовать неудачный метод Минского-Гёделя с одним регистром, либо быть дополненной способностью исследовать концы своей цепочки регистров, при необходимости до бесконечности. (Невозможность найти что-либо "там" определяет, что означает сбой алгоритма и его неспособность завершиться; см. Kleene (1952) с. 316 и далее, глава XII "Частичные рекурсивные функции", в частности с. 323–325.) Подробнее об этом – в примере ниже.

Определенный против неограниченного

Определяющий факт, что любой счетчик без неограниченного регистра "адреса" должен указывать регистр "r" по имени, указывает на то, что модель требует конечности "r", хотя он и "неограничен" в том смысле, что модель не накладывает верхнего предела на количество регистров, необходимых для выполнения ее задач. Например, нам не требуется, чтобы r было меньше 83,617,563,821,029,283,746 или r было меньше 2^1,000,001 и т.д. Таким образом, наша модель может "расширять" число регистров, если это необходимо для выполнения определенного вычисления. Однако это означает, что любое число, до которого модель расширяется, должно быть конечным – оно должно индексироваться натуральным числом: ω не подходит. Мы можем обойти это ограничение, предоставив неограниченный регистр для хранения адреса регистра, который задает косвенный адрес.