Problem stopu
Problem stopu – zagadnienie algorytmiczne odpowiadające, dla danego algorytmu, na pytanie, czy realizujący go program zatrzyma się (w skończonym czasie); pytanie może dotyczyć konkretnych danych wejściowych albo wszystkich możliwych. O programie, który zatrzymuje się dla wszystkich możliwych danych mówi się, że ma własność stopu.
Problem stopu bywa trudny do rozstrzygnięcia, przykładem może być sformułowany w prosty sposób problem Collatza, dla którego odpowiedź jest dotychczas nieznana.
Nierozstrzygalność
Nie istnieje uniwersalny algorytm rozstrzygający czy dowolny program się zatrzyma[1], dowiedli to jednocześnie Alan Turing oraz Alonzo Church, dzięki utworzeniu uniwersalnych modeli obliczeniowych, odpowiednio maszyny Turinga oraz rachunku lambda. Jest to więc problem nierozstrzygalny. Otóż jeżeli istniałby taki program stop, to mógłby on działać zgodnie z poniższym pseudokodem:
procedura stop(program, dane):
jeżeli program(dane) zatrzymuje się, to
zwróć tak,
w przeciwnym przypadku
zwróć nie.
Dla dowolnego programu program i jego danych wejściowych dane program stop zatrzymuje się, po czym zwraca tak w przypadku, gdy program wykonany wejściem dane zatrzymuje się, oraz zwraca nie w przeciwnym przypadku. Korzystając z programu stop można by jednak stworzyć nowy program test, który dla dowolnego programu program zatrzymuje się wtedy i tylko wtedy, kiedy program zapętla się na swoim własnym kodzie podanym jako dane wejściowe; jego pseudokod miałby postać:
procedura test(program):
jeżeli stop(program, program) = tak, to
zapętl się.
Powstaje wtedy pytanie: czy program test zatrzymuje się po otrzymaniu swojego własnego kodu jako danych wejściowych (czyli po wywołaniu test(test))?
- Jeżeli wywołanie zapętli się, to
stopzwrócinie, czyli proceduratestzatrzyma się, co przeczy założeniom o zapętleniu się wywołaniatest(test) - Jeżeli wywołanie zatrzyma się, to
stopzwrócitak, czyli proceduratestzapętli się, co przeczy założeniom o zatrzymaniu się wywołaniatest(test)oraz o rozstrzygalności problemu stopu przez procedurę stop;
Powyższy dowód nie wprost zaprowadził nas do sprzeczności z początkowymi założeniami, z czego wynika, iż nie istnieje taki uniwersalny algorytm, który rozstrzyga problem stopu dla dowolnego algorytmu.
Zobacz też
Przypisy
- ↑ Udowodniono, że taki algorytm istnieje, jeśli maszyna Turinga ma dostęp do zamkniętych krzywych czasopodobnych w wersji Deutscha (Scott Aaronson, Mohammad Bavarian, Giulio Gueltrini, Computability Theory of Closed Timelike Curves, „arXiv [quant-ph]”, 18 września 2016, arXiv:1609.05507 [dostęp 2019-09-30].) albo kwantowej podpowiedzi i aparatury pomiarowej nie powodującej kolapsu funkcji falowej (Scott Aaronson, PDQP/qpoly = ALL, „arXiv [quant-ph]”, 22 maja 2018, arXiv:1805.08577 [dostęp 2019-09-30].).
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.