Stopproblemet
Den här artikeln behöver källhänvisningar för att kunna verifieras. (2017-12) Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan. |
Stopproblemet eller haltproblemet (en The Halting Problem) är ett grundläggande beslutsproblem inom beräkningsbarhetsteorin som informellt kan beskrivas så här:
- Med en given beskrivning av ett program och dess indata, bestäm om programmet, när det utförs med indatat, någonsin stoppar (slutför beräkningen). Alternativet är att det fortsätter i evighet utan avbrott.
En annan beskrivning av problemet lyder:
- Är det möjligt att inom ändlig tidsrymd med något program avgöra om ett godtyckligt program stannar för godtyckliga indata?
Alan Turing visade 1936 att en allmän algoritm för att lösa stopproblemet för samtliga (program, indata)-par inte kan existera. Man säger att stopproblemet inte är rekursivt lösbart.
Skisserat bevis
Börja med att välja ett programspråk; det är standard att förknippa varje program med (åtminstone) en teckensträng (programtexten i det valda programspråket). Anta att någon hävdar att man har funnit en algoritm stoppar(p, i)
som svarar sant om p är programtexten till ett program som stoppar när det får i som indata, och falskt om det inte stoppar. Skriv då ett annat program trassel
som använder stoppar
som en subrutin:
function trassel(string s) if stoppar(s, s) == false return true else snurra i evighet
Det här programmet tar en sträng s som ett argument och anropar stoppar
med s som både programtext och indata till programmet. Om stoppar
svarar falskt så svarar trassel
sant, annars hamnar trassel
i en oändlig slinga. Eftersom alla program kan uttryckas som strängar, finns det en sträng t som motsvarar trassel
. Vad händer om vi försöker anropa trassel(t)
?
- Om
trassel(t)
stoppar så betyder det attstoppar(t, t)
svarade falskt, vilket i sin tur betyder atttrassel(t)
inte borde ha stoppat. En paradox. - Om
trassel(t)
snurrar i evighet, är det antingen därför attstoppar
också snurrar i evighet, eller därför attstoppar
svarade sant. Detta betyder antingen attstoppar
inte fungerar för ett giltigt program (vilket strider mot antagandet), eller atttrassel(t)
borde ha stannat.
I båda fallen dras slutsatsen att stoppar
inte gav ett korrekt svar, i motsats till det ursprungliga antagandet. Eftersom resonemanget gäller för vilket program som helst som någon kan föreslå som en lösning till stopproblemet, finns det ingen lösning. Stopproblemet är därmed oavgörbart.
Media som används på denna webbplats
Författare/Upphovsman: Tkgd2007, Licens: CC BY-SA 3.0
A new incarnation of Image:Question_book-3.svg, which was uploaded by user AzaToth. This file is available on the English version of Wikipedia under the filename en:Image:Question book-new.svg