Perché le funzioni totali non sono enumerabili?


29

Abbiamo imparato il concetto di enumerazioni di funzioni. In pratica, corrispondono ai linguaggi di programmazione.

In un'osservazione passeggera, il professore ha affermato che la classe di tutte le funzioni totali (ovvero le funzioni che terminano sempre per ogni input) non è enumerabile. Ciò significherebbe che non possiamo escogitare un linguaggio di programmazione che ci consenta di scrivere tutte le funzioni totali ma non altre --- che sarebbe bello avere!

Quindi, com'è possibile che (apparentemente) dobbiamo accettare il potenziale di non terminazione se vogliamo un potere computazionale decente?

Risposte:


24

A causa della diagonalizzazione. Se era un'enumerazione calcolabile di tutte le funzioni calcolabili totali da a , in modo tale che ogni fosse totale, allora sarebbe anche una funzione calcolabile totale, ma non sarebbe nell'elenco. Ciò contraddirebbe le ipotesi sulla sequenza. Pertanto, nessuna enumerazione calcolabile di funzioni può essere costituita esattamente dalle funzioni calcolabili totali.(fe:eN)NNfeg(i)=fi(i)+1

Supponiamo di pensare a una funzione calcolabile universale , dove "universale" significa che è una funzione binaria calcolabile e che per ogni funzione unaria calcolabile totale c'è qualche tale che per tutti . Quindi deve esserci anche qualche tale che non sia una funzione totale, a causa del paragrafo precedente. Altrimenti darebbe un elenco calcolabile delle funzioni unarie calcolabili totali che include tutte le funzioni unarie calcolabili totali.h(e,i)hf(n)ef(i)=h(e,i)ieg(n)=h(e,n)h

Pertanto, il requisito secondo cui ogni funzione è un sistema di funzioni è totale è incompatibile con l'esistenza di una funzione universale in quel sistema. Per alcuni sistemi deboli, come le primitive funzioni ricorsive, ogni funzione è totale ma non ci sono funzioni universali. I sistemi più potenti che hanno funzioni universali, come la calcolabilità di Turing, devono semplicemente avere funzioni parziali per consentire l'esistenza della funzione universale.


Volevo solo aggiungere che qualcuno ha trovato quella che sembra essere una scappatoia nella diagonalizzazione. Se si utilizza una rappresentazione tipizzata per il programma, è possibile utilizzare il sistema di tipi per impedire la diagonalizzazione e creare un autointerprete totale. Per i dettagli, vedi Rompere la barriera di normalizzazione: un autointerprete per F-omega .
hatch22

Naturalmente, il Sistema F non è un sistema completo di Turing. Il documento che hai collegato è interessante; sembra che riescano a sfruttare la completezza del non-Turing in un modo interessante.
Carl Mummert,

Non capisco perché "allora sarebbe anche una funzione calcolabile totale". Se è una funzione calcolabile totale, allora , quindi per valutare necessario valutare : contraddizione. Quindi sembra che se esiste un elenco di funzioni calcolabili totali, non possiamo nemmeno costruire , in modo che non possiamo raggiungere una contraddizione per confutare l'ipotesi iniziale (possiamo raggiungere una contraddizione, ma confuta solo che è calcolabile). g(i)=fi(i)+1gk,fk=gg(k)g(k)=fk(k)+1=g(k)+1gg
agemO

E anche l'uso di una diagonale spostata per evitare questo problema sembra portare a contraddizioni.
agemO

10

Giusto per essere chiari, dobbiamo distinguere le funzioni matematiche (le chiamerò funzioni e spesso ce ne sono innumerevoli molte in modo che non siano affatto enumerabili) e funzioni che puoi scrivere: le chiamerò programmi o anche funzioni calcolabili .

Un sottoinsieme di un insieme numerabile viene chiamato calcolabile se esiste un programma che, dato un elemento di risponde "sì" se e "no" se . (E deve sempre rispondere a qualcosa) Un set viene chiamato ricorsivamente enumerabile se il programma è autorizzato a non rispondere invece di dire "no". (equivale a richiedere che il programma debba stampare tutti gli elementi di in qualsiasi ordine)SExExSxSS

L'insieme di tutti i programmi che sono totali su un set finito è enumerabile perché è possibile scrivere un interprete che esegue semplicemente il programma su tutti gli elementi del set finito e restituisce "yes" se tutti terminano. (Ma non riesco a vedere se qualcuno di loro non lo fa)

Il tuo professore ha detto che l'insieme di tutti i programmi che sono totali su un insieme infinito non è enumerabile perché non puoi semplicemente eseguire il tuo programma su un numero infinito di elementi.

Ma questo non significa che questo sia negativo:

  1. Ad esempio il set se tutti i programmi che sono dimostrabili in totale sono enumerabili perché è possibile enumerare tutte le prove e controllare meccanicamente se dimostrano che il programma è totale.

  2. Anche un set enumerabile non sarebbe pratico, perché potresti dover aspettare per sempre senza essere sicuro che la procedura si sarebbe conclusa un giorno. Non vedo come usare un programma che elenca tutte le funzioni totali ...

Esistono alcuni linguaggi di programmazione in cui tutto ciò che scrivi termina con la tipizzazione statica! Ce ne sono anche alcuni che ti garantiscono il legame polinomiale. Sono per lo più accademici per ora, scrivere in quelli probabilmente ti farà sentire i vincoli più che scrivere in Python, ma ci sono molti ricercatori che lavorano su questo.

Quindi, per rispondere alla tua domanda: in un certo senso, sì. Il potenziale non-termination è necessario per essere Turing-complete (la più alta potenza computazionale per ora). Ma non lo trovo direttamente rilevante per il fatto che le funzioni totali sono enumerabili o meno. Puoi ancora scrivere tutti i programmi totali!


2
"perché non puoi semplicemente eseguire il tuo programma su un numero infinito di elementi" - questo è un argomento debole poiché potrei non aver bisogno di farlo se posso recuperare tutte le informazioni di cui ho bisogno dal programma stesso. Vedi qui per una domanda che illustra il pericolo del tuo ragionamento.
Raffaello

Infatti. Non ho sostenuto che fosse una prova (come sempre devi costruire un argomento diagonale) e forse non avrei dovuto usare la parola "perché". Stavo cercando di rispondere alla tua domanda che (pensavo) non riguardava una prova della dichiarazione del tuo professore, ma il motivo per cui la terminazione è in conflitto con il potere computazionale.
jmad
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.