Reasoning, Proof, and Formalization with Lean 4
Lezione 5 - Regole dei quantificatori
Stefano M. Nicoletti
Struttura della lezione
- Ripassiamo la formalizzazione di enunciati quantificati.
- Completiamo gli esercizi con funzioni, relazioni e quantificatori annidati.
- Introduciamo ed eliminiamo i quantificatori universale ed esistenziale.
- Comprendiamo le condizioni che rendono valide queste regole.
- Combiniamo quantificatori e connettivi in dimostrazioni più articolate.
Ripasso: dal linguaggio naturale a Lean
Usiamo Studentessa, Legge e Comprende come predicati su Cosa. Come formalizziamo?
- Ogni studentessa legge.
- Qualche studentessa legge.
- Ogni studentessa che legge comprende.
- Esiste una studentessa che legge e comprende.
Ripasso: formalizzazione
| Enunciato | Lean |
|---|---|
| Ogni studentessa legge | ∀ x : Cosa, Studentessa x → Legge x |
| Qualche studentessa legge | ∃ x : Cosa, Studentessa x ∧ Legge x |
| Ogni studentessa che legge comprende | ∀ x : Cosa, Studentessa x → Legge x → Comprende x |
| Esiste una studentessa che legge e comprende | ∃ x : Cosa, Studentessa x ∧ Legge x ∧ Comprende x |
#check verifica che ciascuna espressione sia una proposizione ben formata (non la dimostra).
Esercizio: formalizzare con una funzione
Usiamo anche madreDi : Cosa → Cosa. Come formalizziamo?
- La madre di Ipazia è curiosa.
- Ogni studentessa conosce la propria madre.
- Esiste una studentessa la cui madre legge.
Esercizio: controlliamo le funzioni
| Enunciato | Lean |
|---|---|
| La madre di Ipazia è curiosa | Curiosa (madreDi ipazia) |
| Ogni studentessa conosce la propria madre | ∀ x : Cosa, Studentessa x → Conosce x (madreDi x) |
| Esiste una studentessa la cui madre legge | ∃ x : Cosa, Studentessa x ∧ Legge (madreDi x) |
Le parentesi mostrano che costruiamo prima il termine madreDi x e poi lo usiamo come argomento.
Esercizio: quantificatori annidati
Usiamo Conosce : Cosa → Cosa → Prop. Come formalizziamo?
- Ogni persona conosce qualcuno.
- Qualcuno conosce ogni persona.
- Nessuno conosce ogni persona.
Esercizio: controlliamo i quantificatori annidati
| Enunciato | Lean |
|---|---|
| Ogni persona conosce qualcuno | ∀ x : Cosa, Persona x → ∃ y : Cosa, Persona y ∧ Conosce x y |
| Qualcuno conosce ogni persona | ∃ x : Cosa, Persona x ∧ ∀ y : Cosa, Persona y → Conosce x y |
| Nessuno conosce ogni persona | ¬∃ x : Cosa, Persona x ∧ ∀ y : Cosa, Persona y → Conosce x y |
L'ordine dei quantificatori determina se la persona conosciuta può cambiare al cambiare della prima persona.
Quantificatore universale: introduzione ∀I
Regola:
Schema naturale: vogliamo dimostrare ∀ y : Cosa, A y. Introduciamo una cosa arbitraria x; il goal diventa A x. Dimostriamo A x senza usare informazioni particolari su x; concludiamo che A vale per ogni cosa.
Esempio: vogliamo dimostrare che ogni persona curiosa è curiosa. Introduciamo una cosa arbitraria x; introduciamo l'assunzione che x sia una persona; introduciamo l'assunzione che x sia curiosa; usiamo esattamente quest'ultima assunzione.
∀I: che cosa significa «arbitraria»?
La conclusione deve valere per una cosa qualsiasi, non soltanto per una cosa già nota.
- Da
hIpaziaCuriosa : Curiosa ipazianon possiamo concludere∀ y : Cosa, Curiosa y. - Dopo
intro x, Lean ci dà una nuovax : Cosadella quale non conosciamo l'identità. - Il goal è ora
Curiosa x, mahIpaziaCuriosadimostra soltantoCuriosa ipazia.
Perciò exact hIpaziaCuriosa non funziona: sapere qualcosa di Ipazia non dimostra la stessa proprietà della nuova x arbitraria.
∀I: due variabili chiamate x
Possiamo vedere la stessa difficoltà dichiarando prima un oggetto particolare x : Cosa e usando di nuovo il nome x dopo intro x.
- Lean non confonde i due oggetti: nel tactic state rinomina il primo come
x✝. - L'assunzione diventa
hXCuriosa : Curiosa x✝. - La variabile introdotta dal quantificatore è la nuova
x : Cosa. - Il goal
Curiosa xnon coincide con il tipoCuriosa x✝dell'assunzione.
Il simbolo ✝ non ha un significato logico speciale: segnala soltanto la rinomina automatica di una variabile locale con lo stesso nome visualizzato.
∀I: assunzioni aperte e variabili libere
Nella regola, x non deve comparire libera in alcuna assunzione ancora aperta quando concludiamo ∀ y : Cosa, A y.
- Variabile libera: in
Curiosa x, nessun quantificatore legax. - Variabile legata: in
∀ y : Cosa, Curiosa y, il quantificatore legay. - Assunzione aperta problematica:
hXCuriosa : Curiosa x, se fosse già disponibile prima della generalizzazione.
Nel codice precedente, intro x crea invece una nuova variabile locale dentro il goal universale. Le assunzioni precedenti riguardano ipazia, non questa nuova x; lo scope impedisce di confonderle.
Quantificatore universale: eliminazione ∀E
Regola:
Schema naturale: abbiamo ∀ x, A x; scegliamo un termine t; applichiamo la dimostrazione universale a t; abbiamo A t e usiamo esattamente questo fatto.
Esempio: vogliamo dimostrare che Marta legge, date le assunzioni che ogni studentessa legge e che Marta è una studentessa. Applichiamo l'assunzione universale a Marta; abbiamo che, se Marta è una studentessa, allora legge. Applichiamo questo fatto all'assunzione che Marta è una studentessa; usiamo esattamente il risultato.
∀E: quale termine possiamo usare?
Il termine t può essere qualsiasi termine del dominio adatto.
- Può essere un nome:
marta. - Può essere una variabile locale:
x. - Può essere costruito da una funzione:
madreDi ipazia.
Se abbiamo h : ∀ x : Cosa, Curiosa x, allora h (madreDi ipazia) ha tipo Curiosa (madreDi ipazia). Lean controlla il tipo e gestisce i nomi delle variabili legate.
Quantificatore esistenziale: introduzione ∃I
Regola:
Schema naturale: vogliamo dimostrare ∃ x, A x. Scegliamo un testimone t; applichiamo il costruttore dell'esistenziale usando t; il goal diventa A t; usiamo esattamente una dimostrazione di A t.
Esempio: vogliamo dimostrare che esiste qualcuno che legge, data l'assunzione che Marta legge. Applichiamo il costruttore dell'esistenziale scegliendo Marta come testimone; il goal diventa «Marta legge»; usiamo esattamente l'assunzione disponibile.
∃I: scegliere il testimone
Anche qui il termine scelto può essere semplice oppure costruito.
- Per dimostrare
∃ x, Legge x, scegliamomartase abbiamoLegge marta. - Per dimostrare
∃ x, Curiosa x, scegliamomadreDi ipaziase abbiamoCuriosa (madreDi ipazia). - Dopo la scelta, Lean sostituisce il testimone nel predicato e mostra il nuovo goal.
Il controllo dei tipi e lo scope dei legami impediscono sostituzioni scorrette.
Quantificatore esistenziale: eliminazione ∃E
Regola:
Schema naturale: abbiamo ∃ x, A x. Applichiamo l'eliminazione dell'esistenziale; introduciamo un testimone arbitrario y e l'assunzione A y; dimostriamo B. Poiché B non dipende dall'identità di y, concludiamo B.
Esempio: vogliamo dimostrare che inizia un'indagine, date le assunzioni che qualcuno ha fatto una segnalazione e che, data una cosa qualsiasi x, se x fa una segnalazione, inizia un'indagine. Applichiamo l'eliminazione dell'esistenziale; introduciamo il testimone arbitrario y; introduciamo l'assunzione che y abbia fatto una segnalazione. Applichiamo la seconda assunzione a y e abbiamo che, se y ha fatto una segnalazione, inizia un'indagine; applichiamo questo fatto all'assunzione che y abbia fatto una segnalazione; abbiamo che inizia un'indagine e usiamo esattamente questo fatto.
∃E: perché il testimone è arbitrario?
L'esistenziale garantisce che un testimone esiste, ma non ci dice chi sia.
- Possiamo usare l'assunzione
A yricevuta aprendo l'esistenziale. - Non possiamo attribuire a
yproprietà che non seguono daA y. - La conclusione finale
Bnon può contenere libera la variabile localey.
Possiamo però riutilizzare y come testimone di un nuovo esistenziale: così la sua identità non compare nella conclusione.
∃E: come Lean applica la condizione
Exists.elim ci chiede una conclusione già fissata prima di aprire l'esistenziale.
apply Exists.elim hQualcunoHaFattoSegnalazioneapre l'assunzione esistenziale.intro yintroduce un testimone locale arbitrario.intro hYHaFattoSegnalazioneintroduce l'assunzione che il testimone abbia fatto una segnalazione.- Con due
haveapplichiamo la regola generale aye poi alla segnalazione diy. exact hIniziaIndaginechiude il goal originale, che non contieney.
Lean rifiuta una conclusione che dipenda illegalmente dall'identità del testimone locale.
Combinare ∃E, ∀E e ∃I
Vogliamo dimostrare che qualcuna resta asciutta, date le assunzioni che qualcuna ha un ombrello e che chiunque abbia un ombrello resta asciutta.
- Applichiamo
∃Ee otteniamo un testimone arbitrarioycon un ombrello. - Applichiamo
∀Eaye abbiamo cheyresta asciutta. - Applichiamo
∃I, scegliendo la stessaycome testimone.
La conclusione afferma soltanto che qualcuna resta asciutta: l'identità locale di y non sfugge dalla dimostrazione.
Combinare ∀, → e ∧
Date le assunzioni che ogni studentessa che legge prende appunti e che ogni studentessa che legge comprende, vogliamo dimostrare che ogni studentessa che legge prende appunti e comprende.
- Introduciamo una cosa arbitraria
xe le assunzioni che sia studentessa e che legga. - Applichiamo entrambe le regole universali a
x. - Applichiamo il costruttore della congiunzione.
- Nei due casi usiamo i risultati ottenuti dalle regole universali.
Combinare ∃, ∨ e ∀
Qualcuno visita Roma oppure Atene; chi visita una delle due città vede un museo. Vogliamo dimostrare che qualcuno vede un museo.
- Apriamo l'esistenziale e introduciamo un testimone arbitrario
y. - Abbiamo il caso che
yvisiti Roma oppure il caso che visiti Atene. - In ciascun caso applichiamo la regola universale corrispondente a
y. - Introduciamo l'esistenziale usando
ycome testimone.
Strategia operativa
Quando leggiamo il proof state, procediamo dall'esterno verso l'interno.
- Se il goal inizia con
∀, introduciamo una cosa arbitraria. - Se abbiamo un'assunzione con
∀, la applichiamo al termine necessario. - Se il goal inizia con
∃, scegliamo un testimone. - Se abbiamo un'assunzione con
∃, la eliminiamo e ragioniamo su un testimone arbitrario. - Poi continuiamo con le regole dei connettivi già studiate.
Fonti
Jeremy Avigad, Robert Y. Lewis, Floris van Doorn, Logic and Proof: Natural Deduction Rules
Jeremy Avigad, Robert Y. Lewis, Floris van Doorn, Natural Deduction for First Order Logic