Come abbiamo già accennato precedentemente, non tutto è calcolabile. Ma prima, quando possiamo dire che una funzione è calcolabile?
Ricordiamo cos'è un algoritmo.
Un algoritmo è una sequenza finita di passi da seguire (in modo meccanico,
senza intelligenza!) per realizzare un certo obiettivo.
Esempi:
- dato
$n \in \mathbb{N}$ dire se è primo - trovare l'n-esimo numero primo
- calcolare la radice quadrata
- mcd, MCM
- ...
Dunque pissiamo pensare un algoritmo come un procedimento per trasformare input in output. Quindi un algoritmo è una black box. [SCHEMA]. Se l'algoritmo è deterministico, esso è individuato da una funzione dell'input: valori di input -> valori di output (come una tabella, analogia con funzione di transizione). Quindi, si dice che l'algoritmo calcola questa funzione e che questa è (effettivamente) calcolabile/computabile.
Ovvero, una funzione è calcolabile se esiste un algoritmo che la
calcola.
Nota: basta l'esistenza dell'algoritmo! Non serve conoscerlo!
Da questa definizione sono chiaramente calcolabili
- MCD, mcm;
-
$f(n)$ che restituisce 1 se$n$ è primo, 0 altrimenti; - calcolo della
$n$ -esima cifra di$\pi$ tramite algoritmi che convergono a$\pi$ .
E' calcolabile invece la funzione che restitusice 1 se in
No! Posso dire sì, se a un certo punto dello sviluppo li trovo, ma non posso mai dire no: se non li trovo devo andare avanti a cercare, non posso fermarmi e dire che non si troveranno mai.
Qualcosa del tipo: "calcola le cifre nell'espansione di
Questo non significa che la funzione non sia calcolabile, ma al momento la procedura per questo calcolo non è nota.
Un esempio più sottile è la funzione
Q: è calcolabile?
R: Sì!
Possiamo dimostrarlo definendo un intero
-
$k$ finito -> ci basta verificare che$k$ sia più grande (o uguale) ad$n$ . -
$k$ infinito -> possiamo dire che una seq di lunghezza almeno$n$ esiste sempre: ne troviamo molte (infinite!)
In entrambi i casi la funzione è calcolabile. Primo caso, dato
In questo pare esserci un problema: non conosciamo
NOTA: affinchè una funzione sia calcolabile basta che un algoritmo esista, non serve conoscerlo.
Questo discorso ci permette ora di pensare al computer solo come un mero esecutore: di fatto possiamo discostarci da tutto ciò e basarci solo su modelli teorici. Vogliamo svincolarci dalla macchina fisica e fare ragionamenti teorici per capire limiti e potenzialità dell'informatica in termini di computabilità.
TODO