- •1.Перечислите и поясните основные этапы полного построения алгоритмов.
- •6. Программная реализация алгоритма.
- •4.Сформулируйте основные определения абстрактного алфавита (алфавит, слово алфавита, расширение алфавита, алфавитный оператор).
- •7.Дайте определение алгоритма, его особенности.
- •13.Свойства и виды алгоритмов и соотношение между ними.
- •14.Интерпретации и модели.
- •15.Семантическая и формальная непротиворечивость.
- •1) «Условие – действие», т.Е. Если построенные объекты удовлетворяют некоторым условиям, то для построений нового объекта нужно выполнить такое-то действие;
- •Первая теорема о неполноте
- •22. Интуитивное понятие алгоритма. Требования к алгоритмам.
- •23. Формализация понятия алгоритма и универсальные алгоритмические модели.
- •24.Машина Тьюринга - основные определения. Понятие вычислимости на машине Тьюринга.
- •25.Операции над машинами Тьюринга. Универсальная машина Тьюринга.
- •26.Понятие алгоритмической неразрешимости. Теорема Райса.
- •27.Проблема остановки - формулировка теоремы и ее доказательство.
- •28.Понятие рекурсии. Примитивно-рекурсивные функции. Примеры.
- •29.Неограниченный оператор минимизации. Примеры. Определение частично-рекурсивной функции.
- •30.Разрешимые и перечислимые множества и предикаты.
- •31.Конечные автоматы. Основные определения. Способы задания автоматов.
- •32.Алгоритмические возможности: что могут и что не могут вычислять автоматы. Примеры.
- •33.Эквивалентность автоматов. Алгоритм минимизации автоматов.
- •34.Автоматы и логические схемы. Программная реализация автоматов.
- •35.Интуитивное определение понятия «алгоритм». Свойства алгоритма.
- •37. Приметивно рекурсивные функции
- •Глава 4. Алгоритмы
- •40 Частично рекурсивные функции
- •41 Рекурсивные функции
- •Проблемы, касающиеся абстрактных машин
- •Другие проблемы
- •Проблемы, алгоритмическая неразрешимость которых не доказана
- •42 Формулировка и доказательство критерия Поста
- •Описание
- •Примеры Пример 1
- •Пример 2
- •Ветвление (условный оператор)
- •Повторение (цикл)
- •Устройство машины Тьюринга
- •Проблемы, касающиеся абстрактных машин
- •Другие проблемы
- •Проблемы, алгоритмическая неразрешимость которых не доказана
- •48) Машина Поста
- •Принцип работы
- •Устройство машины Тьюринга
- •Описание машины Тьюринга
- •Полнота по Тьюрингу
- •Варианты машины Тьюринга
- •Машина Тьюринга, работающая на полубесконечной ленте
Ветвление (условный оператор)
Машину Тьюринга будем называть распознающей, если для некоторого алфавита и каждого входа , на котором останавливается, ее результат , т.е. вычисляет некоторую двузначную функцию (возможно частичную) на словах из
Лемма 9.5. Пусть - распознающая м.Т., м.Т. вычисляет функцию f(x), а м.Т. - функцию g(x). Тогда существует м.Т. вычисляющая функцию
Доказательство. Требуемая м.Т. вначале копирует вход x и получает на ленте слово x*x, затем вычисляет параллельную композицию функций и тождественной функции e(x)=x и переходит в конфигурацию . Выбор между f и g происходит по следующим командам:
Кроме того, обеспечим переход в новое заключительное состояние:
Таким образом, мы реализовали в терминах машин Тьюринга обычный в языках программирования оператор ветвления:
Повторение (цикл)
Используя конструкцию для ветвления легко реализовать в терминах машин Тьюринга и оператор цикла.
Лемма 9.6. Пусть - распознающая м.Т., а м.Т. вычисляет функцию f(x). Тогда существует м.Т. которая вычисляет функцию, задаваемую выражением:
Доказательство. Действительно, пусть м.Т. - вычисляет тождественную функцию g(x)=x. Построим по м.Т. м.Т. реализующую ветвление как в лемме 9.5. Тогда искомая м.Т. получается из заменой команд на соответствующие команды , обеспечивающие зацикливание.
Реализованные выше операции над машинами Тьюринга и вычислимыми функциями позволяют получать программы новых м.Т., используя обычные конструкции языка программирования "высокого" уровня: последовательную и параллельную композицию, ветвление и цикл. Пусть - машины Тьюринга. Последовательную композицию M1 и M2 будем обозначать M1;M2, параллельную композицию M1, M2,... , Mm обозначаем как (здесь b - это символ, разделяющий аргументы и результаты этих машин), ветвление -
цикл -
Пример 9.4. Рассмотрим в качестве примера задачу перевода чисел из унарной системы счисления в двоичную. Пусть fub(|n) = n(2) для всех , где n(2) - двоичная запись числа n.
Пусть M1 - м.Т., которая начальную конфигурацию q0 ,|n переводит в конфигурацию q1 ,0*|n; M2 - м.Т., которая прибавляет 1 к двоичному числу-аргументу (см. пример ref{ex8-suc}); M3 - м.Т., которая вычитает 1 из унарного числа; - м.Т., которая на аргументе вида x*|y выдает 0, если число y > 0, и выдает 1 при y=0 (т.е. на аргументе ); M4 - м.Т., которая стирает * в аргументе вида x* и останавливается. Реализация каждой из указанных м.Т. очевидна. Теперь требуемая м.Т. Mub, вычисляющая fub, получается как
Действительно, после работы M1 получаем конфигурацию q10*|n. Предположим теперь по индукции, что после i (i <n) итераций цикла while получается конфигурация q1 i(2)*|n-i. Тогда на (i+1) -ой итерации цикла после параллельного применения M2 к i(2) и M3 к |n-i получаем конфигурацию q1(i+1)(2)*|n-i-1. Поэтому после n итераций получится конфигурация . На ней выдаст 1, и цикл завершится с записью на ленте, из которой M4 сотрет * и оставит требуемый результат n(2).
Отметим, что из приведенного примера и из задачи \oldref{prb3-6}(a) следует, что класс вычислимых на м.Т. арифметических функций не зависит от выбора унарного или двоичного кодирования аргументов и результатов. Это же справедливо и для троичной, десятичной и других позиционных систем счисления ( почему ?).
Может быть рассмотрено еще одно обобщение машин Тьюринга: их композиции. Операции композиции, выполняемые над алгоритмами, позволяют образовывать новые, более сложные алгоритмы из ранее известных простых алгоритмов. Поскольку машина Тьюринга - алгоритм, то операции композиции применимы и к машинам Тьюринга. Рассмотрим основные из них: произведение, возведение в степень, итерацию.
Проблема зацикливания состоит в следующем: существует ли алгоритм, хотя бы частный, который выясняет заранее для произвольной машины Тьюринга будет ли она работать бесконечно.
Напомним, что впервые идея нумерации конструктивных объектов (нечисловой природы) натуральными числами была высказана и реализована К.Гёделем (вспомните доказательство теоремы Гёделя о полноте).
Определение (по [Матросов,1989,с.104]).
(1) (Гёделевой) нумерацией объектов множества E назовём отображение g:Ng®E некоторого множества натуральных чисел NgÍN на множество конструктивных объектов E.
(2) Однозначной гёделевой нумерацией объектов множества E назовём нумерацию объектов множества E, являющуюся биекцией.
(3) Простой гёделевой нумерацией объектов множества E назовём нумерацию объектов множества E в случае, когда Ng=N.
Нумерация (кодирование) программ играет фундаментальную роль в теории вычислений.
Первый способ построения гёделевой нумерации машины Тьюринга.
Рассмотрим произвольную машину Тьюринга M. Представим программу машины Тьюринга M в виде следующей функциональной схемы, в которой a'Î{a0,...,am}, q'Î{q0,...,qn}, rÎ{L,L,R}: