La struttura dei numeri naturali Linguaggi 5: La struttura dei numeri naturali Claudio Sacerdoti Coen <[email protected]> Universitá di Bologna 29,?/10/2014 Claudio Sacerdoti Coen La struttura dei numeri naturali Outline 1 La struttura dei numeri naturali Claudio Sacerdoti Coen La struttura dei numeri naturali I numeri naturali Wikipedia: “L’espressione “numeri naturali” spesso viene usata sia per la sequenza di numeri interi positivi (1, 2, 3, 4, . . . ) sia per quella dei numeri interi non negativi (0, 1, 2, 3, 4, . . . ). Questi sono i primi numeri che si imparano da bambini e sono i più semplici da comprendere. Questa definizione fa uso dell’ellipsis “. . . ” Analogamente, la nostra BNF per la logica proposizionale fa uso di ellipsis: F ::= ⊥ | > | A | B | . . . | ¬F | F ∧ F | F ∨ F | F ⇒ F In entrambi i casi le due definizioni non sono formali. Claudio Sacerdoti Coen La struttura dei numeri naturali I numeri naturali I bimbi imparano i numeri naturali contando con le dita! Possiamo semplicemente catturare questa idea con una BNF: N ::= 0 | S N 0 rappresenta nessun dito S (successore) rappresenta l’aggiunta di un dito tale notazione si dice (con abuso di terminologia) in base 1 Esempio: 4 si indica con “S (S (S 0))” Claudio Sacerdoti Coen La struttura dei numeri naturali I numeri naturali: assiomi di Peano N ::= 0 | S N La nostra BNF cattura i cinque assiomi di Peano: 1 0 è un numero naturale 2 se n è un numero naturale, anche S n lo è 3 iniettività di S: n 6= m implica S n 6= S m 4 non confusione: per ogni n si ha 0 6= S n 5 minimalità (o induzione): ogni insieme T tale che 0 ∈ T e S n ∈ T ogni qual volta n ∈ T coincide con l’insieme dei numeri naturali Il quinto assioma altro non è che (un caso particolare del) principio di induzione strutturale! Claudio Sacerdoti Coen La struttura dei numeri naturali Ricorsione e induzione strutturale sui numeri naturali Questa struttura determina gli usuali principi di ricorsione e induzione: Principio di ricorsione strutturale: f (0) = . . . f (S n) = . . . f (n) . . . Principio di induzione (strutturale): Sia P un predicato. Supponiamo che P(0) e che per ogni n se P(n) allora P(S n). Concludiamo che per ogni n vale P(n). Claudio Sacerdoti Coen La struttura dei numeri naturali Logica proposizionale: sintassi formale Possiamo ora definire formalmente la sintassi della logica proposizionale senza usare ellipsi: F ::= ⊥ | > | AN | ¬F | F ∧ F | F ∨ F | F ⇒ F dove N è un numero naturale (in base 1): N ::= 0 | S N Le definizioni date in precedenza che distinguevano i casi A e B ora debbono distinguere fra i casi An e Am per n, m distinti. Esercizio: definire per ricorsione strutturale la funzione che dati n e m restituisce true se n = m e false se n 6= m. Claudio Sacerdoti Coen La struttura dei numeri naturali Ricorsione e induzione strutturale sui numeri naturali Esercizio: definire la somma di due interi per ricorsione strutturale. Esercizio: provare a dimostrare per induzione strutturale la proprietà commutativa della somma 1 Perchè la dimostrazione non viene? 2 Come possiamo far venire la dimostrazione? Claudio Sacerdoti Coen La struttura dei numeri naturali Predicati progressivi e recessivi Esercizio: provare a dimostrare per induzione strutturale che per tutti gli n, se n ≥ 4 allora n ≥ 2 usando solo il fatto che 0 6≥ 4 e che se n ≥ m allora S n ≥ m per ogni m. Attenzione: il predicato da usare nella ricorsione è “se n ≥ 4 allora n ≥ 2” Perchè la dimostrazione non viene? Esercizio: provare a dimostrare che per tutti gli n se n ≤ 4 allora n ≥ 0 aggiungendo il fatto che se S n ≤ m allora n ≤ m per ogni n. Perchè la dimostrazione viene? Claudio Sacerdoti Coen La struttura dei numeri naturali Predicati progressivi e recessivi Definizione: un predicato P è progressivo quando vale per una formula ogni qual volta esso vale per tutte le sottoformule immediate. Per i naturali: P progressivo se quando vale P(n) allora vale P(S n). Nota: i predicati progressivi sono quelli che si possono dimostrare valere per ogni n per induzione strutturale. Claudio Sacerdoti Coen La struttura dei numeri naturali Predicati progressivi e recessivi Definizione: un predicato R è recessivo quando se vale per una formula allora esso vale per tutte le sottoformule immediate. Per i naturali: R recessivo se quando vale R(S n) allora vale R(n). Nota: i predicati recessivi NON si possono dimostrare valere per ogni n per induzione strutturale. Tuttavia sono utili nelle dimostrazioni per induzione. Claudio Sacerdoti Coen La struttura dei numeri naturali Predicati progressivi e recessivi Teorema: Il predicato costante P(n) = > è sia progressivo che recessivo Il predicato costante P(n) = ⊥ è sia progressivo che recessivo Se P è progressivo, ¬P è recessivo e viceversa. La congiunzione di predicati progressivi (recessivi) è ancora progressiva (recessiva) La disgiunzione di predicati progressivi (recessivi) è ancora progressiva (recessiva) R ⇒ P è progressivo se R è recessivo e P è progressivo P ⇒ R è recessivo se R è recessivo e P è progressivo Claudio Sacerdoti Coen La struttura dei numeri naturali Predicati progressivi e recessivi Quando un caso di una formula ha più sottoformule immediate, se al fine della dimostrazione servono solo alcune ipotesi induttive, allora è possibile chiedere la recessività delle premesse solo sulle sottoformule corrispondenti alle ipotesi che servono. Esercizio: dimostrare che ogni formula contradittoria F scritta usando solo ∧, ⊥ e > contiene almeno un ⊥. Esercizio: dimostrare che per ogni tautologia F scritta senza usare negazioni e implicazioni e per ogni variabile proposizionale A, si ha F [>/A] Esercizio: perchè il precedente enunciato non è un teorema quando si ammettono anche negazioni in F ? Trovare un controesempio e mostrare dove la prova per induzione fallisce. Claudio Sacerdoti Coen La struttura dei numeri naturali Cambio di strutture Quando la vostra ricorsione non è strutturale, spesso è perchè avete sbagliato struttura. Esempio: definire la funzione ricorsiva (non strutturale) che calcola il logaritmo intero in base 2 di un numero naturale n. Convincersi che una formulazione ricorsiva strutturale non è banale. Claudio Sacerdoti Coen La struttura dei numeri naturali Cambio di strutture Introduciamo i numeri naturali in base 2: N ::= N0|N1| Esempio: il numero 01101 rappresenta il numero 14. La divisione per 2 si definisce con una funzione ricorsiva strutturale banale: /2 = N0/2 = N N1/2 = N Idem per is zero: is zero() = true is zero(N0) = is zero(N) is zero(N1) = false Claudio Sacerdoti Coen La struttura dei numeri naturali Cambio di strutture Infine, il logaritmo intero in base 2 di n si definisce semplicemente come log0 (n) dove logk (n) è la seguente funzione ricorsiva strutturale: logk () logk (N0) is zero(N0) is zero(N1) = = = = ? if is zero(N) then? else logk+1 (N) is zero(N) if is zero(N) then kelse logk+1 (N) Claudio Sacerdoti Coen La struttura dei numeri naturali Conclusioni Anche i numeri naturali hanno una loro struttura ricorsiva Grazie ad essa possiamo definire la sintassi delle formule in maniera finitaria (senza usare ellipsis) Siamo pronti per definire in Matita la nostra sintassi! Dimostrare asserzioni ipotetiche (“se . . . allora . . . ”) per induzione strutturale richiede particolare attenzione Se una funzione non è ricorsiva strutturale, può essere che stiamo usando la struttura sbagliata Claudio Sacerdoti Coen