Corrispondenza tra Induzione e Ricorsione: un breve cenno
Abbiamo in precedenza accennato [FBg] al fatto che dimostrare e programmare (descrivere computazioni) siano essenzialmente ed intrinsecamente la stessa cosa. Qual e' allora il processo computazionale corrispondente alle dimostrazioni per induzione? [VS]
Il procedimento dimostrativo di una formula ∀n.φ(n) per induzione matematica consiste nel dimostrare
φ(0) e nel dimostrare, preso un m generico, che vale φ(m) utilizzando l'ipotesi che
valga φ(m-1). sommadazeroa 0 = 0 // specifichiamo il valore dell'output per l'input 0 sommadazeroa n = (sommadazeroa (n-1)) + n // specifichiamo il valore dell'output per un input generico n // (diverso da 0) supponendo di conoscere il risultato // del calcolo per l'input (n-1)
Il suo corrispettivo computazionale e' la programmazione di funzioni attraverso una particolare laseguente forma di ricorsione: si descrive l'algoritmo per il calcolo della funzione specificando quanto vale la funzione per 0 e specificando quanto vale la funzione per un generico m supponendo di sapere il conoscere il risultato del calcolo della funzione per i numeri da 1 ad m-1. Vediamo un esempio di programma ricorsivo che utilizza tale forma di ricorsione per restituire, dato in input n, l'n-esimo numero di Fibonacci: fib 0 = 1 // specifichiamo il valore dell'output per l'input 0 fib n = if (n==1) then 1 else (fib (n-1) + fib (n-2)) // specifichiamo il valore dell'output per un input generico n // (diverso da 0) supponendo di conoscere il risultato // del calcolo per tutti gli input da 1 ad (n-1) (anche se // ci serve poi solo il valore per n-1 ed n-2) L'induzione e la ricorsione appena viste considerano solo il dominio dei numeri naturali. Esiste una generalizzazione dei principi di induzione matematica e completa che permette di dimostrare proprieta' quantificate universalmente su insiemi ben fondati: l'induzione ben fondata, che noi non studiamo per limiti di tempo (se interessati, vedere [VS]). |