Reasoning, Proof, and Formalization with Lean 4

Lezione 3 - Dalla deduzione naturale alle dimostrazioni in Lean

Stefano M. Nicoletti

20 luglio 2026

Struttura della lezione

Recap: dal type checking alla dimostrazione

Lean usa lo stesso linguaggio di tipi e termini per programmare e dimostrare.

Theorem Proving in Lean 4, Propositions and Proofs

Abitazione di un tipo

Un tipo è abitato quando esiste almeno un termine di quel tipo.

Un esempio dal mondo reale

Pensiamo al tipo LunaDiGiove: questo tipo è abitato perché esiste almeno un oggetto che soddisfa questa descrizione.

NASA Science, Io Facts

La corrispondenza di Curry-Howard

La corrispondenza di Curry-Howard identifica due modi di descrivere la stessa struttura: una dimostrazione logica e un programma ben tipato.

Curry-Howard: le corrispondenze

Il parallelismo diventa concreto, e.g., nei connettivi e nelle operazioni di dimostrazione.

LogicaTeoria dei tipi
proposizionetipo
dimostrazionetermine
A → Bfunzione da dimostrazioni di A a dimostrazioni di B
introduzione di →astrazione: costruire una funzione
eliminazione di →applicazione di funzione

Una derivazione certifica che una proposizione è dimostrabile: infatti costruisce un termine che abita il tipo corrispondente.

Theorem Proving in Lean 4, Propositions and Proofs

Philip Wadler, Propositions as Types

Che cos'è la deduzione naturale

La deduzione naturale presenta una dimostrazione come una sequenza di passi locali governati da regole.

Logic and Proof, Natural Deduction for Propositional Logic

La forma di un giudizio

Scriviamo Γ ⊢ A e leggiamo: «dalle assunzioni in Γ possiamo derivare A».

Implicazione: introduzione →I

Regola:

Introduzione dell'implicazione

Schema naturale: per dimostrare A → B, introduciamo l'assunzione A; arriviamo a una dimostrazione di B; usiamo esattamente questa dimostrazione.

Esempio: vogliamo dimostrare che, se piove e fa freddo, allora piove. Introduciamo l'assunzione che piova e faccia freddo; abbiamo che piove prendendo la parte sinistra dell'assunzione; usiamo esattamente questo fatto.

Implicazione: eliminazione →E

Regola:

Eliminazione dell'implicazione

Schema naturale: abbiamo A → B e abbiamo A; applichiamo la prima (funzione) alla seconda (dimostrazione); abbiamo B e usiamo esattamente questo fatto.

Esempio: vogliamo dimostrare che prendo l'ombrello, date le assunzioni che, se piove prendo l'ombrello e che piove. Applichiamo la prima assunzione alla seconda; abbiamo che prendo l'ombrello e usiamo esattamente questo fatto.

Congiunzione: introduzione ∧I

Regola:

Introduzione della congiunzione

Schema naturale: applichiamo il costruttore della congiunzione; abbiamo il caso in cui dobbiamo dimostrare A e usiamo esattamente la sua dimostrazione; abbiamo poi il caso B e usiamo esattamente la sua dimostrazione.

Esempio: vogliamo dimostrare che piove e fa freddo, date le assunzioni che piove e che fa freddo. Applichiamo il costruttore di «piove e fa freddo»; abbiamo il caso «piove» e usiamo esattamente la prima assunzione; abbiamo il caso «fa freddo» e usiamo esattamente la seconda.

Congiunzione: eliminazione sinistra ∧Eₗ

Regola:

Eliminazione sinistra della congiunzione

Schema naturale: abbiamo A ∧ B; abbiamo A prendendo la parte sinistra della congiunzione; usiamo esattamente questo fatto.

Esempio: vogliamo dimostrare che piove, data l'assunzione che piove e fa freddo. Abbiamo che piove prendendo la parte sinistra dell'assunzione; usiamo esattamente questo fatto.

Congiunzione: eliminazione destra ∧Eᵣ

Regola:

Eliminazione destra della congiunzione

Schema naturale: abbiamo A ∧ B; abbiamo B prendendo la parte destra della congiunzione; usiamo esattamente questo fatto.

Esempio: vogliamo dimostrare che fa freddo, data l'assunzione che piove e fa freddo. Abbiamo che fa freddo prendendo la parte destra dell'assunzione; usiamo esattamente questo fatto.

Disgiunzione: introduzione sinistra ∨Iₗ

Regola:

Introduzione sinistra della disgiunzione

Schema naturale: applichiamo il costruttore sinistro della disgiunzione; il goal diventa A; usiamo esattamente la dimostrazione di A.

Esempio: vogliamo dimostrare che piove oppure nevica, data l'assunzione che piove. Applichiamo il costruttore sinistro di «piove oppure nevica»; il goal diventa «piove»; usiamo esattamente l'assunzione che piove.

Disgiunzione: introduzione destra ∨Iᵣ

Regola:

Introduzione destra della disgiunzione

Schema naturale: applichiamo il costruttore destro della disgiunzione; il goal diventa B; usiamo esattamente la dimostrazione di B.

Esempio: vogliamo dimostrare che piove oppure nevica, data l'assunzione che nevica. Applichiamo il costruttore destro di «piove oppure nevica»; il goal diventa «nevica»; usiamo esattamente l'assunzione che nevica.

Disgiunzione: eliminazione ∨E

Regola:

Eliminazione della disgiunzione

Schema naturale: abbiamo A ∨ B e procediamo per casi; abbiamo il caso A, applichiamo A → C e abbiamo C; abbiamo il caso B, applichiamo B → C e abbiamo ancora C; in ciascun caso usiamo esattamente il fatto ottenuto.

Esempio: vogliamo dimostrare che prendo l'ombrello, date le assunzioni che piove oppure nevica, che se piove prendo l'ombrello e che se nevica prendo l'ombrello. Procediamo per casi sulla prima assunzione; abbiamo il caso che piove, applichiamo la seconda assunzione e abbiamo che prendo l'ombrello; abbiamo il caso che nevica, applichiamo la terza assunzione e abbiamo ancora che prendo l'ombrello; usiamo esattamente il fatto ottenuto in ciascun caso.

Negazione: che cosa significa

In Lean, ¬A è definita come A → False.

Negazione: introduzione ¬I

Regola:

Introduzione della negazione

Schema naturale: introduciamo l'assunzione A; applichiamo le assunzioni disponibili e abbiamo una contraddizione; usiamo esattamente questa contraddizione per dimostrare ¬A.

Esempio: vogliamo dimostrare che non ho bevuto caffè, date le assunzioni che, se bevo caffè, resto sveglio e che non resto sveglio. Introduciamo l'assunzione che io abbia bevuto caffè; applichiamo la prima assunzione e abbiamo che resto sveglio; applichiamo la seconda assunzione e abbiamo una contraddizione; usiamo esattamente questa contraddizione.

Negazione: eliminazione ¬E

Regola:

Eliminazione della negazione

Schema naturale: abbiamo ¬A e abbiamo A; applichiamo la prima dimostrazione alla seconda e abbiamo una contraddizione; usiamo esattamente questa contraddizione.

Esempio: vogliamo dimostrare una contraddizione, date le assunzioni che il laboratorio non è aperto e che è aperto. Applichiamo la prima assunzione alla seconda e abbiamo una contraddizione; usiamo esattamente questa contraddizione.

Verità: introduzione ⊤I

Regola:

Introduzione della verità

Schema naturale: abbiamo il costruttore canonico di True; usiamo esattamente questo costruttore senza applicare alcuna assunzione.

Esempio: vogliamo dimostrare la proposizione sempre vera. Abbiamo il suo costruttore canonico; usiamo esattamente questo costruttore.

Falsità: eliminazione ⊥E

Regola:

Eliminazione della falsità

Schema naturale: applichiamo l'eliminazione di False; il goal diventa False; usiamo esattamente la contraddizione disponibile.

Esempio: vogliamo dimostrare che piove, data l'assunzione di una contraddizione. Applichiamo l'eliminazione di False; il goal diventa una contraddizione; usiamo esattamente quella disponibile.

Bicondizionale: introduzione ↔I

Regola:

Introduzione del bicondizionale

Schema naturale: applichiamo il costruttore del bicondizionale; abbiamo il caso A → B, introduciamo l'assunzione A e dimostriamo B; abbiamo il caso B → A, introduciamo l'assunzione B e dimostriamo A.

Esempio: vogliamo dimostrare che «piove e fa freddo» equivale a «fa freddo e piove». Applichiamo il costruttore dell'equivalenza: dobbiamo dimostrare le due direzioni. Abbiamo il primo caso: supponiamo che piova e faccia freddo e vogliamo dimostrare che fa freddo e piove. Introduciamo questa assunzione; applichiamo il costruttore della congiunzione; usiamo esattamente prima il fatto che fa freddo e poi il fatto che piove. Abbiamo il secondo caso: supponiamo che faccia freddo e piova e vogliamo dimostrare che piove e fa freddo. Introduciamo questa assunzione; applichiamo il costruttore della congiunzione; usiamo esattamente prima il fatto che piove e poi il fatto che fa freddo.

Bicondizionale: eliminazione ↔Eₗ

Regola:

Eliminazione sinistra del bicondizionale

Schema naturale: abbiamo A → B applicando l'eliminazione sinistra-destra al bicondizionale; applichiamo questa direzione ad A; abbiamo B e usiamo esattamente questo fatto.

Esempio: vogliamo dimostrare che un numero è divisibile per due, date le assunzioni che essere pari equivale a essere divisibile per due e che il numero è pari. Abbiamo la direzione verso «divisibile per due»; la applichiamo alla seconda assunzione; abbiamo che il numero è divisibile per due e usiamo esattamente questo fatto.

Bicondizionale: eliminazione ↔Eᵣ

Regola:

Eliminazione destra del bicondizionale

Schema naturale: abbiamo B → A applicando l'eliminazione destra-sinistra al bicondizionale; applichiamo questa direzione a B; abbiamo A e usiamo esattamente questo fatto.

Esempio: vogliamo dimostrare che un numero è pari, date le assunzioni che essere pari equivale a essere divisibile per due e che il numero è divisibile per due. Abbiamo la direzione verso «pari»; la applichiamo alla seconda assunzione; abbiamo che il numero è pari e usiamo esattamente questo fatto.

Come leggere una dimostrazione Lean, con la deduzione naturale

Strategia operativa

Quando guardiamo il proof state, poniamo alcune domande.

Fonti

Jeremy Avigad, Leonardo de Moura, Soonho Kong, Sebastian Ullrich, Theorem Proving in Lean 4: Propositions and Proofs

Jeremy Avigad, Robert Y. Lewis, Floris van Doorn, Logic and Proof: Natural Deduction Rules

Philip Wadler, Propositions as Types, Communications of the ACM 58(12), 2015