Stefano M. Nicoletti

Lezione 5: Regole dei quantificatori

Registrazione video della Lezione 5

1. Scopo della lezione

Riprendiamo le formalizzazioni della Lezione 4 e introduciamo le regole di deduzione naturale per e . Prima completiamo gli esempi con funzioni e quantificatori annidati. Poi studiamo come costruire e usare dimostrazioni universali ed esistenziali, comprese le condizioni che rendono valide le quattro regole. Infine combiniamo i quantificatori con i connettivi già noti.

Come ripasso, confrontiamo quattro forme ricorrenti:

variable (Cosa : Type)
variable (Studentessa Legge Comprende : Cosa → Prop)

#check ∀ x : Cosa, Studentessa x → Legge x
#check ∃ x : Cosa, Studentessa x ∧ Legge x
#check ∀ x : Cosa, Studentessa x → Legge x → Comprende x
#check ∃ x : Cosa, Studentessa x ∧ Legge x ∧ Comprende x

2. Funzioni dentro le formule

I termini costruiti mediante funzioni possono comparire dentro predicati, relazioni e quantificatori:

variable (Cosa : Type)
variable (ipazia : Cosa)
variable (Studentessa Legge Curiosa : Cosa → Prop)
variable (madreDi : Cosa → Cosa)
variable (Conosce : Cosa → Cosa → Prop)

#check Curiosa (madreDi ipazia)

#check ∀ x : Cosa,
  Studentessa x → Conosce x (madreDi x)

#check ∃ x : Cosa,
  Studentessa x ∧ Legge (madreDi x)

Le parentesi rendono visibile l'ordine della costruzione: prima formiamo il termine madreDi x, poi lo usiamo come argomento del predicato Legge o della relazione Conosce.

3. Quantificatori annidati

Una formula può contenere più quantificatori. Consideriamo la relazione Conosce : Cosa → Cosa → Prop:

variable (Cosa : Type)
variable (Persona : Cosa → Prop)
variable (Conosce : Cosa → Cosa → Prop)

-- Ogni persona conosce qualcuno.
#check ∀ x : Cosa, Persona x →
  ∃ y : Cosa, Persona y ∧ Conosce x y

-- Qualcuno conosce ogni persona.
#check ∃ x : Cosa, Persona x ∧
  ∀ y : Cosa, Persona y → Conosce x y

-- Nessuno conosce ogni persona.
#check ¬∃ x : Cosa, Persona x ∧
  ∀ y : Cosa, Persona y → Conosce x y

Le prime due proposizioni non sono equivalenti. In «ogni persona conosce qualcuno», il testimone y può cambiare al cambiare di x. In «qualcuno conosce ogni persona», dobbiamo invece trovare un unico x che soddisfi la condizione per tutte le persone y.

4. Introduzione del quantificatore universale, ∀I

Introduzione del quantificatore universale, ∀I

Per dimostrare ∀ y : Cosa, A y, introduciamo una cosa arbitraria x. Il goal diventa A x. Dimostriamo A x senza usare proprietà particolari di x; possiamo allora concludere che A vale per ogni oggetto del dominio.

Nel seguente esempio soltanto il primo intro applica ∀I. I due intro successivi introducono le assunzioni delle implicazioni.

-- Introduzione del quantificatore universale, ∀I. -- Il goal universale viene aperto introducendo una cosa nuova e arbitraria `x`. -- Soltanto il primo `intro` applica ∀I; i due `intro` successivi introducono -- separatamente le assunzioni delle implicazioni. -- Esempio: ogni persona curiosa è curiosa. theorem lecture05_forall_intro (Cosa : Type) (Persona Curiosa : Cosa Prop) : y : Cosa, Persona y Curiosa y Curiosa y := Cosa:TypePersona:Cosa PropCuriosa:Cosa Prop (y : Cosa), Persona y Curiosa y Curiosa y Cosa:TypePersona:Cosa PropCuriosa:Cosa Propx:CosaPersona x Curiosa x Curiosa x Cosa:TypePersona:Cosa PropCuriosa:Cosa Propx:CosahXPersona:Persona xCuriosa x Curiosa x Cosa:TypePersona:Cosa PropCuriosa:Cosa Propx:CosahXPersona:Persona xhXCuriosa:Curiosa xCuriosa x All goals completed! 🐙

Il primo passo introduce x : Cosa come oggetto arbitrario. Il goal diventa Persona x → Curiosa x → Curiosa x. Introduciamo quindi le due assunzioni e usiamo esattamente hXCuriosa.

La condizione di arbitrarietà

L'oggetto introdotto da ∀I non può essere una persona particolare scelta per una proprietà speciale. Da hIpaziaCuriosa : Curiosa ipazia, per esempio, non possiamo concludere ∀ y : Cosa, Curiosa y. Dopo intro x, il goal sarebbe Curiosa x, mentre l'assunzione dimostra soltanto Curiosa ipazia.

La condizione formale richiede che la variabile usata nella derivazione non compaia libera in alcuna assunzione ancora aperta. In Curiosa x, x è libera; in ∀ y : Cosa, Curiosa y, invece, y è legata dal quantificatore. Lean realizza questa condizione tramite lo scope: intro x crea una nuova variabile locale all'interno del goal universale.

Se riutilizziamo deliberatamente un nome già presente, Lean distingue comunque i due oggetti. Il tactic state può rinominare la vecchia variabile come x✝:

x✝ : Cosa
hXCuriosa : Curiosa x✝
x : Cosa
|- Curiosa x

Il simbolo segnala soltanto una rinomina automatica. I tipi Curiosa x✝ e Curiosa x restano distinti.

5. Eliminazione del quantificatore universale, ∀E

Eliminazione del quantificatore universale, ∀E

Se abbiamo ∀ x : Cosa, A x, possiamo scegliere un termine t del dominio e applicare la dimostrazione universale a t. Otteniamo così A t.

Vogliamo dimostrare che Marta legge, data l'assunzione che ogni studentessa legge e che Marta è una studentessa.

-- Perché `x` deve essere arbitraria? -- Da una proprietà della sola Ipazia non possiamo concludere che la proprietà -- valga per ogni cosa. Dopo `intro x`, il goal riguarda la nuova `x`, mentre -- `hIpaziaCuriosa` riguarda soltanto `ipazia`. -- Nel goal `∀ y : Cosa, Curiosa y`, `y` è legata dal quantificatore. Dopo -- `intro x`, `x` è la nuova variabile locale usata al posto di `y`. -- -- Lean respingerebbe questo tentativo: -- -- example -- (Cosa : Type) -- (Curiosa : Cosa → Prop) -- (ipazia : Cosa) -- (hIpaziaCuriosa : Curiosa ipazia) : -- ∀ y : Cosa, Curiosa y := by -- intro x -- exact hIpaziaCuriosa -- Vediamo la stessa difficoltà riutilizzando deliberatamente il nome `x`. -- Il primo `x` è un oggetto particolare dichiarato tra i parametri. Quando -- `intro x` introduce la cosa arbitraria del quantificatore, Lean evita la -- collisione mostrando il vecchio oggetto come `x✝` nel tactic state: -- -- x✝ : Cosa -- hXCuriosa : Curiosa x✝ -- x : Cosa -- ⊢ Curiosa x -- -- `hXCuriosa` riguarda quindi il vecchio `x✝`, non la nuova `x` arbitraria. -- Lean respingerebbe anche questo tentativo: -- -- example -- (Cosa : Type) -- (Curiosa : Cosa → Prop) -- (x : Cosa) -- (hXCuriosa : Curiosa x) : -- ∀ y : Cosa, Curiosa y := by -- intro x -- exact hXCuriosa -- Eliminazione del quantificatore universale, ∀E. -- Applichiamo una regola universale a Marta e poi usiamo l'assunzione concreta. -- Esempio: ogni studentessa legge; Marta è studentessa; dunque Marta legge. theorem lecture05_forall_elim (Cosa : Type) (Studentessa Legge : Cosa Prop) (marta : Cosa) (hOgniStudentessaLegge : x : Cosa, Studentessa x Legge x) (hMartaStudentessa : Studentessa marta) : Legge marta := Cosa:TypeStudentessa:Cosa PropLegge:Cosa Propmarta:CosahOgniStudentessaLegge: (x : Cosa), Studentessa x Legge xhMartaStudentessa:Studentessa martaLegge marta Cosa:TypeStudentessa:Cosa PropLegge:Cosa Propmarta:CosahOgniStudentessaLegge: (x : Cosa), Studentessa x Legge xhMartaStudentessa:Studentessa martahSeMartaStudentessaAlloraLegge:Studentessa marta Legge martaLegge marta Cosa:TypeStudentessa:Cosa PropLegge:Cosa Propmarta:CosahOgniStudentessaLegge: (x : Cosa), Studentessa x Legge xhMartaStudentessa:Studentessa martahSeMartaStudentessaAlloraLegge:Studentessa marta Legge martahMartaLegge:Legge martaLegge marta All goals completed! 🐙

Applicando l'assunzione universale a marta otteniamo Studentessa marta → Legge marta. Applichiamo poi questa implicazione all'assunzione hMartaStudentessa.

Il termine scelto non deve essere un nome semplice. Può anche essere costruito da una funzione. Se madreDi : Cosa → Cosa e hOgniCosaCuriosa : ∀ x : Cosa, Curiosa x, allora hOgniCosaCuriosa (madreDi ipazia) dimostra Curiosa (madreDi ipazia). Lean controlla il tipo del termine e gestisce le variabili legate senza catturarle accidentalmente.

6. Introduzione del quantificatore esistenziale, ∃I

Introduzione del quantificatore esistenziale, ∃I

Per dimostrare ∃ x : Cosa, A x dobbiamo scegliere un testimone t e dimostrare A t. In Lean usiamo il costruttore Exists.intro.

-- Introduzione del quantificatore esistenziale, ∃I. -- `marta : Cosa` dice che Marta è un elemento del dominio. -- Scegliamo Marta come testimone e usiamo l'assunzione che legge. theorem lecture05_exists_intro (Cosa : Type) (Legge : Cosa Prop) (marta : Cosa) (hMartaLegge : Legge marta) : x : Cosa, Legge x := Cosa:TypeLegge:Cosa Propmarta:CosahMartaLegge:Legge marta x, Legge x Cosa:TypeLegge:Cosa Propmarta:CosahMartaLegge:Legge martaLegge marta All goals completed! 🐙

Scegliendo marta come testimone, il goal esistenziale diventa Legge marta. Questa proposizione è già disponibile come assunzione.

Anche il testimone può essere un termine costruito. Per dimostrare ∃ x : Cosa, Curiosa x, possiamo scegliere madreDi ipazia, purché abbiamo una dimostrazione di Curiosa (madreDi ipazia).

7. Eliminazione del quantificatore esistenziale, ∃E

Eliminazione del quantificatore esistenziale, ∃E

Se abbiamo ∃ x : Cosa, A x, sappiamo che esiste un testimone, ma non possiamo presupporre quale sia. Per ottenere una conclusione B, introduciamo un testimone arbitrario y e l'assunzione A y; da questa assunzione dimostriamo B. La conclusione non deve dipendere dall'identità del testimone.

Qualcuno ha fatto una segnalazione. Ogni segnalazione avvia un'indagine. Vogliamo concludere che inizia un'indagine.

-- Eliminazione del quantificatore esistenziale, ∃E. -- Apriamo l'esistenziale, usiamo il testimone senza presupporne l'identità -- e dimostriamo una conclusione che non dipende dalla sua identità. -- Esempio: qualcuno ha fatto una segnalazione; se qualcuno fa una -- segnalazione, inizia un'indagine; dunque inizia un'indagine. theorem lecture05_exists_elim (Cosa : Type) (HaFattoSegnalazione : Cosa Prop) (IniziaIndagine : Prop) (hQualcunoHaFattoSegnalazione : x : Cosa, HaFattoSegnalazione x) (hChiFaSegnalazioneAvviaIndagine : (x : Cosa) HaFattoSegnalazione x IniziaIndagine) : IniziaIndagine := Cosa:TypeHaFattoSegnalazione:Cosa PropIniziaIndagine:ProphQualcunoHaFattoSegnalazione: x, HaFattoSegnalazione xhChiFaSegnalazioneAvviaIndagine: (x : Cosa), HaFattoSegnalazione x IniziaIndagineIniziaIndagine Cosa:TypeHaFattoSegnalazione:Cosa PropIniziaIndagine:ProphQualcunoHaFattoSegnalazione: x, HaFattoSegnalazione xhChiFaSegnalazioneAvviaIndagine: (x : Cosa), HaFattoSegnalazione x IniziaIndagine (a : Cosa), HaFattoSegnalazione a IniziaIndagine Cosa:TypeHaFattoSegnalazione:Cosa PropIniziaIndagine:ProphQualcunoHaFattoSegnalazione: x, HaFattoSegnalazione xhChiFaSegnalazioneAvviaIndagine: (x : Cosa), HaFattoSegnalazione x IniziaIndaginey:CosaHaFattoSegnalazione y IniziaIndagine Cosa:TypeHaFattoSegnalazione:Cosa PropIniziaIndagine:ProphQualcunoHaFattoSegnalazione: x, HaFattoSegnalazione xhChiFaSegnalazioneAvviaIndagine: (x : Cosa), HaFattoSegnalazione x IniziaIndaginey:CosahYHaFattoSegnalazione:HaFattoSegnalazione yIniziaIndagine Cosa:TypeHaFattoSegnalazione:Cosa PropIniziaIndagine:ProphQualcunoHaFattoSegnalazione: x, HaFattoSegnalazione xhChiFaSegnalazioneAvviaIndagine: (x : Cosa), HaFattoSegnalazione x IniziaIndaginey:CosahYHaFattoSegnalazione:HaFattoSegnalazione yhSeYFaSegnalazioneAlloraIniziaIndagine:HaFattoSegnalazione y IniziaIndagineIniziaIndagine Cosa:TypeHaFattoSegnalazione:Cosa PropIniziaIndagine:ProphQualcunoHaFattoSegnalazione: x, HaFattoSegnalazione xhChiFaSegnalazioneAvviaIndagine: (x : Cosa), HaFattoSegnalazione x IniziaIndaginey:CosahYHaFattoSegnalazione:HaFattoSegnalazione yhSeYFaSegnalazioneAlloraIniziaIndagine:HaFattoSegnalazione y IniziaIndaginehIniziaIndagine:IniziaIndagineIniziaIndagine All goals completed! 🐙

Exists.elim apre l'esistenziale. Introduciamo il testimone y e il fatto che y abbia fatto una segnalazione. La x nella seconda assunzione è un segnaposto legato; la applichiamo al testimone locale y. Otteniamo prima HaFattoSegnalazione y → IniziaIndagine e poi IniziaIndagine.

La conclusione è fissata prima dell'apertura dell'esistenziale e non contiene libera la variabile locale y. Lean impone questa indipendenza attraverso lo scope di y e il tipo di Exists.elim: il testimone non può uscire dalla derivazione, salvo essere nuovamente racchiuso in un esistenziale.

8. Combinare le regole

Le regole dei quantificatori vengono spesso usate insieme. Supponiamo che qualcuno abbia un ombrello e che chiunque abbia un ombrello resti asciutto. Vogliamo dimostrare che qualcuno resta asciutto.

theorem lecture05_exists_elim_combined (Cosa : Type) (HaOmbrello RestaAsciutta : Cosa Prop) (hQualcunaHaOmbrello : x : Cosa, HaOmbrello x) (hChiHaOmbrelloRestaAsciutta : x : Cosa, HaOmbrello x RestaAsciutta x) : x : Cosa, RestaAsciutta x := Cosa:TypeHaOmbrello:Cosa PropRestaAsciutta:Cosa ProphQualcunaHaOmbrello: x, HaOmbrello xhChiHaOmbrelloRestaAsciutta: (x : Cosa), HaOmbrello x RestaAsciutta x x, RestaAsciutta x Cosa:TypeHaOmbrello:Cosa PropRestaAsciutta:Cosa ProphQualcunaHaOmbrello: x, HaOmbrello xhChiHaOmbrelloRestaAsciutta: (x : Cosa), HaOmbrello x RestaAsciutta x (a : Cosa), HaOmbrello a x, RestaAsciutta x Cosa:TypeHaOmbrello:Cosa PropRestaAsciutta:Cosa ProphQualcunaHaOmbrello: x, HaOmbrello xhChiHaOmbrelloRestaAsciutta: (x : Cosa), HaOmbrello x RestaAsciutta xy:CosaHaOmbrello y x, RestaAsciutta x Cosa:TypeHaOmbrello:Cosa PropRestaAsciutta:Cosa ProphQualcunaHaOmbrello: x, HaOmbrello xhChiHaOmbrelloRestaAsciutta: (x : Cosa), HaOmbrello x RestaAsciutta xy:CosahYHaOmbrello:HaOmbrello y x, RestaAsciutta x Cosa:TypeHaOmbrello:Cosa PropRestaAsciutta:Cosa ProphQualcunaHaOmbrello: x, HaOmbrello xhChiHaOmbrelloRestaAsciutta: (x : Cosa), HaOmbrello x RestaAsciutta xy:CosahYHaOmbrello:HaOmbrello yRestaAsciutta y Cosa:TypeHaOmbrello:Cosa PropRestaAsciutta:Cosa ProphQualcunaHaOmbrello: x, HaOmbrello xhChiHaOmbrelloRestaAsciutta: (x : Cosa), HaOmbrello x RestaAsciutta xy:CosahYHaOmbrello:HaOmbrello yhSeYHaOmbrelloAlloraRestaAsciutta:HaOmbrello y RestaAsciutta yRestaAsciutta y Cosa:TypeHaOmbrello:Cosa PropRestaAsciutta:Cosa ProphQualcunaHaOmbrello: x, HaOmbrello xhChiHaOmbrelloRestaAsciutta: (x : Cosa), HaOmbrello x RestaAsciutta xy:CosahYHaOmbrello:HaOmbrello yhSeYHaOmbrelloAlloraRestaAsciutta:HaOmbrello y RestaAsciutta yhYRestaAsciutta:RestaAsciutta yRestaAsciutta y All goals completed! 🐙

La dimostrazione combina tre passaggi:

1. Exists.elim elimina il primo esistenziale e rende disponibile un testimone y con HaOmbrello y; 2. l'applicazione di hChiHaOmbrelloRestaAsciutta a y usa ∀E; 3. Exists.intro y usa lo stesso oggetto come testimone del nuovo esistenziale.

Quantificatore universale e congiunzione

Ogni studentessa che legge prende appunti e comprende. Introduciamo una studentessa arbitraria, applichiamo le due assunzioni universali e costruiamo la congiunzione richiesta.

-- Combiniamo ∀I, →I, ∀E e ∧I. -- Ogni studentessa che legge prende appunti; ogni studentessa che legge -- comprende; dunque ogni studentessa che legge prende appunti e comprende. theorem lecture05_forall_conjunction_combined (Cosa : Type) (Studentessa Legge PrendeAppunti Comprende : Cosa Prop) (hChiLeggePrendeAppunti : x : Cosa, Studentessa x Legge x PrendeAppunti x) (hChiLeggeComprende : x : Cosa, Studentessa x Legge x Comprende x) : x : Cosa, Studentessa x Legge x PrendeAppunti x Comprende x := Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende x (x : Cosa), Studentessa x Legge x PrendeAppunti x Comprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosaStudentessa x Legge x PrendeAppunti x Comprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xLegge x PrendeAppunti x Comprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xPrendeAppunti x Comprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xPrendeAppunti xCosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xComprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xPrendeAppunti x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xhSeXStudentessaAlloraLeggeImplicaAppunti:Studentessa x Legge x PrendeAppunti xPrendeAppunti x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xhSeXStudentessaAlloraLeggeImplicaAppunti:Studentessa x Legge x PrendeAppunti xhSeXLeggeAlloraPrendeAppunti:Legge x PrendeAppunti xPrendeAppunti x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xhSeXStudentessaAlloraLeggeImplicaAppunti:Studentessa x Legge x PrendeAppunti xhSeXLeggeAlloraPrendeAppunti:Legge x PrendeAppunti xhXPrendeAppunti:PrendeAppunti xPrendeAppunti x All goals completed! 🐙 Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xComprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xhSeXStudentessaAlloraLeggeImplicaComprende:Studentessa x Legge x Comprende xComprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xhSeXStudentessaAlloraLeggeImplicaComprende:Studentessa x Legge x Comprende xhSeXLeggeAlloraComprende:Legge x Comprende xComprende x Cosa:TypeStudentessa:Cosa PropLegge:Cosa PropPrendeAppunti:Cosa PropComprende:Cosa ProphChiLeggePrendeAppunti: (x : Cosa), Studentessa x Legge x PrendeAppunti xhChiLeggeComprende: (x : Cosa), Studentessa x Legge x Comprende xx:CosahXStudentessa:Studentessa xhXLegge:Legge xhSeXStudentessaAlloraLeggeImplicaComprende:Studentessa x Legge x Comprende xhSeXLeggeAlloraComprende:Legge x Comprende xhXComprende:Comprende xComprende x All goals completed! 🐙

Esistenziale e disgiunzione

Qualcuno visita Roma oppure Atene. Apriamo l'esistenziale e consideriamo i due casi della disgiunzione. In entrambi otteniamo un testimone che vede un museo.

-- Combiniamo ∃E, ∨E, ∀E e ∃I. -- Qualcuno visita Roma oppure Atene; chi visita una delle due città vede un -- museo; dunque qualcuno vede un museo. theorem lecture05_exists_or_combined (Cosa : Type) (VisitaRoma VisitaAtene VedeMuseo : Cosa Prop) (hQualcunoVisitaUnaCitta : x : Cosa, VisitaRoma x VisitaAtene x) (hChiVisitaRomaVedeMuseo : x : Cosa, VisitaRoma x VedeMuseo x) (hChiVisitaAteneVedeMuseo : x : Cosa, VisitaAtene x VedeMuseo x) : x : Cosa, VedeMuseo x := Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo x x, VedeMuseo x Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo x (a : Cosa), VisitaRoma a VisitaAtene a x, VedeMuseo x Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosaVisitaRoma y VisitaAtene y x, VedeMuseo x Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaRomaOVisitaAtene:VisitaRoma y VisitaAtene y x, VedeMuseo x cases hYVisitaRomaOVisitaAtene with Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaRoma:VisitaRoma y x, VedeMuseo x Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaRoma:VisitaRoma yVedeMuseo y Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaRoma:VisitaRoma yhSeYVisitaRomaAlloraVedeMuseo:VisitaRoma y VedeMuseo yVedeMuseo y Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaRoma:VisitaRoma yhSeYVisitaRomaAlloraVedeMuseo:VisitaRoma y VedeMuseo yhYVedeMuseo:VedeMuseo yVedeMuseo y All goals completed! 🐙 Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaAtene:VisitaAtene y x, VedeMuseo x Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaAtene:VisitaAtene yVedeMuseo y Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaAtene:VisitaAtene yhSeYVisitaAteneAlloraVedeMuseo:VisitaAtene y VedeMuseo yVedeMuseo y Cosa:TypeVisitaRoma:Cosa PropVisitaAtene:Cosa PropVedeMuseo:Cosa ProphQualcunoVisitaUnaCitta: x, VisitaRoma x VisitaAtene xhChiVisitaRomaVedeMuseo: (x : Cosa), VisitaRoma x VedeMuseo xhChiVisitaAteneVedeMuseo: (x : Cosa), VisitaAtene x VedeMuseo xy:CosahYVisitaAtene:VisitaAtene yhSeYVisitaAteneAlloraVedeMuseo:VisitaAtene y VedeMuseo yhYVedeMuseo:VedeMuseo yVedeMuseo y All goals completed! 🐙

Quantificatori annidati

Il testimone esistenziale può dipendere dalla persona introdotta dal quantificatore universale. Apriamo l'esistenziale soltanto dopo aver fissato quella persona.

-- Combiniamo quantificatori annidati, ∃E, ∃I e ∧I. -- Ogni persona conosce almeno una persona; dunque, per ogni persona, esiste -- qualcuno che essa conosce e che è una persona. theorem lecture05_nested_quantifiers_combined (Cosa : Type) (Persona : Cosa Prop) (Conosce : Cosa Cosa Prop) (hOgniPersonaConosceQualcuno : x : Cosa, Persona x y : Cosa, Persona y Conosce x y) : x : Cosa, Persona x y : Cosa, Conosce x y Persona y := Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x y (x : Cosa), Persona x y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosaPersona x y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona x y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x y y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x y y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x y (a : Cosa), Persona a Conosce x a y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x yy:CosaPersona y Conosce x y y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x yy:CosahYPersonaEXConosceY:Persona y Conosce x y y, Conosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x yy:CosahYPersonaEXConosceY:Persona y Conosce x yConosce x y Persona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x yy:CosahYPersonaEXConosceY:Persona y Conosce x yConosce x yCosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x yy:CosahYPersonaEXConosceY:Persona y Conosce x yPersona y Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x yy:CosahYPersonaEXConosceY:Persona y Conosce x yConosce x y All goals completed! 🐙 Cosa:TypePersona:Cosa PropConosce:Cosa Cosa ProphOgniPersonaConosceQualcuno: (x : Cosa), Persona x y, Persona y Conosce x yx:CosahXPersona:Persona xhSeXPersonaAlloraConosceQualcuno:Persona x y, Persona y Conosce x yhXConosceQualcuno: y, Persona y Conosce x yy:CosahYPersonaEXConosceY:Persona y Conosce x yPersona y All goals completed! 🐙

Esistenziale e negazione

Un testimone ha consegnato ma non ha ricevuto conferma. La regola universale produce la conferma per lo stesso testimone, e la negazione produce False.

-- Combiniamo ∃E, ∧E, ∀E e ¬E. -- Chiunque abbia consegnato riceve una conferma; ma qualcuno ha consegnato -- senza ricevere una conferma; dunque le assunzioni sono contraddittorie. theorem lecture05_exists_negation_combined (Cosa : Type) (HaConsegnato HaRicevutoConferma : Cosa Prop) (hChiHaConsegnatoRiceveConferma : x : Cosa, HaConsegnato x HaRicevutoConferma x) (hControesempio : x : Cosa, HaConsegnato x ¬HaRicevutoConferma x) : False := Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xFalse Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma x (a : Cosa), HaConsegnato a ¬HaRicevutoConferma a False Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xy:CosaHaConsegnato y ¬HaRicevutoConferma y False Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xy:CosahYHaConsegnatoENonHaRicevutoConferma:HaConsegnato y ¬HaRicevutoConferma yFalse Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xy:CosahYHaConsegnatoENonHaRicevutoConferma:HaConsegnato y ¬HaRicevutoConferma yhYHaConsegnato:HaConsegnato yFalse Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xy:CosahYHaConsegnatoENonHaRicevutoConferma:HaConsegnato y ¬HaRicevutoConferma yhYHaConsegnato:HaConsegnato yhYNonHaRicevutoConferma:¬HaRicevutoConferma yFalse Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xy:CosahYHaConsegnatoENonHaRicevutoConferma:HaConsegnato y ¬HaRicevutoConferma yhYHaConsegnato:HaConsegnato yhYNonHaRicevutoConferma:¬HaRicevutoConferma yhSeYHaConsegnatoAlloraRiceveConferma:HaConsegnato y HaRicevutoConferma yFalse Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xy:CosahYHaConsegnatoENonHaRicevutoConferma:HaConsegnato y ¬HaRicevutoConferma yhYHaConsegnato:HaConsegnato yhYNonHaRicevutoConferma:¬HaRicevutoConferma yhSeYHaConsegnatoAlloraRiceveConferma:HaConsegnato y HaRicevutoConferma yhYHaRicevutoConferma:HaRicevutoConferma yFalse Cosa:TypeHaConsegnato:Cosa PropHaRicevutoConferma:Cosa ProphChiHaConsegnatoRiceveConferma: (x : Cosa), HaConsegnato x HaRicevutoConferma xhControesempio: x, HaConsegnato x ¬HaRicevutoConferma xy:CosahYHaConsegnatoENonHaRicevutoConferma:HaConsegnato y ¬HaRicevutoConferma yhYHaConsegnato:HaConsegnato yhYNonHaRicevutoConferma:¬HaRicevutoConferma yhSeYHaConsegnatoAlloraRiceveConferma:HaConsegnato y HaRicevutoConferma yhYHaRicevutoConferma:HaRicevutoConferma yhContraddizione:FalseFalse All goals completed! 🐙

Esistenziale ed equivalenza

Apriamo l'esistenziale, istanziamo l'equivalenza sul testimone ed estraiamo la direzione necessaria con Iff.mp. Lo stesso oggetto testimonia la conclusione.

-- Combiniamo ∃E, ∀E, ↔E e ∃I. -- Per ogni oggetto, essere un quadrato equivale ad avere quattro lati uguali; -- esiste un quadrato; dunque esiste qualcosa con quattro lati uguali. theorem lecture05_exists_iff_combined (Cosa : Type) (Quadrato HaQuattroLatiUguali : Cosa Prop) (hEquivalenza : x : Cosa, Quadrato x HaQuattroLatiUguali x) (hEsisteQuadrato : x : Cosa, Quadrato x) : x : Cosa, HaQuattroLatiUguali x := Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato x x, HaQuattroLatiUguali x Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato x (a : Cosa), Quadrato a x, HaQuattroLatiUguali x Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato xy:CosaQuadrato y x, HaQuattroLatiUguali x Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato xy:CosahYQuadrato:Quadrato y x, HaQuattroLatiUguali x Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato xy:CosahYQuadrato:Quadrato yHaQuattroLatiUguali y Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato xy:CosahYQuadrato:Quadrato yhEquivalenzaPerY:Quadrato y HaQuattroLatiUguali yHaQuattroLatiUguali y Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato xy:CosahYQuadrato:Quadrato yhEquivalenzaPerY:Quadrato y HaQuattroLatiUguali yhDirezione:Quadrato y HaQuattroLatiUguali yHaQuattroLatiUguali y Cosa:TypeQuadrato:Cosa PropHaQuattroLatiUguali:Cosa ProphEquivalenza: (x : Cosa), Quadrato x HaQuattroLatiUguali xhEsisteQuadrato: x, Quadrato xy:CosahYQuadrato:Quadrato yhEquivalenzaPerY:Quadrato y HaQuattroLatiUguali yhDirezione:Quadrato y HaQuattroLatiUguali yhYHaQuattroLatiUguali:HaQuattroLatiUguali yHaQuattroLatiUguali y All goals completed! 🐙

In tutti gli esempi affrontiamo prima il costruttore esterno del goal, rendiamo espliciti i testimoni locali e poi applichiamo le regole dei connettivi.

9. Strategia operativa

Quando incontriamo una formula quantificata, possiamo porci alcune domande.

La strategia estende quella usata per i connettivi proposizionali. Guardiamo il costruttore principale del goal per scegliere una regola di introduzione e le assunzioni composte per scegliere una regola di eliminazione.

10. Fonti e approfondimenti