Машина Тьюринга
                        
                            - В 1936 году Алан Тьюринг ввёл понятие машины Тьюринга для формализации понятия алгоритма
- Она представляет собой простейшую вычислительную машину с линейной памятью
Машина Тьюринга
                        Машина состоит из:
                        
                            - Бесконечной в обе стороны ленты, разделённой на ячейки, в каждой из которых может быть записан один символ некотрого алфавита
- Головки, которая может последовательно передвигаться по ячейкам ленты, читая и записывая символы
- Набора правил перехода, согласно которым действует головка
Графическое представление
                        
                             
                        
                    
                    
                        Принцип работы
                        
                            - Изначально на ленту помещены символы, представляющие входные данные
- Остальные ячейки при этом заполнены пустыми символами $\#$
- Головка располагается в ячейке, предшествующей первому символу входных данных
- По окончании работы на ленте остаются выходные данные и головка так же располагается перед ними
Принцип работы
                        
                            - Преобразование входных данных в выходные происходит по правилам перехода, которые, по сути, представляют программу для Машины
- Правила организуются следующим образом$$q_ia_j \rightarrow q_{i'}a_{j'}d_k,$$
- 
                                где:
                                
                                    - $q_i$ – текщуее состояние машины
- $a_j$ – символ, на котором стоит головка
 
Принцип работы
                        
                            - продолжение:
                                
                                    - $q_{i'}$ – новое состояние машины
- $a_{j'}$ – символ, на который заменяется текущий
- 
                                        $d_k$ – направление перемещения головки:
                                        
                                            - $L$ – шаг влево
- $R$ – шаг вправо
- $N$ – остаться на месте
 
 
Принцип работы
                        Таким образом, правило $q_ia_j \rightarrow q_{i'}a_{j'}d_k$ можно интерпретировать, как:
«Если машина находится в состоянии $q_i$ и головка в данный момент установлена на ячейке, содержащей символ $a_j$, нужно перейти в состояние $q_{i'}$, записать в текущую ячейку символ $a_{j'}$ и переместиться в направлении $d_k$»
                    
                    
                        Принцип работы
                        
                            - Машина может иметь любое конечное число состояний
- При этом выделяются, как минимум, два состояния, которые должны быть у каждой машины: $q_0$ и $q_Z$
- $q_0$ – начальное состояние машины, в котором она находится при запуске
- $q_Z$ – конечное состояние машины, при переходе в которое её работа прекращается
Пример $1$
                        
                            - Пусть есть задача: дано число в унарной системе счисления, необходимо увеличить значение этого числа на 1
- 
                                Представим правило перехода для машины Тьюринга, решающей эту задачу:
                                $$q_0\# \rightarrow q_Z1L$$
                            
- Правило гласит, что нужно записать $1$ в начальную позицию, сдвинуться на ячейку влево и завершить работу
Пример $2$
                        
                            - Представим набор правил перехода для решения аналогичной задачи, но с увеличением на $2$:$$
                            q_0\# \rightarrow q_11L\\
                            q_1\# \rightarrow q_Z1L\\
                            $$
Пример $3$
                        
                            - Представим набор правил перехода для решения аналогичной задачи, но с записью новой единицы справа:$$
                            q_0\# \rightarrow q_1\#R\\
                            q_11 \rightarrow q_11R\\
                            q_1\# \rightarrow q_21L\\
                            q_21 \rightarrow q_21L\\
                            q_2\# \rightarrow q_Z\#N
                            $$
Табличная запись
                        
                            - Можно представить эти правила в виде таблицы
                            
                                
                                    |  | $\#$ | $1$ | 
                                
                                    | $q_0$ | $q_1\#R$ | $-$ | 
                                
                                    | $q_1$ | $q_21L$ | $q_11R$ | 
                                
                                    | $q_2$ | $q_Z\#N$ | $q_21L$ | 
                            
                        
                    
                    
                        Табличная запись
                        
                            - Прочерк в таблице означает, что данная комбинация символа и состояния никогда не достигается
- Из того факта, что правила переходов удобно представлять в виде таблицы, можно понять, что количество правил переходов ограничено сверху количеством состояний, умноженным на количество символов ленточного алфавита
Граф переходов
                        
                             
                        
                    
                    
                        Формальное определение
                        
                            Машину Тьюринга $T$ можно определить как следующий кортеж:
                            $$T = (\Gamma, \Sigma, Q, Q_0, Q_Z, \delta),$$
                            где:
                            
                                - $\Gamma$ – ленточный алфавит
- $\Sigma$ – входной алфавит ($\Sigma \subseteq \Gamma$)
- $Q$ – множество состояний машины
Формальное определение
                        
                            - $Q_0$ и $Q_Z$ – множества начальных и конечных состояний машины соответственно
- 
                                $\delta$ – множество правил переходов, при этом:
                                $$\delta: (Q \setminus Q_Z) \times \Gamma \rightarrow Q \times \Gamma \times \{L, N, R\}$$
                            
- Стоит также отметить, что все множества, входящие в состав МТ, конечны
Свойства
                        Основное свойство машины Тьюринга выражено Тезисом Тьюринга:
                        Если для вычисления некоторой функции существует алгоритм, значения этой функции могут быть вычислены с помощью машины Тьюринга
                    
                    
                        Свойства
                        
                            - Таким образом, Тезис Тьюринга гласит, что любой алгоритм может быть запрограммирован на машине Тьюринга, это называется полнота по Тьюрингу
- В частности, алгоритм работы самой машины Тьюринга также может быть запрограммирован на машине Тьюринга, т.е. машина может моделировать сама себя
Применения
                        
                            - Чтобы доказать, что некоторая система (например, язык программирования) может выполнить любой существующий алгоритм, достаточно показать, что с помощью этой системы можно моделировать работу машины Тьюринга
- Такая система называется Тьюринг-полной
- Чтобы доказать, что не существует алгоритма, решающего какую-либо проблему, достаточно показать, что решение проблемы нельзя получить на машине Тьюринга
Примеры Тьюринг-полных систем
                        
                            - Все современные ЯП (SQL не входит в это понятие)
- Машина Поста
- Нормальные алгоритмы Маркова
- Игра «Жизнь»