λ Teoria del calcolo

P contro NP: la domanda, le conseguenze e perché è così difficile

Che cosa chiede davvero il problema P contro NP, che cosa cambierebbe nei due scenari, i problemi intermedi di Ladner e le barriere note finora.

Il problema P contro NP è probabilmente la domanda aperta più famosa dell'informatica teorica, ed è uno dei problemi del millennio scelti dal Clay Mathematics Institute. Si enuncia in una riga: ogni problema la cui soluzione si verifica rapidamente si può anche risolvere rapidamente? La maggior parte degli esperti ritiene che la risposta sia no, ma nessuno è riuscito a dimostrarlo. Vale la pena capire con precisione che cosa si chiede, che cosa dipende dalla risposta e perché le tecniche note non bastano.

La domanda in forma precisa

Sappiamo che P ⊆ NP: ciò che si risolve in tempo polinomiale si verifica anche in tempo polinomiale. La domanda è se l'inclusione sia stretta:

P = NP oppure P ≠ NP?

Grazie alla NP-completezza, la domanda si riduce a un singolo problema. Basta prendere SAT, o qualsiasi altro problema NP-completo:

  • se SAT ha un algoritmo polinomiale, allora P = NP;
  • se si dimostra che SAT non ne ha, allora P ≠ NP.

Scenario 1: P = NP

Se P = NP, ogni problema con soluzioni verificabili in fretta avrebbe anche un algoritmo polinomiale per trovarle. Le conseguenze dipenderebbero molto da come lo si dimostra.

  • Una dimostrazione costruttiva ed efficiente, con un algoritmo di grado basso e costanti ragionevoli, sconvolgerebbe la pratica: molti problemi di pianificazione, scheduling, progettazione di circuiti e allocazione di risorse diventerebbero risolvibili in modo esatto.
  • La crittografia a chiave pubblica come la conosciamo perderebbe le sue basi. Data una chiave pubblica, verificare che una chiave privata candidata sia quella giusta è facile; con P = NP lo diventerebbe anche trovarla. Più in generale non esisterebbero funzioni unidirezionali, cioè facili da calcolare e difficili da invertire.
  • La ricerca di dimostrazioni diventerebbe meccanizzabile per dimostrazioni di lunghezza ragionevole: verificare una dimostrazione formale è facile, quindi lo diventerebbe anche trovarla.

Ma una dimostrazione di P = NP potrebbe anche essere non costruttiva, o fornire un algoritmo in n¹⁰⁰⁰. In quel caso il risultato teorico sarebbe enorme, ma l'impatto pratico immediato quasi nullo.

Scenario 2: P ≠ NP

È lo scenario ritenuto più probabile. Confermerebbe ciò che l'esperienza suggerisce: per i problemi NP-completi non esiste un algoritmo efficiente che funzioni su tutte le istanze. Ma anche qui servono precisazioni.

  • P ≠ NP riguarda il caso peggiore. Molte istanze industriali di SAT, anche molto grandi, vengono risolte di routine dai solutori moderni. La difficoltà teorica non impedisce il successo pratico su istanze strutturate.
  • P ≠ NP non basta per la crittografia. Questa richiede problemi difficili nel caso medio, cioè su istanze generate a caso, non solo su qualche istanza patologica. Servono ipotesi più forti di P ≠ NP.
  • Resterebbero comunque aperte altre domande, come NP contro coNP o P contro PSPACE.

I problemi intermedi

Se P ≠ NP, ogni problema di NP è in P oppure è NP-completo? No. Il teorema di Ladner dimostra che, se P ≠ NP, esistono problemi in NP che non sono né in P né NP-completi: i problemi NP-intermedi.

Gli esempi costruiti nella dimostrazione sono artificiali, ma ci sono candidati naturali, problemi in NP per cui non si conosce né un algoritmo polinomiale né una dimostrazione di NP-completezza:

  • la fattorizzazione degli interi, nella sua versione decisionale;
  • l'isomorfismo di grafi: due grafi dati sono lo stesso grafo con i nodi rinominati?
  • il logaritmo discreto.

Fattorizzazione e logaritmo discreto sono alla base di schemi crittografici molto diffusi: la loro sicurezza poggia proprio sul fatto che nessuno conosce algoritmi classici efficienti.

Perché è così difficile

Non è solo questione di mancanza di idee: sono stati dimostrati teoremi che escludono intere famiglie di tecniche.

  1. Relativizzazione. Esistono oracoli A per cui P^A = NP^A e oracoli B per cui P^B ≠ NP^B. Molte tecniche classiche, come la diagonalizzazione, funzionano allo stesso modo con qualsiasi oracolo. Quindi da sole non possono risolvere la questione.
  2. Dimostrazioni naturali. Una vasta classe di argomenti combinatori sui circuiti, se riuscisse a separare P da NP, permetterebbe anche di rompere generatori pseudocasuali che si ritengono sicuri. Questo rende improbabile che tali argomenti funzionino.
  3. Algebrizzazione. Un'estensione della barriera di relativizzazione esclude anche tecniche algebriche che avevano permesso altri risultati importanti.

Ogni dimostrazione di P ≠ NP dovrà quindi usare idee sostanzialmente diverse da quelle che hanno avuto successo finora.

Come convive il mondo reale con il dubbio

Nel lavoro quotidiano P contro NP non resta un'astrazione. Quando un problema si rivela NP-completo, le strategie sono note:

  • sfruttare la struttura delle istanze reali, spesso molto più semplici del caso peggiore;
  • accettare soluzioni approssimate con garanzie di qualità;
  • usare euristiche e solutori specializzati, misurandone le prestazioni sulle istanze che contano;
  • limitare un parametro del problema, come la dimensione di una soluzione, quando resta piccolo.

In sintesi

  • P contro NP chiede se tutto ciò che si verifica in fretta si possa anche risolvere in fretta.
  • Basta decidere la questione per un solo problema NP-completo, per esempio SAT.
  • P = NP minerebbe le funzioni unidirezionali, ma l'impatto pratico dipenderebbe dall'efficienza dell'algoritmo.
  • Se P ≠ NP, il teorema di Ladner garantisce problemi intermedi; fattorizzazione e isomorfismo di grafi sono candidati.
  • Relativizzazione, dimostrazioni naturali e algebrizzazione escludono molte tecniche note.
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