Тверской государственный университет
Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 3170 / 267 | Оценка: 4.08 / 3.92 | Длительность: 15:40:00
ISBN: 978-5-9556-0110-6
Специальности: Программист, Математик
Лекция 4:

Эквивалентность формул и нормальные формы

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >

Дизъюнктивные и конъюнктивные нормальные формы

Определение ДНФ и КНФ

В этом разделе мы интересуемся представлением произвольной булевой функции посредством формул специального вида, использующих только операции \wedge, \vee и \neg.

Пусть \mathbf{X}=\{X_1,\ldots, X_n\} - это множество пропозициональных переменных. Введем для каждого i=1,...,n обозначения: X_i^0= \neg X_i и X_i^1= X_i. Формула X_{i_1}^{\sigma_1}\wedge X_{i_2}^{\sigma_2}\wedge \ldots \wedge
        X_{i_k}^{\sigma_k}(X_{i_1}^{\sigma_1}\vee X_{i_2}^{\sigma_2}\vee \ldots \vee X_{i_k}^{\sigma_k})
      , в которой \sigma_{i_j} \in \{0,1\} и все переменные разные, т.е. X_{i_j} \neq X_{i_r} при j \neq r, называется элементарной конъюнкцией ( элементарной дизъюнкцией ).

Определение 4.2. Формула \mathcal{D} называется дизъюнктивной нормальной формой (ДНФ), если она является дизъюнкцией элементарных конъюнкций, т.е. имеет вид \mathcal{D}= K_1 \vee K_2\vee \ldots \vee K_r, где каждая формула K_j\ ( j=1,...,r) - это элементарная конъюнкция . \mathcal{D} называется совершенной ДНФ, если в каждую из ее конъюнкций K_j входят все n переменных из \mathbf{X}. Аналогично, формула \mathcal{C} называется конъюнктивной нормальной формой (КНФ), если она является конъюнкцией элементарных дизъюнкций, т.е. \mathcal{C}= D_1 \vee D_2\vee \ldots \vee D_r, где каждая формула Dj (j=1,...,r) - это элементарная дизъюнкция . Она является совершенной КНФ, если в каждую Dj входят все n переменных из \mathbf{X}.

Совершенные ДНФ и КНФ

Рассмотрим произвольную булеву функцию f(X1,...,Xn) , зависящую от переменных из \mathbf{X}. Oбозначим через Nf+ множество наборов значений переменных, на которых f принимает значение 1, а через Nf- множество наборов, на которых f принимает значение 0, т.е. N_f^+= \{(\sigma_1,\ldots, \sigma_n)\ |\ f(\sigma_1,\ldots,
        \sigma_n)=1\}
      и N_f^-= \{(\sigma_1,\ldots, \sigma_n)\ |\ f(\sigma_1,\ldots,
        \sigma_n)=0\}.

Определим по этим множествам две формулы:

\mathcal{D}_f = \bigvee_{(\sigma_1,\ldots, \sigma_n)\in N_f^+}
      X_1^{\sigma_1}\wedge X_2^{\sigma_2}\wedge \ldots \wedge X_n^{\sigma_n}

и

\mathcal{C}_f = \bigwedge_{(\sigma_1,\ldots, \sigma_n)\in N_f^-}
      (X_1^{\neg\sigma_1}\vee X_2^{\neg\sigma_2}\vee \ldots \vee X_n^{\neg\sigma_n})

Теорема 4.1.

  1. Если функция f не равна тождественно 0, то формула \mathcal{D}_f - это совершенная ДНФ, задающая функцию f.
  2. Если функция f не равна тождественно 1, то формула \mathcal{C}_f - это совершенная КНФ, задающая функцию f.

Доказательство получается непосредственным вычислением значения каждой из указанных формул с учетом того, что для любого \sigma  \in  \{ 0, 1\} имеют место равенства: 1^{\sigma } = \sigma и 0^{\sigma } = \neg \sigma (см. задачу 4.4).

Следствие 4.1.1. Каждая булева функция может быть задана формулой, содержащей переменные и функции конъюнкции, дизъюнкции и отрицания.

Приведенные выше формулы для \mathcal{D}_f и \mathcal{C}_f позволяют эффективно строить совершенные ДНФ и КН по табличному представлению функции f (Каким образом?). Можно ли получить такие специальные представления по произвольной формуле, задающей f, не выписывая ее полной таблицы? Приводимая ниже процедура позволяет это сделать, используя основные эквивалентности формул.

Процедура Приведение к совершенной ДНФ

Вход: формула \Phi, включающая функции \neg , \wedge , \vee , \to и +.

  1. Используя эквивалентность (7), заменить все вхождения функции \to в \Phi на \neg , \wedge и \vee, затем использовать эквивалентность (8) для замены всех вхождений функции + на \neg , \wedge и \vee.
  2. Используя законы де Моргана (5) и снятия двойного отрицания (4), внести все знаки отрицания внутрь скобок так, чтобы все оставшиеся отрицания находились непосредственно перед переменными.
  3. Получившаяся после шага (2) формула \Phi^\prime имеет одну из двух форм:
    • \Phi^\prime = \Phi_1 \wedge \Phi_2 или
    • \Phi^\prime = \Phi_1 \vee \Phi_2.

    Поскольку каждая из формул \Phi _{1}, \Phi _{2} имеет меньшую глубину, чем формула \Phi ', то предположим по индукции, что для них уже построены эквивалентные ДНФ D_1=K_1^1 \vee K_1^2\vee \ldots \vee K_1^r и D_2=K_2^1 \vee K_2^2\vee \ldots \vee K_2^s, соответственно.

    Тогда в случае (а) имеем:

    \Phi^\prime \equiv (K_1^1 \vee  \ldots \vee K_1^r)\wedge
          (K_2^1 \vee  \ldots \vee K_2^s)\underset{(3)}{\equiv}\\(K_1^1\wedge K_2^1)\vee \ldots \vee (K_1^i\wedge K_2^j)\vee \ldots
          \vee (K_1^r\wedge K_2^s)

    Каждый член (K_1^i\wedge K_2^j) этой дизъюнкции представляет собой конъюнкцию переменных и их отрицаний. Применяя эквивалентности групп (1), (2) и (6), можно удалить из нее повторения переменных, после чего она превратится в некоторую элементарную конъюнкцию или константу. Проделав такие преобразования со всеми парами (i,j), 1 <= i <= r, 1 <= j <= s, и удалив, если потребуется, константы 0, мы получим ДНФ, эквивалентную исходной формуле \Phi.

    В случае (б) формула \Phi^\prime \equiv (K_1^1 \vee K_1^2\vee \ldots \vee K_1^r)\vee (K_2^1 \vee K_2^2\vee \ldots \vee K_2^s) сама уже является ДНФ.

  4. Используя эквивалентности групп (1), (2) и (6), удалить из получившейся после шага (3) формулы повторные вхождения одинаковых конъюнкций.
  5. Пусть после шага (4) получилась ДНФ \Phi^{\prime\prime}= K_1 \vee K_2 \vee \ldots \vee K_m. Чтобы получить эквивалентную совершенную ДНФ, построим для каждой Ki (i=1,..., m) , эквивалентную совершенную ДНФ (см. задачу 4.5),заменим ею Ki , а затем устраним повторения одинаковых конъюнкций.

Из формулировок эквивалентностей (7) и (8) непосредственно вытекает

Предложение 4.1. На этапе (1) процедуры при последовательном выполнении преобразований (7), а затем - (8), до тех пор, пока ни одно из них не применимо, полученная в результате формула не будет содержать функций \to и +.

Доказательство этого предложения оставляем в виде упражнения (см. задачу 4.7).

Следующее утверждение гарантирует корректность этапа (2).

Предложение 4.2. На этапе (2) процедуры при любом порядке выполнения преобразований групп (4) и (5) до тех пор, пока ни одно из них не применимо, в полученной в результате формуле все знаки отрицания будут стоять непосредственно перед переменными.

Перед доказательством этого утверждения введем некоторые обозначения. Напомним, что в определениях 3.2 и 3.3 для каждой формулы \Phi была определена ее глубина dep(\Phi ). Например, формула \Phi =\neg (X+Y)\to  (\neg (X \vee  \neg  Z)\wedge  Y), построенная над системой F=\{ \vee , \wedge , \neg , \to , +\}, имеет глубину dep(\Phi )=5.

Пусть \Phi - это формула над F=\{ \vee , \wedge , \neg \}. Определим для каждой ее "отрицательной" подформулы вида \neg (\Psi ) высоту h(\neg (\Psi )) как 3^{dep(\Psi )}-1. И пусть высота всей формулы H(\Phi ) равна сумме высот всех ее отрицательных подформул. Например, для приведенной выше формулы \Phi ее высота равна H(\Phi )= h(\neg (X+Y)) +h(\neg (X \vee  \neg  Z))+ h(\neg  Z) = (3^{1}-1) + (3^{2}-1) +(3^{0}-1) = 10.

Доказательство предложения 4.2 проведем индукцией по высоте формул.

Базис индукции. Если H(\Phi )=0, то либо в \Phi нет отрицаний, либо все отрицания находятся непосредственно перед переменными. Следовательно, \Phi удовлетворяет требованию предложения 4.2.

Шаг индукции. Предположим, что при n <= k для всех формул высоты n Предложение 4.2 выполнено. Пусть \Phi - произвольная формула высоты H(\Phi )= k+1. Докажем наше утверждение для нее. Поскольку H(\Phi )\ge  1, то \Phi содержит хотя бы одну отрицательную подформулу \neg (\Psi ), у которой h(\neg (\Psi ))\ge  1 и, следовательно, dep(\Psi ) \ge  1. К такой формуле обязательно можно применить либо снятие двойного отрицания (4), либо один из законов де Моргана (5). ( Объясните почему.) Пусть \neg (\Psi ) - это та подформула \Phi, которая на (2)-ом этапе процедуры первой заменяется на эквивалентную формулу \Psi ' в соответствии с одной из указанных эквивалентностей. Пусть \Phi ' - это формула, получившаяся в результате этой замены из \Phi. Нетрудно проверить (проделайте эту проверку!), что при любом из преобразований (4), (5) H(\Psi ') < H(\neg (\Psi )) и, следовательно, H(\Phi ') < H(\Phi ). Тогда H(\Phi ')\le  k и по предположению индукции применение эквивалентностей (4), (5) в произвольном порядке приведет в конце концов к формуле, у которой все отрицания будут стоять непосредственно перед переменными. Тем самым, предложение 4.2 выполнено при n=k+1, что завершает индукционный шаг и все доказательство.

Рассмотрим применение процедуры приведения к совершенной ДНФ на примере.

Пример 4.1. Пусть формула \Phi= ((\neg X\vee Z) \rightarrow (Y \rightarrow (X + Z))).

На (1)-ом этапе процедуры получаем следующую цепочку эквивалентностей:

\Phi \underset{(7)}{\equiv} \neg (\neg X\vee Z) \vee (Y \rightarrow (X + Z))\underset{(7)}{\equiv} \neg (\neg X\vee Z) \vee (\neg Y \vee (X+Z))
      \underset{(8)}{\equiv}\\ \neg (\neg X\vee Z) \vee (\neg Y \vee ((X \wedge \neg Z) \vee (\neg X \wedge Z))).

На (2)-ом этапе вносим отрицание внутрь первой скобки и получаем формулу

\Phi^\prime=(\neg \neg X \wedge \neg Z)\vee (\neg Y \vee
      ((X \wedge \neg Z) \vee (\neg X \wedge Z)))

Устранив двойное отрицание, получим

\Phi^{\prime\prime}=( X \wedge \neg Z)\vee (\neg Y \vee
      ((X \wedge \neg Z) \vee (\neg X \wedge Z))).

Нетрудно видеть, что это уже ДНФ. Удалим на (4)-ом этапе повторное вхождение первой конънкции и получим ДНФ

\Phi_1=( X \wedge \neg Z)\vee \neg Y \vee(\neg X \wedge Z)

Эта ДНФ не является совершенной, так как в каждую из ее трех конъюнкций входят не все переменные. Построим на этапе (5) для них эквивалентные совершенные ДНФ (используя решение задачи 4.5).

\begin{array}{l}
      (X \wedge \neg Z)\equiv ( X \wedge Y\wedge \neg Z)\vee ( X \wedge\neg Y \wedge \neg Z),\\

      \neg Y \equiv (X\wedge \neg Y \wedge Z)\vee
      (X\wedge \neg Y \wedge \neg Z)\vee
      (\neg X\wedge \neg Y \wedge Z)\vee
      (\neg X\wedge \neg Y \wedge \neg Z),\\
      (\neg X \wedge Z) \equiv (\neg X\wedge  Y \wedge Z)\vee
      (\neg X\wedge \neg Y \wedge Z).
      \end{array}

Подставив эти формулы в \Phi _{1} и устранив повторения конъюнкций, получим совершенную ДНФ, эквивалентную исходной формуле \Phi:

\Phi_2=( X \wedge Y\wedge \neg Z)\vee ( X \wedge\neg Y \wedge \neg Z)
      \vee (X\wedge \neg Y \wedge Z)\vee \\
      (\neg X\wedge \neg Y \wedge Z)\vee
      (\neg X\wedge \neg Y \wedge \neg Z)\vee
      (\neg X\wedge  Y \wedge Z).

Мы видим, что ДНФ \Phi _{1}, полученная после 4-го этапа, выглядит существенно проще, т.е. является более короткой, чем совершенная ДНФ \Phi _{2}. Однако совершенные ДНФ и КНФ обладают важным свойством единственности, которое следует из их конструкции в теореме 4.1.

Следствие 4.1.2. Для каждой булевой функции от n переменных, не равной тождественно 0, существует единственная с точностью до перестановки конъюнкций и переменных внутри конъюнкций совершенная ДНФ, задающая эту функцию.

Это следствие позволяет предложить следующую процедуру для проверки эквивалентности формул \Phi и \Psi.

  1. Построить для \Phi и \Psi эквивалентные совершенные ДНФ \Phi ' и \Psi ' используя процедуру приведения к совершенной ДНФ.
  2. Упорядочить в соответствии с нумерацией переменных X вхождения переменных в каждую конъюнкцию, а затем лексикографически упорядочить между собой конъюнкции, входящие в \Phi ' и \Psi '. Пусть в результате получатся совершенные ДНФ \Phi '' и \Psi ''
  3. Если \Phi '' = \Psi '', то выдать ответ "Да", иначе - ответ "Нет".

Замечание. Аналогичную процедуру можно построить с использованием совершенных КНФ.

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Елена Алексеевская
Елена Алексеевская

Это в лекции 3.

Татьяна Дембелова
Татьяна Дембелова

Почему в вводной лекции курса Основы дискретной математики одним из свойств отношения частичного порядка упоминается антирефлексивность? Посмотрела в других источниках, там -0  рефлексивность... http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0