Perché gli umani possono risolvere alcuni problemi "indecidibili"?


45

La corrispondenza dei modelli di ordine superiore è un problema indecidibile. Ciò significa che non esiste un algoritmo che, data un'equazione a => b, dove ae bsono termini aperti sul calcolo lambda semplicemente tipizzato, trova una sostituzione Stale che aS => bS, dove =>sta per "ha la stessa forma Bn normale". Tuttavia, gli umani possono risolvere questo problema in modo efficiente. Ad esempio, dato il seguente problema:

a = (λt . t 
    (F (λ f x . (f (f (f x))))) 
    (F (λ f x . (f (f x)))))
b = (λ t . t
    (λ f x . (f (f (f (f (f (f x)))))))
    (λ f x . (f (f (f (f x))))))

Ogni essere umano con una conoscenza sufficiente del calcolo lambda sarà in grado di notare che Fè la "doppia" funzione per i numeri di chiesa, arrivando rapidamente con la soluzione che

 F = (λ a b c . (a b (a b c)))

La mia domanda è: se quel problema è indecidibile, come possono gli umani risolverlo rapidamente e senza sforzo?


24
"gli umani possono risolvere questo problema in modo efficiente" - citazione necessaria. Qual è la tua prova per questo? Mostrare un esempio in cui è possibile risolverlo in modo efficiente non significa che è possibile risolverlo in modo efficiente per tutte le istanze del problema. Non puoi provare "X è vera, per tutte le X" mostrando un esempio di X in cui X è vera.
DW

33
Un problema indecidibile significa che non esiste un algoritmo che risponda correttamente "sì" o "no" per ogni istanza del problema. Ciò non implica che si possa trovare un algoritmo che risolva alcune (o molte) istanze del problema. [Eh. Mentre DW rispondeva mentre stavo componendo questa osservazione.]
Rick Decker,

23
Risolvi questo problema? Non capisco nemmeno questo problema.
MikeTheLiar,

2
Il modo in cui l'ho capito è questo: quella soluzione è ad hoc. Ogni istanza del problema ne ha una - nella maggior parte dei casi non è facilmente motivata come nel tuo esempio, ma puoi sempre dire "se ottieni l'istanza X, genera Y" poiché un algoritmo può essere valutato solo sulla base della correttezza - ma codificare a fondo tutte queste soluzioni in questo modo non produce una procedura finita (che è l'unico tipo ragionevole e quindi ciò che di solito si intende). In alternativa, affinché un problema sia risolvibile, non è consentito vedere quale istanza viene fornita prima di scegliere la strategia dell'algoritmo.
Vandermonde,

Inoltre, questo è il motivo per cui solo i problemi con un numero infinito di istanze sono generalmente considerati o chiamati tali, poiché altrimenti potresti semplicemente enumerare tutte le soluzioni come sopra.
Vandermonde,

Risposte:


79

Gli umani possono risolvere alcuni casi di quel problema in modo efficiente, ma non c'è motivo di credere che gli umani possano risolvere tutti i casi in modo efficiente. Mostrare un'istanza che un essere umano può risolvere in modo efficiente non implica che gli umani possano risolvere tutti i casi in modo efficiente.

Indecidibile significa "non esiste un algoritmo in grado di risolvere tutte le istanze e che termina sempre". Potrebbe esserci ancora un algoritmo in grado di risolvere alcuni casi , anche per un problema indecidibile.

Quindi non c'è contraddizione.


23
@srvm, sì, significa questo. Ad esempio, ecco un esempio stupido di un algoritmo informatico: "se l'input è esattamente l'esempio dato nella tua domanda, allora output F = (λ a b c . (a b (a b c)))e stop". Questo è un algoritmo informatico che risolve il problema in alcuni casi (in particolare, esattamente per 1 caso). Sì, va bene - fare una nuova domanda del genere sembra la cosa giusta da fare. Come al solito, ti preghiamo di dirci quale ricerca hai fatto nella domanda (dovresti fare alcuni prima di chiedere).
DW

10
Laddove si riscontrano problemi davvero difficili, anche in NP i problemi completi possono essere risolti facilmente. Questo corrisponde alla mia esperienza. Di solito ci sono caratteristiche del problema che rendono (almeno in parte) la soluzione ovvia. I duri quelli sono attentamente bilanciate tra successo e fallimento, ma non ci sono molti di quelli.
Ross Millikan,

3
@srvm se ci pensi, risolvere problemi difficili come questi in casi speciali è esattamente ciò che deve fare un ottimizzatore.
Cort Ammon,

2
@srvm: Un esempio eccellente di un problema indecidibile che risolviamo i computer quasi ogni giorno è l'arresto del problema. Sappiamo che il problema dell'arresto è indecidibile, ma persistiamo ancora nella scrittura di linter, analizzatori statici e compilatori che cercano di rilevare loop infiniti indesiderati. Come lo facciamo è per "regola empirica". Cioè, dall'esperienza umana (non algoritmo) sappiamo che alcuni tipi di codice entrano in un ciclo infinito. Quindi chiediamo al computer di cercare i casi che conosciamo. Sappiamo che tali programmi non cattureranno mai tutti i bug. Ma è meglio di niente.
slebetman,

3
per i posteri, un nuovo collegamento a: Where The Really Hard Problems Are
Alex Moore-Niemi,

3

Come nota uno dei commenti, si dovrebbe essere consapevoli del fatto che ci sono alcuni algoritmi abbastanza buoni per risolvere in pratica la corrispondenza dei modelli di ordine superiore (come rivelerà una rapida ricerca su Google ).

Non conosco nessuno che risolva questo particolare problema, ma questo problema di "raddoppio" sembra più vicino al campo della sintesi del programma . Credo che esistano sistemi di sintesi dei programmi in grado di affrontare questo tipo di problema.

È facile creare esempi che rendono soffocare quei sistemi e sembra che gli umani siano particolarmente bravi in ​​questo tipo di problemi. La creazione di algoritmi più vicini agli umani nella loro capacità di risolvere questo tipo di problemi è lo scopo della dimostrazione automatica del teorema e dell'intelligenza artificiale (per i tentativi più ambiziosi / non realistici).


1

Gli umani cercano sempre di risolvere il problema con le proprie conoscenze, quindi gli umani sviluppano un algoritmo per risolvere il problema con alcuni casi di problema. Quindi gli umani sviluppano un algoritmo, ma non c'è alcuna certezza che il particolare algoritmo possa risolvere ogni singolo problema. Quindi nessun algoritmo può risolvere ogni problema, ma c'è ancora qualche problema che può essere risolto dall'uomo anche se non esiste un algoritmo perfetto per quello come possiamo dire che sappiamo come risolvere un problema ma non abbiamo un algoritmo .


8
Non è solo una parafrasi della risposta esistente? So di aver criticato la maggior parte delle tue risposte, quindi quanto segue potrebbe sembrare falso, ma non lo è. È davvero bello che tu voglia contribuire al sito. Sarebbe davvero fantastico se potessi aiutarci a rispondere ad alcune delle nostre 2500 domande senza risposta , piuttosto che a domande in cui abbiamo già una risposta che dice tutto ciò che vuoi dire. Grazie!
David Richerby,
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.