Prima di tutto ribadisco il quesito: La funzione sopra e' calcolabile? Ovvero,
se si puo' scrivere un algoritmo che la calcola o meno (non determinare se Dio esiste o meno, occhio che non e' la solta cosa).
Quella della calcolabilita' della nostra funzione e' un esempio classico che si fa' quando si spiega il teorema di calcoalbilita' delle funzioni a dominio finito:
"
Se f(x) ha dominio finito allora e' sempre calcolabile"
Tradotto in italiano, se la nostra funzione puo' accettare in input solo un numero finito di valori allora e' sempre calcolabile. Per dimostrarlo pensiamo ad una funzione foo( x ) il cui calcolo e' complicatissimo ma il cui dominio e' finito (ad es, i valori tra [0, 1000]). Possiamo scrivere un algoritmo che "calcola" foo(x) usando il trucco di scrivere un enorme switch che per ogni possibile input restituisce l'output corretto:
Codice:
//
// foo() calcola una funzione complicatissima ( :trollface: ).
// x puo' assumere valori tra [0 e 1000]
//
int foo ( int x )
{
if ( ( x < 0 ) || ( x > 1000 ) )
throw "foo(): Valore fuori scala";
int risultato;
switch ( x )
{
case 0:
risultato = 5; // I valori sono ovviamente a caso :asd:
break;
case 1:
risultato = 2;
break;
// ...
case 1000:
risultato = -1;
break;
}
return risultato;
} // foo()
Grazie al pazzo dira' qualcuno
mica hai davvero calcolato foo() ? No, (e tra l'altro questa e' una delle critiche mosse al teoriema). Pero' ricordo che il bello dell'informatica e' il poter trattare le funzioni come scatole nere dal comportamento noto ma i cui dettagli interni sono nascosti e neppure ci interessano. A nessuno interessa veramente come (ad es) e' implementata la funzione sin(x): Serie di taylor, tabelle di look-up etc... L'importante e' che questa si comporti esattamente come come il seno che conosciamo dalla trigonometria. Di conseguenza l'implementazione di foo() che ho dato sopra e' perfettamente lecita e funzionante.
Ora, torniamo alla nostra "f(x) = 1 se Dio esiste, 0 altrimenti": Essa ha ovviamente dominio finito anzi, finitissimo in quanto non prende argomenti (e quindi, come ci ha fatto notare
Edward Gein e' chiamata "funzione" con un enorme abiuso di termine) ed e' quindi e' calcolabile per il teorema sopra.
Dunque la teoria dice che possiamo scrivere un algoritmo che la calcola... Come?
La nostra funzione e' particolare: non solo ha dominio finito, ma puo' ritornare sempre e solo lo stesso valore (ed e' per questo detta funzione costante). Infatti, indipendentemente da che uno sia credente o meno i casi possibili sono solo 2: O Dio esiste oppure non esiste. la terza possibilita' citata da
blue_tech non e' ammissibile. Di conseguenza possiamo usare il trucco usato per foo() ma stavolta non abbiamo un solo algortmo, ma be due! Uno per ogni possibile caso:
Codice:
//
// DioEsiste_v1() versione "Credente"
//
bool DioEsiste_v1 ( void )
{
return true;
}
//
// DioEsiste_v1() versione "Atea"
//
bool DioEsiste_v2 ( void )
{
return false;
}
Una delle due versioni e' sicuramente quella buona (quale ? Beh... ).
In conclusione, la nostra funzione "f(x) = 1 se Dio esiste, 0 altrimenti" E' una funzione
Calcolabile in quanto esiste un l'algoritmo che la calcola e tale algoritmo e' necessariamente uno dei due che ho scritto sopra.