Laboratorio 1, note ed esercizi

Transcript

Laboratorio 1, note ed esercizi
Costruire una derivazione (note∗)
C. Faggian
1
Laboratorio 1
Scopo: sperimentare l’uso delle regole di inferenza per costruire derivazioni,
familiarizzarsi col metodo di ricerca dal basso verso l’alto.
In queste note andiamo anche un po’ oltre il contenuto del primo laboratorio,
suggerendo alcune strategie, che saranno riprese nel prossimo laboratorio.
1.1
Lab1: esercizi
Le regole di inferenza, ed un po’ di terminologia, sono dati in appendice.
Chiedere alla macchina di usare le regole di inferenza date in appendice A per
derivare questi sequenti:
1. A&B ` (A ∨ B)&B
2. A ` B → A
3. A ∨ B ` A&B (!!)
4. A → C ` (C → B) → (A → B)
5. A → B, C → D ` A&C → B&D
6. B → C ` (A ∨ B) → (A ∨ C)
7. (**) ` (A → B)&(B → C) → (A ∨ B → C)
8. (**) (A ∨ C)&(B ∨ C) ` (A&B) ∨ C
Gli esercizi (**) sono da farsi dopo gli esercizi in sezione 1.5.
Se siete riusciti a costruire una derivazione per (3.), qualcosa non torna.
Forse le regole non sono applicate correttamente?
1.2
Ok, ma ... in pratica?
Scopo del gioco
Costruire dal basso verso l’alto un albero di derivazione che ha come radice (conclusione) il sequente da dimostrare, e come foglie delle identita’ (cioe’ sequenti
∗ Aiutaci a migliorare il corso, i laboratori, e queste note! Suggerimenti, correzioni, problemi
e dubbi: [email protected]
1
della forma X ` X). L’albero e’ costruito “impilando” regole di inferenza.
Regola d’oro: lavoriamo dal basso verso l’alto
Da dove inizio?
Scrivo il sequente da derivare (lasciando abbastanza spazio bianco sopra!) e
cerco di costruire una derivazione, scegliendo ogni volta l’ultima regola.
Ogni volta, la domanda e’
“questo sequente, puo’ essere conclusione di che regola?”
Per rispondere, guardo che formule ci sono, e quindi quale connettivo puo’
essere stato introdotto per ultimo.
Esempio. Consideriamo il sequente C, C → D ` D. Che connettivi ho? Solo
→, che si trova a sinistra. C’e’ un’unica regola che introduce → a sinistra, ed
ha la forma:
... ` X . . . Y ` ∆
...,X → Y ` ∆
Se facciamo corrispondere il nostro sequente alla conclusione della regola,
abbiamo X → Y := C → D, ∆ := D, e possiamo subito scrivere
... ` C ...D ` D
C, C → D ` D
Per concludere, dobbiamo solo decidere come distibuire il contesto di C → D,
che e’ C. Ci conviene metterlo nella premessa di destra o in quella di sinistra?
Come finisco?
In alto, vogliamo avere solo identita’ (sono le foglie del nostro albero di derivazione).
Quindi cerchiamo di trovarci con un’identica formula a destra e a sinistra del
“comporta:” . . . ...X ` X.
Segretamente miriamo ad avere in alto sequenti della forma Γ, A ` A, che possiamo poi indebolire in A ` A.
Esempio: fare esercizio 2.
Come procedere:
Usiamo le regole dei connettivi, indebolimento e contrazione
... avendo in mente :
a. A, A → B ` B
b. A ` A ∨ B
e B `A∨B
c. A&B ` A e A&B ` B
d. L’esercizio 1.5.1 in sezione 1.5 (molto, molto importante)
2
• Gli assiomi [a.,b.,c.] forniscono una guid aimportante; ci segnalano che
siamo vicini alla meta (le identita’): quando li riconosciamo, sappiamo ottenere
le identita’ in un passo.
Esempi: esercizi 1,4,5. Li svolgiamo piu’ avanti.
• Per trattare la contrazione, abbiamo bisogno degli esercizi in sezione 1.5.
1.3
Trucchi del mestiere
Quando costruiamo una derivazione, abbiamo molte scelte possibili. Dal punto
di vista di un informatico, una proprieta’ fondamentale del calcolo dei sequenti
(su cui si basano algoritmi di proof-construction, di verifica e specifica dei programmi, ed anche il Prolog) e’ che e’ possibile arrangiare le regole in modo da
minimizzare l’indeterminismo.
Questo garantisce che la ricerca di una derivazione per il sequente Γ ` ∆
termina
• o con una derivazione
• o con la sicurezza che una derivazione non esiste
A questo scopo si possono dimostrare una serie di risultati del tipo:
Se esiste una derivazione del sequente Γ ` ∆, allore ne esiste una che ha la
forma “bla bla” (per esempio: non usa la regola di cut)
La conseguenza e’ che:
• possiamo limitarci a cercare derivazioni della forma “bla bla” (se una
derivazione esiste, ce ne e’ una di quella forma)
• se non troviamo una derivazione della forma “bla bla”, allora inutile cercare oltre: non esistono derivazioni di Γ ` ∆.
Risultato 1.
Se un sequente Γ ` ∆ ha una derivazione, allora ha anche una derivazione che
non usa cut
Morale: possiamo limitarci a cercare una derivazione senza cut.
Risultato 2.
• le regole di formazione (→ a destra, & a destra, ∨ a sinistra) possono
essere applicate in qualunque momento, senza cambiare la dimostrabilita’
.
• Altre regole comportano una scelta che puo’ pregiudicare il seguito. In
particolare:
3
– La regola di ∨ a destra ci fa scegliere A oppure B.
Lo stesso e’ vero per & a sinistra (ma vedremo in sezione 1.5 che la
contrazione ci aiuta ad aggirare questo problema)
– La regola di → a sinistra ci obbliga a scegliere un modo di spezzare
il contesto in Γ1 e Γ2 .
Esempio. Pensate ad A, A → B ` B. Possiamo leggere A → B come
“se mi dai venti euro (A) di do un libro (B)” oppure “ho un programma che prende un intero (A) e restituisce un booleano (B)”.E’
necessaria la presenza di entrambe A e A → B per liberare B. Questo
non sarebbe possibile se in un passo precendente avessimo separato
queste due formule.
Morale: se nel sequente abbiamo diversi connettivi, e quindi diverse possibilita’, conviene cominciare (dal basso) con le regole di formazione.
1.4
In pratica (riassumendo)
Ecco alcune indicazioni.
Abbiamo detto che lavoriamo dal basso verso l’alto. In realta’, lavoriamo dal
basso (conclusione), guidati nelle scelte da cosa cerchiamo in alto (identita’, anzi
sequenti della forma Γ, X ` X). Aiuta avere in mente gli assiomi (a.),(b.),(c.).
Alcuni (molti) passi sono automatici, alcuni punti richiedono un po’ di creativita’. Conviene semplificare (in modo automatico) il sequente da dimostrare
quanto possibile, e rimandiamo le vere scelte (non determinismo) alla fine,
sperando a quel punto di avere un’idea di come terminare.
• Fino a che e’ possibile, conviene usare (dal basso verso l’alto) regole di
formazione (funzionano sempre, non ipotechiamo il seguito, ed intanto
semplifichiamo il sequente). Facciamo per prime le regole ad applicazione
automatica: → a destra, & a destra, ∨ a sinistra. Metteremo in questo
gruppo anche la regola derivata dell’esercizio 1.5.1.
• Riserviamo la creativita’ al momento di fare delle scelte. A questo punto
aiuta enormemente avere in mente (a.),(b.),(c.) (vedi gli esercizi svolti
sotto), che ci forniscono un aiuto alla navigazione verso le identita’.
In particolare, avere in mente che
• Avere A → B a sinistra ci permette di liberare B se forniamo A.
• una formula A ∨ B a destra la possiamo trasformare in A oppure in B, a
seconda del bisogno (cercare di fare questa scelta solo quando sappiamo
di cosa abbiamo bisogno!).
• lo stesso vale per A&B a sinistra (ma in questo caso il problema si puo’
risolvere senza fare scelte, vedi esercizio 1.5.1.)
4
Esempio, esercizio 4.
...
1
A, A → C, C → B ` B
A → C, C → B ` (A → B)
A → C ` (C → B) → (A → B)
Arrivati al punto [1], abbiamo applicato tutti i passi automatici, e siamo obbligati a fare delle scelte. Se esaminiamo la situazione, ci rendiamo conto di aver
gia’ finito... Osserviamo che a destra abbiamo B. A sinistra, per liberare B ci
serve C. Per liberare C, ci basta fornire A ad A → C.
Ora sappiamo come finire! Decompongo le due implicazioni a sinistra, distribuendo il contesto in modo appropriato. Per esempio:
A`A C `C
A, A → C ` C B ` B
1
A, A → C, C → B ` B
Esempio, esercizio 5.
...
...
1
2
A&C, A → B, C → D ` B
A&C, A → B, C → D ` D
A&C, A → B, C → D ` B&D
A → B, C → D ` A&C→B&D
Fin qui, abbiamo applicato tutte semplificazioni automatiche. Per terminare,
decidiamo cosa fare sopra il punto [1]. Notiamo che:
• abbiamo bisogno di un B a sinistra.
• A → B ci libera un B se gli forniamo un A.
• A&C lo possiamo trasformare in un A...
Per concludere, possiamo iniziare a decomporre A&C, oppure A → B (e’
indifferente), invece C → D non serve (possiamo indebolirlo). Per esempio:
A`A
A&C ` A
B`B
1
A&C, A → B, C → D ` B
Cosa facciamo sopra [2]?
Esempio, esercizio 6
...
1
2
A, B → C ` A ∨ C
B, B → C ` A ∨ C
A ∨ B, B → C ` A ∨ C
B → C ` (A ∨ B) → (A ∨ C)
Ora devo fare delle scelte. Per terminare:
5
sopra [1] osservo che A appare sia a sinistra che a destra: mi basta trasformare A ∨ C in A. Come finisco?
sopra [2] , noto che a destra posso trasformare A ∨ C in A oppure in C.
Osservo che a sin., se fornisco B a B → C si libera C. Quindi posso finire con:
C`C
B `B C `A∨C
2
B, B → C ` A ∨ C
Indebolimento
La regola di indebolimento, conviene farla alla fine, o almeno quando sappiamo
di cosa abbiamo bisogno. Avere delle formule in piu’ (il famoso contesto Γ a
sinistra) non impedisce mai l’applicazione di una regola, ma il materiale che ci
portiamo avanti puo’ tornare utile.
In pratica. Non preoccuparsi dell’indebolimento. Basta pensarci alla fine.
Abbiamo gia visto che, segretamente, cerchiamo Γ, A ` A.
1.5
Contrazione: il nostro joker!
Il solo punto delicato e’ l’uso della contrazione. Cosa la rende delicata? Che
tendiamo a dimenticarla... In realta, la contrazione e’ un alleato prezioso.
Se siamo una macchina, possiamo agevolmente creare una copia di ogni
formula in cui serve una scelta prima di decomporla (dal basso verso l’alto,
contrazione = creare una copia). Alla macchina non disturba portare avanti
sequenti con un gran numero di formule, anche se e’ poco pratico per un essere
umano.
All’essere umano conviene comunque ricordare che, se abbiamo contrazione
a sinistra, allora tutte le formula a sinistra su cui ho fatto una scelta sono
“riutilizzabili”. Per esempio, se nel sequente ho la formula A&B, e la uso
per ottenere A, “moralmente” ho ancora una copia di A&B. Infatti, posso
modificare la derivazione come segue:
Γ, A ` ∆
Γ, A&B ` ∆ puo’ diventare
Γ, A&B, A ` ∆
Γ, A&B, A&B, ` ∆
Γ, A&B ` ∆
In pratica se ci si trova ad un punto morto, chiedersi se aiuterebbe avere
ancora presente una delle formule che stanno sotto, e modificare la derivazione
scritta di conseguenza.
Esempio: gli esercizi sotto, e poi esercizio (8).
Ancora piu’ conveniente, e’ incorporare la contrazione nella regola, come
facciamo sotto.
6
1.5.1
Esercizio (molto molto importante)
Dimostrare che la seguente regola e’ derivabile (cioe’ mostrare che possiamo
riempire lo spazio tra premesse e conclusione con regole di inferenza “ufficiali”.)
Γ, A, B ` ∆
& − bis
Γ, A&B ` ∆
Come fare. So che da A&B posso ottenere (dal basso verso l’alto) A. So che
da A&B posso ottenere (dal basso verso l’alto) B. Poiche’ mi servono sia A sia
B, duplico A&B con una contrazione:
Γ, A, B ` ∆
...
Γ, A&B, A&B ` ∆
Γ, A&B ` ∆
In pratica (importante!) Quando non sappiamo fare una scelta, possiamo
sempre usare le regole derivata vista sopra.
Esempio. Provare a fare l’ esercizio 8.
Osservazione. Due difficolta’ (fare una scelta e gestire la contrazione) si annullano: usando la regole & − bis, non facciamo scelte quando abbiamo a sinistra
il connettivo &.
Tutta la nostra creativita’ si puo’ concentrare sul connettivo ∨ a destra ed
→ a sinistra (in quest’ultimo caso la situazione puo’ essere migliorata, ma non
del tutto).
Su questi ultimi punti faremo pratica nel prossimo laboratorio. Intanto, immaginate un sistema meraviglioso in cui avete contrazione sia a destra sia a
sinistra... possiamo fare in modo che qualunque scelta facciamo vada bene?
Esempio, esercizio 8. Completare...
...
...
C `C
A, B ` (A&B) ∨ C A, C ` (A&B) ∨ C
C, B ∨ C ` C
A, (B ∨ C) ` (A&B) ∨ C
C, (B ∨ C) ` (A&B) ∨ C
(A∨C), (B ∨ C) ` (A&B) ∨ C
(A ∨ C)&(B ∨ C) ` (A&B) ∨ C
7
2
Esercizi: LJ
Per capire la ricerca di derivazioni, leggere in particolare le sezioni 1.4 ed
1.5, e poi provare a svolgere alcuni degli esercizi sotto, a scelta.
Il calcolo per LJ e’ dato in appendice B.
1. Dimostrare che la seguenti due regola sono derivabili in LJ.
Γ ` A Γ, B ` ∆
Γ, A → B ` ∆
Γ, A → B ` A Γ, A → B, B ` ∆
Γ, A → B ` ∆
2. Costruire una derivazione in LJ per i seguenti sequenti. Gli esercizi con
asterisco sono particolarmente raccomandati.
1. p ∨ (p&q) ` p
2. * p → q, r → s ` p ∨ r → q ∨ s
3. * (b → c)&(a → b) ` d → (a → c)
4. (a → b) ∨ (a → c) ` a → (b ∨ c)
5. * (p ∨ (q → p))&q ` p
6. p → q&r ` (p → q)&(p → r)
7. (p → r) ∨ (q → r) ` p&q → r
8. ** p → (p → q), p ` q
3. Costruire una derivazione in LJ per questi sequenti (se possibile):
1. ¬p ` p → q
2. p ∨ q, ¬q ` p
3. ¬p ∨ ¬q ` ¬(p&q)
4. ¬(p&q) ` ¬p ∨ ¬q
5. p&q ` ¬(¬p ∨ ¬q)
6. ` ¬p ∨ q → (p → q)
7. ¬(p → q) ` q → p
4. Potrebbe essere comodo derivare direttamente regole per la negazione, anziche’
tradurre ogni volta in ¬A = A → ⊥ Che regole potremmo dare alla macchina
per ¬A (a destra e a sinistra)?
8
A
Le regole di inferenza per lab1
Queste regole sono un frammento di LJ. Le estenderemo nel prossimo laboratorio.
Identitá:
A`A
Connettivi:
Γ, A ` ∆
Γ, A&B ` ∆ oppure
Γ, B ` ∆
Γ, A&B ` ∆
Γ`A Γ`B
Γ ` A&B
Γ, A ` ∆ Γ, B ` ∆
Γ, A ∨ B ` ∆
Γ`A
Γ`A∨B
Γ1 ` A Γ 2 , B ` ∆
Γ1 , Γ2 , A → B ` ∆
Γ, A ` B
Γ`A→B
oppure
Γ`B
Γ`A∨B
Indebolimento:
Γ`∆
Γ, Σ ` ∆
Contrazione:
Γ, A ` ∆
Γ, A, A ` ∆
Precedenze. I connettivi ∨ e & hanno la precedenza su →. Quindi scrivendo
A ∨ B → C si intende (A ∨ B) → C. Invece A ∨ B&C e’ ambiguo, e deve essere
parentizzato in modo esplicito.
Anatomia di una regola Consideriamo come esempio questa regola:
Γ, A ` ∆ Γ, B ` ∆
Γ, A ∨ B ` ∆
Il sequente Γ, A ∨ B ` ∆ e’ la conclusione della regola, i due sequenti
Γ, A ` ∆ e Γ, B ` ∆ sono le premesse.
Questa regola introduce a sinistra la formula A∨B, che chiamiamo formula
principale della regola. Γ sta per una lista di formule: tutte le formule che
troviamo accanto a A ∨ B. Chiamiamo Γ il contesto di A ∨ B. La lista Γ puo’
anche essere vuota.
9
B
Regole di LJ
Identitá:
Falso:
A`A
Γ, ⊥ ` ∆
Connettivi:
Γ, A ` ∆
∗∗
Γ, A&B ` ∆
Γ, B ` ∆
∗∗
Γ, A&B ` ∆
Γ`A Γ`B
Γ ` A&B
Γ, A ` ∆ Γ, B ` ∆
Γ, A ∨ B ` ∆
Γ`A ∗
Γ`A∨B
Γ1 ` A Γ 2 , B ` ∆
∗
Γ1 , Γ2 , A → B ` ∆
Γ, A ` B
Γ`A→B
Γ`B ∗
Γ`A∨B
Indebolimento:
Γ`∆
Γ, Σ ` ∆
Contrazione:
Γ, A ` ∆
Γ, A, A ` ∆
Come abbiamo discusso (vedi note del laboratorio 1), le regole sui connettivi
distinte da asterisco richiedono una scelta non determinista, mentre le altre
possono essere applicate in modo automatico qualunque momento.
Per rendere piu’ efficiente la ricerca di prove, grazie alla contrazione possiamo
sostitire le due regole indicate da (**) con la seguente regola derivata
Γ, A, B ` ∆
&bis
Γ, A&B ` ∆
10