Apa contoh paling sederhana dari program yang kita tidak tahu apakah mereka berakhir?


27

Masalah penghentian menyatakan tidak ada algoritma yang akan menentukan apakah program yang diberikan berhenti. Sebagai konsekuensinya, harus ada program yang tidak dapat kami katakan apakah mereka berakhir atau tidak. Apa contoh paling sederhana (paling kecil) dari program semacam itu?


Anda menentang tanggapan Anda ..... Terima kasih! Tetapi program penghentian mengasumsikan pengetahuan tentang sumber. ... Jika ini benar, Anda telah menjawab pertanyaan Anda. Program penghentian sudah tahu. Bayangkan sebuah sistem mengendalikan tanda, selalu menyala dan berkedip, kapan dimatikan? Kegagalan daya, sakelar daya, atau selama urutan blitz. Atau diberi cadangan baterai dan generator, tidak pernah.
htm11h


Saya akan menambahkan bahwa masalah penghentian hanya masalah jika Anda tidak menempatkan batas waktu. Tentunya tidak ada perbedaan dalam praktik antara terlambat mendapatkan jawaban yang berguna dan tidak pernah mendapatkan jawaban. Anda dapat bertanya apakah suatu program akan mengembalikan jawaban dalam sejumlah langkah, seperti definisi ketepatan waktu-nyata. Jika Anda tidak dapat menjamin jawaban tepat waktu, maka Anda hanya memiliki program yang tidak memiliki jaminan kebenaran.
Rob

1
@Rob Itu tidak benar. Jika Anda tidak tahu apakah mesin akan berhenti, Anda dapat menunggu tanpa batas waktu untuk melihat apakah mesin itu berhenti; setelah satu milenium, Anda masih tidak akan tahu apakah itu akan berhenti atau tidak, katakanlah, keesokan harinya.
Kyle Strand

@KyleStrand saya setuju dengan Anda. Tetapi saya juga mengatakan bahwa ini adalah masalah yang benar-benar berlebihan dalam praktiknya, karena semua perhitungan realistis tunduk pada tenggat waktu (milidetik dalam hitungan bulan). Jika Anda membutuhkan jawaban dalam 5 detik agar dapat bermanfaat, satu-satunya hal yang penting adalah apakah Anda dapat menjamin jawaban dalam 5 detik. Misalkan Anda dapat menjamin jawaban yang diberikan dalam jumlah yang tidak ditentukan untuk menghitung waktu. Itu akan menjadi jaminan yang tidak berguna.
Rob

Jawaban:


41

Contoh yang cukup sederhana bisa berupa program yang menguji dugaan Collatz :

f(n)={HALT,if n is 1f(n/2),if n is evenf(3n+1),if n is odd

n5×2605.764×1018


9
f(n)n

6
@KyleStrand Lihat di sini .
Raphael

10
@KyleStrand, Raphael 100% benar. Ini adalah kesalahpahaman umum. Anda harus menelusuri apa yang dikatakan definisi dengan sangat hati-hati, dan kemudian Anda mungkin menemukan bahwa intuisi Anda tidak cukup cocok dengan definisi tersebut. Menurut definisi komputabilitas, sudah cukup bahwa ada mesin Turing untuk menghitungnya - tidak masalah apakah kita tahu apa itu mesin Turing. Saat pertama kali melihat ini, banyak siswa berpikir itu curang, tetapi tidak - itu hanya konsekuensi dari definisi.
DW

2
@KyleStrand Anda harus menyingkirkan gagasan bahwa program harus menyelesaikan masalah . Itu tidak. Itu hanya harus menghasilkan jawaban, yang merupakan tugas sepele. Secara algoritmik, masalah dengan himpunan instance yang terbatas semuanya membosankan karena kita dapat meng-hardcode jawabannya. (Dan bahkan jika kita tidak mengetahui jawaban, kita masih tahu bahwa ada algoritma yang benar.) Secara umum, ketika menunjukkan bahwa tidak ada algoritma untuk sesuatu, Anda tidak bisa membuat setiap asumsi tentang bagaimana itu akan kerja. Kurangnya imajinasi kita tidak memberikan bukti.
Raphael

2
@KyleStrand Afaik, saya menggunakan definisi standar kemampuan komputasi seperti yang diajarkan hari ini (dan, afaik, telah berlangsung selama beberapa dekade). Saya sarankan Anda menyerap jawaban dan materi terkait dan mencari tahu di mana Anda salah. Tidak masuk akal bagi saya dan orang lain untuk mengulangi hal yang sama berulang kali. Satu lagi percobaan: definisi komputabilitas secara inheren eksistensial, tidak konstruktif. Selama Anda berpikir dalam bidang logika klasik, tidak perlu sama sekali untuk dapat menyerahkan algoritma "pemecahan" - kita hanya harus menunjukkan bahwa ada satu yang memberikan jawaban yang benar.
Raphael

31

Masalah penghentian menyatakan tidak ada algoritma yang akan menentukan apakah program yang diberikan berhenti. Sebagai konsekuensinya, harus ada program yang tidak dapat kami katakan apakah mereka berakhir atau tidak.

"Kami" bukan suatu algoritma =) Tidak ada algoritma umum yang dapat menentukan apakah suatu program berhenti untuk setiap program .

Apa contoh paling sederhana (paling kecil) dari program semacam itu?

Pertimbangkan program berikut:

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

Function is_perfect memeriksa apakah n adalah angka sempurna . Tidak diketahui apakah ada angka sempurna yang aneh, jadi kami tidak tahu apakah program ini berhenti atau tidak.


7
Kami adalah sebuah algoritma.
PyRulez

3
@PyRulez tidak ada bukti bahwa kekuatan komputasi pikiran manusia setara dengan Mesin Turing. Buktinya tidak berfungsi, misalnya tidak diketahui cara mensimulasikan satu pikiran di pikiran lain.
avsmal

1
@avsmal Oke, tapi sangat tidak mungkin kita mampu melakukan komputasi yang berlebihan .
PyRulez

2
@PyRulez John Lucas dan Roger Penrose telah menyarankan bahwa pikiran manusia mungkin merupakan hasil dari beberapa jenis komputasi yang ditingkatkan secara mekanis, "non-algoritmik". Itu adalah asumsi yang kuat. Tetapi setidaknya pikiran kita mungkin memiliki sumber ketidakpastian. Dan itu sudah cukup untuk mematahkan buktinya: tidak mungkin untuk meniadakan "acak" (untuk beberapa definisi yang sesuai dari apa yang dimaksud secara acak) Mesin Turing jika tidak diketahui apakah itu berhenti.
avsmal

5
Apakah komputasi kuantum dianggap hiperkomputasi? Saya berasumsi komputer kuantum dapat disimulasikan dengan sempurna oleh mesin turing - hanya sedikit lebih lambat.
MaiaVictor

10

Anda menulis:

Masalah penghentian menyatakan tidak ada algoritma yang akan menentukan apakah program yang diberikan berhenti. Sebagai konsekuensinya, harus ada program yang tidak dapat kami katakan apakah mereka berakhir atau tidak.

Ini adalah non-sequitur, di kedua arah. Anda menyerah pada kesalahan umum yang layak ditangani.

PPP

Hanya jika Anda mengharuskan algoritme harus menyelesaikan masalah Penghentian untuk semua program can Anda dapat menunjukkan bahwa tidak ada algoritma seperti itu yang dapat ada.

Sekarang, mengetahui bahwa masalah Penghentian tidak dapat dipastikan tidak menyiratkan bahwa ada program yang tidak dapat dibuktikan oleh siapa pun yang tidak dapat dihentikan atau dibatalkan. Bahkan jika Anda tidak lebih kuat dari mesin Turing (yang hanya merupakan hipotesis, bukan fakta yang terbukti), yang kami tahu adalah bahwa tidak ada algoritma tunggal / orang yang dapat memberikan bukti seperti itu untuk semua program. Mungkin ada orang yang berbeda yang dapat memutuskan untuk setiap program.

Beberapa bacaan terkait lainnya:


Jadi, Anda melihat bahwa pertanyaan Anda yang sebenarnya (seperti yang diulang di bawah) tidak ada hubungannya dengan apakah masalah penghentian itu dapat dihitung. Sama sekali.

Apa contoh paling sederhana (terkecil) dari [program yang kita tidak tahu untuk menghentikan atau mengulangi]?

S

g(n)={1,S true,g(n+1),else.

Memang, ini tidak terlalu "alami".


  1. Tidak semua , tetapi "banyak" dalam arti tertentu. Paling tidak banyak, setidaknya.

Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Raphael

Untuk mencoba mengulangi hal ini untuk pemahaman saya sendiri, apakah benar untuk mengatakan bahwa sementara tidak ada algoritma unik dapat menentukan apakah ada program yang sewenang-wenang berhenti, mungkin ada beberapa algoritma khusus-program untuk memecahkan masalah penghentian setiap program yang mungkin?
Asad Saeeduddin

@ AsadSaeeduddin "Lebih buruk": untuk setiap rangkaian program yang terbatas, masalah Henti sepele . Setiap set yang terbatas dapat dipilih.
Raphael

7

Setiap masalah terbuka mengenai keberadaan nomor dengan properti tertentu memunculkan program semacam itu (yang mencari nomor tersebut). Sebagai contoh, ambil dugaan Collatz; karena kami tidak tahu apakah itu benar, kami juga tidak tahu apakah program berikut berakhir:

    n:=1;
    found:=false;
    while not found do
      s:={};
      i:=n;
      while i not in s do
        add i to s;
        if i even then i:=i/2 else i:=3i+1
      if 1 not in s then found:=true;
      n:=n+1  


0

pertanyaannya rumit karena decidability (formalisasi / generalisasi setara CS untuk masalah penghentian) dikaitkan dengan bahasa sehingga perlu disusun kembali dalam format itu. ini tampaknya tidak banyak ditunjukkan, tetapi banyak masalah terbuka dalam matematika / CS dapat dengan mudah dikonversi ke masalah (bahasa) dari kepastian keputusan yang tidak diketahui. ini adalah karena korespondensi yang ketat antara pembuktian teorema dan (un) analisis desidabilitas. misalnya (agak seperti jawaban lainnya dengan angka sempurna ganjil), ambil dugaan bilangan prima kembar yang berasal dari Yunani (lebih dari 2 milenia yang lalu) dan tunduk pada kemajuan penelitian besar baru-baru ini misalnya oleh Zhang / Tao. mengubahnya menjadi masalah algoritmik sebagai berikut:

Input: n . Output: Y / N ada setidaknya n primer kembar.

algoritma mencari bilangan prima kembar dan berhenti jika menemukan n dari mereka. tidak diketahui apakah bahasa ini dapat dipilih. penyelesaian masalah bilangan prima kembar (yang menanyakan apakah ada jumlah terbatas atau tak terbatas) juga akan menyelesaikan kepantasan bahasa ini (jika juga dibuktikan / ditemukan berapa banyak, jika terbatas).

contoh lain, ambil hipotesis Riemann dan pertimbangkan bahasa ini:

Input: n . Output: Y / N ada setidaknya n nol nol dari fungsi Riemann zeta.

Algoritme mencari nol nol (kode ini tidak terlalu kompleks, mirip dengan pencarian root, dan ada formulasi lain yang setara yang relatif sederhana, yang pada dasarnya menghitung jumlah "paritas" dari semua bilangan prima kurang dari x dll) dan berhenti jika ia menemukan n dari mereka dan lagi, yang tidak diketahui apakah bahasa ini adalah decidable dan resolusi adalah "hampir" setara dengan memecahkan dugaan Riemann.

sekarang, bagaimana dengan contoh yang lebih spektakuler? ( Peringatan, mungkin lebih kontroversial juga)

Input: c: Output: Y / N terdapat algoritma O (n c ) untuk SAT.

sama halnya, resolusi desidabilitas bahasa ini hampir setara dengan masalah P vs NP . namun ada kasus yang kurang jelas untuk kode "sederhana" untuk masalah dalam kasus ini.


1
Akankah downvoter menjelaskan apa yang salah dengan jawaban ini?
MaiaVictor

2
NnNNa,b,can+bn=cnnN=2
vonbrand

3
Saya bukan downvoter, tetapi semua klaim dalam jawaban ini salah. Ketiga masalah itu terbukti dapat diputuskan (tanpa perlu membuat asumsi yang tidak terbukti). Karena itu, pelajari jawaban Raphael dengan cermat.
DW

ok mungkin input harus memiliki TM yang ditentukan dan algoritma memutuskan apakah TM menghitung masalahnya. harus memikirkannya lebih lanjut ... pikirkan ada resep sederhana untuk jenis masalah ini yang pada dasarnya menghubungkan masalah terbuka dengan bahasa yang tidak dapat ditentukan ... tetapi sepakat bahwa ini jarang didokumentasikan / dirumuskan dalam referensi CS ... hanya menemukan beberapa yang tersebar ref ... atau mungkin input adalah bukti dan bahasa memverifikasi jika buktinya benar ... jawaban suara tinggi lainnya menyebutkan angka sempurna ganjil, masalah collatz dll ... program tidak dikenal untuk berhenti atau tidak untuk konstanta tertentu .
vzn

maaf bila membingungkan! pada beberapa pemikiran lebih lanjut pernyataan itu benar dalam bentuk yang menggambarkan program-program sederhana yang tidak diketahui berakhir (untuk semua input) (yaitu pertanyaan awal) dan kegagalan dari keseluruhan ide yang dibuat / ditunjukkan oleh DW sedang mencoba untuk mengubah masing-masing menjadi bahasa yang tidak dapat ditentukan. akan terus merenungkan bahwa gagasan konstruksi terakhir mencari ide yang berhasil. Cara lain untuk melihatnya adalah bahwa masalah dapat dilihat sebagai instance / input individu untuk pemecah masalah yang terhenti tetapi tidak benar-benar (dikenal sebagai) setara dengan masalah penghentian itu sendiri.
vzn

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.