Вы находитесь на странице: 1из 47

1

Пермский Государственный Технический Университет

Кафедра Информационных технологий и автоматизированных


систем

Викентьева О. Л.

Математическая логика и теория алгоритмов

конспект лекций

для студентов специальностей АСУ, ЭВТ, КЗИ

Пермь, 2007 г.
2
3

Введение
Математическая логика - это современный вид формальной логики. Логика – это наука
правильно рассуждать, имея какие-то утверждения, истинность которых проверена,
например, на опыте. С помощью утверждений можно придти к новому утверждению,
которое также может оказаться истинным.
Исходное утверждение называется посылкой, результирующее утверждение –
заключением.
Пример 1.
П1: Все люди смертны.
П2. Сократ – человек.
З: Сократ смертен.

Пример 2.
П1: Все граждане России имеют право на образование.
П2: Иванов – гражданин России.
З: Иванов имеет право на образование.

Оба эти вывода имеют одну и ту же форму:


Все А есть В;
С есть А;
Следовательно, С есть В.

В этих рассуждениях нам не интересна истинность или ложность отдельных посылок.


Нам важно знать вытекает ли истинность заключения из истинности посылок.

Таким образом, основная задача логики – это формализация правильных способов


рассуждения. Если при этом применяется математический аппарат, то такую логику
можно назвать математической.
4

Тема 1. Логика высказываний


1.1. Понятие высказывания
Рассмотрим логику высказываний, которая лежит в основе всех других разделов
математической логики (МЛ) и необходима для их понимания.
Логика высказываний строится также как и другие математические теории. В качестве
основных понятий берется некоторый класс объектов, а также некоторые свойства,
отношения и операции над этими объектами.
Основным объектом логики высказываний служат простые высказывания. Высказывание
– это предложение, о котором можно сказать истинно оно или ложно.
Примеры.
1. Число 100 делится на 5.
2. Число 3 больше числа 5.
3. Луна больше Земли.
4. Сегодня светит солнце.
5. Вечером мы пойдем в кино.

Из простых высказываний с помощью некоторого числа логических операций можно


построить сложные высказывания.
1. Число 100 делится на 5 и число 100 делится на 10.
2. Неверно, что 3 больше 5.
3. Сегодня мы пойдем в кино или мы пойдем в театр.
При изучении логики высказываний не обращают внимание на содержание простых
высказываний, а интересуются только их истинностью или ложностью.
Сложные высказывания, получаемые из простых, будут также истинными или ложными.
Их истинность или ложность будет зависеть от истинности образующих их простых
высказываний.

1.2. Логические операции


Для изучения логических операций введем следующую систему обозначений:
 простые высказывания будем обозначать буквами a, b, c, …, x, y ,z;
 значения истинности будем обозначать 1 – истинно, 0 – ложно.

Действия логических операций будем представлять в виде таблиц истинности.


1. Отрицание или инверсия ( – НЕ)
Пример.
а: 7 делится на 5 без остатка.
а: Неверно, что 7 делится на 5 без остатка.

а а
0 1
1 0
Эта таблица и принимается в качестве определения операции отрицания.
2. Конъюнкция ( ,, ·, логическое И )
Действие операции определяется следующим образом: сложное высказывание аb
истинно только в том случае, когда оба высказывания (а и b) имеют значение истинно.
а b аb
0 0 0
0 1 0
5
1 0 0
1 1 1

Примеры.
а. 6 делится на 3 без остатка (1);
b. 10 больше 5 (1);
с. 7 делится на 3 без остатка (0);
d. 3 больше 7 (0);

a&b=1
a&c=0
c&d=0

3. Дизъюнкция (,+,логическое ИЛИ)


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

a b ab
0 0 0
0 1 1
1 0 1
1 1 1
Примеры.
аb=1
ac=1
cd=0

4. Импликация ( , ,  ) “если а, то b”
Действие операции определяется следующим образом: сложное высказывание а  b
ложно только в том случае, когда а истинно, а b – ложно.
a b ab
0 0 1
0 1 1
1 0 0
1 1 1

А называется антецедентом, а b – консеквентом.


5. Эквивалентность (~ , ,  )
Действие операции определяется следующим образом: сложное высказывание а~b
истинно, если а истинно и b истинно, или если а ложно и b ложно.
a b a~b
0 0 1
0 1 0
1 0 0
1 1 1
6
Эквивалентность примерно соответствует употреблению выражения «тогда и только
тогда».
6. сумма по модулю два 

a b a b
0 0 0
0 1 1
1 0 1
1 1 0

7. Штрих Шеффера ( , обратная конъюнкция И – НЕ)

a b a b
0 0 1
0 1 1
1 0 1
1 1 0

8. Стрелка Пирса (  , обратная дизъюнкция ИЛИ – НЕ )

a b a b
0 0 1
0 1 1
1 0 1
1 1 0

Используя эти логические операции можно строить сколь угодно сложные высказывания.
Приоритет выполнения операций:
⌐   ~  

Пример: Сложное высказывание: «Если вы не пропускаете занятия и успешно


занимаетесь, то Вы сдадите экзамен хорошо» можно записать следующим образом.
Обозначим:
П – пропускаете занятия;
Y – успешно занимаетесь;
Х – сдадите экзамен хорошо,
тогда все высказывание запишется:
П &Y  Х

Значение истинности всего выражения будет зависеть от истинности переменных


обозначающих простые высказывания.
Пример.
(( a  b)  b) ~ (a & c )  ( d & c)
Пусть a=1, b=0, c=0, d=1.
((1  0)  0) ~ (1 & 0)  (1 & 0)  (0  1) ~ (1 & 0)  (1 & 0)  1 ~ 0  0  1 ~ 0  0
Символы ⌐    ~    называются пропозициональными связками, a, b, c, … и т.
д. - пропозициональными переменными. Выражение, построенное из
7
пропозициональных переменных с помощью пропозициональных связок, называется
пропозициональной формой или формулой.

1.3. Булевы функции


1.3.1. Некоторые определения из теории множеств
Множество – фундаментальное неопределяемое понятие. Множество – это совокупность
объектов, которые, с одной стороны, различны и отличимы друг от друга, а с другой
стороны воспринимаются как единое целое.
Пусть А и В – два множества.
<a,b> - упорядоченная пара, где первый элемент a  A , а второй элемент b  B .
Декартово произведение A  B - это множество пар
A  B  { a, b | a  A, b  B}
Бинарным отношением f из множества А в множество В называется подмножество A  B :
f  A B .
Функция - это такое отношение, что из  x, y  f и  x, z  f следует, что x=z, т. е.
функциональность – это однозначность.
Пример.
А={1,2,3,4,5}
B={1,4,9,16,25}
A  B ={<1,1>, <1,4>, <1,9>, <1,16>, <1,25>, <2,1>, <2,4>, <2,9>, <2,16>, <2,25>,….<3,9>,
…. ,<4,16>,…..<5,25>}
f={<1,1>, <2,4>, <3,9>, <4,16>, <5,25>} – это функция, где b=a2.

1.3.2. Булевы функции


Функция f : E 2n  E 2 , где E 2  {0,1} называется функцией алгебры логики.
y=f(x1,x2) – бинарная функция,
y=f(x1,x2,…., xn) – n- арная функция.
Пример.
((ab  c )  a ) ~ ac  f ( a, b, c)
Т. о. каждое элементарное высказывание может принимать значение либо 0, либо 1.
Каждому набору значений a, b, c соответствует одно значение всего сложного
высказывания (0 или 1).
Булеву функцию от n переменных можно задать таблицей истинности
x1 ….. xn-1 xn f(x1, …,xn)
0 0 0
0 0 1

1 1 1

Переменные, которые принимают значения 0 или 1 называются булевыми переменными.


Некоторые функции всегда принимают значение 1 (на любом наборе переменных). Такие
функции называются тавтологиями. Некоторые функции всегда принимают значение 0 (на
любом наборе переменных). Такие функции называются противоречиями.

1.4. Формулы
Пусть F  { f1 , f 2 ,... f n } - множество булевых функций. Формулой над F называется
выражение [ F ]  f (t1 ,..., t m ), где f  F, t i  либо переменная, либо формула над F.
F называется базисом формулы, f – главной (внешней) операцией, ti – подформулами.
8
Всякой формуле  однозначно соответствует некоторая функция f. Это соответствие
задается алгоритмом интерпретации, который позволяет вычислить значение функции при
заданных значениях переменных.
Зная таблицы истинности для функций базиса можно вычислить таблицу той функции,
которую реализует данная формула.
Примеры.
1. 1  ( x1 x 2 )  ( x1 x 2 )  ( x1  x 2 )
x1 x2 x1 x2 x1 x 2 x1 x 2 1
0 0 0 0 0 0
0 1 0 0 1 1
1 0 0 1 0 1
1 1 1 1 1 1

Функция 1 реализует дизъюнкцию на базисе {,&,} .


2.  2  ( x1 ~ x 2 )  ( x1 x 2 )
x1 x2 x1~ x2 x1 x 2  2
0 0 1 0 0
0 1 0 1 1
1 0 0 0 1
1 1 1 0 0

Функция  2 реализует дизъюнкцию на базисе {,&, } .


Таким образом каждая формула определяет некоторую логическую функцию, которую
можно представить в виде таблицы истинности для этой формулы. Если в формуле
имеется n переменных, то возможны 2n различных истинностных значений для этой
формулы. Следовательно, таблица истинности будет иметь 2n строк.

1.5. Равносильные формулы


Одна функция может иметь множество реализаций над данным базисом (т. е. ее можно
записать с помощью различных формул). Формулы, реализующие одну и ту же функцию,
называют равносильными. Обозначают A  B .
Пример.
Пусть A  ( x ~ y )  ( xz ) , B  x y  x y  xz .
Доказать, что A  B .
Равносильность двух формул можно доказать с помощью таблиц истинности. Формулы
равносильны, если их значения истинности совпадают на любом наборе значений
истинности, входящих в них переменных.
Таблица истинности для формулы А.
x y z x~y xz A
0 0 0 1 0 0
0 0 1 1 0 0
0 1 0 0 0 1
0 1 1 0 0 1
1 0 0 0 0 1
1 0 1 0 1 1
1 1 0 1 0 0
1 1 1 1 1 1

Таблица истинности для формулы B.


x y z x y x y xz B
9
0 0 0 0 0 0 0
0 0 1 0 0 0 0
0 1 0 0 1 0 1
0 1 1 0 1 0 1
1 0 0 1 0 0 1
1 0 1 1 0 1 1
1 1 0 0 0 0 0
1 1 1 0 0 1 1

Тот факт, что равносильность формул логики высказываний можно проверить


непосредственно, связан с тем, что переменные, входящие в формулу могут принимать
конечное число значений (2n).
Но, если в формуле большое количество переменных, то вычисление всех значений
истинности для формулы становится очень трудоемкой задачей.
Равносильность формул логики высказываний аналогична тождествам элементарной
алгебры, известным из средней школы. Но тождественное равенство алгебраических
формул нельзя проверить простым перебором значений, т. к. число возможных значений
переменных неограниченно, следовательно, доказательство равносильности никогда не
закончится. В элементарной алгебре тождественные равенства формул устанавливаются с
помощью небольшого числа основных тождеств – законов, связывающих между собой
арифметические операции.
Для логики имеют место следующие равносильности (рассмотрим только формулы,
которые содержат знаки ,&, ):
1. Коммутативный
А В  В А АВ=ВА
2. Ассоциативный
А(В С)  (А В)  С А(ВС)=(АВ)С
3. Дистрибутивный
А(ВС)  (А В)(А С) А(В С)=АВ АС
4. Идемпотентности
А А  А А·А  А
5. Поглощения
А АВ  А А(А В)  А
6. А 0  А А· 0 = 0
7. А 1=1 А·1=А
8. А A =1 А A =0
9. Закон де Моргана
A B  A B A B  A B
10. 1 =0 0 =1

11 Двойное отрицание
A=А
12. АВ  A  В
13 А~В=А·В A  B
14 А  В= A ·В А· B
15. А В = А В = А·В
16. А  В = A  B = A  B
10
1.6. Подстановка и замена
Если в формулу  входит переменная х, то это можно обозначить как (...х...) . Если в
формулу входит подформула  , то обозначим это как (.......) .
Вместо подформулы или переменной можно подставить другую формулу или
переменную. В результате получится новая правильно построенная формула.
Если подстановка производится вместо всех вхождений заменяемой переменной или
подформулы, то результат обозначим:
(...х...) {  // х} , т. е. все вхождения переменной х заменяем на подформулу  .
Если подстановка производится вместо некоторых вхождений, то результат обозначим
(...1 ....){2 / 1 } , т. е. первое вхождение 1 заменяем на 2 .
Примеры.
1. Замена всех вхождений переменной х
x  x{ yz // x}  yz  yz
2. Замена всех вхождений подформулы y  z
x  y  z{x / y  z}  x  x
3. Замена первого вхождения переменной х
x  x{ y / x}  y  x
4. Замена первого вхождения подформулы y  z
x  y  z{x / y  z}  x  x
 Правило подстановки. Если в равносильных формулах вместо всех вхождений
некоторой переменной x подставить одну и ту же формулу, то получатся
равносильные формулы.
 Правило замены. Если в формуле заменить некоторую подформулу на равносильную,
то получится равносильная формула.

1.7. Формы представления высказываний


Нормальная форма – это синтаксически однозначный способ записи формулы,
реализующей данную функцию.
Любую булеву формулу можно привести к равносильной ей формуле простого
стандартного вида, которой будет являться дизъюнкция элементов, каждый из которых
представляет собой конъюнкцию отдельных различных логических переменных либо со
знаком отрицания, либо без него.
Пример.
F  x y  y z  ( x  y )( y  z )  x y  xz  yz
Такая форма называется дизъюнктивной нормальной формой (ДНФ). Отдельный элемент
ДНФ называется элементарной конъюнкцией или конституентой единицы.
Аналогично любую формулу можно привести к равносильной ей формуле, которая будет
являться конъюнкцией элементов, каждый из которых будет представлять собой
дизъюнкцию логических переменных со знаком отрицания или без него. Такая форма
называется конъюнктивной нормальной формой (КНФ).
Пример.
F  xy  xz  ( y  x )( x  z )( y  z )
Отдельный элемент КНФ называется элементарной дизъюнкцией или конституентой
нуля.
СДНФ (совершенная ДНФ) – это такая ДНФ, в которой каждая элементарная конъюнкция
содержит все элементарные высказывания, либо их отрицания по одному разу,
элементарные конъюнкции не повторяются.
Пример.
x  x y  x yz  x( y  y )( z  z )  x y ( z  z )  x y z  xyz  xy z  x yz  x y z  x yz  x y z  x yz
11
СКНФ (совершенная КНФ) – это такая КНФ, в которой каждая элементарная дизъюнкция
содержит все элементарные высказывания, либо их отрицания по одному разу,
элементарные дизъюнкции не повторяются.
Пример.
x ( x  y )( x  y  z )  ( x  y y  z z )( x  y  z z )( x  y  z )  ( x  y  z )( x  y  z )( x  y  z )
( x  y  z )( x  y  z )( x  y  z )( x  y  z )
Каждая формула имеет одну единственную СДНФ и одну единственную СКНФ.
Тавтология не имеет СКНФ, а противоречие – СДНФ.
Как мы знаем, каждая формула логики высказываний представляет некоторую булеву
функцию. Возникает обратный вопрос: можно ли всякую булеву функцию представить
некоторой формулой логики высказываний? Можно указать алгоритм, который позволяет
по таблице истинности произвольной булевой функции от любого числа переменных
построить некоторую формулу логики высказываний в СДНФ.
Пример.
Рассмотрим частный случай. Пусть f(x,y,z)=1 только в одном единственном случае.
x y z f(x,y,z)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0
Тогда этой формуле будет соответствовать функция f ( x, y , z )  x y z .
Если рассматривать произвольную функцию, то необходимо выделить все наборы
переменных, для которых функция принимает значение 1 и каждому набору поставить в
соответствие конъюнкцию переменных и их отрицаний. Рассматриваемая функция будет
представлена дизъюнкцией этих конъюнкций.
Таким образом, установлена процедура, которая позволяет для всякой булевой функции
записать соответствующую ей формулу.
Пример.
x y z f(x,y,z)
0 0 0 1
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 0

f ( x, y , z )  x y z  x yz  x y z
Выводы:
1. Каждая формула логики высказываний представляет собой некоторую булеву
функцию и наоборот.
2. Различные формулы могут представить одну и ту же функцию (равносильные
формулы) .
3. Существует много дизъюнктивных форм равносильных между собой.
12
1.8. Минимизация сложных высказываний методом Квайна
Алгоритм:
1. Получить СДНФ.
2. Получить сокращенную ДНФ (СкДНФ), используя следующие равносильности:
ab  ab  ab  ab  a - неполное склеивание;
a  ab  a - поглощение.
3. Построить импликантную матрицу, с помощью которой получить МДНФ.
Пример.
1. (( x | y )  ( y  z ))  x  z  xy  ( y  z )  x  z  xy  y z  xz - ДНФ

xy ( z  z )  ( x  x ) y z  x( y  y ) z  xyz  xy z  x y z  x y z  x yz  x yz - СДНФ
1 2 3 4 5 6

2. Применяя операции склеивания, получаем СкДНФ.


1-2: xy
1-5: yz
2-3: x z
3-4: y z
4-6: x y
5-6: xz

3. Импликантная матрица
xyz xy z x y z x y z x yz x y z
xy + +
yz + +
xz + +
yz + +
xy + +
xz + +

Выбираем импликанты, которые поглощают все конституенты единицы.


МДНФ1 : xy  y z  xz
МДНФ2 : x z  yz  x y

1.9. Полные системы функций


1.9.1. Система функций { ,&, }
Теорема. Всякая булева функция порождается некоторой формулой, в которой есть
только операции ,&, .
Доказательство. Пусть f ( x1 ,...x n ) некоторая булева функция. Для нее можно
поострить таблицу истинности, в которой будет 2n строк. Каждую строку можно
представить в виде конъюнкции переменных х1,…хn, куда входит либо xi , либо xi .
Если значение конъюнкции будет равно 1, то всю функцию можно представить в виде
дизъюнкции этих конъюнкций.
Пример.
f ( x, y )  x  y
x y f(x,y)
0 0 1
0 1 1
13
1 0 0
1 1 1

Получим СДНФ, используя таблицу истинности.


x y  x y  xy  x y  ( x  x )( x  y )( x  y )( y  y )  x y  y  ( x  y )( y  y )  ( x  y )  x  y
Возникает вопрос: Существуют ли другие системы булевых функций, с помощью
которых можно выразить все другие функции?

1.9.2. Замкнутые классы


Пусть F  { f 1 ,..., f m }, f i  Pn , где Pn  множество булевых функций от n переменных.
Замыканием F ([F]) называется множество всех булевых функций, реализуемых
формулами над F.
Множество функций (класс) называется замкнутым, если [F]=F.
Рассмотрим следующие классы функций.
1. Класс функций, сохраняющих 0:
T0  { f f (0,0,...,0)  0} .
2. Класс функций, сохраняющих 1:
T1  { f f (1,1,...,1)  1}
3. Класс самодвойственных функций:
T*  { f f  f * } , где f * ( x ..., x )  f ( x1 ,..., x n ) .
1, n
4. Класс монотонных функций
T  { f     f ( )  f (  )}, где   ( a1 ,..., a n ),   (b1 ,...bn ), ai  bi .
5. Класс линейных функций
TL  { f f  c0  c1x1  . .  cn xn , где + - означает сложение по модулю 2, а знак конъюнкции опущен.

Теорема. Классы Т0, Т1, Т*, ТМ, TL – замкнуты.


Доказательство. Чтобы доказать, что некоторый класс F замкнут достаточно показать,
что, если формула реализована в виде формулы над F, то она принадлежит F.
Рассмотрим доказательство для одного класса функций Т0.
Пусть f , f 1 , f 2 ,.... f n  T0 и Ф  f ( f 1 ( x1 ,...x n ),.... f n ( x1 ,...x n )) . Тогда
Ф  f ( f 1 (0,...0),.... f n (0,...0))  f (0,....0)  0 .
Аналогичные доказательства можно привести для остальных классов.

1.9.3. Функциональная полнота


Класс функций F называется полным, если его замыкание совпадает с Pn:
[ F ]  Pn .
Другими словами, множество функций F образует полную систему, если любая
функция реализуема в виде формулы над F.
Теорема.
Пусть заданы две системы функций F  { f1 ,..., f n } и G  {g1 ,..., g k } .
Тогда, если система F – полная и все функции из F реализуемы формулами над G, то
система G тоже полная.
Доказательство. Пусть h – произвольная функция, h  Pn . Тогда [F]=Pn,
следовательно, h реализуема формулой  , базисом которой является F ( [F ] ). Если
выполнить замену подформулы fi на подформулу  i в формуле  , то мы получим
формулу над G.
Следовательно, функция h реализуется формулой [G ] .
Примеры:
14
1. Система { ,,  } – полная, т. к. любая логическая операция может быть
выражена через дизъюнкцию, конъюнкцию и отрицание;
2. Система { ,& } – полная, т. к. x1  x 2  x1 x 2 ;
3. Система { , } – полная, т. к. x1 x 2  ( x1  x 2 );
4. Система {|} – полная, т. к. x1 | x 2  x1 x1  x 1  x 2 , а { ,& }и{ , } – полные
системы.
5. Система { 0,1,&, } – полная, т. к. x  x  1. Представление логической операции
системой{ 0,1,&, }называется полиномом Жегалкина. Таким образом, всякая
логическая операция представима в виде
 ai1 ,...i s xi1  ...  xi s ,
где  - сложение по модулю 2, знак · обозначает
(i1 ,...i s )

конъюнкцию, ai  {0,1} .
Теорема Поста: Система логических операций полна тогда и только тогда, когда она
содержит хотя бы одну функцию, не сохраняющую 0, одну функцию, не сохраняющую 1,
хотя бы одну несамодвойственную функцию, хотя бы одну нелинейную функцию и хотя
бы одну немонотонную функцию.
Пример.
Докажем полноту системы {,,1}.

f T T T T T
0 1 * L M В каждом столбце
x + - - + - должен быть хотя бы один «-»
y
x + + - - +
y
1 - + - + +

1.
Проверка на принадлежность классу T0.
x  y  T0 , потому что 0  0  0
x  y  T0 , потому что 0  0  0
1  T0
2.
Проверка на принадлежность классу T1.
x  y  T1 , т.к.1  1  0
x  y  T1 , т.к.1  1  1
1  T1
3.
Проверка на принадлежность классу T*.
x  y  S , потому что f * (x, y)  f(x, y)  (x  1)  (y  1)  1 
x  y 111  x  y 1
x  y  S , потому что f * (x, y)  f(x, y)  x & y
1  S , потому что f * (1)  0
4.
Проверка на принадлежность классу TL.
x yL
x  y  L, т.к. x  y  (x & y)  ( x  1)(y  1)  1  xy  x  y  1  1  xy  x  y
1 L
5.
Проверка на принадлежность классу TM.
15
x yM
f(0,0)=0
f(0,1)=1
f(1,0)=1
f(1,1)=0
x yM
f(0,0)=0
f(0,1)=1
f(1,0)=1
f(1,1)=1
1 M
16

Тема 2. Логические исчисления


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

2.1. Интерпретация формул


Пусть A(x1,x2,…xn) – пропозициональная формула, где x1,x2,…xn –
пропозициональные переменные. Конкретный набор значений, который принимают
переменные x1,x2,…xn называется интерпретацией.
I(A) – значение формулы в интерпретации I.
В одной интерпретации формула может быть истинной, а в другой – ложной.
Формула, истинная в какой- то интерпретации – выполнимая.
Формула истинная во всех интерпретациях – тавтология (тождественно истинная
формула), иначе – противоречие.
Пример 1.
Докажем, что формула является тавтологией.
( А  B )  ( B  A)  A  B  B  A  1
Пример 2.
Докажем, что формула является выполнимой.
( А  B )  ( B  A)  A  B  B  A  A B  B  A  B  A

2.2. Примеры тождественно истинных формул высказываний


 Закон тождества. «Всякое высказывание является логическим следованием себя
самого»
x->x
Доказательство сводится к построению таблиц истинности
x xx
0 1
1 1

 Закон противоречия. «Для всякого высказывания неверно, что истинно и


высказывание х и его отрицание.
( x & x)
Доказательство сводится к построению таблиц истинности
x ( x & x)
0 1
1 1

 Закон исключенного третьего. «Для каждого высказывания х истинно или само


высказывание, или его отрицание»
x x
Доказательство сводится к построению таблиц истинности
17
x x x
0 1
1 1

 Закон двойного отрицания. Отрицание от любого высказывания равносильно самому


высказыванию.
x~ x
 Добавление антцедента (истина из чего угодно). Если х – истина, то для любого у
истинно, что y->x.
x  ( y  x)
 Из ложного что угодно.
x  ( x  y)
 Modus ponens. Если x->y – истинно и x – истинно, то согласно закону mp можно
заключить, что истинно у.
( x( x  y ))  y
Этот тип заключения очень часто используется при математических доказательствах.
Пример.
1. Все простые числа, большие 2 – нечетны.
2. 7 – простое число.
3. Следовательно, 7- нечетное число.
Здесь применяются 2 закона. Первый закон – закон заключения от общего к частному
будет рассмотрен в логике предикатов.
На основании этого закона преобразуется первая посылка заключения: Для всех х, если х
– простое число большее 2, то х – нечетно. Согласно заключению от общего к частному
высказывание если 7 – простое число большее 2, то 7 – нечетно – истинно. (А)
7 – нечетно (В)
A->B – Истинно
А – истинно
Применяем mp, следовательно, высказывание 7-нечетно – истинно.
 Modus tollens
(( x  y ) y )  x
Или
(( x  y ) y )  x
Этот закон применяется при доказательствах от противного. Он является
двойственным к mp.

 Закон силлогизма
( x  y )( y  z )  ( x  z )
Этот закон позволяет строить сколь угодно длинные цепочки рассуждений.

2.3. Формальные теории


Рассмотрим один из методов получения всех тождественно истинных формул логики
высказываний. До сих пор мы рассматривали формулы как выражения для булевых
функций. Теперь мы будем рассматривать формулы как последовательности символов,
построенные по определенным правилам. Для этого нам сначала надо задать алфавит
(латинские буквы, знаки логических операций и скобки). Затем определим понятие слова.
Слово – конечная последовательность символов.
Формула – это
1) любая переменная (x,y,z,…)
18
2) Если слова A и B – формулы, то слова А, ( AB), ( A  B ), ( A  B), ( A ~ B ) и т. д. –
формулы.
Свойство формулы: Можно описать процедуру, которая устанавливает, является слово
формулой или нет.
Для преобразования формул применяются правила, которые называются правилами
вывода.
1. Правило подстановки.
2. правило mp.
Таким образом:
Формальная теория  - это
1. Множество символов, образующих алфавит А.
2. Множество слов в этом алфавите, которые называются формулами ( Ф  A * ).
3. Подмножество формул, которые называются аксиомами( B  Ф ).
4. Множество отношений между формулами, которые называются правилами вывода
(R).
Алфавит может быть конечным или бесконечным. Алфавит и множество формул (А и Ф)
образуют сигнатуру теории. Множество аксиом (B) также может быть конечным или
бесконечным. Если множество аксиом бесконечно, то оно задается с помощью конечного
множества схем аксиом и правил порождения конкретных аксиом из схем аксиом.
Аксиомы делятся на два вида: логические (общие для целого класса формальных теорий)
и нелогические (собственные) аксиомы, которые определяют специфику и содержание
конкретной теории.
Множество правил вывода R – конечно.
Выводимость.
Пусть F1,F2,….Fn,G – формулы теории  (Ф). Применяя к ним правила вывода R можно
получить некоторую совокупность формул Ф1, такую, что Ф  Ф1 . Про формулы из Ф1
можно сказать, что они выводятся из Ф за один шаг. Далее можно рассматривать
множество формул Ф2, выводимых из Ф1 за один шаг, т. е. из Ф они выводятся за два
шага , и т. д. Некоторая формула А будет считаться выводимой из Ф, если она выводима
из Ф за конечное множество шагов, т. е. принадлежит множеству Фm.
Примеры.
1. Пусть Ф=х1. Тогда x1{…}=A, т. е. с помощью правила подстановки можно
получить любую однобуквенную формулу. Вывод: х,А., т. е. если из некоторого
заданного множества формул выводима однобуквенная формула хi, то из этого
множества выводимы все формулы.
2. Пусть Ф=(x1->x2). Тогда (x1->x2){( x1->x2)//x1}=( (x1->x2)->x2). Следовательно из
Ф выводима формула ( (x1->x2)->x2) и сама формула (x1->x2). Применим к этим
двум формулам правило mp. Получим формулу х2. Если A произвольная формула,
то мы можем получить ее из х2 по правилу подстановки.
Вывод: Если все формулы некоторого множества Ф’ выводимы из множества Ф, а А
выводима из Ф’, то А выводима из Ф
3. Пусть Ф={A, A,( A  ( A  x)) }. Тогда из Ф выводима любая формула. Применяя
mp к формулам , A,( A  ( A  x)) получаем формулу ( A  x) .Еще раз применим
mp к A,( A  x) , получим х. Следовательно, мы можем вывести любую формулу.
Вывод: Если из какой-то системы формул можно вывести А и A, то такая система
формул называется противоречивой, из нее выводится любая формула.
Выводом формулы G из формул F1,F2,….Fn в формальной теории  называется такая
последовательность формул E1,E2,….Ek, что Ek=G, а любая формула Ei (i<k) является либо
аксиомой, либо исходной формулой, либо непосредственно выводима из ранее
полученных формул.
Если в теории  существует вывод G из формул F1,F2,….Fn, то это записывают
следующим образом:
19
F1,F2,….Fn |   G , где F1,F2,….Fn – гипотезы.
Если |   G , то G – теорема (т. е. теорема – это формула, выводимая из аксиом без
гипотез).
Если Г |   G , то Г ,  |   G , где Г ,  - любые множества формул (при добавлении
лишних гипотез выводимость сохраняется).

2.5. Интерпретация формальных теорий


Интерпретацией формальной теории  в область интерпретации М называется функция
I :   M , которая каждой формуле формальной теории ставит в соответствие некоторое
содержательное высказывание относительно объектов множества М. Если
соответствующее высказывание истинно, то говорят, что формула выполняется в
интерпретации I.
Интерпретация называется моделью множества формул Г, если все формулы
выполняются в данной интерпретации.
Если формула истинна в любой интерпретации, то это тавтология, если формула ложна в
любой интерпретации, то это противоречие.
Формальная теория  называется семантически непротиворечивой, если ни одна ее
теорема не является противоречием.
Модель для формальной теории  существует тогда и только тогда, когда она
семантически непротиворечива.
Формальная теория  формально непротиворечива, если в ней нельзя одновременно
вывести формулу F и ее отрицание.
Формальная теория  называется полной, если каждому истинному высказыванию
модели М соответствует теорема теории  .
Если для множества М существует формально полная непротиворечивая теория  , то
множество М называется аксиоматизируемым или формализуемым.
Формальная теория  называется разрешимой, если существует алгоритм, который
определяет, является ли формула теоремой теории.

2.6. Исчисление высказываний.


Опишем формальную теорию исчисления высказываний.
Исчисление высказываний – это формальная теория £, которой:
1. Алфавит:
 - буквы (A,B,…Z);
 - специальные символы ⌐ → ( ).
2. Формулы:
 любая буква A, B,…Z – формула;
 если А, В – формулы, то (А), (⌐А), (А→ В) – формулы.
3. Аксиомы:
1. А1: A  ( B  A)
2. А2: ( A  ( B  C )  (( A  B)  ( A  C ))
3. А3: (B  A)  ((B  A)  B )
Выражения А1-А3 называются схемами аксиом, т. к. каждая из них порождает
бесконечное множество формул. Вместо А, В и С можно подставлять любые
формулы.
4. Правило вывода: правило modus ponens (m.p.):
A, A  B
B
A и B- любые формулы. Т. о. множество аксиом теории £ - бесконечно. Множество правил
вывода также бесконечно.
20
2.7. Производные правила вывода
Исчисление высказываний £ достаточно богатая формальная теория, в которой можно
вывести многие правила вывода.
Теорема 1.
|  £  А  А - закон тождества.
Доказательство.
1. А1: A  ( B  A) . Выполним замену { A  A / B }. Получим:
A  (( A  A)  A) .
2. А1: ( A  ( B  C ))  (( A  B )  ( A  C )) . Выполним замену { A  A / B, A / C }. Получим:
( A  ( A  A)  A)  (( A  ( A  A))  ( A  A)) .
3. Из 1 и 2 по правилу m.p. получим:
(( A  ( A  A))  ( A  A)) .
4. A1: A  ( B  A) {A/B}. Получим: A  ( A  A) .
5. Из 3 и 4 по правилу m.p. получим A  A .

Теорема 2
А |  £ В  А - добавление антцедента.
Доказательство.
1. А - гипотеза
2. А1: A  ( B  A)
3. Из 1 и 3 по правилу m.p. получаем
BA

Всякую доказанную выводимость можно использовать как новое производное правило


вывода.
Если имеется множество общезначимых формул, то из него можно вывести только
общезначимые формулы.

2.8. Дедукция
В теории £ импликация тесно связана с выводимостью. Теорема дедукции используется
при доказательстве теорем, т. к. дает нам новое правило вывода.
Теорема (дедукции). Если Г – множество формул, А и B  Г и A|-£B, то Г|-А→В.
В частности A|-B, то А→В.

Доказательство. Пусть E1,E2,….En вывод B из Г, A. En = B. Покажем, что Г|-£А→ Ei,


1 i  n.
Пусть i=1.
Возможны 3 случая.
1) Пусть Е1 – аксиома. Тогда рассмотрим вывод:
1. Е1
2. А1: A  ( B  A) . Выполним замену {А/Е1, В/А}. Получим:
E1  ( A  E1 )
3. Из 1 и 2 по правилу m.p. получаем |-£А→ E1.

2) Пусть Е1  Г. Доказательство аналогично 1).


3) Пусть Е1  А. Тогда по закону тождества (теорема1) |  £ E1  E1 , следовательно,
|  £ A  E1
Таким образом Г |  £ A  E1 .
Пусть i<k. Рассмотрим вывод Ek. Возможны 4 случая:
21
1) Ek – аксиома.
2) Е1  Г.
3) Е1  А.
4) Ek получена из формул Ei и Ej по правилу m.p., причем i,j<k и Ei=Ej Ek.
Для 1), 2), 3) доказательство аналогично доказательству при i=1.
Для 4) случая:
1. Г |  £ A  Ei (i)
2. Г |  £ A  ( E i  E k ) (j)

Ej
3. А2: ( A  ( B  C )  (( A  B)  ( A  C )) . Выполним подстановку {Ei/B, Ek/C}, получим
( A  ( Ei  E k )  (( A  Ei )  ( A  E k )) (n)
4. По правилу m.p. из (j) и (n) получаем ( A  Ei )  ( A  E k ) (n+1)
5. По правилу m.p. из (j) и (n+1) получаем A  E k (n+2) ч.т.д.
Таким образом, Г |  £ A  E k для любого k, в том числе при k=n. Но En=B  Г |  £ A  B .

Схема аксиом A3 теории £ в доказательстве не использовалась, поэтому теорема дедукции


имеет место для более широкого класса теорий, чем £.
Следствие 1. Если A |  £ B , то |  £ A  B и обратно.
Доказательство. По теореме дедукции, если Г , A |  £ B , то Г |  £ A  B . Пусть Г={0}.
Тогда имеем Следствие 1.

Следствие 2. А  B, B  C |  £ A  C (правило транзитивности).


Доказательство.
1. Гипотеза А  B .
2. Гипотеза с.
3. Гипотеза А.
4. По правилу m.p. из 1 и 3 получаем B.
5. По правилу m.p. из 2 и 4 получаем C
6. Из 1-5 получаем: если А  B , B  C - гипотезы Г, то А  B, B  C , А |  £ С .
7. По теореме дедукции А  B, B  C |  £ A  C .

Следствие 3. А  ( B  C ), В |  £ A  C (правило сечения).


Доказательство.
1. Гипотеза А  ( B  C ) .
2. Гипотеза A.
3. По правилу m.p. из 1 и 2 получим B  C .
4. В – гипотеза.
5. По правилу m.p. из 3 и 4 получим С.
6. Из 1-5 получаем: А  ( B  C ), В, А |  £ C
7. по теореме дедукции А  ( B  C ), В |  £ А  C .

2.9. Некоторые теоремы теории £


Множество теорем теории £ бесконечно. Рассмотрим некоторые из них.
1. |  £ A  A (закон двойного отрицания).
2. |  £ A  A (закон двойного отрицания).
3. | £ A  ( A  B) (из ложного что угодно).
4. | £ (B  A)  ( A  B) (закон де Моргана)
22
5. | £ ( A  B)  (B  A) (закон де Моргана)
и т. д.
(Вывод законов см. Ф.А. Новиков “Дискретная математика для программистов”, стр.114).
Теорема. Теоремами теории £ являются только общезначимые формулы.
| £ А ~ A
Следствие. Теория £ формально непротиворечива.

Выводы.
1. Можно задать некоторые правила преобразования формул, которые обладают
свойством: при применении к общезначимым формулам они дают в результате
общезначимые формулы. Такими правилами являются правила вывода.
2. Можно задать конечное число общезначимых формул таких, что любая общезначимая
формула может быть получена из них с помощью правил вывода.
23

Тема 3. Логика и исчисление предикатов


Логика высказываний – очень узкая логическая теория. Есть такие типы логических
рассуждений, которые не могут быть осуществлены в рамках логики высказываний.
Например:
1. Всякий друг Ивана есть друг Петра. Павел не друг Ивана, следовательно, Павел не друг
Петра.
2. Простое число 2 – четное, следовательно, существуют четные простые числа.
Корректность таких выводов базируется не только на истинности соответствующих
предложений, но и на смысле слов «всякий» и «существуют». Чтобы сделать более
понятной структуру сложных высказываний используют специальный язык – язык
предикатов первого порядка.

3.1. Предикаты
Рассмотрим предложения, зависящие от параметров:
Х – четное число.
X<Y
X+Y=Z
X,Y – братья.
Если заменить переменные X, Y, Z некоторыми конкретными значениями, то мы получим
определенные высказывания, которые могут быть истинными или ложными.
Например:
3 – четное число.
2<5
2+3=5
Иван и Павел – братья.
Предложения такого рода называются предикатами.
Предикат Р(х1,…,хn) – функция, переменные которой принимают значения из некоторого
множества M, а сама функция принимает значение истина (1) или ложь (0).
Р(х1,…,хn) : Mn{0,1}
Высказывания - это 0-местные предикаты. Над предикатами выполняются логические
операции, в результате чего получаются новые предикаты.
С каждым предикатом связано число, которое называется местностью или арностью
предиката (количество переменных).
Язык предикатов – наиболее приближенный к естественным языкам формальный
математический язык.
Примеры:
1. Р(х) – х делится на 2
Q(x) – x делится на 3
P(x)&Q(x) – x делится на 2 и 3, т. е. определен предикат делимости на 6.
2. S(x,y) – x равно y.
S(x,y)& S(y,z)S(x,z)
Кроме операций логики высказываний, к предикатам можно применять операции
связывания кванторами.
1. Квантор общности (  ).
xP (x ) - высказывание истинное для каждого x  M , т. е. это высказывание не зависит
от xi.
2. Квантор существования (  ).
xP (x ) - высказывание истинно, если существует x  M , для которого это
высказывание истинно.
24
Для конечных множеств операции навешивания кванторов можно выразить через
операции & и  .
Пусть x  {a1 , a 2 ,..., a n }
xP( x)  P(a1 ) & P (a 2 ) & ... & P( a n )
xP( x)  P(a1 )  P(a 2 )  ...  P(a n )
На языке предикатов можно составить более сложные высказывания, чем на языке логики
высказываний.

3.2. Исчисление предикатов


Исчисление предикатов первого порядка – это формальная теория K, в которой
определены :
1. Алфавит:
 Связки: ,  (основные), & ,  ( дополнительные).
 Служебные символы: (,).
 Кванторы  ,  .
 Предметные константы a,b,c,….
 Предметные переменные x, y, z,….
 Символы предикатов P,Q,R,….
 Символы функций f, g, h,….
Константы, переменные, функторы – называются термами.
2. Формулы. Слово называется формулой, если оно имеет следующий синтаксис:
1) Р(х1,…,хn) – атомарная формула (А).
Вхождения переменных в атомарную формулу называются свободными.
2) Если А – формула, то А - тоже формула.
3) Если А и В – формулы, то ( A  B ), ( A & B ), ( A  B) - формулы.
4) Если А – формула, содержащая свободную переменную х, то xA, xA - формулы.
Слово является формулой, если это следует из 1-4.
Вхождения переменных в формулах xA, xA называются связанными, переменные не
равные х остаются свободными.
Пример
yQ( x, y ) - х – свободная переменная, у – связанная переменная.
Формула, не содержащая свободных переменных, называется замкнутой.
3. Аксиомы (логические).
1) Любая система аксиом исчисления высказываний.
А1: A  ( B  A)
А2: ( A  ( B  C )  (( A  B)  ( A  C ))
А3: (B  A)  ((B  A)  B )
2) Собственные аксиомы.
P1: xA( x)  A(t ) ,
P2: A(t )  xA( x ) ,
где t – терм.
4. Правила вывода.
A, A  B
1. - modus ponens ,
B
B  A( x)
2. - введение квантора общности,
B  xA( x )
A( x)  B
3. - введение квантора существования.
xA( x )  B
25
Исчисление предикатов, в котором кванторы могут связывать только предметные
переменные и не могут связывать функторы или предикаты называется исчислением
первого порядка.

3.3. Интерпретация
Интерпретация I исчисления предикатов K с областью интерпретацией M – это набор
функций, который сопоставляет:
 каждой предметной константе a элемент I(a)M;
 каждому n-местному функтору f операцию I(f):MnM.
 каждому n-местному предикату Р отношение I(P) Mn.
Для нас имеют смысл только интерпретированные предикаты, т. е. те, которым
поставлены в соответствие некоторые отношения (для одноместных предикатов –
свойства).
Пример.
Рассмотрим 3 формулы.
1. P(x,y)
2. yP ( x, y )
3. yP ( x, y )
В качестве области интерпретации возьмем множество целых положительных чисел и
интерпретируем P(x,y) как отношение x  y .
Тогда формула 1 – это предикат x  y . Он принимает значение истинно при любых a,b
принадлежащих множеству целых положительных чисел, если a  b .
Формула 2 – это предикат, который принимает значение истинно при x=1, т. е. он
выражает свойство, что для каждого положительного целого числа y x  y .
Формула 3 – это предикат, который всегда будет истинен. Он выражает свойство:
существует положительное целое число y, для которого x  y .
Формула называется истинной, если она выполняется на любом наборе элементов М.
Формула называется ложной, если она не выполняется на любом наборе элементов М.
Формула общезначима (тавтология), если она истинна в любой интерпретации.
Теорема: Любая выводимая в исчислении предикатов формула – общезначима.

3.4. Основные равносильности для предикатов


Пусть формулы А и В имеют одно и то же множество свободных переменных (в
том числе и пустое).
Формулы А и В равносильны в данной интерпретации, если на любом наборе
значений свободных переменных они принимают одинаковое значение (т. е. формулы
выражают один и тот же предикат).
Формулы А и В равносильны на множестве М, если они равносильны во всех
интерпретациях, заданных на множестве М.
Формулы А и В равносильны ( А  В ),если они равносильны на всех множествах.
 Для формул логики предикатов сохраняются все равносильности логики
высказываний.
 Перенос квантора через отрицание
xP ( x )  xP ( x )
xP( x )  xP ( x )
xP ( x )  xP ( x )
xP ( x )  xP ( x )
 Вынос квантора за скобки
x ( P( x ) & Q )  xP( x ) & Q Q – не зависит от х
x( P ( x) & Q )  xP( x) & Q
26
x( P ( x)  Q)  xP( x)  Q
x( P ( x)  Q )  xP ( x)  Q

x ( P ( x ) & Q ( x ))  xP ( x ) & xQ( x )


x ( P ( x)  Q ( x ))  xP ( x)  xQ( x ) Q – зависит от х

x ( P ( x )  xQ( x ))  x ( P ( x )  Q ( x ))
x ( P ( x ) & Q ( x ))  xP( x ) & xQ( x ) только в одну сторону!
Пусть P(x) – x пошел в театр, Q(x) – x пошел в кино, тогда
x( P ( x)  xQ( x))  x( P ( x)  Q ( x)) .
Но x( P( x)  Q( x))  x( P( x)  xQ( x)) .
Аналогично, пусть P(x) – x делится на 2, Q(x) – x делится на 3, тогда
x ( P ( x ) & Q ( x ))  xP( x ) & xQ( x ) , но
xP( x) & xQ( x)  x ( P( x) & Q( x)) .
 Перестановка одноименных кванторов
yxP( x, y )  xyP( x, y )
yxP ( x, y )  xyP ( x, y )
1. Перестановка разноименных кванторов
xyP( x, y )  yxP( x, y )
yxP( x, y )  xyP( x, y )
 Переименование связанных переменных
xP ( x )  yP( y ) х, у принадлежат одной предметной
xP ( x )  yP ( y ) области
 Отбрасывание квантора
xP  P
xP  P

Пример. Докажем общезначимость формулы xyP( x, y )  yxP( x, y ) . Для


этого надо показать, что формула является теоремой исчисления предикатов.
|  K xyP( x, y )  yxP ( x, y )
Доказательство.
1. yP( y )  P(t ) - аксиома исчисления предикатов.
| yP( x, y )  P ( x, z )
2. P (t )  xP( x) - аксиома исчисления предикатов.
|  P( x, z )  vP(v, z )
3. Для исчисления высказываний доказано правило транзитивности:
А  B, B  C |  A  C
4. Из 1 и 2 по правилу транзитивности получаем:
yP( x, y )  vP (v, z )
5. Введение квантора существования (правило вывода исчисления предикатов
A( x)  B
):
xA( x )  B
xyP ( x, y )  vP(v, z )
6. Введение квантора общности (правило вывода исчисления предикатов
B  A( x)
):
B  xA( x )
xyP( x, y )  zvP(v, z )
7. Преобразуем связанную переменную {y/z}
xyP( x, y )  yvP(v, y )
27
8. Преобразуем связанную переменную {x/v}
xyP( x, y )  yxP( x, y )
Таким образом, теорема доказана.

3.5. Приведенная форма представления предикатов


Формула, в которой из логических символов встречаются только ⌐, &,  , причем
отрицание должно стоять перед символами предикатов, называется приведенной
формой.
Приведенная форма называется нормальной (ПНФ), если она не содержит
символов кванторов или все символы кванторов стоят в начале формулы за скобками
(кванторная приставка).
Алгоритм построения ПНФ
1. Исключить связки →, ~ с помощью законов преобразования логики
предикатов.
2. Перенести знак ⌐ внутрь формулы.
3. Если нужно переименовать связанные переменные.
4. Используя законы преобразования логики предикатов перейти к КНФ.
Пример.
 x ( P ( x, y )  y Q
  x (  P ( x, y ) 
 x ( P ( x, y )  y Q
 x ( P ( x, y )  w Q
 xw z ( P ( x, y )

Исключаем импликацию
Переносим знак ⌐ внутрь формулы
Переименовываем связанные
переменные.

Чтобы избавиться от кванторов применяют процедуру сколемизации (от фамилии


математика Skolem). Сколемизация позволяет получить запись предикатов, не
содержащих свободных переменных в форме без кванторов.
. Чтобы выполнить сколемизацию надо:
1) Отбросить кванторы существования для чего
 если левее нет кванторов общности, то соответствующая переменная
заменяется на константу Сколема (ас);
 иначе переменная заменяется функцией Сколема (fc) от переменных, на
которые навешаны кванторы общности, стоящие левее данного квантора существования.
2) Отбросить кванторы общности.
Пример :
 x (y P ( x ,
  x ( y P
 x ( (y P ( x ,
 x (yz ( P
 xyzw
 yz w( P
 yz ( P ( a c

 ( P ( a c, y ) 
     
D1

Тема 4. Автоматическое доказательство теорем


Автоматическое доказательство теорем – это основа логического программирования.
Классическим методом АТД является метод резолюции.
28
4.1. Постановка задачи
Алгоритм, который проверяет отношение Г |   S для формулы S, множества формул Г и
теории  называется алгоритмом автоматического доказательства теорем (АТД).
В общем случае такой алгоритм невозможен, т. е. не существует алгоритма, который для
любых S, Г и  выдавал бы ответ «ДА», если Г |- S и «НЕТ» в противном случае. Но в
некоторых случаях можно построить алгоритм, который применим не ко всем формулам
теории (т. е. частичный алгоритм). Для некоторых простых формальных теорий
(например, теории высказываний) алгоритмы АТД известны.
Пример. Для исчисления высказываний известно, что теоремами являются тавтологии, т.
е. можно проверить является ли формула тавтологией с помощью таблиц истинности.
Этот пример является примером доказательства теорем в теории £, но не является
алгоритмом автоматического поиска вывода теорем из аксиоматической теории £.
Наиболее известный классический алгоритм АТД называется методом резолюций (МР).
Для любого прикладного исчисления предикатов 1 порядка он дает ответ «ДА», если Г |- S
и «НЕТ» или не выдает ответа в противном случае.

4.2. Доказательство от противного


В основе МР лежит идея доказательства от противного.
Теорема. Если Г , S |  F , где F противоречие, то Г |- S.
Доказательство (для теории £).
1. По теореме дедукции, если Г – множество формул, А и B  Г и A|-£B, то Г|-А→В.
2. Г , S |  F , следовательно Г , |  
 S F .
B

3. Следствие из теоремы дедукции: А |- B, то |- A  B.


4. Из 2 и 3 получаем |  Г  S  F  Г  S  F . Т.к. F – противоречие, т. е. F=0, то
Г  S  F   Г  S  Г  S
5. По теореме дедукции ГS, следовательно, Г|-S.

Пустая формула не является истинной или ложной ни в какой интерпретации и, по


определению, является противоречием. В качестве формулы F при доказательстве от
противного по МР принято использовать пустую формулу ().
МР работает с особой стандартной формой формул, которая называется предложением
или дизъюнктом.
Дизъюнкт - безкванторная ДНФ.

4.3.Правило резолюции для исчисления высказываний


Пусть С1 и С2 – предложения в исчислении высказываний.
Пусть С1  P  C1 , C 2  P  C 2 , где Р – пропозициональная переменная, С1 , С 2 - любые
предложения.
С1 , С 2
Правило вывода R называется правилом резолюции, где
С1  С 2
С1, С2 - родительские предложения,
С1  С  - резольвента,
P, P - контрарные литералы.
Правило резолюции очень мощное правило вывода и многие ранее рассмотренные
правила являются частным случаем правила резолюции.
Примеры.
1. Правило вывода modus ponens:
A, A  B A, A  B
(mp) R
B B
29

2. Правило транзитивности
A  B, B  С A  B , B  C
R
AC A  C

Унификация
Если в формулу А вместо переменных x1 , x 2 ..., x n подставить формулы B1 , B2 ...Bn , то
получится формула В, которая является частным случаем формулы А.
n
B  A(...x i ...){Bi // xi } .
i 1
n
Набор подстановок {Bi // xi } i  1 называется унификатором.
Таким образом, унификация состоит в том, что мы пытаемся сделать одинаковыми
различные предикаты.

4.4. Правило резолюции для исчисления предикатов


Для применения правила резолюции нужны контрарные литералы в родительских
дизъюнктах.
С1 , С 2
R
 С1  С 2   - правило резолюции в исчислении высказываний, если в предложениях С1 и
С2 есть унифицируемые контрарные литералы Р1 и Р2, т. е. С1  P  C1 , C 2  P  C 2 ,
причем атомарные формулы Р1 и Р2 унифицируются общим унификатором .
Пример.
Пусть имеются родительские дизъюнкты:
Д1: А( x, y )  B ( x, а )
Д2: B ( f ( z ), y )  C ( x, y )
Здесь B ( x, а ) и B ( f ( z ), y ) - контрарные литералы. Их можно унифицировать, если в
Д1 заменить x на f(z): А( x, y )  B ( x, y ) {f(z)//x}, а в Д2 заменить y на a:
B ( f ( z ), y )  C ( x, y ) {a//y}.
Получаем:
Д1: А( f ( z ), y )  B( f ( z ), а )
Д2: B ( f ( z ), а )  C ( x, а )
Резольвента:
А( f ( z ), y )  C ( x, a )

4.5. Основные положения МР (выводы)


1. Предметная область представляется в виде множества аксиом, которые преобразуются в
множество дизъюнктов S.
2. Для доказательства справедливости теоремы В надо взять ее отрицание и, преобразовав
в дизъюнкт, добавить к множеству S. Если теорема верна, то новое множество
дизъюнктов будет противоречиво.
3. Доказательство противоречивости сводится к доказательству того, что из данного
множества дизъюнктов может быть выведен пустой дизъюнкт .
4. Технически метод резолюции состоит из унификации и получения множества
резольвент до тех пор, пока не будет получен пустой дизъюнкт.

Пример 1.
А1: Все студенты – граждане.
30
Т: Голоса студентов – это голоса граждан.
Шаг 1. Запишем аксиому и теорему на языке предикатов первого порядка.
А1: x( S ( x)  G ( x)) (x  M , где М – множество людей)
Т: x(yS ( y ) & V ( x, y )  z (G ( z ) & V ( x, z )) (x  Г , где Г – множество голосов, x,y
 M , где М – множество людей)
Шаг 2. Получим дизъюнкты.
Д1: S ( x)  G ( x)
Чтобы получить дизъюнкты из теоремы, надо взять ее отрицание.
 x ( y S ( y ) & V ( x , y)  z (G ( z ) & V (
 x ( y ( S ( y ) & V ( x , y) & z (  G ( z )  
 S (a c
2 ) & V c
( a1 , a c
2 ) & ( G ( z )  V c
( a1 ,

Таким образом, получаем систему дизъюнктов:


Д1: S ( x)  G ( x)
Д2: S (a2c )
Д3: V (a1c , a2c )
Д4: G ( z )  V ( a1c , z )

Шаг 3. Вывод:
1. Унифицируем Д1 иД2: S ( x )  G ( x) { a 2c // x }, получаем S (a 2c )  G (a 2c )
2. Получаем резольвенту Д1-Д2: G (a 2c ) , обозначим ее как Д5
3.Унифицируем Д4 и Д5: G ( z )  V ( a1c , z ) { a 2c // z }, получаем G ( a 2c )  V (a1c , a 2c )
4. Получаем резольвенту Д4 и Д5: V (a1c , a2c ) , обозначим ее Д6
5. Д3-Д6: (пустой дизъюнкт).
Теорема доказана.

Пример 2.
А1: Если х является родителем у и у является родителем z, то х является прародителем z.
А2: Каждый человек имеет своего родителя.
В: Существуют ли такие х и у, что х является прародителем у?
Шаг 1. Запишем аксиому и вопрос на языке предикатов первого порядка.
А1: xyz ( P ( x, y ) & P ( y , z )  П ( x, y ))
А2: yxP ( x, y )
В: x, yП ( x, y )
Шаг 2. Получим дизъюнкты.
Д1: P ( x, y )  P ( y, z )  П ( x, z )
Д2: P ( f c ( у ), y )
Д3: П ( x, y )  Отв ( x, y )
Шаг 3. Вывод:
1. Унифицируем Д1 и Д2: P( x, y )  P( y, z )  П ( x, z ){ f c ( y ) // x} , получаем
P( f c ( y ), y )  P( y , z )  П ( f c ( y ), z )
2. Получаем резольвенту Д1-Д2: P ( y, z )  П ( f c ( y ), z ) , обозначим ее Д4
3. Унифицируем Д2 и Д4: P( y, z )  П ( f c ( y ), z ){ f c ( y ) // x}, { y // z} , получаем
P ( f c ( y ), y )  П ( f c ( f c ( y )), y )
4. Получаем резольвенту Д3-Д2: П ( f c ( f c ( y )), y ) , обозначим ее Д5.
5. Унифицируем Д3 и Д5: П ( x, y )  Отв( x, y ){ f c ( f c ( y ) //x}, получим
П ( f c ( f c ( y ), y )  Отв( f c ( f c ( y ), y )
6. Получаем резольвенту Д3-Д5: Отв( f c ( f c ( y ), y )
Ответ можно интерпретировать следующим образом: f c ( y ) - быть родителем у, f c ( f c ( y )
- быть родителем родителя у, следовательно, прародитель у – это родитель родителя у.
31
4.6. Логическое программирование
Приведенный метод резолюций служит основой языков логического программирования.
Главное отличие языков логического программирования от процедурных языков
заключается в том, что программа не указывает как что-то сделать, а описывает некоторые
элементы и связи между ними (модель) и ставит цель, т. е. задает вопрос об этой системе.
На формальном языке это означает проверить истинность предложения на данной
системе. При этом компьютер самостоятельно выбирает стратегию для решения
поставленных вопросов.
Логическая программа представляет собой конечный набор выражений следующих видов:
факты: P (t1 , t 2 ,...t n ) , (1)
правила: Q( s1 , s 2 ,...s k ) : Q1 ( s1 , s 2 ,...s k ),...Qm ( s1 , s 2 ,...s k ) , (2)
где P (t1 , t 2 ,...t n ) , Q( s1 , s2 ,...sk ) - атомарные формулы.
Правило читается как: «если истинны Q1 ( s1 , s2 ,...sk ),...Qm ( s1 , s2 ,...sk ) , то истинно
Q ( s1 , s2 ,...sk ) ». Формула Q( s1 , s2 ,...sk ) называется заголовком правила.
Правила позволяют выводить новые факты из уже существующих. Факты определяют
отношения между объектами.
Для выполнения программы необходимо обратиться к целевому запросу (цели), которая
представляет собой последовательность атомарных формул вида:
R1 ( q1 , q 2 ,...ql ),...R p ( q1 , q 2 ,...ql ) . (3)
Выполнение программы состоит в попытке решить задачу, т .е. доказать целевое
утверждение, используя факты и правила.
Каждому факту (1) поставим в соответствие предложение:
А: x1 , x 2 ,..x s P (t1 , t 2 ,..t n ) , где x1 , x2 ,..xs - все переменные, входящие в формулу
P (t1 , t 2 ,..t n ) .
Каждому правилу (2) поставим в соответствие предложение:
В: y1 , y 2 ,... y r ((Q1 ( s1 , s 2 ,...s k ) & .... & Qm ( s1 , s 2 ,...s k ))  Q( s1 , s 2 ,...s k )) , где
y1 , y 2 ,... y r - все переменные, входящие в формулы
Q1 ( s1 , s 2 ,...s k ),...., Qm ( s1 , s 2 ,...s k ), Q ( s1 , s 2 ,...s k )
Запросу (3) поставим в соответствие формулу:
С: z1 , z 2 ,...z d ( R1 (q1 , q 2 ,...ql ) & ... & R p ( q1 , q 2 ,...ql )) ,
где кванторы связывают все переменные.
Нужно доказать
A1 ,... Ah , B1 ,...B g | C
Для доказательства используется метод резолюций.
32

Тема 5. Теория алгоритмов


5.1. Интуитивное понятие алгоритма
Для решения ряда однотипных задач можно использовать чисто механические
вычислительные процессы. С их помощью искомые величины вычисляются
последовательно из данных величин по определенным правилам. Описание таких
процессов принято называть алгоритмами.
Алгоритм – это строгое предписание, определяющее вычислительный процесс как
последовательность шагов, которая приводит от изменяемых начальных данных к
конечному результату. Это фундаментальное и неопределяемое понятие.
Свойства алгоритмов
2. Массовость: алгоритм должен решать не одну конкретную задачу, а целый
класс подобных задач.
3. Элементарность шагов: алгоритм разбивается на этапы, каждый из которых
должен быть простым и локальным.
4. Детерминированность: после выполнения очередного этапа однозначно
определено, что делать дальше.
5. Результативность: алгоритм должен приводить к решению задачи за конечное
число шагов.
Примеры алгоритмов:
1. Нахождение наибольшего общего делителя.
2. Вычисление ранга целочисленной матрицы.
3. Построение ДНФ и КНФ в логике высказываний.
Интуитивное понятие алгоритма позволяет определить является ли данный процесс
алгоритмом. Но существуют и алгоритмически неразрешимые задачи, т .е. задачи для
которых построить алгоритм в принципе невозможно.
Теория алгоритмов занимается проблемой алгоритмической разрешимости, т. е.
определением того, возможно ли вообще построить алгоритм для задач данного типа.
Но для того, чтобы доказать, что алгоритм не существует, надо точно знать, что такое
алгоритм.
Начиная с 30-х годов XX века, было предложено несколько уточнений понятия
алгоритма. К ним относятся:
 Рекурсивные функции.
 Машина Тьюринга.
 Нормальные алгорифмы Маркова.

5.2. Конкретизация понятия алгоритма


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

5.2.1. Машины Тьюринга


Машина Тьюринга (МТ) – это математическая модель идеализированного
вычисляемого устройства. Для построения МТ надо задать:
1. Конечный алфавит A  {a1 ,...a n , } , где  - пустой символ.
2. Конечное множество внутренних состояний
Q  {q 0 , q1 ,...q m }, где q 0 - заключительное состояние, q 1 - начальное состояние .
МТ представляет собой
33
 Бесконечную ленту, разделенную на ячейки. В каждый момент времени в ячейке
записана буква ai  A . В процессе работы в ячейку может быть записан другой
символ a j  A
 По ячейкам передвигается управляющее устройство (УУ). В каждый момент времени
оно находится напротив какой-то ячейки и имеет некоторое состояние ql  Q .
Машина действует дискретно, т. е. в определенные моменты времени.

У
У
У
Если в какой-то момент времени УУ воспринимает ячейку, содержащую символ ai и МТ
находится в состоянии q l , то МТ может совершить следующие действия:
1. Стереть символ a i и записать на его место символ a j .
2. Переместиться в ячейку слева (Л).
3. Переместиться в ячейку справа (П).
4. Остаться на месте (С).
Эти действия называются программой.
Таким образом, М=<A,Q, П>.
Программу МТ можно представить в виде последовательности команд вида:
q l ai  a j Dq k ,
где D={Л, П, С}. (Л- переход влево, П – переход вправо, С – остаться на месте).
Программу также можно представить в виде таблицы:
q1 q2 …. qn
a1
a2
…. a j Dqk
am

Пример. МТ добавляет к слову единицу.


  1 1 1  
Программа:
q1  q1П (Если в воспринимаемой ячейке символ  , и МТ находится в состоянии q1,
то состояние не меняется, символ не меняется, УУ сдвигается вправо).
q11  q 2 1П (Если в воспринимаемой ячейке символ 1, и МТ находится в состоянии q1, то
это значит, что УУ находится на начале слова, состояние меняется на q2, символ не
меняется, УУ сдвигается вправо).
q 2 1  q 2 1П ( Если в воспринимаемой ячейке символ 1, и МТ находится в состоянии q2, то
это значит, что УУ передвигается по слову, состояние не меняется, символ не меняется,
УУ сдвигается вправо).
q 2   q 0 1С ( Если в воспринимаемой ячейке символ  , и МТ находится в состоянии q2,
то это значит, что УУ дошло до конца слова, состояние меняется на заключительное,
символ меняется на 1, УУ останавливается).
В виде таблицы эту программу можно записать следующим образом:
q1 q2
 q1П q01С
1 q21П q21П
34
Конфигурация МТ (машинное слово) – это слово вида p1 q s ai p 2 , где
p1 – слово в алфавите МТ (может быть пустое),
qs – внутреннее состояние М,
ai – воспринимаемый символ,
p2 – слово в алфавите МТ.
 
МТ переводит конфигурацию  в конфигурацию  (
Т
), если  имеет вид
p1 q j a i p 2 ,  имеет вид p1 q r a k p 2 , q j ai  a k Dq r - одна из команд МТ.

Для рассмотренного выше примера:


1. Команда q1  q1П переводит МТ из конфигурации  1 в конфигурацию  1
p1 p2 p1 p2
111 q1 111  111 q1 111
1 1

2. Команда q11  q 2 1П переводит МТ из конфигурации  1 в конфигурацию  1


p1 p2 p1 p2
111 q11 111  111 q 2 1 111
2 2
и т. д.

МТ останавливается при конфигурации  , если не существует такой конфигурации ,


 
что Т (т. е. q j ai входит в  , а среди команд МТ нет такой, которая бы начиналась с
q j ai ).
Тезис Тьюринга: Любой интуитивный алгоритм может быть реализован с помощью
некоторой машины Тьюринга.

5.2.3. Рекурсивные функции


Будем рассматривать только числовые функции, т. е. функции, аргументы и значения
которых принадлежат множеству натуральных чисел N (N=0,1,2,…).
Если область определения функции совпадает с множеством N n ( f : N n  N ) , то функция
называется всюду определенной, иначе – частично определенной.
Пример:
f(x,y)=x+y – всюду определенная функция,
f(x,y)=x-y – частично определенная функция, т. к. она определена только для x  y .
Рекурсивное определение функции – это такое определение, при котором значение
функции для данных аргументов определяется значениями той же функции для более
простых аргументов или значениями более простых функций.
Примеры:
1. Числа Фибоначчи (1, 1, 2, 3, 5, 8, …) это последовательность чисел f(n), где f(0)=1,
f(1)=1, f(n+2)=f(n)+f(n+1).
2. Факториал (n!=1*2*3*…*n) f(0)=1, f(n+1)=f(n)*(n+1).
Рекурсивные функции строятся на основе трех примитивных (заведомо однозначно
понимаемых и реализуемых) функций. Их также называют простейшими.
1. S(x)=x+1 – функция следования.
Примеры: S(0)=1, S(1)=2, S(-5) – не определена.
2. О(х)=0 – нуль-функция;
35
Примеры: О(0)=0, О(1)=0, О(-5) – не определена.
3. Im(x1,x2,…,xn)=xm, (m=1,2,…n) – функция проектирования (выбора
аргумента).
Пример: I2(1,2,3,4,…n)=2.
С примитивными функциями можно производить различные манипуляции, используя три
оператора: суперпозиции, примитивной рекурсии и минимизации.
1. Оператор суперпозиции (подстановки).
Пусть f – m-местная функция, g1,…gm – n-местные операции на множестве N. Оператор
суперпозиции S ставит в соответствие операциям f и g1,…gm n-местную функцию h.
h( x1 ,..., x n )  f ( g1 (( x1 ,..., x n ),..., g m ( x1 ,..., x n ))
Примеры:
1) Используя оператор суперпозиции, можно получить любую константу.
S(O(x))=0+1=1
S(S(O(x)))=0+1+1=0+2=2
S(S…(O(x))…)=0+n, где число вложений функций следования n.
2) Используя оператор суперпозиции, можно выполнить сдвиг на константу n.
S(x)=x+1
S(S(x))=x+1+1=x+2
S(S…(S(x))…)=x+n.

2. Оператор примитивной рекурсии


Оператор R каждой (n+2)-местной операции f и n-местной операции g ставит в
соответствие (n+1)-местную операцию h=R(f,g), удовлетворяющую следующей схеме:
h( x1 ,...x n ,0)  g ( x1 ,...x n )
h( x1 ,..., x n , y  1)  f ( x1 ,..., x n , y, h( x1 ,..., x n , y ))
Для n=0 схема примитивной рекурсии имеет вид:
h(0)  a , где а – константа,
h( y  1)  f ( y, h( y ))
Пример: Вычисление факториала с использованием оператора примитивной рекурсии
будет выглядеть следующим образом.
h(0)  1
h( y  1)  h( y ) * ( y  1)  f * ( h( y ), y  1)
Схема примитивной рекурсии образует процесс построения функции h, при котором на
нулевом шаге используется функция g, а на каждом последующем шаге значение функции
f от аргументов x1 ,..., xn , номера y предыдущего шага и значения функции h,
вычисленного на предыдущем шаге.
Функция называется примитивно-рекурсивной (ПРФ), если она может быть получена из
простейших функций с помощью оператора суперпозиции или оператора примитивной
рекурсии.
Примеры:
1) f ( x, y )  x  y - примитивно-рекурсивная функция.
Схема примитивной рекурсии:
x  0  I 1 ( x)
x  ( y  1)  S ( x, y )
2) f ( x, y )  x * y - примитивно-рекурсивная функция.
x * 0  O( x)
x * ( y  1)  x * y  x
3. Оператор минимизации (  -оператор)
f ( x1 ,..., x n )   y [ g ( x1 ,..., x n , y )  0] , где y – выделенная переменная.
Работу  -оператора можно описать следующим образом. Выделяется переменная y,
затем фиксируются остальные переменные x1 , x 2 ,..x n . Значение у последовательно
36
увеличивается, начиная с 0. Значением  -оператора будет то значение у, при котором
функция впервые обратилась в 0.
Если функция не обратилась в 0 или принимает отрицательное значение, то значение  -
оператора считается неопределенным.
Пример: g(x,y)=x-y+3;
Зафиксируем х=1 и будем менять y.
 y [ g (1,1)  0]  3 , т. к. 1-1+3=3
 y [ g (1,2)  0]  2 , т. к. 1-2+3=2
 y [ g (1,3)  0]  1 , т. к. 1-3+3=1
 y [ g (1,4)  0]  0 , т. к. 1-1+3=0
Следовательно,  y  4 .
Функция f(x1,x2,…,xn) называется частично рекурсивной (ЧРФ), если она может
быть получена из простейших функций с помощью конечного числа применений
операций суперпозиции, примитивной рекурсии и минимизации.
Пример.
f(x,y)=x-y - частична, т. к. она не определена, если x<y. Чтобы сделать эту функцию
полностью определенной на множестве натуральных чисел N, рассматривают усеченную
разность.
 x  y, x  y
xy 
 0, x  y
Свойства усеченной разности.
1) x  0  x
2) x  ( y  1)  x  y  1
3) ( x  y )  z  x  ( y  z )
 Докажем, что f ( x, y )  x  1 - примитивно-рекурсивная функция.
Функция x  1 примитивно рекурсивна, т. к. по схеме примитивной рекурсии:
1) При х=0 0  1  0  O( x) .
2) ( x  1)  1  x  I 1 ( x, y ).
Т. о. ее можно получить из простейших функций О(х) и Im(x1,…xn) с помощью оператора
простейшей рекурсии R.
 Докажем, что x  y - примитивно-рекурсивная функция.
По схеме примитивной рекурсии
1) x  0  x  I 1 ( x)
x  ( y  1)  ( x  y )  1  z  1
2)
z
Т. о. функцию x  y можно получить с помощью операции примитивной рекурсии из
функций I1 ( x) и h(x,y,z)= z  1 .
 Функция x  y  x  y  y  x также является примитивно-рекурсивной
 f ( x, y, z )  x  ( z  y ) - примитивно-рекурсивная функция.
 Функцию f(x,y)=x-y можно получить с помощью оператора минимизации:
f ( x , y )   z [ x  ( z  y )  0] .
Следовательно, функция f(x,y)=x-y является частично-рекурсивной функцией.

Всюду определенная частично-рекурсивная функция является общерекурсивной


(ОРФ).
Для алгоритмических проблем типичной является ситуация, когда требуется найти
алгоритм для вычисления числовой функции f(x1,…xn). Числовые функции, значения
которых можно вычислить с помощью некоторого алгоритма, называются
вычислимыми функциями. Это понятие интуитивно, т. к. интуитивно понятие
алгоритма.
37
Функция f(x1,…xn) эффективно вычислима, если существует алгоритм, с помощью
которого можно найти f(k1,…kn), если известны k1,…kn.
Тезис Черча. Всякая эффективно вычислимая функция является частично-
рекурсивной функцией.
В формулировку тезиса Черча входит понятие эффективной вычислимости. Поэтому
его нельзя ни доказать, ни опровергнуть в математическом смысле.
Частичная рекурсивность – это уточнение понятия вычислимой функции. С его
помощью можно уточнять или опровергать вычислимость.
Любая частично-рекурсивная функция является вычислимой по Тьюрингу и наоборот.

5.2.3. Нормальные алгорифмы Маркова


Алгоритмическая система Маркова строится по тем же принципам, что и МТ, но
носит более простой и интуитивно понятный характер.
Нормальные алгорифмы Маркова (НАМ) представляются нормальной схемой
подстановок, которая состоит из совокупности подстановок, расположенных в
определенном порядке.
Пусть Х – некоторый конечный алфавит, F(X) – слова алфавита, e  F ( X ) - пустое
слово. Если p, q  F ( x ) , то выражения p  q и p  .q называются формулами
подстановки в алфавите Х:
p  q - простая подстановка;
p  .q - окончательная подстановка.
Символы → и . не принадлежат Х.
Слова p и q могут быть пустыми.
Строка R входит в строку L, если L имеет вид L1RL2. Подстановка применима к
слову, если строка соответствующая левой части подстановки входит в слово.
Применение заключается в замене в преобразующем слове левой строки – правой:
L1 pL2  L1 qL2
Механизм работы НАМ:
Дано преобразуемое слово – цепочка символов фиксированного алфавита и
нормальная схема подстановок, содержащая фиксированную последовательность простых
и заключительных подстановок.
1) Слово всегда просматривается слева направо. Схема подстановок
просматривается, начиная с первой подстановки, и, если подстановку можно применить,
то она применяется к самому левому вхождению этой строки в преобразуемое слово.
2) Работа алгоритма заканчивается если:
 ни одна из подстановок не применима,
 использована заключительная подстановка.
Может возникнуть ситуация, когда процесс не закончится никогда. В этом случае
считают, что алгоритм не применим к слову.
Пример.
Х={x,y,z};
Нормальная схема подстановок:
xx  y
xy  x
yzy  x
zz . z
yy  x
Преобразуемое слово:
xxxyyyzzz →yxyyyzzz→yxyyzzz →yxyzzz→yxzzz→yxzz
Пример.
38
X={А,Б,В,Г,…,Я};
Нормальная схема подстановок:
ХК
МР
КАЛОН
РУ.С
Преобразуемое слово:
МУХАМУКАРУКАРУЛОНСЛОН
Пример 9:
X={a,b};
Нормальная схема подстановок:
a→.e
b→b
Преобразуемое слово:
bbbbbb - схема не применима.
Преобразуемое слово:
abab →bab
Пример.
Х={х,у,х-1,у-1};
Нормальная схема подстановок:
х х-1→е
х-1х→е
у у-1→е
у-1у→е
Преобразуемое слово:
ххухуу-1х-1ух→ ххухх-1ух→ ххуух
Пример 10:
Х={x1, …,xn};
Нормальная схема подстановок:
x1→e
x2→e

xn→e
Преобразуемое слово переписывается в пустое.
Пусть R и Q нормальные алгорифмы над алфавитом Х и pF(x). Запись
R ( p )  Q( p ) означает, что или оба алгорифма R и Q не применимы к слову p, или оба
применимы и R ( p )  Q ( p ) .
Два алгорифма R и Q называют эквивалентными относительно алфавита Х, если
R ( p )  Q( p ) каждый раз, когда pF(x) и хотя бы одно из слов R(p) или Q(p) определено
и тоже принадлежит F(x).
Если для всех pF(x) R( p)  Q( p) , то R и Q называются полностью
эквивалентными.
Пусть X={1}, а X   {1,*} . Тогда всякое натуральное число n можно записать в
виде слова в алфавите X  :
0  1,1  11, 2  111, 3  1111 ,...
Поставим в соответствие вектору (n1, n2, …nk), где n1, n2, …nk – натуральные числа,
слово в алфавите X  вида n1 * n2 * ... * nk , которое обозначим (n1 , n2 ,..., nk ) . Например,
вектору (4,0,2) соответствует слово 11111*1*111.
Пусть f: Nk→N – некоторая частичная функция и Rf обозначает алгорифм в
алфавите X  такой, что
39
R f ( k1 , k 2 ,...k n )  f ( k1 , k 2 ,...k n )
тогда и только тогда, когда хотя бы одна из частей
равенства определена. При этом считается, что алгорифм Rf не применим к словам
отличным от вида (n1 , n2 ,..., nk ) .
Функция f называется частично определимой по Маркову, если существует
нормальный алгорифм Q над X  полностью эквивалентный Rf над X  . Если функция
определена полностью, то ее называют просто вычислимой по Маркову.
Теорема: Простейшие функции O(x)=0, S(x)=x+1 и Im(x1,x2,…,xn)=xm вычислимы по
Маркову.
Доказательство сводится к построению соответствующих алгорифмов.
1.Функцию O(x)=0 реализует следующий алгорифм R0:
X  ={1,*},   X  ;
Нормальная схема подстановок:
*→* (1)
α11→ α1 (2)
α1→.1 (3)
е→ α (4)
Преобразуемое слово:
р=111…11.
Тогда по формуле (4) получаем р= α 11…11.
Применим формулу (2) и получим: р= α 11…11→ α 1…11→ α 1.
Применяем формулу (3) и получаем α 1→1.
Так как 1 – это 0 в алфавите Х, то R0 и является искомым алгоритмом.
2. Функцию S(x)=x+1 реализует следующий алгорифм Rs:
X  ={1,*},   X  ;
Нормальная схема подстановок:
*→* (1)
α1→.11 (2)
е→ α (3)
Преобразуемое слово:
р=111…11.
Тогда по формуле (3) получаем р= α 11…11 (n единиц).
Применим формулу (2) и получим: р= 111…11 (n+1 единица). Так как всякое
натуральное число n можно записать в виде слова в алфавите X  :
0  1,1  11, 2  111, 3  1111 ,... , то мы реализовали алгоритм RS(n)=n+1.
Этот алгоритм применим только к тем словам, которые являются натуральными
числами.
3. Алгорифм RI имеет более сложную структуру, с ним можно ознакомиться
самостоятельно в учебнике «Лекции по дискретной математике», авторы: Капитонова
Ю.В. и др.
Теорема: Всякая частично рекурсивная функция частично рекурсивна по Маркову.
Обратная теорема: всякая частично вычислимая по Маркову функция является
частично рекурсивной.

5.3. Алгоритмически неразрешимые проблемы


Массовая проблема – бесконечный класс однотипных (индивидуальных) проблем.
Пример.
Индивидуальная проблема: Обладает ли заданным свойством Q конкретная частично-
рекурсивная функция (ЧРФ).
Совокупность всех таких задач (для всех ЧРФ) образует массовую проблему
распознавания свойства Q.
40
Будем рассматривать только задачи, дя которых имеет смысл ответ ДА или НЕТ.
Введем обозначения: п – индивидуальная проблема, П – массовая проблема, п  П ,
f(п) – характеристическая функция.
 1, если п  П имеет ответ ДА
f (п)  
0, если п  П имеет ответ НЕТ
Массовая проблема является алгоритмически разрешимой, если f(п) является вычислимой,
т. е. существуют такие алгоритмы, с помощью которых можно решить любую
индивидуальную проблему.
Решая конкретную массовую проблему, следует считаться с возможностью того , что она
может оказаться алгоритмически неразрешимой, поэтому необходимо иметь
представление о технике доказательства неразрешимости.
Основной метод, применяемый в доказательствах алгоритмической неразрешимости,
базируется на следующем рассуждении.
Пусть существуют две массовые проблемы П1 и П2. Пусть существует алгоритм А,
который по всякой индивидуальной задаче п1  П1 строит индивидуальную задачу
п 2  П 2 , такую, что выполняется:
п1 имеет ответ «ДА» тогда и только тогда, когда п 2 имеет ответ «ДА». В этом случае
говорят, что проблема П1 сводится к проблеме П2.
 Если проблема П1 неразрешима, то проблема П2 также неразрешима.
Доказательство (от противного).
Пусть проблема П2 разрешима. Тогда можно построить разрешающий алгоритм для
проблемы П1. Берем произвольную индивидуальную задачу п1  П1 . Имея алгоритм А,
строим индивидуальную задачу п 2  П 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
….
41
qj 10………0 2j+5

Команде МТ I : qa  q a d поставим в соответствие двоичное число:
Код( I )  Код( q) Код(a )  Код(q ) Код (a ) Код(d ) .
Упорядочим команды МТ в соответствии с лексикографическим порядком левых частей
команд 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
10 710 410 510 410 3 10 710 610 510 610 3
Тогда Код(Т)=              
I1 I2
Такое кодирование является алгоритмической процедурой. Зная код МТ можно
однозначно восстановить множество ее команд. Код МТ можно рассматривать как
двоичную запись натурального числа. Такое число называется номером МТ.
5.3.1.2. Самоприменимость МТ
Рассмотрим машины Тьюринга, внешние алфавиты которых содержат символы 0,1
(наряду с другими). Для каждой машины Тьюринга Т построим Код(Т), который является
(0,1)-словом, и запустим машину Т в начальной конфигурации q 1Код(Т). Если машина Т
останавливается (т.е. попадает в заключительное состояние) через конечное число шагов,
то она называется самоприменимой, в противном случае – несамоприменимой.
Существуют как самоприменимые, так и несамоприменимые машины Тьюринга.
Например, несамоприменимой будет машина Т1, у которой все команды имеют вид
qiaj→qiajС (в правых частях команд нет заключительного состояния), самоприменимой
будет машина Т1, у которой все команды имеют вид q iaj→q0ajE (в правых частях всех
команд имеется заключительное состояние). Проблема самоприменимости состоит в том,
чтобы по любой машине Тьюринга Т определить, является ли она самоприменимой или
нет. Будем считать, что машина Тьюринга М решает проблему самоприменимости, если
для любой машины Т начальную конфигурацию q1Код(Т) она переводит в q01,
если машина Т самоприменима, и в q00, если машина Т несамоприменима.
Теорема 1. Не существует машины Тьюринга М, решающей проблему
самоприменимости, т.е. проблема самоприменимости алгоритмически неразрешима.
Доказательство (от противного).
Предположим противное, т.е. пусть существует машина Тьюринга М, решающая
проблему самоприместимости в указанном выше смысле. Построим новую машину М 0,
добавив новое состояние q0* и объявив его заключительным, а также добавив новые
команды для состояния q0, которое было заключительным в М:
q01→q01С (1)
q00→q0* 0С (2).
Рассмотрим теперь работу машины М0.
Пусть Т – произвольная машина. Если Т – самоприменима, то начальная конфигурация
q1Код(Т) перейдет с помощью команд машины М через конечное число шагов в
конфигурацию q01, далее применяется команда (1), и машина М0 никогда не остановится.
Если Т – несамоприменима, то начальная конфигурация q1Код(Т) перейдет с помощью
команд машины М через конечное число шагов в конфигурацию q 00, далее применяется
команда (2), и машина М0 остановится.
Таким образом, машина М0 применима к кодам самоприменимых машин Т и неприменима
к кодам самоприменимых машин Т.
42
Теперь рассмотрим Код(М0) и применим машину М0 к начальной конфигурации
q1Код(М0). Сама машина М0 является либо самоприменимой, либо несамоприменимой.
Если М0 самоприменима, то по доказанному она никогда не остановится, начав с
q1Код(М0), и потому она несамоприменима. Если М0 несамоприменима, то по
доказанному, она останавливается через конечное число шагов, начав с q1Код(М0), и
потому она самоприменима. Получили противоречие, которое является следствием
допущения существования машины М0, решающей проблему самоприменимости, что и
требовалось доказать.

5.3.2. Проблема останова


Проблема останова заключается в том, чтобы по любой машине Тьюринга Т и слову Р в ее
внешнем алфавите узнать, применима ли Т к начальной конфигурации q 1Р. Проблема
останова алгоритмически неразрешима, т.к. если бы она была разрешимой, то, взяв в
качестве Р слово Код(Т), мы получили бы разрешимость проблемы самоприменимости.

5.3.3. Разрешимые и неразрешимые задачи математики


Выявлению разрешимых и неразрешимых задач в различных разделах математики
посвящено много исследований. Приведем без доказательства некоторые из таких
проблем.
1. Проблема распознавания истинности формул элементарной арифметики. Формулы
строятся с помощью арифметических действий (сложения и умножения), логических
операций (логических связок и кванторов) и знака равенства. Проблема состоит в том,
чтобы найти алгоритм, который по любой такой формуле определяет, истинна она или нет
на натуральном ряду. Неразрешимость этой проблемы установил Гедель К. (1931).
2. Проблема разрешения для логики предикатов первого порядка. Нужно найти алгоритм,
который бы проверил общезначимость формулы алгебры предикатов. Неразрешимость
этой проблемы установил Черч А. (1936).
3. Проблема сочетаемости Поста. Конечное множество V пар слов в некотором алфавите
называется сочетаемым, если для некоторых пар (A1,B1),…, (As,Bs) из V выполнено
равенство A1…As=B1…Bs. Нужно найти алгоритм, который по всякому множеству V пар
слов узнает сочетаемо оно или нет. Неразрешимость данной проблемы установил Пост Э.
(1946).
4. Проблема представимости матриц. Рассматриваются (nxn)- матрицы над кольцом целых
чисел Z. Пусть даны произвольные матрицы U1…Uq и U. Нужно иметь алгоритм,
который бы решал, верно ли U =Ui ,...,Uip , для некоторых i1,…,ip. Неразрешимость
данной проблемы, начиная с n=4, установлена Марковым А.А. (1958).
5. Проблема тождества элементарных функций вещественного переменного. Определим
класс термов Т индуктивно: x –переменная, п- число – термы. Если u,v – термы, то (u+v),
(u*v),(u/v), sin(u), |u| - термы. Нужно иметь алгоритм, который по любым двум термам из
Т узнает, задают ли они одну и ту же функцию одного вещественного переменного x.
Неразрешимость данной проблемы установил Матиясевич Ю.В. (1973).
6. Проблема полноты автоматных базисов. Дан набор конечных автоматов (базис) с одним
множеством входов и выходами, входящими в множество входов. Строятся схемы с
помощью присоединения базисного автомата и введения обратной связи. Каждая схема
реализует автомат. Если схемами в данном базисе может быть реализован любой автомат
в данном алфавите, то базис называется полным, в противном случае – неполным.
Проблема полноты заключается в том, чтобы узнавать по заданному базису – является он
полным или нет. Неразрешимость данной проблемы установил Кратко М.И.
(1966).
7. Десятая проблема Гильберта из 23 поставленным им в 1900 году формулируется так:
«Пусть задано диофантово уравнение (многочлен вида p(x1,…,xn)=0) с произвольными
43
неизвестными и целыми рациональными коэффициентами. Указать способ, при помощи
которого возможно после конечного числа операций установить, разрешимо ли уравнение
в целых рациональных числах.» Неразрешимость 10-й проблемы Гильберта установлена
Матиясевичем Ю.В. (1970).

5.4. Характеристики сложности вычислений


В общей теории алгоритмов изучаются лишь принципиальная возможность
алгоритмического решения задачи. При рассмотрении конкретных задач не обращается
внимания на ресурсы времени и памяти для соответствующих им разрешающих
алгоритмов. Однако нетрудно понять, что принципиальная возможность
алгоритмического решения задачи еще не означает, что оно может быть практически
получено. Поэтому возникает потребность уточнить понятие алгоритмической
разрешимости, введя характеристики сложности алгоритмов, позволяющие судить об их
практической реализуемости.
В качестве модели вычислительного устройства выберем МТ. Пусть МТ вычисляет
функцию f(x). Определим функцию tT(x), равную числу шагов машины Т, выполненному
при вычислении f(x), если f(x) определено. Если f(x) не определено, то значение t T(x)
считается неопределенным. Функция tT(x) называется временной сложностью.
Активной зоной при работе машины Т на слове х называется множество всех ячеек ленты,
которые либо содержат непустые символы, либо посещались в процессе вычисления f(x)
устройством машины Т. Определим функцию sT(x), равную длине активной зоны при
работе машины Т на слове х, если f(x) определено. Если f(x) не определено, то значение
ST(x) считается неопределенным. Функция ST(x) называется емкостной (ленточной)
сложностью.
Введенные функции ST(x) и tT(x) являются словарными.
Удобно ввести для рассмотрения функции натурального аргумента
t T ( n)  max t T ( x )
   
x n
S T (n)  max S T ( x )
   
x n

Они также называются функциями временной и емкостной


сложности (по худшему случаю).

5.5. Классы сложности задач


5.5.1. Р задачи
Пусть П – некоторая массовая задача, характеризуемая множеством параметров, IП –
индивидуальная задача, в которой эти параметры фиксированы. Пусть с массовой задачей
П связана и зафиксирована схема кодирования α, которая ставит каждой индивидуальной
задаче IП в соответствие слово α(I) в некотором алфавите А. При этом под размером
задачи I понимается длина слова α(I). Пусть Т –машина Тьюринга, решающая задачу П и
t T (n)  max t T ( I )
   
I ,  (I )  n
- соответствующая функция временной сложности (по худшему
случаю).
О-символика: говорят, что неотрицательная функция f(n) не превосходит по порядку
функцию g(n) и пишут f(n)=O(g(n)), если существует такая константа С, что f(n)≤C*g(n)
для любого nN.
Говорят, что машина Т решает задачу П за полиномиальное время, если tT (n)  O( p (n))
44
для некоторого полинома р. В противном случае говорят, что МТ Т решает задачу П за
экспоненциальное время. К экспоненциальным оценкам относят, например, оценки вида
log n e
О ( n 2 ) , т. е. это оценки, которые превосходят любой полином, но меньше, чем О ( 2 n )
для любого е>0.
Про задачу П говорят, что она разрешима за полиномиальное время, если существует
машина Тьюринга Т, решающая ее за полиномиальное время. Обозначим через Р класс
задач, разрешимых за полиномиальное время.
Имеется существенное различие между алгоритмами полиномиальной и
экспоненциальной сложности. Ясно, что любой полиномиальный алгоритм более
эффективен, кроме того, такие алгоритмы лучше реагируют на рост производительности
компьютеров.
Рассмотрим такой параметр как размер решаемой задачи на ЭВМ за единицу времени с
помощью данного алгоритма. Тогда изменение данного параметра при переходе к ЭВМ в
100 раз и в 1000 раз большей производительности для различных функций временной
сложности показан в таблице:
Функция временной Размер решаемой То же на ЭВМ в То же на ЭВМ в
сложности задачи за сутки 100 раз быстрых 1000 раз быстрых

n N1 100 N1 1000 N1
n2 N2 10 N2 31,6 N2
3
n N3 4,64 N3 10 N3
2n N4 6,64+N4 9,97+N4
n
3 N5 4,19+N5 6,29+N5
Из таблицы видно, что в случае полиномиальных алгоритмов размер решаемой задачи при
увеличении производительности ЭВМ увеличивается на мультипликативную константу,
тогда как для экспоненциальных алгоритмов имеет место увеличение на аддитивную
константу.
Полиномиальные алгоритмы обладают свойством “замкнутости”, их можно
комбинировать полиномиальные, используя один в качестве “подпрограммы” другого и
при этом результирующий алгоритм будет полиномиальным. В силу приведенных причин
используется следующая терминология: полиномиальные алгоритмы называют
эффективными, полиномиально решаемые задачи называют легкорешаемыми, а
экспоненциально решаемые задачи называют труднорешаемыми.
Для практики важным является классификация задач по признаку труднорешаемости,
хотя следует заметить, что установление легкорешаемости задачи еще не означает ее
практическую решаемость. Например, установление полиномиальной оценки O(n 1000) не
гарантирует практической решаемости уже при начальных значениях n. Аналогичное
замечание можно сделать относительно труднорешаемости. Заметим, что
труднорешаемость задачи может быть связана с тем, что ее решение настолько велико,
что не может быть записано в виде выражения, длина которого была бы ограничена
полиномом от длины входа. Чтобы исключить этот тип труднорешаемости,
рассматривается только такие задачи, которые имеют «короткий»
ответ.
Рассмотрим несколько примеров.
Пусть М={1,2,…, n} – конечное множество, R  M  M бинарное отношение на М.
Рассмотрим задачу проверки – является ли R отношением эквивалентности
(рефлексивное, симметричное, транзитивное). Будем задавать индивидуальную
задачу матрицей
АR  ( aij ), i, j  1, n, где
 1, если (i, j)  R
aij  
0, в противном случае
45
Ясно, что R будет отношением эквивалентности тогда и только тогда, когда матрица AR
имеет единичную диагональ, симметрична и выполнено соотношение
bij  a ij , i, j  1, n, где (bij )  AR 2 - матрица отношения R2.

Кроме того, выполнено AR 2  AR  AR , где имеется в виду булево умножение матриц. Ясно,
что сложность рассматриваемой задачи О(n2).
2. Бинарное отношение R называется связным, если для любых i, j  1, n выполняется iRj
или jRi.
Бинарное отношение называется Эйлеровым, если элементы R
R:(i1,j1);(i2,j2);…(it,jt), t  R
можно упорядочить так, что выполнено
( j1 , i 2 )  R, ( j 2 , i3 )  R,....( jt 1 , it )  R, ( jt , i1 )  R .
Можно доказать, что связное отношение R является эйлеровым тогда и только тогда,
когда число единиц в матрице AR совпадает в i-ом столбце и в i-ой строке для каждого
i  1, n . Это дает алгоритм сложности O(n2), проверяющий эйлеровость отношения R.
3. Бинарное отношение R называется гамильтоновым, если элементы М i1,i2,…,in можно
упорядочить так, что выполняется соотношение
(i1 , i 2 )  R, (i 2 , i3 )  R,....(i n 1 , i n )  R, (i n , i1 )  R (*)
В настоящее время неизвестно полиномиального алгоритма, который проверял бы
гамильтоновость отношения R.
Тривиальный алгоритм требует n! упорядочений множества М и проверки условий (*),
что, конечно, превосходит по величине любой полином от n.
4. Пусть f(x1,…,xn) – формула от булевых переменных x1,…,xn в некотором
фиксированном базисе В. Формула f(x1,…,xn) называется выполнимой, если существует
набор значений переменных x1 ,..., xn , такой, что f(x1,…,xn)=1.
Формула f(x1,…,xn) называется мультиафинной, если она имеет вид
f ( x1 ,... x n )  ( xi1  xik  ...a1 )...( x s1  ... x sk  at ),
1 t

где a1,…,at – константы.


То есть f представляет собой конъюнкцию линейных форм.
Рассмотрим задачу проверки выполнимости мультиафинной формулы. Ясно, что
существование выполняющего набора для мультиафинной формулы сводится к
существованию решения линейной системы уравнений. Алгоритм Гаусса дает
оценку O(n3), поэтому рассматриваемая задача полиномиальна.
Пусть формула f(x1,…,xn) имеет конъюнктивную нормальную форму, т.е. имеет вид:
f ( x1 ,...x n )  ( xi1  ...  xik )...( x s1  ...  x sk ) .
1 t

Рассмотрим задачу проверки выполнимости для формул КНФ.


В настоящее время неизвестно алгоритма полиномиальной сложности решения данной
задачи. Тривиальный алгоритм требует перебор 2n наборов значений переменных и
вычисления для каждого из них значения формулы.

5.5.2. NP задачи
Определим теперь класс NP задач распознавания, т.е. имеющих ответ «ДА» или «НЕТ».
Для того, чтобы задача I содержалась в классе NP требуется , чтобы если I
имеет ответ “ДА”, существовало бы слово с(I) длины, ограниченной полиномом от
размера I, такое, что задача с начальными данными с(I), I принадлежит Р. Слово с(I)
называется удостоверением или догадкой для задачи I.
Рассмотрим примеры.
1. Пусть дана задача проверки гамильтоновости бинарного отношения R  M  M на
множестве М={1,2,…,n}. Если R – гамильтоново отношение, то удостоверением этого
будет последовательность элементов М: с(R)=i1i2…in. Имея пару с(R), R, можно проверить
соотношение (*) и убедиться является ли R – гамильтоновым отношением.
46
Следовательно, задача проверки гамильтоновости бинарного отношения лежит в классе
NP.
2. Пусть дана задача проверки выполнимости формул КНФ.
Если f(x1,…,xn) – выполнимая функция, то удостоверением этого будет соответствующий
набор x1 ,...x n . Имея пару x1 ,... x n , f(x1,…,xn), легко убедиться, что f(x1,…,xn)
выполнима.
Формализуем эти идеи.
Класс NP определяется через понятие недетерминированного алгоритма. Введем понятие
недетерминированной машины Тьюринга.
Схема недетерминированной машины Тьюринга:

…… -3 -2 -1 0 1 2 n
* x1 x2 ……... xn

УМ q1

Отличие недетерминированной машины Тьюринга от обычной заключается в том,


что недетерминированная машина (НТ) имеет дополнительно угадывающий модуль (УМ),
который может только записывать на ленту слова из внешнего алфавита. Поскольку речь
идет о задачах распознавания, то удобно считать, что машина имеет два заключительных
состояния qY и qN, соответствующие ответам «ДА» и «НЕТ» соответственно. Работа
машины имеет две стадии:
1-я стадия – угадывание. В начальный момент на ленте записано слово x=x1…xn – код
индивидуальной задачи I, начиная с ячейки 1. В ячейке 0 записан знак раздела *.
Угадывающий модуль просматривает ячейку –1. Затем УМ пишет произвольное слово
с(х) по одной букве за такт в каждой ячейке с номерами – -1,-2,-3,… . В итоге 1-ой стадии
конфигурацией машины будет с(х)*q1x.
2-ая стадия – решение. На этой стадии недетерминированная машина работает как
обычная машина Тьюринга с конфигурацией с(х)*q1x. Если машина через конечное
число шагов приходит в состояние qY, то говорим, что она принимает конфигурацию
с(х)*q1x.
Будем говорить, что недетерминированная машина принимает x, если существует слово
с(х), такое что конфигурация с(х)*q1x принимается.
Определим время работы недетерминированной машины t НТ ( х)  t1 ( x)  t 2 ( x) (если х
принимается) где t1(x) – время работы на стадии 1, т.е., по определению, t1 ( x)  C ( x) ;
t2(x) - время работы на стадии 2, т.е., по определению, t 2  t T (c( x) * x) , где tT – время
работы обычной машины Тьюринга.
t НТ ( х)  max t НТ ( х)
Определим    
x, x n

Недетерминированная машина НТ решает задачу П за полиномиальное время, если


t НТ ( x )  O ( p (n)) для некоторого полинома р.
Временная функция определена только для тех индивидуальных задач х, которые
принимаются машиной НТ.
Определим класс задач NP как множество задач, для которых существует
недетерминированная машина Тьюринга, принимающая за полиномиальное время те и
только те слова, которые соответствуют индивидуальным задачам с ответом «ДА».
Разберем теперь вопрос о взаимоотношении между введенными классами Р и NP. Ясно,
что P  NP . Имеется много причин считать это включение строгим, однако этот факт
пока не доказан (1992).
47
Теорема. Если задача ПNP, то существует такой полином р, что П может быть решена
детерминированным алгоритмом со сложностью O(2p(n)), где n – размер П.
Выводы.
1. Алгоритм с трудоемкостью O(n) называется линейным. Линейный алгоритм
ограниченное число раз просматривает входную информацию и для большинства
практических задач является неулучшаемым. Если найден линейный алгоритм для
решения задачи, то на этом ее решение заканчивается.
2. Алгоритм, сложность которого равна О(nc), где с – константа называется
полиномиальным (класс Р). Говорят, что массовая задача решается эффективно, если
существует алгоритм, имеющий полиномиальную сложность. Такая формализация не
лишена недостатков. Например, алгоритм имеющий порядок О(n 1000000) вряд ли будет
эффективно работать. Но на практике появление какого-нибудь полиномиального
алгоритма приводит в конце концов к алгоритму, трудоемкость которого оценивается
полиномом небольшой степени. В большинстве случаев эта степень не превосходит 3:
O(n3), O(n2), O(n log(n)), O (n n ) .
Пример: нахождение кратчайшего маршрута во взвешенном графе.
3. Алгоритм, сложность которого равна О(сn), где с  2 называется экспоненциальным
(класс E).
Пример: задача проверки совпадения булевых функций f(x1,…,xn) и g(x1,…,xn). Решение
задачи состоит в составлении таблиц истинности функций с количеством строк 2n.
4. NP-сложные задачи.
Пример: Задача коммивояжера из теории графов. Перебор всех маршрутов в графе из n
вершин требует рассмотрения n! вариантов. Но n! растет быстрее, чем 2n.
В недетерминированном алгоритме варианты выбираются случайным образом. Тогда,
если повезет, то можно относительно быстро найти вариант, который буде удовлетворять
заданным ограничениям. Такие задачи, имеющие недетерминированное решение, которое
иногда удается найти за полиномиальное время и называют NP сложными.
Существует мнение, что детерминированных алгоритмов решения таких задач не
существует. NP сложные задачи не имеют гарантированных оценок времени решения.
Даже незначительное изменение исходных данных приводит к резкому увеличению
времени решения.
Примеры.
1. Выполнимость. Дана КНФ, представляющая булеву функцию. Выяснить является ли
она выполнимой.
2. Клика. Определить содержит ли граф клику мощности К.
3. Независимость. Определить содержит ли граф независимое множество из К вершин.
4. Ядро графа.
5. Гамильтонов цикл.
6. Раскраска графа. Определить существует ли правильная раскраска графа посредством К
цветов.
Имеется ряд задач, входящих в NP класс, для решения которых не найдено
полиномиальных алгоритмов.