∀ Matematica discreta

Forme normali CNF e DNF: cosa sono e come si ottengono

Forma normale congiuntiva e disgiuntiva spiegate con esempi: letterali, clausole, come ricavarle da una tavola di verità e perché le usano i SAT solver.

Una stessa formula logica si può scrivere in infiniti modi equivalenti. Per confrontare formule, semplificarle o darle in pasto a un programma conviene ridurle a una forma standard. Le due forme standard più usate sono la forma normale disgiuntiva (DNF) e la forma normale congiuntiva (CNF). Capirle significa capire anche come lavorano gli strumenti di verifica automatica e i progettisti di circuiti.

I mattoni: letterali e clausole

  • Un letterale è una variabile o la sua negazione: p, ¬p, q, ¬q.
  • Una congiunzione di letterali è un AND di letterali, per esempio p ∧ ¬q ∧ r.
  • Una clausola è un OR di letterali, per esempio ¬p ∨ q ∨ ¬r.

Con questi mattoni:

  • la DNF è un OR di congiunzioni di letterali: (p ∧ ¬q) ∨ (¬p ∧ r) ∨ q;
  • la CNF è un AND di clausole: (p ∨ q) ∧ (¬p ∨ r) ∧ (¬q ∨ ¬r).

Un modo per ricordarle: la DNF descrive i casi in cui la formula è vera («è vera se succede questo, oppure questo, oppure questo»); la CNF elenca vincoli che devono valere tutti insieme («deve valere questo, e questo, e questo»).

Ricavare la DNF da una tavola di verità

Il metodo è meccanico. Per ogni riga in cui la formula vale V si scrive una congiunzione che descrive esattamente quella riga: la variabile così com'è se vale V, negata se vale F. Poi si uniscono tutte con OR.

Prendiamo la formula «esattamente una tra p e q è vera» (lo XOR):

p q p ⊕ q
V V F
V F V
F V V
F F F

Le righe vere sono la seconda (p vero, q falso) e la terza (p falso, q vero). La DNF è quindi (p ∧ ¬q) ∨ (¬p ∧ q).

Ricavare la CNF da una tavola di verità

Il metodo è il duale. Per ogni riga in cui la formula vale F si scrive una clausola che è falsa solo in quella riga: la variabile negata se vale V, così com'è se vale F. Poi si uniscono le clausole con AND.

Per lo XOR le righe false sono la prima (p e q veri) e la quarta (entrambi falsi). La prima dà la clausola ¬p ∨ ¬q, la quarta p ∨ q. La CNF è (p ∨ q) ∧ (¬p ∨ ¬q). Si legge bene: «almeno una è vera, e non sono vere entrambe».

Trasformazione algebrica

Quando la tavola è troppo grande si procede con le equivalenze:

  1. Eliminare ↔ e →, usando p → q ≡ ¬p ∨ q.
  2. Portare le negazioni sui letterali con De Morgan e la doppia negazione.
  3. Applicare la distributività: per la CNF si distribuisce ∨ su ∧; per la DNF ∧ su ∨.

Esempio: trasformare in CNF la formula p ∨ (q ∧ r). Distribuendo si ottiene (p ∨ q) ∧ (p ∨ r).

C'è un problema pratico: la distributività può far crescere la formula in modo esponenziale. La formula (a₁ ∧ b₁) ∨ (a₂ ∧ b₂) ∨ … ∨ (aₙ ∧ bₙ) ha una CNF equivalente con 2ⁿ clausole. Per questo gli strumenti reali usano la trasformazione di Tseitin, che introduce variabili ausiliarie e produce una CNF di dimensione lineare. La formula ottenuta non è equivalente in senso stretto, ma è equisoddisfacibile: è soddisfacibile se e solo se lo è l'originale, e per molti scopi basta.

Perché la CNF è così importante

Il problema SAT chiede se una formula ammette almeno un'assegnazione che la rende vera. I programmi che lo risolvono, i SAT solver, accettano quasi sempre l'input in CNF, spesso nel formato testuale chiamato DIMACS:

p cnf 3 2
1 -2 0
2 3 0

La riga di intestazione dice che ci sono 3 variabili e 2 clausole; ogni riga successiva è una clausola, con i numeri negativi per i letterali negati e lo zero come terminatore. Questo esempio rappresenta (x₁ ∨ ¬x₂) ∧ (x₂ ∨ x₃).

La CNF si presta bene alla ricerca automatica perché ogni clausola è un vincolo indipendente: se un'assegnazione parziale rende falsi tutti i letterali di una clausola tranne uno, quell'ultimo letterale è obbligato. Questa regola, chiamata propagazione unitaria, è il cuore degli algoritmi DPLL e CDCL. I SAT solver vengono usati per verificare hardware, pianificare, risolvere puzzle combinatori e analizzare le dipendenze tra pacchetti software.

E la DNF?

La DNF rende banale la domanda opposta: una formula in DNF è soddisfacibile se almeno una delle sue congiunzioni non contiene una variabile insieme alla sua negazione. Il prezzo è che verificare se una DNF è una tautologia diventa difficile. Nella progettazione di circuiti la DNF corrisponde alla struttura «somma di prodotti», realizzabile con un livello di porte AND seguito da una porta OR, e si minimizza con le mappe di Karnaugh o con l'algoritmo di Quine-McCluskey.

In sintesi

  • La DNF è un OR di AND di letterali; la CNF è un AND di OR di letterali, cioè di clausole.
  • Dalla tavola di verità: righe vere per la DNF, righe false per la CNF.
  • La trasformazione algebrica può esplodere esponenzialmente; Tseitin produce una CNF equisoddisfacibile di dimensione lineare.
  • I SAT solver lavorano in CNF, tipicamente nel formato DIMACS.
  • La DNF corrisponde ai circuiti «somma di prodotti».
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche