U bulovskoj logici, formula je u **konjunktivnoj normalnoj formi** (KNF) ako predstavlja konjunkciju klauza, gde je klauza disjunkcija literala. Kao normalna forma, korisna je u automatskom dokazivanju teorema. 

Sve konjunkcije literala i sve disjunkcije literala su u KNF, jer se mogu posmatrati kao konjunkcije jednočlanih literala, ili kao disjunkcije jedne klauze, redom. Kao i kod disjunktivne normalne forme (DNF), jedini iskazni veznici koje formula u KNF može da sadrži su I, ILI, i NE. Operator negacije može da se koristi samo kao deo literala, što znači da može da stoji samo pre iskazne promenljive.

Primeri i kontraprimeri
-----------------------

Sledeće formule su u KNF:

{\displaystyle \neg A\wedge (B\vee C)}
{\displaystyle (A\vee B)\wedge (\neg B\vee C\vee \neg D)\wedge (D\vee \neg E)}
{\displaystyle (\neg B\vee C)}
{\displaystyle A\wedge B.}
Poslednja formula je u KNF, jer se može posmatrati kao konjunkcija dve jednočlane klauze {\displaystyle A} i {\displaystyle B}. Međutim, ova formula je i u disjunktivnoj normalnoj formi. Sledeće formule nisu u KNF:

{\displaystyle \neg (B\vee C)}
{\displaystyle (A\wedge B)\vee C}
{\displaystyle A\wedge (B\vee (D\wedge E)).}
Gornje tri formule su redom ekvivalentne sledećim trima formulama koje jesu u konjunktivnoj normalnoj formi:

{\displaystyle \neg B\wedge \neg C}
{\displaystyle (A\vee C)\wedge (B\vee C)}
{\displaystyle A\wedge (B\vee D)\wedge (B\vee E).}

Konverzija u KNF
----------------

Svaka iskazna formula se može transformisati u logički ekvivalentnu formulu, koja je u KNF. Ova transformacija koristi pravila logičke ekvivalencije: eliminaciju dvostruke negacije, De Morganove zakone, i zakon distributivnosti.

Kako se sve logičke formule mogu transformisati u ekvivalentne formule u KNF, dokazi se obično baziraju na pretpostavci da su sve formule u KNF. Međutim, u nekim slučajevima, ova konverzija u KNF može da dovede do eksponencijalne eksplozije (rasta dužine) formule. Na primer, transformisanje sledeće formule u KNF proizvodi formulu sa {\displaystyle 2^{n}} klauza:

{\displaystyle (X\_{1}\wedge Y\_{1})\vee (X\_{2}\wedge Y\_{2})\vee \dots \vee (X\_{n}\wedge Y\_{n}).}
Dobija se formula:

{\displaystyle (X\_{1}\vee \cdots \vee X\_{n-1}\vee X\_{n})\wedge (X\_{1}\vee \cdots \vee X\_{n-1}\vee Y\_{n})\wedge \cdots \wedge (Y\_{1}\vee \cdots \vee Y\_{n-1}\vee Y\_{n})}
to jest, ova formula sadrži {\displaystyle 2^{n}} klauza: u svakoj klauzi se nalazi bilo {\displaystyle X\_{i}} ili {\displaystyle Y\_{i}} za svako {\displaystyle i}.

Postoje transformacije formula u KNF koje čuvaju zadovoljivost ali ne i ekvivalenciju, ali i ne proizvode eksponencijalni rast formula. Za ove transformacije se garantuje da formule povećavaju samo linearno, ali uvode nove promenljive. Na primer, gornja gormula se može transformisati u KNF dodavanjem promenljivih {\displaystyle Z\_{1},\ldots ,Z\_{n}} na sledeći način:

{\displaystyle (Z\_{1}\vee \cdots \vee Z\_{n})\wedge (\neg Z\_{1}\vee X\_{1})\wedge (\neg Z\_{1}\vee Y\_{1})\wedge \cdots \wedge (\neg Z\_{n}\vee X\_{n})\wedge (\neg Z\_{n}\vee Y\_{n})}
Neka interpretacija zadovoljava ovu formulu samo ako barem jedna od novih promenljivih ima vrednost tačno. Ako je to promenljiva {\displaystyle Z\_{i}}, onda takođe {\displaystyle X\_{i}} i {\displaystyle Y\_{i}} imaju vrednost tačno. Ovo znači da svaki model koji zadovoljava dobijenu formulu zadovoljava i početnu. Sa druge strane, samo neki modeli originalne formule zadovoljavaju ovu novu, jer se {\displaystyle Z\_{i}} ne spominje u početnoj formuli, pa njihove vrednosti nisu od značaja za nju, dok jesu za novu formulu. Ovo znači da su početna formula i rezultat transformacije ekvizadovoljivi, ali ne i ekvivalentni.

Logika prvog reda
-----------------

U logici prvog reda, konjunktivna normalna forma se može transformisati dalje u klauzalnu normalnu formu, koja je od koristi za metod rezolucije.

Računska složenost
------------------

Važan skup problema u računskoj složenosti podrazumeva nalaženje takvih dodela promenljivima bulovske formule u konjunktivnoj normalnoj formi, da formula ima vrednost tačno. *k*-SAT problem je problem nalaženja zadovoljavajuće dodele bulovskoj formuli iskazanoj u KNF, tako da svaka disjunkcija sadrži najviše *k* promenljivih. 3-SAT je NP-kompletan problem (kao i svaki drugi *k*-SAT, gde je *k*>2) osim 2-SAT, za koga je poznato rešenje u polinomijalnom vremenu.

Transformisanje iz logike prvog reda
------------------------------------

Transformisanje formule predikatskog računa u KNF podrazumeva sledeće korake:

1. Transformisanje u negacijsku normalnu formu. Eliminišu se implikacije: {\displaystyle x\rightarrow y} se zameni sa {\displaystyle \neg x\vee y}
2. Negacije se uvuku unutar zagrada
3. Standardizuju se promenljive
4. Skolemizuje se iskaz
5. Eliminišu se univerzalni kvantifikatori
6. Primeni se distributivnost na disjunkcije i konjunkcije.

Izvori
------

1. ↑  (Artificial Intelligence: A modern Approach [1995...] Russel and Norvig)

Vidi još
--------

* Disjunktivna normalna forma
* Algebarska normalna forma
* Preneks normalna forma
* Hornova klauza

Spoljašnje veze
---------------

* Scheme i Ocaml programi za konvertovanje iskaznih formula u KNF Arhivirano 2007-03-12 na Wayback Machine-u