# Teorema di Böhm-Jacopini

Il teorema di Böhm-Jacopini, enunciato nel 1966 dagli informatici Corrado Böhm e Giuseppe Jacopini, è un teorema di informatica teorica il quale afferma che qualunque algoritmo può essere implementato in fase di programmazione (in diagramma di flusso, pseudocodice o codice sorgente) utilizzando tre sole strutture dette strutture di controllo: la sequenza, la selezione (o struttura condizionale) e l'iterazione (o ciclo), da applicare in modo gerarchico alla composizione di istruzioni elementari (per esempio, istruzioni eseguibili con il modello di base della macchina di Turing).

## Storia

Il lavoro che enuncia questo risultato venne svolto dai due autori presso l'Istituto per le applicazioni del calcolo, di cui erano entrambi ricercatori, nell'ambito di una collaborazione con l'International Computing Center dell'UNESCO, che aveva sede presso lo stesso istituto. Il ruolo dei due autori è specificato nell'introduzione dell'articolo.

## Strutture

La sequenza o blocco è la normale elencazione di istruzioni perché vengano eseguite una di seguito all'altra nell'ordine in cui sono state scritte dal programmatore.

### Selezione (o condizionale)

La selezione è la scelta fra due percorsi da seguire alternativamente, che dipende da una condizione che può essere vera o falsa. Nei linguaggi di programmazione questa struttura viene definita di solito con l'uso di parole chiave come if ... then ... else. La condizione può essere una semplice variabile informatica booleana, cioè una variabile che può avere i soli valori "vero" e "falso". Nella pratica della programmazione vengono normalmente usati costrutti selettivi come if (a > 10) nei quali l'espressione tra parentesi è un'espressione booleana. Questo costrutto però si può considerare un'abbreviazione di una sequenza di assegnazioni preliminari conclusa da una selezione su una semplice variabile booleana. Nella pratica sono utilizzate anche selezioni a più di due vie, come quella implicita nell'operatore ?: del linguaggio C, lo storico IF a tre vie del Fortran 2 (istruzioni come: IF(numero)100,200,300) e i vari selettori a più vie come un'antica forma di GOTO del FORTRAN 2 e i costrutti come quello del C basato su switch e case. Anche tutti questi costrutti si possono ridurre senza difficoltà alla selezione dicotomica di base.

### Ciclo (o iterazione)

Il ciclo, detto anche iterazione, è un blocco di istruzioni che vengono ripetutamente eseguite fino a che una certa condizione cambia di stato. Nella pratica si utilizzano diversi tipi di ciclo: quelli con la clausola sulla condizione in testa, quelli con la clausola in coda, quelli con la clausola in mezzo e quelli che prevedono lo scorrimento di una sequenza enumerativa (strettamente numerica o meno). Per l'implementazione si usano parole chiave come: while ... do. Anche tutti questi costrutti si possono ridurre ad un costrutto base.

## Dimostrazione del teorema

La dimostrazione del teorema di Böhm e Jacopini procede per induzione strutturale del diagramma di flusso. Avendo impiegato l'accoppiamento di pattern nei grafici, la dimostrazione di Böhm e Jacopini non fu molto utile come algoritmo di trasformazione dei programmi, ma aprì la porta a ricerche aggiuntive in questa direzione.

## Conseguenze

Questo teorema ha un interesse anche teorico, in quanto i linguaggi di programmazione tendono a dotarsi di più tipi di istruzioni di larga portata per evitare che i programmatori debbano occuparsi di istruzioni di portata molto minuta e quindi dispersive per quanto attiene alla padronanza delle finalità dell'algoritmo (esistono però linguaggi minimalisti, come Brainfuck, che si attengono alla lettera al teorema). Il suo valore va visto nella sua capacità di fornire indicazioni generali per le attività di progettazione di nuovi linguaggi e di strategie di programmazione. In effetti, esso ha contribuito alla critica dell'uso sconsiderato delle istruzioni go to e alla definizione delle linee guida della programmazione strutturata che si sono avuti intorno al 1970.