Учебные материалы АОИС часть 1 / part_1 / Теория / АОИС1
.pdfТема 6. АБСТРАКТНЫЕ ИНФОРМАЦИОННЫЕ МАШИНЫ
6.1Понятие абстрактной информационной машины
Абстрактной машиной в рамках данного курса будем называть математическую формализацию, которая моделирует правила выполнения программы (или, иначе, алгоритмы) для реальной вычислительной машины (компьютера).
Отметим так же то обстоятельство, что абстрактные машины позволяют адекватно моделировать различные подходы и стратегии вычислений.
Уточнив понятия об абстрактных машинах, перейдем к исследованию особенностей различных классов рассматриваемых формализаций, проиллюстрировав выделенные классы необходимыми примерами из математической теории и практики программирования.
Прежде всего, следует отметить то обстоятельство, что практически все без исключения абстрактные модели вычислительных машин оперируют понятием состояния, изменения которого и отражают ход выполнения программы.
При этом следует, во-первых, выделить ранние, "наивные" формализации на состояниях, которые не были практически поддержаны ни языками программирования, ни собственно компьютерами. К ранним абстрактным машинам можно отнести известные из истории математики машины Тьюринга и Поста. Первая абстрактная машина характеризовалась бесконечной лентой для хранения "инструкций", а также считывающей и записывающей головкой, передвигающейся по ней; вторая машина действовала подобно первой.
Несмотря на объективные трудности практической реализации, ранние абстрактные машины, безусловно, были весьма значимыми для развития компьютерных наук, т.к. предвосхитили появление и обозначили ряд этапов развития реальных компьютеров и языков программирования для них.
Машина Тьюринга – математическая абстракция, представляющая вычислительную машину общего вида. Была предложена Аланом Тьюрингом в 1936 году для формализации понятия алгоритма.
Машина Тьюринга является расширением модели конечного автомата и, согласно тезису Чѐрча — Тьюринга, способна имитировать (при наличии соответствующей программы) любую машину, действие которой заключается в переходе от одного дискретного состояния к другому.
В состав Машины Тьюринга входит бесконечная в обе стороны лента, разделѐнная на ячейки, и управляющее устройство с конечным числом состояний.
Управляющее устройство может перемещаться влево и вправо по ленте, читать и записывать в ячейки символы некоторого конечного алфавита. Выделяется особый пустой символ, заполняющий все клетки ленты, кроме тех из них (конечного числа), на которых записаны входные данные.
В управляющем устройстве содержится таблица переходов, которая представляет алгоритм, реализуемый данной Машиной Тьюринга. Каждое правило из таблицы предписывает машине, в зависимости от текущего состояния и наблюдаемого в текущей клетке символа, записать в эту клетку новый символ, перейти в новое состояние и переместиться на одну клетку влево или вправо. Некоторые состояния Машины Тьюринга могут быть помечены как терминальные, и переход в любое из них означает конец работы, остановку алгоритма.
Машина Тьюринга называется детерминированной, если каждой комбинации состояния и ленточного символа в таблице соответствует не более одного правила, и недетерминированной в противном случае.
Машина Тьюринга называется вероятностной, если она детерминированная и из любого состояния и значений на ленте, машина может совершить один из нескольких (можно считать, без ограничения общности – двух) возможных переходов, а выбор осуществляется вероятностным образом.
Вероятностная Машина Тьюринга похожа на недетерминированную машину Тьюринга, только вместо недетерминированного перехода машина выбирает один из вариантов с некоторой вероятностью.
Тезис Чѐрча фундаментальное утверждение для многих областей науки, таких, как теория вычислимости, информатика, теоретическая кибернетика и др. Это утверждение было высказано Алонзо Чѐрчем и Аланом Тьюрингом в середине 1930-х годов.
В самой общей форме оно гласит, что любая интуитивно вычислимая функция является частично вычислимой, или, эквивалентно, может быть вычислена с помощью некоторой машины Тьюринга.
Тезис Чѐрча-Тьюринга невозможно строго доказать или опровергнуть, поскольку он устанавливает «равенство» между строго формализованным понятием частично вычислимой функции и неформальным понятием «интуитивно вычислимой функции».
Физический тезис Чѐрча-Тьюринга гласит: Любая функция, которая может быть вычислена физическим устройством, может быть вычислена машиной Тьюринга.
Машина Поста - абстрактная вычислительная машина, предложенная Эмилем Л. Постом (Emil L. Post), которая отличается от машины Тьюринга большей простотой. Обе машины эквивалентны и были созданы для уточнения понятия алгоритм. Прежде всего надо сказать, что машина Поста не есть реально существующее, сделанное кем-то устройство. Машина Поста, как и ее близкий родственник машина Тьюринга, представляет собой мысленную конструкцию, хотя устройство, позволяющее моделировать работу машины Поста в случае небольших программ и небольших объемов вычислений, было изготовлено в 1970 году в Симферопольском государственном университете. Однако для нас не будет существенным факт,
что машины Поста на самом деле нет. Напротив, мы будем предполагать ее как бы "существующей".
Машина Поста состоит из ленты и каретки (называемой также считывающей и записывающей головкой). Лента бесконечна и разделена на секции одинакового размера. Порядок, в котором расположены секции ленты, подобен порядку, в котором расположены все целые числа. Поэтому естественно ввести на ленте "целочисленную систему координат", занумеровав секции числами ..., -3 , -2 , -1 , 0 , 1 , 2 , 3,...
В каждой секции ленты может быть либо ничего не записано (такая секция называется пустой), либо стоять метка "V" (тогда секция называется отмеченной).
Информация о том, какие секции пустые, а какие отмеченные, образует состояние ленты. Иными словами, состояние ленты - это распределение меток по ее секциям. На точном математическом языке состояние ленты - это функция, которая каждому числу (номеру секции) ставит в соответствие либо метку, либо "пусто". Состояние ленты, в процессе работы, может меняться.
Каретка может передвигаться вдоль ленты влево и вправо. Когда она неподвижна, она стоит против ровно одной секции ленты; говорят, что каретка обозревает эту секцию, или держит ее в поле зрения. Информация о том, какие секции пустые, а какие отмеченные и где стоит каретка, образуют состояние машины Поста.
Таким образом, состояние машины Поста слагается из состояния ленты и указания номера той секции, которую обозревает каретка.
За единицу времени, которая называется шагом, каретка может сдвинуться на одну секцию влево или вправо. Кроме того, каретка может поставить (напечатать) или уничтожить (стереть) метку в той секции, против которой она стоит, а также распознать, стоит или нет метка в обозреваемой ею секции.
Работа машины Поста состоит в том, что каретка передвигается вдоль ленты и печатает или стирает метки. Эта работа происходит по инструкции определенного вида, называемого программой. Для машины Поста возможно составление различных программ из набора команд, но эти команды строго определены. Командой машины Поста называется выражение, имеющее один из следующих шести видов:
1)команда движения вправо: m . => n
2)команда движения влево: m . <= n
3) |
команда печати метки: |
m. p n |
4)команда стирания метки: m. s n
5) |
команда передачи: |
m. ? n1,n2 |
6) |
команда остановки: |
m. stop |
Число m, стоящее в начале команды, называется номером команды, а число n, стоящее после команды (а у команды передачи управления n1и n2), называется отсылкой. У команды остановки отсылка отсутствует.
Программой машины Поста называется конечный непустой (т.е. содержащий хотя бы одну команду) список команд машины Поста, обладающий следующими двумя свойствами.
1. На первом месте в этом списке стоит команда с номером 1, на втором месте (если оно есть) - команда с номером 2 и т.д.; вообще на k-м месте стоит команда с номером k.
2. Отсылка любой из команд списка совпадает с номером некоторой (другой или той же самой) команды списка (более точно: для каждой отсылки каждой команды списка найдется в списке такая команда, номер которой равен рассматриваемой отсылке).
Чтобы машина Поста работала, надо задать некоторую программу и некоторое состояние машины, т.е. как-то расставить метки по секциям ленты (в частности, можно все секции оставить пустыми) и поставить каретку против одной из секций.
Работа машины на основании заданной программы происходит следующим образом. Машина приводится в начальное состояние и приступает к выполнению первой команды программы. Каждая команда выполняется за один шаг, а переход от выполнения одной команды к выполнению другой происходит по следующему правилу: пусть на k-м шаге выполнялась команда с номером m, тогда,
1)если эта команда имеет единственную отсылку n, то на (k+1)-м шаге выполняется команда с номером n;
2)если эта команда имеет две отсылки n1 и n2, то на (k+1)-м шаге выполняется одна из двух команд - с номером n1 или с номером n2;
3)если же выполняющаяся на k-м шаге команда вовсе не имеет отсылки, то на (k+1)-м шаге и на всех последующих шагах не выполняется никакая команда - машина останавливается.
Выполнение команды движения вправо состоит в том, что каретка сдвигается на одну секцию вправо.
Выполнение команды движения влево состоит в том, что каретка сдвигается на одну секцию влево.
Выполнение команды печати метки состоит в том, что каретка ставит метку на обозреваемой секции. Выполнение этой команды возможно лишь в том случае, если обозреваемая перед началом выполнения команды секция пуста. Если же на обозреваемой секции уже стоит метка, то команда считается невыполнимой.
Выполнение команды стирания метки состоит в том, что каретка уничтожает (стирает) метку в обозреваемой секции. Выполнение этой команды возможно лишь в том случае, если обозреваемая секция отмечена (в ней стоит метка). Если же на обозреваемой секции нет метки, команда считается невыполнимой.
Выполнение команды передачи управления с отсылками n1 и n2 никак не изменяет состояние машины: ни одна из меток не уничтожается и не ставится, и каретка также остается неподвижной (машина делает "шаг на месте"). Однако если секция, обозреваемая перед началом выполнения
команды, была отмечена, то следующей должна выполняться команда с номером n1. Если же эта секция была пустая, то следующая должна выполняться команда с номером n2 (роль команды передачи управления сводится, следовательно, к тому, что каретка во время выполнения этой команды как бы "распознает", стоит ли перед ней метка).
Выполнение команды остановки тоже никак не меняет состояния машины и состоит в том, что машина останавливается.
Если теперь, задав программу и какое-либо начальное состояние, пустить машину в ход, то осуществится один из следующих трех вариантов.
1.В ходе выполнения программы машина дойдет до выполнения невыполнимой команды (печать метки в непустой секции или стирание метки уже в пустом месте). Выполнение программы тогда прекращается, машина останавливаетсяпроисходит безрезультативная остановка (аварийная остановка).
2.В ходе выполнения программы машина дойдет до выполнения команды остановки. Программа в этом случае считается выполненной, машина останавливается - происходит результативная остановка (нормальное завершение).
3.В ходе выполнения программы машина не дойдет до выполнения ни одной из команд, указанных в первых двух вариантах. Выполнение
программы при этом никогда не прекращается, машина никогда не останавливается - процесс работы машины происходит бесконечно (зацикливание). При зацикливании и аварийном завершении не получаем никаких результатов. При нормальном завершении получаем результаты, которые могут быть правильными или неправильными. Правильные результаты возможны при правильно составленном алгоритме и соответствующих входных данных.
В качестве примера составим программу для следующей задачи. Необходимо сложить два натуральных числа, находящихся на произвольном расстоянии. Начальное положение головки- где-то над первым числом.
1. |
<= 2 |
Поиск начала первого числа: сдвигаемся влево |
|
2. |
? |
3,1 |
до тех пор, пока не встретим не отмеченную ячейку. |
3. |
=> 4 |
Сдвинуться вправо на одну метку и |
|
4. |
s |
5 |
и удалить ее. |
5. |
=> 6 |
Поиск конца первого числа: сдвиг вправо |
|
6. |
? |
7,5 |
пока головка не встанет на неотмеченную ячейку и |
7. |
p |
8 |
ставим ее |
8.=> 9 Проверить заполнен ли промежуток между числами
9.? 1,10 если промежуток не заполнился, то переход на начало.
10. stop Конец программы
Очевидно, что использование в Машине Поста нескольких лент и (или) головок позволило бы избежать многочисленных перемещений головки по ленте и перезаписи чисел, существенно упростив программирование, однако эти ограничения на устройство Машины Поста никак не ограничивают возможности вычислений в принципе.