Perplesso dal teorema di Rice


37

Riepilogo: secondo il teorema di Rice, tutto è impossibile. Eppure, faccio queste cose apparentemente impossibili tutto il tempo!


Naturalmente, il teorema di Rice non dice semplicemente "tutto è impossibile". Dice qualcosa di più specifico: "Ogni proprietà di un programma per computer non è calcolabile".

(Se vuoi dividere i peli, ogni proprietà "non banale". Cioè, le proprietà che tutti i programmi possiedono o nessun programma possiedono sono banalmente calcolabili. Ma qualsiasi altra proprietà non è calcolabile.)

Questo è ciò che dice il teorema, o sembra dire. E presumibilmente un gran numero di persone molto intelligenti ha verificato attentamente la correttezza di questo teorema. Ma sembra sfidare completamente la logica! Esistono numerose proprietà dei programmi che sono banali da calcolare !! Per esempio:

  • Quanti passaggi esegue un programma prima di interrompere? Decidere se questo numero è finito o infinito è precisamente il problema Halting, che non è calcolabile. Decidere se questo numero è maggiore o minore di qualche finito è banale! Basta eseguire il programma per un massimo di n passaggi e vedere se si interrompe o meno. Facile!nn

  • Allo stesso modo, il programma utilizza più o meno di unità di memoria nelle sue prime m fasi di esecuzione? Trivialmente calcolabile.nm

  • Il testo del programma menziona una variabile chiamata ? Una banale analisi testuale rivelerà la risposta.k

  • Il programma invoca il comando ? Ancora una volta, scansiona il testo del programma cercando quel nome di comando.σ

Vedo un sacco di proprietà che fanno sembrare non calcolabile pure; ad esempio, quante aggiunte esegue un'esecuzione completa del programma? Bene, è quasi lo stesso che chiedere quanti passaggi esegue il programma, che è praticamente il problema di Halting. Ma sembra che ci siano un sacco di proprietà del programma che è molto, molto facile da calcolare. Eppure, il teorema di Rice insiste sul fatto che nessuno di loro è calcolabile.

Cosa mi sto perdendo qui?


8
"Secondo il teorema di Rice, tutto è impossibile." -- No. "Ogni proprietà di un programma per computer non è calcolabile." -- No. Non sei solo, però: la maggior parte degli studenti incontra questo malinteso.
Raffaello

Risposte:


36

Ai fini di questa discussione, un "programma" è un pezzo di codice che accetta sempre un numero intero come input e viene eseguito per sempre o restituisce un numero intero. Diciamo che due programmi e g sono estensivamente uguali se calcolano la stessa funzione, vale a dire, per ogni numero n entrambi f ( n ) e g ( n ) funzionano per sempre, oppure entrambi terminano e producono lo stesso numero.fgnf(n)g(n)

Una proprietà estensiva dei programmi è una proprietà che rispetta l'uguaglianza estensiva, cioè se f e g sono estensivamente uguali allora entrambi hanno la proprietà P o entrambi non ce l'hanno.PfgP

Ecco alcuni esempi di proprietà non estensionali:

  1. Il programma si arresta in passaggi. (Possiamo sempre modificare un programma in modo estensivamente uguale che funzioni più a lungo.)n
  2. Il programma utilizza meno di celle di memoria nelle prime m fasi di esecuzione. (Possiamo sempre modificare un programma in modo estensivamente uguale in modo che utilizzi un po 'di memoria senza una buona ragione.)nm
  3. Il testo del programma menziona una variabile denominata k. (Possiamo rinominare le variabili.)
  4. Il programma invoca il comando . Questo può dipendere un po 'da cosa sia σ , ma se è qualcosa che può essere simulato in qualche modo, allora possiamo eludere σ e avere ancora un programma che è estensivamente uguale a quello originale.σσσ

Sono sicuro che hai notato che ho elencato con precisione i tuoi presunti contro-esempi al teorema di Rice, che dice:

Teorema (Rice): una proprietà estensibile calcolabile dei programmi contiene tutti i programmi o nessuno.

C'è un altro modo per spiegarlo: devi distinguere tra un programma e la funzione che calcola. Molti programmi diversi calcolano la stessa funzione (sono tutti ugualmente estensivi). Il teorema di Rice riguarda le proprietà delle funzioni, non le proprietà dei programmi che le calcolano.


Non riesco a ottenere questa risposta .. (Scusate se sto chiedendo lo stesso, ma sarebbe bene chiarire questo punto). Dice che puoi modificare quei programmi cambiando la loro sintassi per ottenere un equivalente di estensione , ma come controllarli in primo luogo come estensione? Non puoi usare un programma per confrontare se le funzioni di quei programmi in generale hanno entrambe quella proprietà, quindi quando dici "modificalo" penso che sia possibile perché sono semplici esempi, (aggiungeresti "modificalo attentamente"? O usi un "buono IDE per questo "? ..) Penso che una volta modificato non si può controllare in generale , quindi, forse Rice regge.
Hernan_eche,

1
n+m=m+n

Inoltre, stai commettendo uno strano balzo del ragionamento nel tuo ragionamento: poiché l'uguaglianza estensiva non è decidibile, il teorema di Rice potrebbe essere falso. Come mai? E solo perché l'uguaglianza estensiva è indecidibile, ciò non significa che non ci siano casi che possiamo decidere. Quelli che ho citato - possiamo decidere quelli.
Andrej Bauer,

36

Incomprensione fondamentale:

Ogni proprietà di un programma per computer non è calcolabile

PRE

{MfMP}

P

Il teorema di Rice si occupa delle proprietà semantiche (proprietà della funzione calcolata da un programma, ad esempio dominio o intervallo di valori). Ciò a cui ti riferisci sono le proprietà sintattiche (proprietà del programma , come il runtime o il numero di variabili utilizzate).

Non sembra essere molto noto per le proprietà sintattiche; vedi questa domanda .


1
Mi sono perso dopo circa la prima frase o giù di lì. Scusate. Qualcuno può approfondire la differenza tra una proprietà semantica e una sintattica?
MathematicalOrchid,

@MathematicalOrchid: puoi tranquillamente ignorare quella frase; il primo paragrafo contiene tutte le informazioni necessarie. Elaborerò comunque.
Raffaello

2
Semantico = su cosa fa il programma. Sintattica = su come appare il programma.
reinierpost,
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.