Стандартная форма булевой функции
В булевой логике формула находится в конъюнктивной нормальной форме ( CNF ) или клаузальной нормальной форме , если она представляет собой соединение одного или нескольких предложений , где предложение является дизъюнкцией литералов ; иначе говоря, это произведение сумм или И из ИЛИ . Как каноническая нормальная форма , она полезна в автоматизированном доказательстве теорем и теории цепей .
В автоматизированном доказательстве теорем понятие « клаузальная нормальная форма » часто используется в более узком смысле, означая конкретное представление формулы КНФ в виде набора наборов литералов.
Определение
Логическая формула считается находящейся в КНФ, если она представляет собой конъюнкцию одной или нескольких дизъюнкций одного или нескольких литералов . Как и в дизъюнктивной нормальной форме (ДНФ), единственными пропозициональными операторами в КНФ являются or ( ), и ( ), а не ( ). Оператор not может использоваться только как часть литерала, то есть он может предшествовать только пропозициональной переменной .![{\ displaystyle \ ви }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \клин }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \neg }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Ниже приведена контекстно-свободная грамматика для CNF:
- КНФ → ( Дизъюнкция ) КНФ
- CNF → ( Дизъюнкция )
- Дизъюнкция → Буквальная дизъюнкция
- Дизъюнкция → Буквальный
- Литерал → Переменная
![{\displaystyle \neg }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Литерал → Переменная
Где Variable — любая переменная.
Все следующие формулы в переменных , и находятся в конъюнктивной нормальной форме:![{\ displaystyle A, B, C, D, E}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle F}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (A\lor \neg B\lor \neg C)\land (\neg D\lor E\lor F\lor D\lor F)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (A\lor B)\земля (C)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (А\лор Б)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ displaystyle (A)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Следующие формулы не находятся в конъюнктивной нормальной форме: [1]
, поскольку оператор AND вложен в оператор NOT
, поскольку оператор OR вложен в оператор NOT
, поскольку оператор AND вложен в оператор OR
Преобразование в CNF
В классической логике каждую пропозициональную формулу можно преобразовать в эквивалентную формулу в КНФ. Это преобразование основано на правилах логической эквивалентности : исключении двойного отрицания , законах Де Моргана и распределительном законе .
Основной алгоритм
Алгоритм вычисления CNF-эквивалента данной пропозициональной формулы основан на дизъюнктивной нормальной форме (DNF) : шаг 1. [3]
Затем преобразуется в путем замены И на ИЛИ и наоборот, при этом отрицая все литералы. Убрать все . ![{\displaystyle \фи }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot \phi }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot \phi _{DNF}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \phi _{CNF}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot \lnot}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Преобразование синтаксическими средствами
Преобразуйте формулу высказывания в КНФ .![{\displaystyle \фи }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Шаг 1 : Преобразуйте его отрицание в дизъюнктивную нормальную форму. [3]
, [4]
- где каждый представляет собой соединение литералов . [5]
![{\displaystyle C_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle l_{i1}\land l_ {i2} \land \ldots \land l_ {in_ {i}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Шаг 2 : Отрицание . Затем перейдите внутрь, применяя (обобщенные) эквиваленты Де Моргана до тех пор, пока это станет невозможно.![{\displaystyle \lnot \phi _{DNF}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle {\begin{aligned}\phi &\leftrightarrow \lnot \lnot \phi _{DNF} \\&=\lnot (C_{1}\lor C_{2}\lor \ldots \lor C_{i }\lor \ldots \lor C_{m})\\&\leftrightarrow \lnot C_{1}\land \lnot C_{2}\land \ldots \land \lnot C_{i}\land \ldots \land \ lnot C_{m}&&{\text{// (обобщенный) DM}}\end{aligned}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- где
![{\displaystyle {\begin{aligned}\lnot C_{i}&=\lnot (l_{i1}\land l_{i2}\land \ldots \land l_{in_{i}})\\&\leftrightarrow ( \lnot l_{i1}\lor \lnot l_{i2}\lor \ldots \lor \lnot l_{in_{i}})&&{\text{// (обобщенный) DM}}\end{aligned}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Шаг 3 : Удалите все двойные отрицания.
Пример
Преобразуйте формулу высказывания в КНФ . [6]![{\displaystyle \phi =((\lnot (p\land q))\leftrightarrow (\lnot r\uparrow (p\oplus q)))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
(Полный) ДНФ-эквивалент его отрицания равен [3]
![{\displaystyle \lnot \phi _{DNF} = (p\land q\land r) \lor (p\land q\land \lnot r)\lor (p\land \lnot q\land \lnot r)\ lor (\lnot p\land q\land \lnot r)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle {\begin{aligned}\phi &\leftrightarrow \lnot \lnot \phi _{DNF} \\&=\lnot \{(p\land q\land r)\lor (p\land q\land \lnot r)\lor (p\land \lnot q\land \lnot r)\lor (\lnot p\land q\land \lnot r)\}\\&\leftrightarrow {\underline {\lnot (p\) земля q\land r)}}\land {\underline {\lnot (p\land q\land \lnot r)}}\land {\underline {\lnot (p\land \lnot q\land \lnot r) }}\land {\underline {\lnot (\lnot p\land q\land \lnot r)}}&&{\text{// обобщенный DM }}\\&\leftrightarrow (\lnot p\lor \lnot q \lor \lnot r)\land (\lnot p\lor \lnot q\lor \lnot \lnot r)\land (\lnot p\lor \lnot \lnot q\lor \lnot \lnot r)\land (\ lnot \lnot p\lor \lnot q\lor \lnot \lnot r)&&{\text{// обобщенный DM }}(4\times )\\&\leftrightarrow (\lnot p\lor \lnot q\lor \ lnot r)\land (\lnot p\lor \lnot q\lor r)\land (\lnot p\lor q\lor r)\land (p\lor \lnot q\lor r)&&{\text{/ / удалить все }}\lnot \lnot \\&=\phi _{CNF}\end{aligned}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Преобразование семантическими средствами
Эквивалент формулы в CNF может быть получен из ее таблицы истинности . Еще раз рассмотрим формулу
. [6]
Соответствующая таблица истинности
Эквивалент CNF![{\displaystyle \фи }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (\lnot p\lor \lnot q\lor \lnot r)\land (\lnot p\lor \lnot q\lor r)\land (\lnot p\lor q\lor r)\land (p \lor \lnot q\lor r)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Каждая дизъюнкция отражает присвоение переменных, значение которых равно F(alse).
Если в таком присваивании переменная![{\displaystyle \фи }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle V}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- равно T(rue), то в дизъюнкции устанавливается литерал ,
![{\displaystyle \lnot V}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- является F(alse), то литерал устанавливается в дизъюнкцию.
![{\displaystyle V}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Другие подходы
Поскольку все пропозициональные формулы можно преобразовать в эквивалентную формулу в конъюнктивной нормальной форме, доказательства часто основаны на предположении, что все формулы являются КНФ. Однако в некоторых случаях это преобразование в CNF может привести к экспоненциальному взрыву формулы. Например, перевод формулы, отличной от CNF
![{\displaystyle (X_{1}\wedge Y_{1})\vee (X_{2}\wedge Y_{2})\vee \ldots \vee (X_{n}\wedge Y_{n})}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
в CNF создает формулу с предложениями:![{\displaystyle 2^{n}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (X_{1}\vee X_{2}\vee \ldots \vee X_{n})\wedge (Y_{1}\vee X_{2}\vee \ldots \vee X_{n})\ клин (X_{1}\vee Y_{2}\vee \ldots \vee X_{n})\wedge (Y_{1}\vee Y_{2}\vee \ldots \vee X_{n})\wedge \ ldots \wedge (Y_{1}\vee Y_{2}\vee \ldots \vee Y_{n}).}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Каждое предложение содержит либо или для каждого .![{\displaystyle X_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle Y_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle я}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Существуют преобразования в КНФ, которые избегают экспоненциального увеличения размера, сохраняя выполнимость , а не эквивалентность . Эти преобразования гарантированно только линейно увеличивают размер формулы, но вводят новые переменные. Например, приведенную выше формулу можно преобразовать в CNF, добавив переменные следующим образом:![{\displaystyle Z_{1},\ldots,Z_{n}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (Z_{1}\vee \ldots \vee Z_{n})\wedge (\neg Z_{1}\vee X_{1})\wedge (\neg Z_{1}\vee Y_{1} )\wedge \ldots \wedge (\neg Z_{n}\vee X_{n})\wedge (\neg Z_{n}\vee Y_{n}).}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Интерпретация удовлетворяет этой формуле только в том случае , если хотя бы одна из новых переменных верна. Если эта переменная равна , то оба значения и также верны. Это означает, что каждая модель , удовлетворяющая этой формуле, также удовлетворяет исходной. С другой стороны, только некоторые модели исходной формулы удовлетворяют этому требованию: поскольку они не упоминаются в исходной формуле, их значения не имеют отношения к ее удовлетворению, чего не происходит в последней формуле. Это означает, что исходная формула и результат перевода равновыполнимы, но не эквивалентны .![{\displaystyle Z_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle X_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle Y_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle Z_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Альтернативный перевод — преобразование Цейтина — включает также придаточные . С этими пунктами формула подразумевает ; эта формула часто считается «определяющей» как имя для .![{\displaystyle Z_{i}\vee \neg X_{i} \vee \neg Y_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle Z_{i}\equiv X_{i}\wedge Y_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle Z_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle X_{i}\wedge Y_{i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Максимальное количество дизъюнкций
Рассмотрим пропозициональную формулу с переменными .![{\displaystyle п}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle n\geq 1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Возможны литералы: .![{\displaystyle 2n}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle L=\{p_{1},\lnot p_{1},p_{2},\lnot p_{2},\ldots,p_{n},\lnot p_{n}\}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
имеет непустые подмножества. [9]![{\displaystyle (2^{2n}-1)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Это максимальное количество дизъюнкций, которое может иметь КНФ. [11]
Все комбинации истинностных функций могут быть выражены с помощью дизъюнкций, по одной на каждую строку таблицы истинности. В примере ниже они подчеркнуты.![{\displaystyle 2^{n}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Пример
Рассмотрим формулу с двумя переменными и .![{\ displaystyle p}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle q}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Самая длинная КНФ имеет дизъюнкции: [11]![{\displaystyle 2^{(2\times 2)}-1=15}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle {\begin{array}{lcl}(\lnot p)\land (p)\land (\lnot q)\land (q)\land \\(\lnot p\lor p)\land {\ underline {(\lnot p\lor \lnot q)}}\land {\underline {(\lnot p\lor q)}}\land {\underline {(p\lor \lnot q)}}\land {\ подчеркните {(p\lor q)}}\land (\lnot q\lor q)\land \\(\lnot p\lor p\lor \lnot q)\land (\lnot p\lor p\lor q) \land (\lnot p\lor \lnot q\lor q)\land (p\lor \lnot q\lor q)\land \\(\lnot p\lor p\lor \lnot q\lor q)\end {множество}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Эта формула противоречит .
Вычислительная сложность
Важный набор проблем вычислительной сложности включает в себя поиск таких присвоений переменным булевой формулы, выраженных в конъюнктивной нормальной форме, чтобы формула была истинной. Проблема k -SAT — это проблема поиска удовлетворяющего назначения булевой формуле, выраженной в КНФ, в которой каждая дизъюнкция содержит не более k переменных. 3-SAT является NP-полной (как и любая другая задача k -SAT с k > 2), тогда как известно, что 2-SAT имеет решения за полиномиальное время . Как следствие [12] задача преобразования формулы в ДНФ с сохранением выполнимости является NP-трудной ; двойственно , преобразование в CNF с сохранением достоверности также является NP-трудным; следовательно, преобразование с сохранением эквивалентности в DNF или CNF снова является NP-трудным.
Типичные проблемы в этом случае связаны с формулами в «3CNF»: конъюнктивной нормальной форме с не более чем тремя переменными на конъюнкт. Примеры таких формул, встречающиеся на практике, могут быть очень большими, например, со 100 000 переменных и 1 000 000 конъюнктов.
Формула в CNF может быть преобразована в равновыполнимую формулу в « k CNF» (для k ≥3) путем замены каждого конъюнкта с более чем k переменными двумя конъюнктами и с Z новой переменной и повторения так часто, как это необходимо.![{\displaystyle X_{1}\vee \ldots \vee X_{k} \vee \ldots \vee X_{n}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle X_{1}\vee \ldots \vee X_{k-1}\vee Z}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \neg Z\vee X_ {k} \lor \ldots \vee X_ {n}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Логика первого порядка
В логике первого порядка конъюнктивную нормальную форму можно использовать дальше, чтобы получить клаузальную нормальную форму логической формулы, которую затем можно использовать для выполнения разрешения первого порядка . При автоматизированном доказательстве теорем на основе разрешения формула CNF
См. пример ниже.
Преобразование из логики первого порядка
Чтобы преобразовать логику первого порядка в CNF:
- Привести отрицание к нормальной форме .
- Устраните последствия и эквивалентности: повторно замените на ; заменить . _ В конечном итоге это устранит все появления и .
![{\displaystyle P\rightarrow Q}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot P\lor Q}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle P\leftrightarrow Q}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (P\lor \lnot Q)\land (\lnot P\lor Q)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \rightarrow }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \leftrightarrow }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Переместите НОТ внутрь, неоднократно применяя закон Де Моргана . В частности, замените на ; заменить ; _ и замените на ; заменить ; _ с . После этого a может встречаться только непосредственно перед символом-предикатом.
![{\displaystyle \lnot (P\lor Q)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (\lnot P)\land (\lnot Q)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot (P\land Q)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (\lnot P)\lor (\lnot Q)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot \lnot P}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle P}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot (\forall xP (x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \exists x\lnot P (x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot (\exists xP(x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \forall x\lnot P (x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Стандартизируйте переменные
- Для предложений, подобных которым дважды используется одно и то же имя переменной, измените имя одной из переменных. Это позволит избежать путаницы при удалении кванторов. Например, переименован в .
![{\displaystyle (\forall xP(x))\lor (\exists xQ(x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \forall x[\exists y\mathrm {Animal} (y)\land \lnot \mathrm {Loves} (x,y)]\lor [\exists y\mathrm {Loves} (y,x)] }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \forall x[\exists y\mathrm {Animal} (y)\land \lnot \mathrm {Loves} (x,y)]\lor [\exists z\mathrm {Loves} (z,x)] }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Сколемизировать высказывание
- Переместить квантификаторы наружу: несколько раз заменить на ; заменить ; _ заменить ; _ заменить . _ Эти замены сохраняют эквивалентность, поскольку предыдущий шаг стандартизации переменных гарантировал, что это не произойдет в . После этих замен квантификатор может встречаться только в начальном префиксе формулы, но никогда внутри , или .
![{\displaystyle P\land (\forall xQ(x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \forall x (P \land Q (x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle P\lor (\forall xQ(x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \forall x (P \lor Q (x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle P\land (\exists xQ(x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \exists x (P \land Q (x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle P\lor (\exists xQ(x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \exists x (P \lor Q (x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle х}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle P}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lnot }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \земля }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \lor }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Повторно замените на , где — новый символ -арной функции, так называемая « функция Скулема ». Это единственный шаг, который сохраняет только выполнимость, а не эквивалентность. Он устраняет все экзистенциальные кванторы.
![{\displaystyle \forall x_{1}\ldots \forall x_{n}\;\exists y\;P(y)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \forall x_{1}\ldots \forall x_{n}\;P(f(x_{1},\ldots,x_{n}))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle е}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle п}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Отбросьте все кванторы универсальности.
- Распределите OR внутри AND: многократно замените на .
![{\displaystyle P\lor (Q\land R)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (P\lor Q)\land (P\lor R)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Пример
Например, формула «Любой, кто любит всех животных, в свою очередь любим кем-то» преобразуется в CNF (а затем в форму предложения в последней строке) следующим образом (выделение редексов правил замены в ):![{\displaystyle {\color {red}{\text{red}}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Неформально функцию Скулема можно рассматривать как выдающую человека, которого любят, и одновременно выдающую животное (если оно есть), которое не любит. Третья последняя строка снизу читается как « не любит животное , или его любят » .![{\ displaystyle g (x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle х}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ displaystyle f (x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle х}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle х}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ displaystyle f (x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle х}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ displaystyle g (x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Вторая последняя строка сверху — это CNF.![{\displaystyle (\mathrm {Animal} (f(x))\lor \mathrm {Loves} (g(x),x))\land (\lnot \mathrm {Loves} (x,f(x))\ lor \mathrm {Любит} (g(x),x))}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Смотрите также
Примечания
- ^ Однако они находятся в отрицательной нормальной форме .
- ^ abc см. Дизъюнктивную нормальную форму # Преобразование в DNF
- ^ максимальное количество союзов для
![{\displaystyle \фи }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- ^ максимальное количество литералов для
![{\displaystyle \фи }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- ^ ab = (( NOT (p AND q)) IFF (( NOT r) NAND (p XOR q)))
![{\displaystyle \фи }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- ^
![{\displaystyle \left|{\mathcal {P}}(L)\right|=2^{2n}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- ^ лайк
![{\displaystyle (a\land b)\lor (b\land a)\lor (a\land b\land b)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- ^ ab Предполагается, что повторы и вариации [10] на основе коммутативности и ассоциативности и не встречаются.
![{\displaystyle \lor }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \земля }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- ^ так как одним из способов проверки КНФ на выполнимость является преобразование ее в ДНФ , выполнимость которой можно проверить за линейное время
- ^ максимальное количество дизъюнкций максимальное количество литералов
![{\displaystyle 1\leq м\leq}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1\leq in_ {i}\leq}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Рекомендации
- Эндрюс, Питер Б. (2013). Введение в математическую логику и теорию типов: к истине через доказательство . ISBN 9401599343.
- Джексон, Пол; Шеридан, Дэниел (10 мая 2004 г.). «Преобразование форм предложений для логических схем» (PDF) . В Хоосе, Хольгер Х.; Митчелл, Дэвид Г. (ред.). Теория и приложения проверки выполнимости . 7-я Международная конференция по теории и приложениям проверки выполнимости, SAT. Пересмотренные избранные статьи. Конспекты лекций по информатике. Том. 3542. Ванкувер, Британская Колумбия, Канада: Springer 2005. стр. 183–198. дои : 10.1007/11527695_15. ISBN 978-3-540-31580-3.
- Рассел, Стюарт ; Норвиг, Питер , ред. (2010) [1995]. Искусственный интеллект: современный подход (PDF) (3-е изд.). Река Аппер-Седл, Нью-Джерси: Прентис-Холл. ISBN 978-0-13-604259-4. Архивировано (PDF) из оригинала 31 августа 2017 года.
- Цейтин, Григорий С. (1968). «О сложности вывода в исчислении высказываний» (PDF) . В Слисенко А.О. (ред.). Структуры в конструктивной математике и математической логике, часть II, Семинары по математике (перевод с русского) . Математический институт им. Стеклова. стр. 115–125.
- Уайтситт, Дж. Элдон (24 мая 2012 г.) [1961]. Булева алгебра и ее приложения. Курьерская корпорация. ISBN 978-0-486-15816-7.
Внешние ссылки
- «Java-инструмент для преобразования таблицы истинности в CNF и DNF». Университет Марбурга . Проверено 31 декабря 2023 г.