Reasoning, Proof, and Formalization with Lean 4
Lezione 2 - Proposizioni, dimostrazioni e regole logiche
Stefano M. Nicoletti
6 luglio 2026
Struttura della lezione
- Parte teorica: proposizioni come tipi, regole logiche, approccio costruttivo.
- Live demo.
- Esercizi.
Recap: che cosa fa il kernel
Il kernel è la parte del sistema che controlla il risultato finale.
- Le tattiche aiutano a costruire una dimostrazione.
- L'interfaccia mostra il proof state e guida il lavoro di dimostrazione.
- Le librerie forniscono definizioni e teoremi già verificati.
- Alla fine, il kernel deve verificare che l'oggetto costruito abbia il tipo richiesto.
Leonardo de Moura and Sebastian Ullrich, The Lean 4 Theorem Prover and Programming Language
Il ruolo del typechecker
Lean controlla se un termine ha il tipo atteso.
- Un termine può essere un dato, una funzione, una definizione o una dimostrazione.
- In una dimostrazione, il tipo atteso è la proposizione che vogliamo dimostrare.
- Un teorema viene accettato quando Lean può controllare (nel senso di type check) il termine di dimostrazione rispetto all'enunciato.
- Per il typechecker, dimostrare un teorema vuol dire aver costruito con successo un termine ben tipato.
Proposizioni come tipi
In Lean una proposizione è un oggetto di tipo Prop.
P : Propdice chePè una proposizione.- Una dimostrazione di
Pè un termine che abita il tipoP. - Scrivere
hP : P- ad esempio tra le assunzioni - significa avere una dimostrazione diP. - Dimostrare
Psignifica dunque costruire un termine del tipo giusto.
In Lean, dimostrare è costruire
L'implicazione P → Q si comporta come una funzione da dimostrazioni di P a dimostrazioni di Q.
- Abbiamo visto che un'assunzione è un input temporaneo disponibile nel contesto di dimostrazione.
- Applicare un'implicazione significa applicare una funzione.
- Da
hPQ : P → QehP : Potteniamo una dimostrazione diQ. - Il proof state mostra quali input abbiamo e quale output dobbiamo costruire.
Connettivi logici in Lean
I connettivi logici sono dunque costruttori di proposizioni.
| Notazione | Lettura |
|---|---|
| P ∧ Q | P e Q |
| P ∨ Q | P oppure Q |
| P → Q | se P, allora Q |
| ¬P | negazione di P |
| P ↔ Q | P se e solo se Q |
| False | contraddizione |
Regole di introduzione ed eliminazione
Per ogni connettivo distinguiamo due domande.
- Regola di introduzione: come costruisco una dimostrazione di questa proposizione composta?
- Regola di eliminazione: come uso una dimostrazione di questa proposizione composta per avere le sue componenti elementari?
- Nel live demo osserveremo queste due domande direttamente nel proof state.
Implicazione: P → Q
Una implicazione trasforma dimostrazioni di P in dimostrazioni di Q.
- Per introdurre
P → Q, assumiamo temporaneamentePe facciamo vedere come costruireQ. - Per eliminare
P → Q, la applichiamo a una dimostrazione diP. - Questo è di nuovo il modus ponens: da
P → QePotteniamoQ.
Congiunzione: P ∧ Q
Una congiunzione contiene entrambe le informazioni.
- Per introdurre
P ∧ Q, dobbiamo costruire sia una dimostrazione diPche una dimostrazione diQ. - Per eliminare
P ∧ Q, possiamo selezionare liberamente la parte sinistra oppure la parte destra (uno dei congiunti). - In Lean questo corrisponde all'idea di accedere alle due componenti di una dimostrazione composta.
Disgiunzione: P ∨ Q
Una disgiunzione contiene una delle due informazioni.
- Per introdurre
P ∨ Q, basta costruire una dimostrazione di uno dei due disgiunti. - Per eliminare
P ∨ Q, dobbiamo necessariamente ragionare per casi. - In entrambi - nel caso
Pe nel casoQ- dobbiamo mostrare di poter raggiungere la stessa conclusione. - Questo è il motivo per cui una disgiunzione produce due rami nella dimostrazione.
Negazione: ¬P
In Lean la negazione è definita tramite False.
¬PsignificaP → False.- Per dimostrare
¬P, assumiamo temporaneamenteP... - ... poi dobbiamo derivare una contraddizione.
Falserappresenta uno stato contraddittorio: da lì qualunque goal può essere chiuso.
Bicondizionale: P ↔ Q
Un bicondizionale contiene due implicazioni, una in ciascuna direzione.
- Per introdurre
P ↔ Q, dobbiamo costruire siaP → QcheQ → P. - Per eliminare
P ↔ Qda sinistra a destra, usiamo la direzioneP → Q. - Per eliminarlo da destra a sinistra, usiamo la direzione
Q → P. - In Lean queste due direzioni corrispondono a
Iff.mpeIff.mpr.
Fondazioni intuizioniste
La logica di base di Lean è costruttiva (intuizionista). Ovvero:
- Una dimostrazione deve far vedere come costruire l'oggetto richiesto dal tipo.
- Non basta dire che un'alternativa sarebbe assurda e dunque concludere il suo contrario: bisogna produrre costruttivamente - passo dopo passo - ciò che il goal richiede.
Che cosa non è automatico costruttivamente
Alcuni principi familiari della matematica classica non sono disponibili automaticamente, se scegliamo un approccio costruttivo.
- Il terzo escluso:
P ∨ ¬P. - L'eliminazione della doppia negazione:
¬¬P → P. - La dimostrazione per assurdo in forma classica.
- Costruttivamente, escludere
¬Pnon equivale ancora a far vedere come costruire una dimostrazione diP.
Un esempio: la contrapposizione
La contrapposizione mette in relazione un'implicazione e la sua forma negativa: (P → Q) ↔ (¬Q → ¬P).
- La direzione
(P → Q) → (¬Q → ¬P)è costruttiva. - La direzione
(¬Q → ¬P) → (P → Q)richiede ragionamento classico. - Lo vedremo tra poco nel live demo.
Dove subentra la logica classica
Lean permette di usare principi classici in modo esplicito.
Classical.em Pfornisce una dimostrazione diP ∨ ¬Pe ci permette di usare il terzo escluso.- Possiamo quindi ragionare per casi su una proposizione arbitraria.
Classical.byContradictionformalizza la dimostrazione per assurdo: da¬P → FalseconcludiamoP.
Live demo
Fonti
Theorem Proving in Lean 4, Propositions and Proofs
Logic and Proof, Natural Deduction Rules
Leonardo de Moura and Sebastian Ullrich, The Lean 4 Theorem Prover and Programming Language