Reasoning, Proof, and Formalization with Lean 4
Lezione 1 - Che cos'è un interactive theorem prover?
Stefano M. Nicoletti
22 giugno 2026
Struttura della lezione
- Parte teorica: che cos'è un interactive theorem prover e perché usarlo.
- Live demo.
- Esercizi.
Obiettivo
Capire che cosa significa eseguire una dimostrazione in modo interattivo.
- Che tipo di strumento è Lean?
- Che cosa vede l'utente durante una dimostrazione interattiva?
- Che cosa fornisce le fondamenta del sistema di dimostrazione?
Interactive theorem prover
Un interactive theorem prover è un sistema in cui l'utente costruisce una dimostrazione formale con l'aiuto di un "ambiente di controllo".
- L'utente scrive enunciati, definizioni e passaggi di una dimostrazione.
- Il sistema mostra lo stato corrente della dimostrazione, o proof state.
- Il sistema accetta solo passaggi che rispettano certe regole formali.
- La dimostrazione finale viene validata meccanicamente dal kernel del theorem prover.
Interattivo, non automatico
Un theorem prover può essere automatico o interattivo. In questo corso ci interessa prima di tutto l'interazione.
- Non chiediamo al sistema di inventare una dimostrazione al posto nostro.
- Costruiamo una dimostrazione passo dopo passo.
- Osserviamo come cambia lo stato della dimostrazione.
- Impariamo quali assunzioni sono disponibili in ogni passaggio.
Lean
Lean è uno specifico interactive theorem prover.
- È anche un linguaggio di programmazione.
- Permette di scrivere definizioni, enunciati e dimostrazioni.
- Integra un ambiente interattivo per seguire lo sviluppo della dimostrazione.
- Verifica formalmente il risultato prodotto.
Leonardo de Moura and Sebastian Ullrich, The Lean 4 Theorem Prover and Programming Language
Oggetti e tipi
In Lean ogni oggetto, o termine, ha un tipo.
- Il tipo dice che genere di oggetto stiamo trattando. Ad esempio:
- Oggetti di tipo numerico, come Nat, possono far parte di ragionamenti computazionali.
- Oggetti di tipo proposizionale, come Prop, entrano in ragionamenti su verità e falsità.
- Il tipo orienta ciò che ha senso fare con un oggetto.
- Il rapporto tra termini, tipi, proposizioni e dimostrazioni sarà affrontato nelle prossime lezioni.
Dimostrazioni interattive
In una dimostrazione interattiva:
- Vediamo un obiettivo locale, o goal.
- Vediamo le ipotesi e assunzioni disponibili.
- Vediamo il proof state in quel punto della dimostrazione.
- Ogni passaggio cambia lo stato della dimostrazione, o proof state.
Goal
Il goal è ciò che resta da dimostrare in un determinato momento.
- All'inizio coincide con l'obiettivo dell'enunciato.
- Durante la dimostrazione può cambiare.
- Può essere sostituito da goal più semplici.
- La dimostrazione è finita quando non restano goal aperti.
Ipotesi e assunzioni
Le ipotesi sono le informazioni disponibili nel punto corrente della dimostrazione.
- Alcune ipotesi vengono dall'enunciato.
- Altre possono essere introdotte durante la dimostrazione.
- Alcune valgono solo localmente.
- Il proof state mostra quali risorse possiamo usare.
Tattiche
Una tattica è un comando che trasforma il proof state.
- Può introdurre una nuova assunzione.
- Può applicare una regola disponibile.
- Può dividere un problema in casi.
- Può chiudere un goal quando abbiamo esattamente ciò che serve.
Perché usare Lean: argomentazione
Un theorem prover costringe a distinguere premesse, passaggi inferenziali e conclusione.
- Le assunzioni devono essere dichiarate.
- La conclusione deve essere formulata esplicitamente.
- Il passaggio dalle premesse alla conclusione può essere verificato.
- Restano fuori accettabilità, rilevanza e interpretazione delle premesse.
Stanford Encyclopedia of Philosophy, Argument and Argumentation
Perché usare Lean: software correctness
Un programma può compilare, passare molti test e violare comunque la specifica del comportamento atteso.
- Possiamo rendere esplicite le specifiche.
- Possiamo verificare proprietà del programma o del modello.
- Possiamo ottenere garanzie più forti dei soli test.
Perché usare Lean: matematica
Una dimostrazione formalizzata rende verificabile il rapporto tra definizioni, lemmi e conclusione.
- I passaggi vengono verificati rispetto a regole esplicite.
- I risultati possono essere riusati in librerie formali come
mathlib. - La collaborazione tra esperti può generare librerie di matematica verificata.
Perché usare Lean: fisica
In fisica il theorem prover:
- Può rendere esplicite le ipotesi di un modello.
- Può verificare passaggi matematici o logici.
- Può chiarire quali assunzioni fanno parte di una derivazione.
- Physlib mostra questa direzione per Lean 4.
Che cosa verifica Lean
Lean verifica la correttezza di una costruzione formale/dimostrazione rispetto a un enunciato formalizzato. Ovviamente:
- Non decide se una premessa empirica è vera.
- Non decide se una fonte storica per il nostro argomento è affidabile.
- Non decide se un modello fisico è adeguato a un problema.
- Non decide se la formalizzazione cattura tutto ciò che volevamo dire.
Come fidarsi di Lean
La fiducia in Lean dipende dal modo in cui il sistema è costruito.
- Un kernel minimale verifica i risultati finali.
- Il kernel appartiene alla trusted computing base.
- Il codice aperto permette ispezione, correzione e revisione pubblica.
- La comunità costruisce strumenti indipendenti di controllo e verifica.
Kernel minimale
L'idea del kernel minimale è ridurre la parte del sistema di cui dobbiamo fidarci.
- Le tattiche per passare da un proof state all'altro possono essere complesse.
- L'interfaccia può essere complessa.
- Le librerie possono essere enormi.
- Ma il risultato finale deve essere validato dal kernel.
Collaborative verification
La fiducia cresce quando il controllo non dipende da un unico artefatto chiuso.
- Kernel e librerie sono discussi pubblicamente.
- Implementazioni e checker indipendenti possono confrontare i risultati.
- La comunità può individuare bug, assunzioni e punti deboli.
- La verifica stessa diventa un lavoro collaborativo.
- Progetti come Lean4Lean esplorano la verifica del typechecker di Lean in Lean.
Mario Carneiro, Lean4Lean: Towards a Verified Typechecker for Lean, in Lean
Partiamo dall'argomentazione!
Un argomento collega premesse e conclusione attraverso un'inferenza.
- Le premesse sono ciò da cui partiamo.
- La conclusione è ciò che vogliamo sostenere.
- L'inferenza è il passaggio dalle premesse alla conclusione.
Un buon argomento
Un buon argomento richiede:
| Dimensione | Domanda |
|---|---|
| Accettabilità | le premesse sono vere (credibili/difendibili)? |
| Validità | la conclusione segue dalle premesse? |
| Soundness/correttezza | le premesse sono vere/accettabili e l'inferenza è valida? |
Validità e soundness/correttezza
La validità riguarda la forma del passaggio inferenziale.
- Un argomento può avere premesse vere ma inferenza non valida.
- La correttezza richiede sia buone premesse sia un valido passaggio inferenziale.
- Lean verifica la validità formale del passaggio inferenziale o dello schema di ragionamento.
Linguaggio ordinario e forma logica
Prima di formalizzare bisogna riconoscere alcune forme ricorrenti nel linguaggio ordinario.
| Linguaggio ordinario | Forma logica |
|---|---|
| abbiamo entrambe le informazioni | E, cioè ∧ |
| abbiamo almeno una tra due alternative | O, cioè ∨ |
| se vale una condizione/ipotesi, allora segue una conseguenza | IMPLICA, cioè → |
Installare Lean
Usare VS Code con l'estensione Lean 4:
- Installare VS Code.
- Installare la Lean 4 VS Code extension.
- Seguire la guida di setup aperta dall'estensione.
- Aprire la cartella del progetto in VS Code.
Live Demo
Esercizi
Fonti
Theorem Proving in Lean 4, Propositions and Proofs
Theorem Proving in Lean 4, Dependent Type Theory
Leonardo de Moura and Sebastian Ullrich, The Lean 4 Theorem Prover and Programming Language
Mario Carneiro, Lean4Lean: Towards a Verified Typechecker for Lean, in Lean
The mathlib Community, The Lean Mathematical Library
Stanford Encyclopedia of Philosophy, Argument and Argumentation