Ini hanya sebuah ide yang muncul di benak saya ketika membaca Marvin L. Minsky, "Kekuraman Rekursif atas Masalah Tag dan Topik-Topik Lain dalam Teori Mesin Turing"; khususnya teorema Ia yang terkenal:
Teorema Ia: Kita dapat merepresentasikan fungsi rekursif parsial
oleh program yang beroperasi pada dua bilangan bulat S 1 dan S 2
menggunakan instruksi I j dari formulir:
(i) ADD 1 ke S j , dan pergi ke I j 1
( ii) SUBTRACT 1 dari S j , jika S j ≠ 0 dan pergi ke I j 1 , jika tidak pergi ke I j 2
Artinya, kita dapat membangun program seperti itu yang dimulai dengan S 1f(n)S1S2Ij
SjIj1
SjSj≠0Ij1Ij2
dan S 2 = 0 dan akhirnya berhenti dengan S 1 = 2 f ( n ) dan S 2 = 0S1=2nS2=0S1=2f(n)S2=0
Jika Anda memiliki DFA dua arah dengan satu penghitung di atas pita tak terbatas (semi) di mana input diberikan secara unary: maka DFA dapat:$12n000...
- baca input unary (dan simpan di konter);
- kerjakan bagian dari pita dan gunakan jarak dari 1 sebagai penghitung kedua.0∞1
sehingga dapat mensimulasikan mesin dua counter Turing lengkap.
Sekarang, jika Anda memiliki fungsi rekursif yang berjalan dalam waktu T ( n ) pada mesin Turing standar, DFA dua arah dengan satu penghitung yang dimulai pada pita hingga $ 1 m $f(n)T( n ) $ 1m$(di mana dan T ′ ( n ) ≫ T ( n ) ) dapat:m = 2n3T′( n )T′( n ) ≫ T( n )
- baca input unary (dan simpan di konter);
- kembali ke simbol paling kiri;
- bagi penghitung dengan 3 sampai penghitung berisi dengan cara ini: belok ke kanan dari status q z 0 , q z 1 , q z 2 dan kurangi 1; jika penghitung mencapai 0 dalam keadaan q z 0 pergi ke simbol paling kiri menambahkan +1 dan melanjutkan loop pembagian, jika tidak tambahkan 1 (jika dalam keadaan q z 1 ) atau 2 (jika dalam keadaan q z 2 ) dan pergi ke simbol paling kiri menambahkan + 3 (mis. Pulihkan nilai sebelumnya dari penghitung yang tidak habis dibagi 3) dan lanjutkan dengan langkah 4 .;2nqz0, qz1, qz2qz0qz1qz2
- pada titik ini penghitung berisi ;2n
- hitung menggunakan ruang T ′ ( n ) yang tersedia di sebelah kanan sebagai penghitung kedua (nilai penghitung kedua adalah jarak dari simbol paling kiri $ ).2f( n )T′( n )$
Jadi dengan pengkodean input khusus yang dijelaskan di atas yang memberikan ruang yang cukup pada rekaman terbatas, DFA dua arah dengan satu counter dan alfabet unary dapat menghitung setiap fungsi rekursif.
Jika pendekatannya benar, akan menarik untuk mempertimbangkan bagaimana memilih atau ketika itu cukup untuk memilih k aneh besar ≫ 2 dan menyandikan input sebagai 1 m , m = 2 n k nT′( n ) ≫ T( n )k ≫ 21mm = 2nkn