Вычислимые по Тьюрингу функции 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вычислимые по Тьюрингу функции

Поиск

Применение МТ к словам

Задача 1: Дана МТ с внешним алфавитом А = {0, 1}, Q = {q0, q1} и программой d: q10→q20П; q20→q01; q11→q11П; q21→q21П. В какое слово переработает МТ слово a = 101 из СНП?

Решение. Изобразим работу МТ с помощью ленты:

0

1

0

q1 1

0

1)  начальная конфигурация: в состоянии q1 обозревается крайняя правая непустая ячейка, то есть ячейка, в которой записана правая крайняя 1 данного слова. Выполняется команда (3), которая начинается с пары q11. В состоянии q1 вижу символ 1, меняю символ 1 на символ 1, перехожу вправо на одну ячейку, меняю состояние на q1.

0

1

0

1

q1 0

2) вторая конфигурация: в состоянии q1 обозревается символ 0. Выполняется команда (1), которая начинается с пары q10. В состоянии q1 вижу 0, меняю символ 0 на символ 0, двигаюсь вправо на одну ячейку, перехожу в состояние q2.

0

1

0

1

0

q20

3) третья конфигурация: в состоянии q2 обозревается символ 0. Выполняется команда (2), которая начинается с пары q20. В состоянии q2 вижу символ 0, меняю 0 на символ 1, остаюсь на месте, меняю состояние на q0.

0

1

0

1

0

q01

4) заключительная конфигурация: то есть слово a = 101 переработалось в слово b = 10101.

Полученную последовательность конфигураций можно записать более коротким способом: 10q11→101q10→1010q20→1010q01. В этом способе пустые символы вне слова записываются только тогда, когда в них возникает потребность (когда машина выходит за пределы данного непустого слова). Этот способ записи короче предыдущего, но не удобен для проверки. Гораздо удобнее вариант, когда каждая следующая конфигурация записывается под предыдущей. Например, покажем решение задачи для слова a = 101011:

10101q11 «В состоянии q1 вижу 1, меняю 1 на 1, двигаюсь вправо, меняю состояние на q1»

101011q10 «В состоянии q1 вижу 0, меняю 0 на 0, двигаюсь вправо, меняю состояние на q2»

1010110q20 «В состоянии q2 вижу 0, меняю 0 на 1, остаюсь на месте, меняю состояние на q0»

1010110q01 – это заключительная конфигурация.

При записи каждой следующей конфигурации поступаем так: сначала записываем новый символ (на который меняется обозреваемый), затем символ, через который перешагиваем (при движении вправо – это тот символ, который мы изменяли), затем новое состояние и затем переписываем все оставшиеся символы (крайние пустые символы при этом можно не писать). При этом надо внимательно следить за тем, чтобы количество тех символов, которые не участвовали в работе на данном шаге, после выполнения шага не изменилось (не потерялись или не появились лишние символы).

Задача 2: МТ задана внешним алфавитом А = {0; 1; *}, Q = {q0, q1, q2, q3} и программой, которая может быть задана в виде таблицы:

q1

q2

q3

q1

q3

q1

q2

q2

q3

*

q00

q2

q3

то есть первая команда q10→q1, вторая команда q20→q3 и так далее.

В какие слова МТ переводит слова a1 = 11*11 и a2 = 11*1?

Решение. Запишем последовательность конфигураций при переработке первого слова:

11*1q11 «В состоянии q1 вижу 1, меняю 1 на 0, перехожу влево, меняю состояние на q2»

11* q210 «В состоянии q2 вижу 1, меняю 1 на 1, двигаюсь влево, меняю состояние на q2»

11q2*10 «В состоянии q2 вижу *, меняю * на *, двигаюсь влево, меняю состояние на q2»

1q21*10 «В состоянии q2 вижу 1, меняю 1 на 1, двигаюсь влево, меняю состояние на q2»

q211*10 «В состоянии q2 вижу 1, меняю 1 на 1, двигаюсь влево, меняю состояние на q2»

q2011*10 «В состоянии q2 вижу 0, меняю 0 на 1, двигаюсь вправо, меняю состояние на q3»

1q311*10 «В состоянии q3  вижу 1, меняю 1 на 1, двигаюсь вправо, меняю состояние на q3»

11q31*10 «В состоянии q3  вижу 1, меняю 1 на 1, двигаюсь вправо, меняю состояние на q3»

111q3*10 «В состоянии q3  вижу *, меняю * на *, двигаюсь вправо, меняю состояние на q3»

111*q310 «В состоянии q3  вижу 1, меняю 1 на 1, двигаюсь вправо, меняю состояние на q3»

111*1q30 «В состоянии q3  вижу 0, меняю 0 на 0, двигаюсь влево, меняю состояние на q1»

111*q11 «В состоянии q1 вижу 1, меняю 1 на 0, перехожу влево, меняю состояние на q2»

111q2*0 «В состоянии q2 вижу *, меняю * на *, двигаюсь влево, меняю состояние на q2»

11q21*0 «В состоянии q2 вижу 1, меняю 1 на 1, двигаюсь влево, меняю состояние на q2»

1q211*0 «В состоянии q2 вижу 1, меняю 1 на 1, двигаюсь влево, меняю состояние на q2»

q2111*0 «В состоянии q2 вижу 1, меняю 1 на 1, двигаюсь влево, меняю состояние на q2»

q20111*0 «В состоянии q2 вижу 0, меняю 0 на 1, двигаюсь вправо, меняю состояние на q3»

1q3111*0 «В состоянии q3  вижу 1, меняю 1 на 1, двигаюсь вправо, меняю состояние на q3»

11q311*0 «В состоянии q3  вижу 1, меняю 1 на 1, двигаюсь вправо, меняю состояние на q3»

111q31*0 «В состоянии q3  вижу 1, меняю 1 на 1, двигаюсь вправо, меняю состояние на q3»

1111q3*0 «В состоянии q3  вижу *, меняю * на *, двигаюсь вправо, меняю состояние на q3»

1111*q30 «В состоянии q3  вижу 0, меняю 0 на 0, двигаюсь влево, меняю состояние на q1»

1111q1* «В состоянии q1 вижу *, меняю * на 0, меняю состояние на q0  и останавливаюсь»

1111q00 – заключительная конфигурация.

Таким образом, слово a1 = 11*11 было преобразовано в слово b = 1111.

При переработке слов фразы в кавычках проговариваются, но не записываются. В следующем примере попробуйте по записанной конфигурации произнести требуемую фразу самостоятельно:

11*q11

11q2*0 (так как крайний пустой символ может не записываться, то в следующих конфигурациях писать его не будем)

1q21*

q211*

q2011*

1q311*

11q31*

111q3*

111*q30

111q1*

111q00

Таким образом, слово a2 = 11*1 переработалось в слово b = 111. Можно сделать предположение, что данная МТ выполняет сложение натуральных числе в единичной системе счисления. Убедитесь в этом, выполнив преобразования нескольких других слов.

Конструирование МТ

Сконструировать МТ – значит написать ее программу. В этом процессе 4 этапа:

1) сначала создается алгоритм вычисления значений функции;

2) алгоритм записывается на языке МТ;

3) записанная программа проверяется (в том числе на граничных значениях);

4) если не программа работает не для всех проверенных слов, то осуществляется модификация (доработка) программы.

Задача 3: Построить МТ, которая из п записанных подряд единиц оставляла бы на ленте (п – 2) единицы, также записанные подряд, если п ≥ 2, и работала бы вечно, если п = 0 или п = 1.

Решение. 1 этап. Для решения задачи достаточно, если МТ из СНП, двигаясь влево, сотрет две из записанных единиц и после этого остановится.

2 этап. Начнем решать задачу для п ≥ 2. Зададим внешний алфавит А = {0, 1}, и первоначальный алфавит внутренних состояний Q = {q0, q1}, который в процессе решения задачи может дополняться другими состояниями.

Начальная конфигурация . Сотрем первую обозреваемую 1 (заменим ее на 0), сдвинемся на одну ячейку влево и перейдем в новое состояние q2. Если мы не перейдем в новое состояние, то машина будет заменять единицы на нули до тех пор, пока единицы не кончатся. Соответствующая команда имеет вид: q11→q2

Получим следующую конфигурацию . Теперь машина должна стереть вторую единицу и остановиться. Запишем нужную команду: q21→q00. Полученная заключительная конфигурация имеет вид  и удовлетворяет условию задачи.

Теперь опишем случаи п = 0 и п = 1. Для случая п = 0 в состоянии q1 МТ обозревает ячейку, в которой записан 0. Следовательно, чтобы работать вечно, машина должна двигаться вправо или влево, оставаясь все время в состоянии q1 (так как п = 0, то на ленте записаны только пустые символы). Соответствующая команда имеет вид q10→q10П(Л).

Для случая п = 1 начальная конфигурация имеет вид 0q11. Тогда в состоянии q2 на следующем шаге работы программы машина будет обозревать ячейку, в которой находится 0. Так как теперь на ленте нет ни одного непустого символа (единственную 1 мы стерли на предыдущем шаге), то мы можем поступить одним из следующих способов: 1) перейти к состоянию q1 (как в случае с п = 0) или 2) оставаясь в состоянии q2, двигаться влево или вправо по ленте, ничего не меняя. То есть выбрать одну из следующих команд: q20→q20П; q20→q20Л; q20→q10П; q20→q1.

Теперь все составленные команды запишем в программу с помощью таблицы:

q1

q2

q1

q1

q2

q00

3 этап. Проверяем работу программы. В качестве проверочных слов возьмем: a1 = 11, a2 = 11111, a3 = 1 и a4 = 0.

Начальная конфигурация

1q11

111q11

q11

q10

1 шаг

q210

11q210

q200

0q10

2 шаг

q000

11q000

0q10

00q10

3 шаг

Таким образом, проверка показала, что при наименьшем числе (п = 2), при произвольно взятом числе (п = 5) и при крайних значениях работа построенной машины удовлетворяет условию задачи. Следовательно, считаем, что задача решена верно (пока не будет доказано обратное).

Функция называется вычислимой по Тьюрингу, если существует МТ, ее вычисляющая, то есть такая МТ, которая вычисляет ее значения для тех наборов значений аргументов, для которых функция определена, и работающая вечно, если функция для данного набора значений аргументов не определена.

Для того, чтобы определение стало до конца точным, необходимо выполнение следующих условий:

1) Считают, что речь идет о функциях (или частичных функциях, то есть не всюду определенных), заданных на множестве N и принимающих значения также из N.

2) Необходимо договориться о том, как записывать на ленте МТ значения х1, х2, … , хп аргументов функции f(х1, х2, … , хп), из какого положения начинать переработку исходного слова и в каком положении получать значения функции.

Договоримся поступать следующим образом:

Значения аргументов х1, х2, … , хп будем располагать на ленте в виде следующего слова: . Для  обозначим  и . Дополнительно полагаем:  – пустое слово. Так что на слова 10 = L, 11 = 1, 12 = 11, 13 = 111, ... будем смотреть как на «изображения» натуральных чисел 0, 1, 2, 3, ... соответственно. Таким образом, предыдущее слово a можно представить следующим образом: . Далее, начинать переработку данного слова будем из стандартного начального положения, т. е. из положения, при котором в состоянии q1, обозревается крайняя правая единица записанного слова. Если функция f(х1, х2, … , хп) определена на данном наборе значений аргументов, то в результате на ленте должно быть записано подряд f(х1, х2, … , хп) единиц; в противном случае машина должна работать бесконечно. При выполнении всех перечисленных условий будем говорить, что машина Тьюринга вычисляет данную функцию. Таким образом, сформулированное в начале пункта определение становится абсолютно строгим.

Обратимся к примерам. Нетрудно понять, что машина Тьюринга из задачи 1 по существу вычисляет функцию f(х) = х + 1, а машина Тьюринга из задачи 3 вычисляет функцию f(х) = х – 2.

Задача 4. Построим машину Тьюринга, вычисляющую функцию f(х) = х/2. Эта функция не всюду определена: областью ее определения является лишь множество всех четных чисел. Поэтому, учитывая определение, нужно сконструировать такую машину Тьюринга, которая при подаче на ее вход четного числа давала бы на выходе половину этого числа, а при подаче нечетного – работала бы неограниченно долго.

Сконструировать машину Тьюринга – значит написать (составить) ее программу. В этом процессе четыре этапа: сначала создается алгоритм вычисления значений функции, затем он записывается на языке машины Тьюринга (программируется); после составления программы происходит ее проверка и, если необходимо – модификация (улучшение) программы.

В качестве внешнего алфавита возьмем двухэлементное множество А = {0, 1}. В этом алфавите натуральное число х изображается словом 11... 1, состоящим из х единиц, которое на ленте машины Тьюринга записывается в виде х единиц, стоящих в ячейках подряд. Работа машины начинается из стандартного начального положения: 01... 1q110 (число единиц равно х).

Сделаем начало вычислительного процесса таким: машина обозревает ячейки, двигаясь справа налево, и каждую вторую единицу превращает в 0. Такое начало обеспечивается следующими командами:

(1): q11→q2;

(2): q21→q1;

(3): q20→q2.

Если число х единиц нечетно, то машина продолжит движение по ленте влево неограниченно, т. е. будет работать бесконечно. Если же число х единиц четно, то в результате выполнения команд создается конфигурация q20010101... 01010, в которой число единиц равно х/2. Остается сдвинуть единицы так, чтобы между ними не стояли нули. Для осуществления этой процедуры предлагается следующий алгоритм. Будем двигаться по ленте вправо, ничего на ней не меняя, до первой единицы и перейдем за единицу. Передвижение осуществляется с помощью следующих команд:

(4): q10→q30П;

(5): q30→q30П;

(6): q31→q41П.

В результате их выполнения получим конфигурацию 001q4010101 ... 010100.(*)

Заменим 0, перед которым остановились, на 1 и продвинемся вправо до ближайшего 0:

(7): q40→q51П;

(8): q51→q51П.

Получим конфигурацию 00111q50101... 010100, в которой правее обозреваемой ячейки записаны «пары» 01, ..., 01. Кроме того, на ленте одна единица записана лишняя. Продвинемся по ленте вправо до последней «пары» 01. Это можно сделать с помощью своеобразного цикла:

(9): q50→q60П;

(10): q61→q51П.

Получим конфигурацию 001110101 ...01010q600. Двигаться дальше вправо бессмысленно. Вернемся на две ячейки назад и заменим единицу из последней «пары» 01 на ноль:

(11): q60→q7;

(12): q70→q7;

(13): q71→q8.

Получим конфигурацию 001110101 ...01q800. Число единиц на ленте снова равно х/2. Продвинемся влево на одну ячейку с помощью команды

(14): q80→q9.

В результате чего получим конфигурацию 001110101 ...010 q910. Теперь уничтожим самую правую единицу и продвинемся по ленте влево до следующей единицы:

(15): q91→q10;

(16): q100→q10. Получим конфигурацию 001110101 ... 0 q10100 (**), в которой левее обозреваемой ячейки записана серия пар 10, 10, ..., 10 (если читать справа налево). Теперь на ленте недостает одной единицы, т. е. число единиц равно (х/2) - 1. Продвинемся по ленте влево до последней «пары» 10. Это можно сделать с помощью цикла

(17): q101→q11;

(18): q110→q10,

выполнив который, придем к следующей конфигурации: 001q11110101...0100. Вернемся вправо к ближайшему нулю и превратим его в единицу:

(19): q111→q12;

(20): q121→q12;

(21): q120→q13.

Получим конфигурацию 001111q13101 ... 0100, в которой число единиц снова равно х/2.

Если теперь перешагнем вправо по ленте через обозреваемую единицу и переведем машину в состояние q4 помощью команды

(22): q131→q4

то придем к следующей конфигурации: 0011111q401 ... 0100, которая по существу аналогична конфигурации (*). В результате программа зацикливается (становится циклической): снова ближайший 0 превращается в 1, а самая правая 1 – в 0, затем машина возвращается к самому левому нулю, оказываясь в начале следующего цикла, и т.д.

Как же завершается работа программы? В некоторый момент конфигурация будет иметь вид 00111... 1110q1010. Выполнив команды (17), (18), придем к конфигурации 00111... q11110100. Далее выполняются команды (19), (20), (21), что приводит к конфигурации: 00111... 111111q1300. Остается остановить машину. Это делается с помощью команды

(23): q130→q0.

Заключительная конфигурация имеет вид: 00111... 1111q0100. Запишем программу машины Тьюринга в табличной форме:

q1

q2

q3

q4

q5

q6

q7

q8

q9

q10

q11

q12

q13

0

q3

q2

q3

q5

q6

q7

q7

q9

 

q10

q10

q13

q0

1

q2

q1

q4

 

q5

q5

q8

 

q10

q11

q12

q12

q4

Проверим работу машины для слова a1 = 0110.

01q110

0q2110

q10010

0q3010

00q310

001q40

0011q50

00110q60

0011q70

001q710

00q810 и на этом шаге мы обнаруживаем, что ситуация не предусмотрена программой. На ленте записано число, в два раза меньше исходного и на следующем шаге машина должна закончить работу. Дополним программу машины командой q81→q01.

Предлагается самостоятельно проследить за работой этой машины Тьюринга, взяв в качестве исходных конкретные слова: 111, 1111, 111111, 1111111111.

Видим, что дальнейшая проверка показала отсутствие противоречий в работе программы, поэтому окончательно программа машины имеет вид:

q1

q2

q3

q4

q5

q6

q7

q8

q9

q10

q11

q12

q13

0

q3

q2

q3

q5

q6

q7

q7

q9

 

q10

q10

q13

q0

1

q2

q1

q4

 

q5

q5

q8

q01

q10

q11

q12

q12

q4

Тезис Тьюринга (основная гипотеза теории алгоритмов).Вернемся к интуитивному представлению об алгоритмах. Напомним, одно из свойств алгоритма заключается в том, что он представляет собой единый способ, позволяющий для каждой задачи из некоего бесконечного множества задач за конечное число шагов найти ее решение.

На понятие алгоритма можно взглянуть и с несколько иной точки зрения. Каждую задачу из бесконечного множества задач можно выразить (закодировать) некоторым словом некоторого алфавита, а решение задачи – каким-то другим словом того же алфавита. В результате получим функцию, заданную на некотором подмножестве множества всех слов выбранного алфавита и принимающую значения в множестве всех слов того же алфавита. Решить какую-либо задачу – значит найти значение этой функции на слове, кодирующем данную задачу. А иметь алгоритм для решения всех задач данного класса – значит иметь единый способ, позволяющий в конечное число шагов «вычислять» значения построенной функции для любых значений аргумента из ее области определения. Таким образом, алгоритмическая проблема – по существу, проблема о вычислении значений функции, заданной в некотором алфавите. Остается уточнить, что значит уметь вычислять значения функции. Это значит вычислять значения функции с помощью подходящей машины Тьюринга. Для каких же функций возможно их тьюрингово вычисление? Многочисленные исследования ученых, обширный опыт показали, что такой класс функций чрезвычайно широк. Каждая функция, для вычисления значений которой существует какой-нибудь алгоритм, оказывалась вычислимой посредством некоторой машины Тьюринга. Это дало повод Тьюрингу высказать следующую гипотезу, называемую основной гипотезой теории алгоритмов, или тезисом Тьюринга:

Для нахождения значений функции, заданной в некотором алфавите, тогда и только тогда существует какой-нибудь алгоритм, когда функция является вычислимой по Тьюрингу, т. е. когда она может вычисляться на подходящей машине Тьюринга.

Это означает, что строго математическое понятие вычислимой (по Тьюрингу) функции является по существу идеальной моделью взятого из опыта понятия алгоритма. Данный тезис есть не что иное, как аксиома, постулат, выдвигаемый нами, о взаимосвязях нашего опыта с той математической теорией, которую мы под этот опыт хотим подвести. Конечно же данный тезис в принципе не может быть доказан методами математики, потому что он не имеет внутриматематического характера (одна сторона в тезисе – понятие алгоритма – не является точным математическим понятием). Он выдвинут исходя из опыта, и именно опыт подтверждает его состоятельность. Точно так же, например, не могут быть доказаны и математические законы механики; они открыты Ньютоном и многократно подтверждены опытом.

Впрочем, не исключается принципиальная возможность того, что тезис Тьюринга будет опровергнут. Для этого должна быть указана функция, которая вычислима с помощью какого-нибудь алгоритма, но невычислима ни на какой машине Тьюринга. Но такая возможность представляется маловероятной (в этом одно из значений гипотезы): всякий алгоритм, который будет открыт, может быть реализован на машине Тьюринга.

Машины Тьюринга и современные электронно-вычислительные машины.Изучение машин Тьюринга и практика составления программ для них закладывают фундамент алгоритмического мышления, сущность которого состоит в том, что нужно уметь разделять тот или иной процесс вычисления или какой-либо другой деятельности на простые составляющие шаги. В машине Тьюринга расчленение (анализ) вычислительного процесса на простейшие операции доведено до предельной возможности: распознавание единичного рассмотренного вхождения символа, перемещение точки наблюдения данного ряда символов в соседнюю точку и изменение имеющейся в памяти информации. Конечно, такое мелкое дробление вычислительного процесса, реализуемого в машине Тьюринга, значительно его удлиняет. Но вместе с тем логическая структура процесса, расчлененного, образно выража­ясь, до атомарного состояния, значительно упрощается и предстает в некотором стандартном виде, весьма удобном для теоретических исследований. (Именно такое расчленение на простейшие составляющие вычислительного процесса на машине Тьюринга дает еще один косвенный аргумент в пользу тезиса Тьюринга, обсуждавшегося в предыдущем пункте: всякая функция, вычисляемая с помощью какого-либо алгоритма, может быть вычислена на машине Тьюринга, потому что каждый шаг данного алгоритма можно расчленить на еще более мелкие операции, которые реализуются в машине Тьюринга.) Таким образом, понятие машины Тьюринга есть теоретический инструмент анализа алгоритмического процесса, а значит, анализа существа алгоритмического мышления.

В современных ЭВМ алгоритмический процесс расчленен не на столь мелкие составляющие, как в машинах Тьюринга. Наоборот, создатели ЭВМ стремятся к известному укрупнению выполняемых машиной процедур (на этом пути, конечно, есть свои ограничения). Так, для выполнения операции сложения на машине Тьюринга составляется целая программа, а в современной ЭВМ такая операция является простейшей.

Далее, машина Тьюринга обладает бесконечной внешней памятью (неограниченная в обе стороны лента, разбитая на ячейки). Но ни в одной реально существующей машине бесконечной памяти быть не может. Это говорит о том, что машины Тьюринга отображают потенциальную возможность неограниченного увеличения объема памяти современных ЭВМ.

Наконец, можно провести более подробный сравнительный анализ работы современной ЭВМ и машины Тьюринга. В большинстве ЭВМ принята трехадресная система команд, обусловленная необходимостью выполнения бинарных операций, в которых участвует содержимое сразу трех ячеек памяти. Например, число из ячейки а умножается на число из ячейки b, и результат отправляется в ячейку с. Существуют ЭВМ двухадресные и одноадресные. Так, одноадресная ЭВМ работает следующим образом: вызывается (в сумматор) число из ячейки а; в сумматоре происходит, например, умножение этого числа на число из ячейки b, результат отправляется из сумматора в ячейку с. Машину Тьюринга можно считать одноадресной машиной, в которой система одноадресных команд упрощена еще больше: на каждом шаге работы машины команда предписывает замену лишь единственного знака, хранящегося в обозреваемой ячейке, а адрес обозреваемой ячейки при переходе к следующему такту может меняться лишь на единицу (обозрение соседней справа или слева ячейки ленты) или не меняться вовсе. Это удлиняет процесс, но в то же время резко унифицирует его, делает стандартным.

Подводя итоги, можно сказать, что современные ЭВМ есть некие реальные физические модели машин Тьюринга, огрубленные с точки зрения теории, но созданные в целях реализации конкретных вычислительных процессов. В свою очередь, понятие машины Тьюринга и теория таких машин есть теоретический фундамент и обоснование современных ЭВМ.



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 64; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.012 с.)