EssayAI
Блог
Блог
Математика и алгоритмы

Предварённая нормальная форма: приведение предикатов

19 июня 2026Время чтения: 8 минут
#предварённая нормальная форма#кванторы#логика предикатов#сколемизация#префикс и матрица
Предварённая нормальная форма: приведение предикатов

Предварённая нормальная форма (ПНФ, она же пренексная) - это стандартный вид формулы логики предикатов, в котором все кванторы собраны в начале, а дальше идёт бескванторное ядро. К нему приводят перед сколемизацией, перед проверкой выполнимости методом резолюций и просто чтобы увидеть логическую структуру утверждения. Приведение всегда выполнимо и состоит из нескольких механических шагов: убрать импликации, протолкнуть отрицания внутрь, развести одноимённые переменные и вынести кванторы наружу. Ниже разберём каждый шаг и типичные места, где студенты теряют эквивалентность. Если нужно прогнать конкретную формулу, соберите запрос в форме ниже и получите пошаговый вывод.

Что такое предварённая нормальная форма

Формула находится в предварённой нормальной форме, если она имеет вид

Q1x1 Q2x2 … Qnxn M,Q_1 x_1\, Q_2 x_2\, \ldots\, Q_n x_n\, M,

где каждый QiQ_i - это квантор всеобщности ∀\forall или существования ∃\exists, а MM - бескванторная формула, называемая матрицей. Цепочка кванторов Q1x1…QnxnQ_1 x_1 \ldots Q_n x_n называется префиксом. Никакого квантора внутри матрицы быть не должно: они все вынесены влево.

Простой пример. Формула ∀x ∃y (P(x)→Q(x,y))\forall x\, \exists y\, (P(x) \to Q(x, y)) уже в ПНФ: префикс ∀x ∃y\forall x\, \exists y, матрица P(x)→Q(x,y)P(x) \to Q(x, y). А формула ∀x P(x)→∃y Q(y)\forall x\, P(x) \to \exists y\, Q(y) не в ПНФ - квантор ∃y\exists y стоит внутри, его ещё предстоит вынести наружу.

Ключевая теорема: для любой формулы логики предикатов существует логически эквивалентная ей формула в предварённой нормальной форме. То есть приведение не меняет истинностного значения ни на одной интерпретации - в отличие от последующей сколемизации, которая сохраняет лишь выполнимость.

Структура предварённой нормальной формы: слева цепочка кванторов префикс, справа бескванторная матрица
Структура предварённой нормальной формы: слева цепочка кванторов префикс, справа бескванторная матрица

Зачем приводить к ПНФ

Предварённая форма - не самоцель, а промежуточный этап. Её используют, чтобы:

  • подготовить формулу к сколемизации - устранению кванторов существования через функции Сколема; сколемизация определена именно для пренексных формул;
  • получить клаузальную форму для метода резолюций в автоматическом доказательстве теорем;
  • проверить логическую структуру утверждения: порядок ∀\forall и ∃\exists в префиксе сразу показывает, от чего зависит выбор объекта;
  • сравнить две формулы на эквивалентность, приведя обе к каноническому виду.

Особенно важен порядок кванторов. ∀x ∃y R(x,y)\forall x\, \exists y\, R(x, y) и ∃y ∀x R(x,y)\exists y\, \forall x\, R(x, y) - это разные утверждения: в первом yy выбирается под каждое xx, во втором один yy годится для всех xx. Поэтому при выносе кванторов их относительный порядок менять нельзя.

Шаг 1: убрать импликации и эквиваленции

Кванторы удобно выносить только из формул, построенных на ¬\neg, ∧\land, ∨\lor. Поэтому сначала избавляемся от →\to и ↔\leftrightarrow по тождествам:

A→B≡¬A∨B,A↔B≡(¬A∨B)∧(¬B∨A).\begin{aligned} A \to B &\equiv \neg A \lor B,\\ A \leftrightarrow B &\equiv (\neg A \lor B) \land (\neg B \lor A). \end{aligned}

Эквиваленцию раскрывают именно так, а не как (A∧B)∨(¬A∧¬B)(A \land B) \lor (\neg A \land \neg B) - обе формы верны, но первая короче ведёт к ПНФ. После этого шага в формуле остаются только отрицания, конъюнкции и дизъюнкции.

Шаг 2: протолкнуть отрицания к атомам

Теперь загоняем ¬\neg внутрь, к атомарным предикатам, по законам де Моргана и правилам отрицания кванторов:

¬(A∧B)≡¬A∨¬B,¬(A∨B)≡¬A∧¬B,¬∀x A≡∃x ¬A,¬∃x A≡∀x ¬A.\begin{aligned} \neg(A \land B) &\equiv \neg A \lor \neg B,\\ \neg(A \lor B) &\equiv \neg A \land \neg B,\\ \neg \forall x\, A &\equiv \exists x\, \neg A,\\ \neg \exists x\, A &\equiv \forall x\, \neg A. \end{aligned}

Двойное отрицание снимаем: ¬¬A≡A\neg\neg A \equiv A. Результат этого шага - негативная нормальная форма, где отрицания стоят только перед атомами. Самая частая ошибка здесь - забыть, что отрицание переключает квантор: ¬∀\neg\forall становится ∃\exists, а не остаётся ∀\forall.

Отрицание переключает квантор: не для всех икс равно существует икс с отрицанием
Отрицание переключает квантор: не для всех икс равно существует икс с отрицанием

Шаг 3: переименовать связанные переменные

Перед выносом кванторов нужно убедиться, что никакая переменная не связана двумя разными кванторами и нигде не встречается одновременно как связанная и свободная. Иначе при вытаскивании квантора наружу он случайно «захватит» чужое вхождение и формула изменит смысл.

Возьмём ∀x P(x)∨∃x Q(x)\forall x\, P(x) \lor \exists x\, Q(x). Здесь xx под ∀\forall и xx под ∃\exists - формально разные переменные, но с одним именем. Переименуем второе: ∀x P(x)∨∃z Q(z)\forall x\, P(x) \lor \exists z\, Q(z). Эта операция называется α\alpha-преобразованием (переименование связанной переменной) и всегда даёт эквивалентную формулу. Правило простое: давайте каждому квантору своё уникальное имя переменной - тогда захвата на следующем шаге не случится.

Пропуск переименования - причина номер один неверной ПНФ. Если две подформулы используют переменную с одним именем, после выноса квантор накроет обе, и вы получите неэквивалентную формулу.

Шаг 4: вынести кванторы в префикс

Когда имена разведены, кванторы выносятся наружу по законам пронесения. Главное условие: переменная квантора не входит свободно в ту подформулу, через которую мы его протаскиваем (после шага 3 это гарантировано). Базовые тождества:

(∀x A)∧B≡∀x (A∧B),(∃x A)∨B≡∃x (A∨B),(∀x A)∨B≡∀x (A∨B),(∃x A)∧B≡∃x (A∧B).\begin{aligned} (\forall x\, A) \land B &\equiv \forall x\, (A \land B),\\ (\exists x\, A) \lor B &\equiv \exists x\, (A \lor B),\\ (\forall x\, A) \lor B &\equiv \forall x\, (A \lor B),\\ (\exists x\, A) \land B &\equiv \exists x\, (A \land B). \end{aligned}

Аналогичные равенства работают, когда квантор стоит во втором аргументе. Кванторы вытягиваем по одному, сохраняя их взаимный порядок. Когда в матрице не остаётся ни одного квантора, формула в ПНФ. Чтобы не запутаться, какая связка к чему относится при раскрытии импликаций, держите в голове приоритет логических операций в выражении.

Полный пример приведения

Приведём ∀x P(x)→∃y Q(y)\forall x\, P(x) \to \exists y\, Q(y) к ПНФ.

  1. Убираем импликацию: ¬(∀x P(x))∨∃y Q(y)\neg(\forall x\, P(x)) \lor \exists y\, Q(y).
  2. Проталкиваем отрицание: ¬∀x P(x)≡∃x ¬P(x)\neg\forall x\, P(x) \equiv \exists x\, \neg P(x), получаем ∃x ¬P(x)∨∃y Q(y)\exists x\, \neg P(x) \lor \exists y\, Q(y).
  3. Переименование не требуется: xx и yy уже разные.
  4. Выносим кванторы: ∃x ∃y (¬P(x)∨Q(y))\exists x\, \exists y\, (\neg P(x) \lor Q(y)).

Префикс ∃x ∃y\exists x\, \exists y, матрица ¬P(x)∨Q(y)\neg P(x) \lor Q(y) - формула в предварённой нормальной форме.

Цепочка преобразований формулы от импликации к виду с двумя кванторами существования впереди
Цепочка преобразований формулы от импликации к виду с двумя кванторами существования впереди

ПНФ и сколемизация

После ПНФ обычно идёт сколемизация - устранение ∃\exists. Каждый квантор существования заменяют на функцию Сколема от всех охватывающих его ∀\forall-переменных. Для ∀x ∃y R(x,y)\forall x\, \exists y\, R(x, y) получаем ∀x R(x,f(x))\forall x\, R(x, f(x)): yy зависит от xx, поэтому это функция, а не константа. Если ∃\exists не стоит ни под одним ∀\forall, его заменяют константой Сколема (нульместной функцией).

Важно: сколемизация сохраняет выполнимость, но не эквивалентность. Поэтому её делают только тогда, когда нас интересует невыполнимость (как в методе резолюций), а не истинностное значение на каждой интерпретации. Сама же ПНФ полностью эквивалентна исходной формуле - это разные по силе преобразования.

Частые ошибки

  • Забытое переименование переменных. Два квантора с именем xx после выноса сливаются в один диапазон связывания - формула меняет смысл. Сначала разводим имена, потом выносим.
  • Перестановка ∀\forall и ∃\exists. ∀x ∃y\forall x\, \exists y и ∃y ∀x\exists y\, \forall x не эквивалентны. При выносе сохраняйте исходный порядок кванторов.
  • Отрицание не переключает квантор. ¬∀x A\neg\forall x\, A - это ∃x ¬A\exists x\, \neg A, а не ∀x ¬A\forall x\, \neg A. То же для ¬∃\neg\exists.
  • Импликация не раскрыта. Пытаться выносить кванторы прямо из A→BA \to B опасно: ∀x P(x)→B\forall x\, P(x) \to B даёт ∃x (P(x)→B)\exists x\, (P(x) \to B), потому что левая часть импликации меняет квантор. Проще сначала перейти к ¬A∨B\neg A \lor B.
  • Сколемизацию путают с приведением к ПНФ. Это разные операции: ПНФ сохраняет эквивалентность, сколемизация - только выполнимость.

FAQ

Всегда ли можно привести формулу к ПНФ? Да. Для любой формулы логики предикатов существует логически эквивалентная ей предварённая нормальная форма. Алгоритм из четырёх шагов конечен и всегда завершается.

Единственна ли предварённая нормальная форма? Нет. У одной формулы есть много эквивалентных ПНФ - порядок выноса независимых кванторов и форма матрицы могут различаться. Канонической делает её уже последующий переход к клаузальной форме.

Чем префикс отличается от матрицы? Префикс - это вынесенная вперёд цепочка кванторов Q1x1…QnxnQ_1 x_1 \ldots Q_n x_n. Матрица - оставшаяся бескванторная часть формулы. Вместе они и образуют ПНФ: префикс плюс матрица.

Коротко

Предварённая нормальная форма - это вид «все кванторы спереди, бескванторная матрица сзади». Приведение всегда возможно и эквивалентно: убираем импликации, проталкиваем отрицания к атомам (помня, что они переключают кванторы), переименовываем связанные переменные, чтобы избежать захвата, и выносим кванторы наружу с сохранением их порядка. ПНФ - обязательный шаг перед сколемизацией и методом резолюций; в отличие от неё, сама ПНФ полностью сохраняет смысл исходной формулы.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также

Интерпретация формулы логики предикатов: как задать смысл

Интерпретация формулы логики предикатов: как задать смысл

Интерпретация формулы логики предикатов: что такое область, как задать значения предикатов, функций и констант, как оценить истинность формулы с кванторами и найти модель или контрпример.

19 июня 20268 минут
Кванторы всеобщности и существования в логике предикатов

Кванторы всеобщности и существования в логике предикатов

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

19 июня 20267 минут
Агрегатные функции SQL: COUNT, SUM, AVG и GROUP BY

Агрегатные функции SQL: COUNT, SUM, AVG и GROUP BY

Как работают агрегатные функции SQL: COUNT, SUM, AVG, MIN и MAX, группировка GROUP BY, порядок выполнения запроса, разница HAVING и WHERE и поведение NULL внутри агрегата.

24 сентября 20269 минут
Интегральный синус Si(x): ряд Тейлора и максимум

Интегральный синус Si(x): ряд Тейлора и максимум

Интегральный синус Si(x): почему интеграл sin t / t не берётся в элементарных функциях, разложение в ряд, предел π/2, максимум Si(π) и выброс Гиббса. С калькулятором.

24 сентября 202610 минут
Куча как структура данных: массив и просеивание

Куча как структура данных: массив и просеивание

Куча как структура данных: свойство кучи, хранение в обычном массиве и индексы 2i+1 и 2i+2, просеивание sift-up и sift-down, построение за O(n) и приоритетная очередь.

24 сентября 202610 минут
Линейная зависимость векторов: критерии и примеры

Линейная зависимость векторов: критерии и примеры

Что такое линейная зависимость векторов, как проверить её определителем и рангом матрицы, чем коллинеарность отличается от компланарности и как всё это связано с базисом.

24 сентября 202610 минут