- •Введение
- •Тема 1. Логика высказываний
- •1.1. Понятие высказывания
- •1.2. Логические операции
- •1. Отрицание или инверсия ( – не)
- •Конъюнкция ( ,, ·, логическое и )
- •4. Импликация ( ) “если а, то b”
- •6. Сумма по модулю два
- •7. Штрих Шеффера ( , обратная конъюнкция и – не)
- •8. Стрелка Пирса ( , обратная дизъюнкция или – не )
- •1.3. Булевы функции
- •1.3.1. Некоторые определения из теории множеств
- •1.3.2. Булевы функции
- •1.4. Формулы
- •1.5. Равносильные формулы
- •1.6. Подстановка и замена
- •1.7. Формы представления высказываний
- •1.8. Минимизация сложных высказываний методом Квайна
- •1.9. Полные системы функций
- •1.9.1. Система функций { }
- •1.9.2. Замкнутые классы
- •1.9.3. Функциональная полнота
- •Тема 2. Логические исчисления
- •2.1. Интерпретация формул
- •2.2. Примеры тождественно истинных формул высказываний
- •2.3. Формальные теории
- •Выводимость.
- •2.5. Интерпретация формальных теорий
- •2.6. Исчисление высказываний.
- •2.7. Производные правила вывода
- •2.8. Дедукция
- •2.9. Некоторые теоремы теории £
- •Тема 3. Логика и исчисление предикатов
- •3.1. Предикаты
- •3.2. Исчисление предикатов
- •3.3. Интерпретация
- •3.4. Основные равносильности для предикатов
- •3.5. Приведенная форма представления предикатов
- •Тема 4. Автоматическое доказательство теорем
- •4.1. Постановка задачи
- •4.2. Доказательство от противного
- •4.3.Правило резолюции для исчисления высказываний
- •4.4. Правило резолюции для исчисления предикатов
- •4.5. Основные положения мр (выводы)
- •4.6. Логическое программирование
- •Тема 5. Теория алгоритмов
- •5.1. Интуитивное понятие алгоритма
- •5.2. Конкретизация понятия алгоритма
- •5.2.1. Машины Тьюринга
- •5.2.3. Рекурсивные функции
- •5.2.3. Нормальные алгорифмы Маркова
- •5.3. Алгоритмически неразрешимые проблемы
- •5.3.1. Проблема самоприменимости
- •5.3.1.1. Нумерация мт
- •5.3.1.2. Самоприменимость мт
- •5.3.2. Проблема останова
- •5.3.3. Разрешимые и неразрешимые задачи математики
- •5.4. Характеристики сложности вычислений
- •5.5. Классы сложности задач
- •5.5.1. Р задачи
- •5.5.2. Np задачи
5.3. Алгоритмически неразрешимые проблемы
Массовая проблема – бесконечный класс однотипных (индивидуальных) проблем.
Пример.
Индивидуальная проблема: Обладает ли заданным свойством Q конкретная частично-рекурсивная функция (ЧРФ).
Совокупность всех таких задач (для всех ЧРФ) образует массовую проблему распознавания свойства Q.
Будем рассматривать только задачи, дя которых имеет смысл ответ ДА или НЕТ.
Введем обозначения: п – индивидуальная проблема, П – массовая проблема, ,
f(п) – характеристическая функция.
Массовая проблема является алгоритмически разрешимой, если f(п) является вычислимой, т. е. существуют такие алгоритмы, с помощью которых можно решить любую индивидуальную проблему.
Решая конкретную массовую проблему, следует считаться с возможностью того , что она может оказаться алгоритмически неразрешимой, поэтому необходимо иметь представление о технике доказательства неразрешимости.
Основной метод, применяемый в доказательствах алгоритмической неразрешимости, базируется на следующем рассуждении.
Пусть существуют две массовые проблемы П1 и П2. Пусть существует алгоритм А, который по всякой индивидуальной задаче строит индивидуальную задачу , такую, что выполняется:
имеет ответ «ДА» тогда и только тогда, когда имеет ответ «ДА». В этом случае говорят, что проблема П1 сводится к проблеме П2.
Если проблема П1 неразрешима, то проблема П2 также неразрешима.
Доказательство (от противного).
Пусть проблема П2 разрешима. Тогда можно построить разрешающий алгоритм для проблемы П1. Берем произвольную индивидуальную задачу . Имея алгоритм А, строим индивидуальную задачу , . Применяем к задаче п2 существующий по предположению разрешающий алгоритм для проблемы П2. Если задача п2 имеет ответ «ДА», то для задачи п1ответ должен быть «НЕТ». Т. к. по
условию, проблема П1 неразрешима, то получим противоречие. Значит, проблема П2 неразрешима. Данное рассуждение называется методом сводимости, и его применение возможно, если уже имеется запас проблем, алгоритмическая неразрешимость которых
уже установлена.
Рассмотрим некоторые из таких проблем.
5.3.1. Проблема самоприменимости
5.3.1.1. Нумерация мт
A={a0,..,ai,…} – внешний алфавит МТ (счетное множество).
Q={q0, q1, …, qj,…} – внутренние состояния МТ (счетное множество).
Пусть для всех МТ a0 – пустой символ, q0 – заключительное состояние, q1 – начальное состояние.
Каждому символу из множества {Л, П, С, a0, a1,…, ai,…, q0, q1, …qj… } поставим в соответствие двоичное число:
|
Символ |
Код |
Число нулей в коде |
Д |
Л |
10 |
1 |
П |
100 |
2 |
|
С |
1000 |
3 |
|
А |
а0 |
10000 |
4 |
а1 |
1000000 |
6 |
|
… |
|
|
|
ai |
10………0 |
2i+4 |
|
…. |
|
|
|
Q |
q0 |
100000 |
5 |
q1 |
10000000 |
7 |
|
…. |
|
|
|
qj |
10………0 |
2j+5 |
|
… |
|
|
Команде МТ поставим в соответствие двоичное число:
.
Упорядочим команды МТ в соответствии с лексикографическим порядком левых частей команд q1a0, q1a1,…q2a0,…. и т. д. Получим последовательность команд I1,…In(m+1), где n – число символов в алфавите А, m – число состояний в множестве Q.
Тогда МТ можно поставить в соответствие двоичное число вида:
Код(Т)=Код(I1)Код(I2) …..Код(In(m+1)).
Пример.
A={a0,a1}
Q={q0,q1}
I1:q1a0→q0a0C
I2:q1a1→q0a1C
Тогда Код(Т)=
Такое кодирование является алгоритмической процедурой. Зная код МТ можно однозначно восстановить множество ее команд. Код МТ можно рассматривать как двоичную запись натурального числа. Такое число называется номером МТ.