Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VDM-123.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.47 Mб
Скачать

Описание технологии программирования для машин Тьюринга

Весь процесс программирования разбивается на четыре этапа.

I Этап. Пусть задано некоторое преобразование записи на ленте и положения головки. Допустим, существуетмашина Тьюринга, осуществляющая это преобразование. Вначале составляется план осуществления данного преобразования. При этом желательно данное преобразование расчленить на более простые преобразования, т.е. такие, для которых либо мы уже ранее построили машину Тьюринга, либо ее легко можно построить.

Пример. Пусть k=2. Требуется построить машину Тьюринга, которая осуществляет сдвиг массива из единиц (,1, …) влево на ячеек (=1,2,…) (вне массива лента пустая). Величину сдвига можно задать путем специальной установки головки в начальный момент, например:

 



1 1 начальный момент

1 1 заключительный момент



На рисунке изображены записи на ленте и положение головки в начальный и заключительный моменты. Требуемое преобразование можно осуществить так:

  1. Отмечаем начальную ячейку путем замены в ней символа 0 на символ 1. Оператор для этого преобразования обозначим через Ф( ) - символ 0 заменяется на символ 1 и головка остается на ленте.

  2. Движемся вправо (оператор A1) до левой единицы массива.

  3. Обозначим через a’ и a’’ соответственно символ, обозреваемый в данный момент, и символ, расположенный непосредственно справа от a’. Здесь a’=1. Выясняем, является ли a’ последней единицей в массиве. Для этого вычисляем предикат p(a’, a’’), где .

В случае p=1:

  1. Стираем a’ (оператор O(a’)).

  2. Возвращаемся влево до ближайшей единицы (оператор A2).

  3. Приписываем справа от этой единицы еще одну единицу. Обозначим через Ф( ) соответствующее преобразование.

  4. Возвращаемся (оператор p0, p0 – предикат, p00) к A1.

В случае p=0:

  1. Массив состоит из одной единицы. Производим O(a’) – стирание единицы.

  2. Возвращаемся влево (оператор A2) до ближайшей единицы.

  3. Движемся влево (оператор L) через массив из единиц и останавливаемся над левой единицей.

II Этап. Переход от составленного плана преобразования к операторной схеме.

Продолжение примера. В нашем примере операторная схема имеет вид:

.

III Этап. Переход от операторной схемы к программе машины (с использованием последовательного подключения и итерации программ, исходя из программ, соответствующих отдельным операторам данной операторной схемы (кроме * и )).

Продолжение примера.

Ф( )

A1

p(a’,a’’)

O(a’)

A2

Ф( )

O(a’)

A2

L

q1

q2

q3

q4

q5

q6

q7

q8

q9

q10

q11

q12

q13

q14

q15

0

1S

0R

0L

0S

0S

0S

0L

1S

0S

0S

0L

0R

1

1S

1R

1S

1R

1L

1S

1S

0S

1S

1R

1S

0S

1S

1L

Программа 1 (П1).

IV Этап. Упрощение программы.

Продолжение примера.

q1

q3

q5

q8

q9

q10

q12

q13

q14

q15

0

1S

0R

0L

0S

0L

1S

0S

0L

0R

1

1R

1R

1L

0S

1S

1R

0S

1S

1L

Программа 2 (П2).

В П1 к команде 1S (1, q1) можно непосредственно попасть только из команды 1S (0, ) того же столбца. Поэтому первый столбец П1 может быть заменен на следующий:

0

1S

1

После этого можно отождествить состояния и , т.к. в ячейках (1, ) и (0, ) стоят пустые команды и в них машина никогда не попадает.

Аналогичные преобразования можно проделать со столбцами для q3 и q4.

В столбце q11 команда 0Sq2 никогда не работает, ее можно изъять, а 1Sq2 можно также изъять внеся необходимые изменения в столбец для q10.

В итоге мы приходим к программе 2 (П2), содержащей всего 10 состояний.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]