В логике предикатов рассматриваются следующие нормальные формы:
· КНФ, ДНФ – конъюнктивная и дизъюнктивная нормальные формы;
· ПНФ – предваренная нормальная форма
· СНФ – сколемовская нормальная форма
Определение (предваренной нормальной формы). Формула j находится в предваренной нормальной форме, если она имеет вид
j: (Q1x1)…(Qnxn)s
где Qi – квантор $ или " и s - формула без кванторов (префикс j, матрица j).
Использование ПНФ – для сравнения, проверки эквивалентности формул, для приведения к СНФ.
Алгоритм (приведения к предваренной нормальной форме)
1. Избавляемся от операций {«, ®} с помощью формул
(A«B) « (A®B)Ù(B®A)
(A®B) « (ØA Ú B)
2. Продвижение знака отрицания до атома с помощью формул
Ø(A Ù B) « (ØA Ú ØB)
Ø(A Ú B) « (ØA Ù ØB)
ØØA « A
Ø(("x)A) « ($x)(ØA)
Ø(($x)A) « ("x)(ØA)
3. Кванторы выносятся наружу с помощью формул
(("x)A(x)) Ù (("x)B(x)) « ("x)(A(x) Ù B(x))
(($x)A(x)) Ú (($x)B(x)) « ($x)(A(x) Ú B(x))
a. Если формула B не содержит свободных вхождений переменной x, то
(("x)A(x)) Ù B « ("x)(A(x) Ù B)
(($x)A(x)) Ù B « ($x)(A(x) Ù B)
(("x)A(x)) Ú B « ("x)(A(x) Ú B)
(($x)A(x)) Ú B « ($x)(A(x) Ú B)
b. Пусть Q1, Q2 – кванторы $ или ". Формула B не содержит свободных вхождений переменной x. Переменная z не входит в формулу B, и не входит свободно в формулу A. B(z) – результат замены x на z.
Определение (сколемовской нормальной формы). Формула j находится в сколемовской нормальной форме, если формула находится в ПНФ и используется только квантор всеобщности (").
Теорема (Сколема). Для каждого предложения j логики предикатов можно построить универсальное предложение j* (СНФ) такое, что j выполнимо тогда и только тогда, если j* выполнимо.
Алгоритм (приведения к сколемовской нормальной форме).
1. Строим ПНФ предложения j.
2. Последовательно, слева - направо вычеркиваем каждый квантор существования ($y), заменяя все вхождения переменной y на новый, еще не использованный функциональный символ f, в качестве аргумента f берем все переменные, связанные предшествующими ($y) кванторами всеобщности.
Функциональный символ f называется сколемовской функцией.