Reasoning, Proof, and Formalization with Lean 4
Lezione 4 - Logica classica e quantificatori
Stefano M. Nicoletti
Postmortem for Kernel Soundness Bug \#14576
Proposta date
- Lunedì 7 Settembre
- Lunedì 14 Settembre (nuova)
Lunedì 21 Settembre (cancellata)Lunedì 5 Ottobre (cancellata)- Lunedì 12 Ottobre (nuova)
- Lunedì 19 Ottobre (nuova)
Struttura della lezione
- Logica classica e riduzione all'assurdo.
- Logica dei predicati e esercizi di formalizzazione dal linguaggio naturale a Lean.
Regole costruttive e regole classiche
Le regole viste fin qui hanno una lettura costruttiva diretta.
- Ogni dimostrazione specifica come costruire il termine richiesto.
- Il terzo escluso
A ∨ ¬Anon è disponibile automaticamente nella logica costruttiva di base in Lean. - Neppure l'eliminazione della doppia negazione
¬¬A → Aè derivabile costruttivamente. - Lean permette di aggiungere principi classici in modo locale ed esplicito.
Riduzione all'assurdo RAA
Regola:
Schema naturale: applichiamo la riduzione all'assurdo; introduciamo l'assunzione ¬A; applichiamo le assunzioni disponibili e abbiamo False; usiamo esattamente questa contraddizione.
Esempio: vogliamo dimostrare che piove, date due assunzioni: se non piove, non prendo l'ombrello; prendo l'ombrello. Applichiamo la riduzione all'assurdo: ora dobbiamo mostrare che supporre che non piova conduce a una contraddizione. Introduciamo quindi l'assunzione che non piova. Applichiamo la prima assunzione a questo fatto e abbiamo che non prendo l'ombrello. Ma abbiamo anche la seconda assunzione, secondo cui prendo l'ombrello. Applichiamo «non prendo l'ombrello» a «prendo l'ombrello» e abbiamo una contraddizione. Usiamo esattamente questa contraddizione per concludere la riduzione all'assurdo.
Un limite della logica proposizionale
Finora abbiamo trattato ogni enunciato come una proposizione completa.
P: Ipazia è una filosofa.Q: Hannah Arendt è una filosofa.R: Ipazia è curiosa.
In questo modo non vediamo che P e Q attribuiscono la stessa proprietà a due persone diverse. Non possiamo nemmeno esprimere direttamente «ogni filosofa è curiosa» o «esiste una filosofa curiosa».
Per rendere visibile questa struttura dobbiamo parlare degli oggetti e delle loro proprietà.
Prima scegliamo di che cosa parliamo
Ogni discorso ha un dominio: la collezione degli oggetti che stiamo considerando.
- Usiamo un tipo generale
Cosaper il dominio del discorso. x : Cosasi legge approssimativamente «xè una cosa del dominio».Persona : Cosa → Propdistingue le cose che sono persone.Citta : Cosa → Propdistingue le cose che sono città.
Logic and Proof, First Order Logic in Lean: Functions, Predicates, and Relations
Le proprietà
Consideriamo la proprietà «essere una filosofa».
Filosofa : Cosa → Propprende una cosa del dominio e produce una proposizione.Filosofa ipazia : Propè la proposizione «Ipazia è una filosofa».Filosofa hannah : Propè la proposizione «Hannah Arendt è una filosofa».
Filosofa è una proprietà che possiamo applicare a persone diverse. Una proprietà di questo genere si chiama predicato.
Predicati: stessa proprietà, oggetti diversi
Un predicato rende esplicita la struttura comune di molti enunciati.
| Linguaggio naturale | Lean |
|---|---|
| Ipazia è curiosa | Curiosa ipazia |
| Hannah Arendt è curiosa | Curiosa hannah |
| Io è una luna di Giove | LunaDiGiove io |
| Roma è piovosa | Piove roma |
Cambia l'oggetto a cui applichiamo il predicato, ma la proprietà rimane la stessa.
Funzioni: da un oggetto a un altro
Una funzione prende uno o più oggetti del dominio e restituisce un oggetto del dominio.
madreDi : Cosa → Cosaassocia a ogni cosa del dominio un'altra cosa.madreDi ipazia : Cosaè un termine che indica la madre di Ipazia.Curiosa (madreDi ipazia) : Propafferma che la madre di Ipazia è curiosa.- Una funzione restituisce un oggetto; un predicato restituisce una proposizione.
Nella logica del primo ordine una funzione è totale e restituisce un solo risultato per ogni argomento.
Costruire termini con le funzioni
Una funzione ci permette di costruire termini più complessi a partire da termini già disponibili.
| Termine | Lettura |
|---|---|
| ipazia | Ipazia |
| madreDi ipazia | la madre di Ipazia |
| madreDi (madreDi ipazia) | la madre della madre di Ipazia |
Tutte e tre le espressioni hanno tipo Cosa. Possiamo quindi applicare un predicato al termine costruito, per esempio Curiosa (madreDi ipazia).
Relazioni tra oggetti
Possiamo descrivere anche un rapporto tra due oggetti.
Conosce : Cosa → Cosa → Propprende due cose del dominio.Conosce ipazia hannahdice che Ipazia conosce Hannah Arendt.Visita : Cosa → Cosa → Propprende due cose del dominio.Visita ipazia atenedice che Ipazia visita Atene.
Un predicato con un argomento esprime una proprietà; con due o più argomenti esprime una relazione.
Parametri locali in Lean
Per questi esempi assumiamo temporaneamente un dominio e un vocabolario con variable.
| Che cosa assumiamo | Parametro Lean |
|---|---|
| il dominio | variable (Cosa : Type) |
| un oggetto nominato | variable (ipazia : Cosa) |
| una funzione | variable (madreDi : Cosa → Cosa) |
| un predicato | variable (Filosofa : Cosa → Prop) |
| una relazione | variable (Conosce : Cosa → Cosa → Prop) |
Che cosa non stiamo assumendo
Dichiarare un parametro non significa affermare una proposizione.
variable (ipazia : Cosa): prendiamo temporaneamente un oggetto del dominio e lo interpretiamo come Ipazia.variable (Filosofa : Cosa → Prop): prendiamo temporaneamente un predicato e lo interpretiamo come «essere una filosofa».- Non abbiamo ancora una dimostrazione di
Filosofa ipazia. - Per assumere che Ipazia sia filosofa serve, per esempio,
hIpaziaFilosofa : Filosofa ipazia.
Il vocabolario stabilisce quali enunciati possiamo formulare; le assunzioni ci danno dimostrazioni di alcuni enunciati.
Controllare le espressioni in Lean
Usiamo #check per chiedere a Lean quale tipo abbia un'espressione.
| Comando | Che cosa controlliamo |
|---|---|
| #check ipazia | ipazia : Cosa |
| #check madreDi ipazia | madreDi ipazia : Cosa |
| #check Filosofa | Filosofa : Cosa → Prop |
| #check Filosofa ipazia | Filosofa ipazia : Prop |
| #check Conosce ipazia hannah | Conosce ipazia hannah : Prop |
Variabili: l'oggetto non è specificato
Possiamo scrivere Filosofa x senza avere ancora scelto chi sia x.
x : Cosarappresenta una cosa non ancora specificata del dominio.Persona x ∧ Filosofa xdice chexè una persona ed è una filosofa.Persona x → Filosofa x → Curiosa xdice: sexè una persona e una filosofa, allora è curiosa.
Manca però ancora un'informazione: stiamo parlando di tutte le persone, di almeno una persona, oppure soltanto di una persona già scelta?
«Ogni» e «qualche»
I quantificatori specificano come deve essere scelta la variabile.
| Linguaggio naturale | Forma logica |
|---|---|
| Ogni persona è curiosa | ∀ x : Cosa, Persona x → Curiosa x |
| Qualche persona è curiosa | ∃ x : Cosa, Persona x ∧ Curiosa x |
| Ogni filosofa è curiosa | ∀ x : Cosa, Filosofa x → Curiosa x |
| Esiste una filosofa curiosa | ∃ x : Cosa, Filosofa x ∧ Curiosa x |
∀ si legge «per ogni»; ∃ si legge «esiste almeno un».
Scrivere i quantificatori in Lean
Il tipo del dominio può essere scritto nel quantificatore oppure ricavato dal predicato.
| Enunciato | Lean |
|---|---|
| ogni persona è curiosa | #check ∀ x : Cosa, Persona x → Curiosa x |
| qualche persona è curiosa | #check ∃ x : Cosa, Persona x ∧ Curiosa x |
| ogni filosofa è curiosa | #check ∀ x : Cosa, Filosofa x → Curiosa x |
| esiste una filosofa curiosa | #check ∃ x : Cosa, Filosofa x ∧ Curiosa x |
All'inizio scriviamo esplicitamente x : Cosa: il quantificatore introduce la variabile x e ne dichiara il dominio. Più avanti potremo omettere il tipo quando Lean riesce a ricavarlo dai predicati.
Perché implicazione e congiunzione?
Confrontiamo due forme molto comuni.
∀ x : Cosa, Filosofa x → Curiosa x: prendiamo una cosa qualsiasi; se è una filosofa, allora è curiosa.∃ x : Cosa, Filosofa x ∧ Curiosa x: cerchiamo una cosa che sia sia filosofa sia curiosa.- Il quantificatore universale copre l'intero dominio e l'implicazione restringe l'affermazione alle filosofe.
- Il quantificatore esistenziale richiede invece un singolo testimone che soddisfi entrambe le proprietà.
Questi schemi permettono di tradurre molti enunciati ordinari.
Che cosa aggiunge la logica dei predicati
Ora possiamo distinguere cinque ingredienti.
- Dominio: il tipo degli oggetti, qui
Cosa. - Oggetti: termini del dominio, per esempio
ipazia : Cosa. - Funzioni: costruiscono nuovi termini, per esempio
madreDi ipazia. - Predicati e relazioni: proprietà e rapporti, per esempio
Curiosa ipazia. - Quantificatori: indicano se l'enunciato riguarda ogni oggetto oppure almeno un oggetto.
Le regole che vedremo più tardi spiegano come dimostrare e come usare enunciati contenenti ∀ e ∃.
Esercizio: dal linguaggio naturale a Lean
Usiamo Studentessa : Cosa → Prop, Legge : Cosa → Prop e Comprende : Cosa → Prop. Come formalizziamo questi enunciati?
- Ogni studentessa legge.
- Qualche studentessa legge.
- Ogni studentessa che legge comprende.
- Esiste una studentessa che legge e comprende.
Esercizio: controlliamo la 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 |
In Lean possiamo usare #check per verificare che ciascuna traduzione sia una proposizione ben formata. #check non la dimostra.