Reasoning, Proof, and Formalization with Lean 4

Lezione 5 - Regole dei quantificatori

Stefano M. Nicoletti

Struttura della lezione

Ripasso: dal linguaggio naturale a Lean

Usiamo Studentessa, Legge e Comprende come predicati su Cosa. Come formalizziamo?

Ripasso: formalizzazione

EnunciatoLean
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?

Esercizio: controlliamo le funzioni

EnunciatoLean
La madre di Ipazia è curiosaCuriosa (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?

Esercizio: controlliamo i quantificatori annidati

EnunciatoLean
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:

Introduzione del quantificatore universale

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.

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.

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.

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:

Eliminazione del quantificatore universale

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.

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:

Introduzione del quantificatore esistenziale

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.

Il controllo dei tipi e lo scope dei legami impediscono sostituzioni scorrette.

Quantificatore esistenziale: eliminazione ∃E

Regola:

Eliminazione del quantificatore esistenziale

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 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.

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.

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.

Combinare ∃, ∨ e ∀

Qualcuno visita Roma oppure Atene; chi visita una delle due città vede un museo. Vogliamo dimostrare che qualcuno vede un museo.

Strategia operativa

Quando leggiamo il proof state, procediamo dall'esterno verso l'interno.

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

The Lean Language Reference, Quantifiers

Logic and Proof, First Order Logic in Lean