Dugaan tentang dua counter automata


19

Saya ingin membuktikan (atau menyangkal) dugaan berikut:

Dugaan : two counter automata (2CA) tidak dapat memutuskan bahasa berikut:

L.={n representasi terner dan biner dari memiliki panjang genap atau ganjiln}

Sebuah 2CA dapat dengan mudah memeriksa apakah representasi biner memiliki panjang genap atau ganjil (hanya membaginya dengan dua dan memperbarui bendera "panjang genap" setelah setiap divisi); dengan cara yang sama dapat memeriksa apakah representasi ternary memiliki panjang genap atau ganjil (hanya tetap membaginya dengan tiga dan memperbarui bendera "panjang genap" setelah setiap divisi).

Tetapi untuk menghitung salah satu dari mereka harus menghancurkan inputnya, dan tidak dapat memulihkannya untuk menghitung yang lain; sehingga tampaknya tidak ada cara untuk memutuskan .L.

Apakah Anda tahu teknik yang dapat digunakan untuk membuktikan dugaan itu?
Atau dapatkah Anda menyangkal dugaan membangun 2CA yang memutuskan ? L.

Saya mencoba pendekatan yang sama diikuti oleh Ibarra untuk membuktikan bahwa 2CA tidak dapat memutuskan{n2n1} , tetapi tampaknya bukan cara yang benar.

Catatan : untuk kesederhanaan, 2CA setara dengan program dengan satu variabel yang awalnya berisi input dan set instruksi berikut:c

  • INC : tambahkan satu ke variabel;
  • DEC : decrement (hanya jika lebih besar dari nol);c
  • JZ lab : jika adalah nol lompat ke label jika tidak melanjutkan;clab
  • MULK : kalikan dengan costant ;cK
  • DIVK[,lab0,lab1,...,labK1] : bagi dengan konstanta dan simpan hasil bagi menjadi ( ); mungkin melompat ke label yang berbeda sesuai dengan yang tersisa ( );cKcc=c/KcmodK
  • Lab GOTOlSebuahb : lompatan tanpa syarat;
  • HALT Accept | Tolak : hentikan dan terima atau hentikan dan tolak.

Misalnya program untuk memeriksa apakah representasi biner dari n memiliki panjang genap adalah:

   loop: JZ even   // test if n = 0
         DIV 2
         JZ odd    // test if n = 0
         DIV 2
         GOTO loop
   even: HALT Accept
    odd: HALT Reject

(kita dapat membangun 2CA yang setara)


2
Saya tidak tahu bagaimana bukti ketidakmungkinan berjalan, tetapi kasus { representation representasi ternary memiliki panjang ganjil} dapat dipecahkan, karena setiap kali input Anda hanya memiliki faktor utama yang diketahui, Anda dapat memperlakukan eksponen Anda (n di sini ) sebagai penghitung dalam robot disimulasikan dengan banyak penghitung (disimulasikan oleh bilangan prima ekstra) yang Anda inginkan, sehingga Turing-lengkap. 2n2n
Ørjan Johansen

2
Saya mengirimi Anda beberapa "kode", dan juga meletakkannya di situs web saya kalau-kalau ada orang lain yang menonton.
Ørjan Johansen

1
@ joro Metode yang saya jelaskan memiliki batasan ketat: hanya dapat menangani banyak faktor prima input (kecuali untuk pengujian apakah sisanya semuanya 0 atau tidak.) Masalahnya adalah bahwa dalam masalah umum, eksponen semua prime faktor dihitung. Anda benar-benar dapat menghitung baik Anda atau Anda sampai dengan paritas, tetapi sejauh yang saya tahu, tidak ada cara untuk membandingkan masukan umum untuk atau tanpa merusaknya dalam proses, sehingga Anda tidak dapat menguji yang lain sesudahnya. Firasat saya sekarang adalah bahwa masalah umum tidak dapat diselesaikan dengan 2CA. m 2 k 3 mkm2k3m
Ørjan Johansen

1
@ ØrjanJohansen: Saya setuju dengan vzn: jika Anda mau, Anda dapat memposting jawaban dengan solusi untuk masalah sederhana yang lebih terbatas (sepadan dengan bounty :-) dan dapat membantu bagi mereka yang ingin cepat masuk ke masalah asli). Anda juga dapat SANGAT mencatat secara singkat mengapa pendekatan Ibarra gagal untuk masalah umum, dan mengapa solusi dari versi yang lebih sederhana gagal untuk yang umum (salin-tempel komentar ke joro).
Marzio De Biasi

1
Terima kasih! hebat / jarang melihat semua minat / aktivitas dalam masalah ini. beberapa komentar / pertanyaan lagi tentang masalah ini
vzn

Jawaban:


11

Jadi orang-orang terus mengomel saya untuk memposting ini meskipun itu hanya memecahkan versi masalah yang disederhanakan. Baiklah kalau begitu :)

Pada akhir ini, saya akan menaruh beberapa dari apa yang saya pelajari dari kertas Ibarra dan Tran, dan mengapa yang metode istirahat turun pada masalah umum kami, tapi mungkin masih memberikan beberapa informasi yang berguna.

Tetapi pertama-tama, kita akan melihat masalah yang lebih sederhana dalam mencoba memutuskan set

terner dan representasi biner dari 2 n memiliki kedua panjang bahkan atau panjang aneh }L={2n2n}

Perhatikan bagaimana ini memiliki daripada n seperti pada masalah aslinya. Khususnya jika nomor input bukan kekuatan 2, kami ingin menolaknya daripada mencoba menghitung panjangnya di basis apa pun.2nn

Ini sangat menyederhanakan masalah: Jika nomor asli ditulis prima faktorized sebagai , maka untuk semua v i kecuali v 2 kita hanya perlu memeriksa bahwa semuanya 0 .2v23v35v57v7...viv20

Hal ini memungkinkan kita untuk memecahkan masalah yang disederhanakan ini dengan menggunakan pembungkus di sekitar metode lama (oleh Minsky saya berasumsi) dari pengkodean keadaan -counter automaton dalam eksponen faktorisasi utama dari variabel tunggal otomat multiplikasi / divisi, yang seperti disebutkan dalam OP di atas hampir setara dengan robot 2-counter.k

Pertama, kita perlu otomat count untuk membungkus. Kami akan menggunakan 3 penghitung, bernama v 2 , v 3 dan v 5 .kv2v3v5

Otomat akan menerima IFF untuk nilai counter awal, terner dan representasi biner dari memiliki kedua panjang bahkan atau panjang aneh, dan baik v 3 dan v 5 adalah nol. Ketika menerima, pertama-tama akan nol semua konternya.2v2v3v5

Berikut adalah beberapa kode untuk itu, dalam format perakitan yang mirip dengan OP (Saya baru saja menambahkan variabel ke instruksi). Saya belum benar-benar mengujinya, karena saya tidak punya apa-apa untuk menjalankannya, tetapi saya menganggap ini sebagai formalitas: automata 3-counter dikenal sebagai Turing-complete, dan untuk dapat membangun fungsi yang dapat dihitung dari salah satu dari mereka nilai awal.

// Check that v3 and v5 are both zero.
                JZ v3, check5
                GOTO reject
check5:         JZ v5, init3
                GOTO reject
// Decrement v2 until it is zero, constructing 2^n in the process.  If 2^n
// was even, we will then pass to even2 with 2^n in v3; If 2^n was odd, we
// will pass to odd2 with 2^n in v5.
init3:          INC v3          // Set v3 to 1 = 2^0 to start with.
even1:          // We have decremented v2 an even number of times so far.
                // 2^decremented amount is in v3.
                JZ v2, odd2
                DEC v2
dup3to5:        JZ v3, odd1
                DEC v3
                INC v5
                INC v5
                GOTO dup3to5
odd1:           // We have decremented v2 an odd number of times so far.
                // 2^decremented amount is in v5.
                JZ v2, even2
                DEC v2
dup5to3:        JZ v5, even1
                DEC v5
                INC v3
                INC v3
                GOTO dup5to3
// The second part checks the ternary length of 2^n, which starts out in v3
// or v5 according to whether the *binary* length of 2^n (i.e. n+1) was odd
// or even.
odd2:           // v3 needs to have odd ternary length to accept.
                // It is simplest to consider 0 to have even length in both
                // binary and ternary.  This works out as long as we're
                // consistent.
                JZ v3, reject
trisect3to5:    DEC v3
                DEC v3
                JZ v3, even2
                DEC v3
                INC v5
                GOTO trisect3to5
even2:          // v5 needs to have even ternary length to accept
                JZ v5, accept
trisect5to3:    DEC v5
                DEC v5
                JZ v5, odd2
                DEC v5
                INC v3
                GOTO trisect5to3
accept:         HALT Accept
reject:         HALT Reject

Langkah selanjutnya adalah mengkodekan ulang di atas dalam eksponen otomat variabel tunggal. Karena hasilnya cukup lama, saya hanya akan menjelaskan metode umum, tetapi versi lengkap (sedikit "dioptimalkan" di tempat) ada di situs web saya.

                JZ vp, label
                DEC vp
next:           ...

menjadi (pada dasarnya dibagi dengan p, dan kemudian lakukan pembersihan untuk membatalkan jika pembagian itu tidak merata):

                DIV p, next, ..., newlabel.fp-1
newlabel.f1:    MUL p
                GOTO newlabel.i1
...
newlabel.fp-1:  MUL p
                INC
newlabel.ip-2:  INC
...
newlabel.i1:    INC
                GOTO label
next:           ...

INC vpmenjadi MUL p. Individual JZdan DECpertama dapat diubah menjadi bentuk gabungan. GOTO labeldan HALT Rejecttidak berubah.

HALT Acceptakan berubah, kecuali bahwa dalam kasus kami, kami masih memiliki satu pemeriksaan terakhir yang harus dilakukan: kita perlu memastikan bahwa tidak ada faktor utama dalam jumlah lain selain 2,3 dan 5. Sejak tertentu 3-counter nol robot kami counter itu menggunakan ketika menerima, ini sederhana: hanya menguji bahwa variabel terakhir adalah 1, yang dapat dilakukan dengan melompat ke kode

                DEC     // BTW it cannot be zero before this.
                JZ accept
                HALT Reject
accept:         HALT Accept

Kode di situs web saya juga memiliki pemeriksaan awal bahwa jumlahnya bukan nol, yang baru saja saya sadari berlebihan dengan v3, v5 nol cek, oh well.

Seperti yang saya sebutkan, metode di atas bekerja untuk masalah yang disederhanakan, tetapi itu benar-benar tidak memiliki kesempatan untuk bekerja pada masalah umum, karena: Dalam masalah umum nilai tepat dari jumlah eksponen setiap prime untuk menentukan ukuran umum dan dengan demikian panjangnya memiliki berbagai pangkalan. Ini berarti:

  • Kami tidak memiliki bilangan prima "gratis" untuk digunakan untuk penghitung.
  • Bahkan jika kita memang memiliki bilangan prima bebas untuk counter, kita tidak benar-benar memiliki cara untuk mengekstrak semua informasi yang diperlukan dari tak terhingga banyaknya bilangan prima lainnya yang nilai eksponen lakukan materi.

Jadi mari kita akhiri dengan penjelasan tentang intisari metode umum dari makalah yang tertaut di atas oleh Ibarra dan Trân ( versi yang dapat diunduh secara bebas ) untuk cara membuktikan bahwa masalah tertentu tidak dapat dipecahkan oleh 2CA, dan bagaimana hal itu secara menjengkelkan terpecah pada kita. kasus.

s

Kemudian, mereka menganalisis robot ini untuk menyimpulkan bahwa mereka dapat membangun urutan aritmatika tertentu dari angka yang perilakunya terkait. Tepatnya (Beberapa dari ini tidak dinyatakan sebagai teorema, tetapi tersirat dalam bukti dari dua contoh utama mereka):

  1. vixi sD>0x+nDn0
  2. Xs2+1xXivixsp,rXK1,K2

    • n0p+nK1r+nK2

(Pikiran:

  • x>sxX
  • Sebagian besar dari ini juga harus berlaku untuk nomor yang ditolak , selama penolakannya adalah dengan penghentian secara eksplisit daripada nonterminasi.)

D,K1,K2>s

K1=K2=6kkpr2k3kp+6knq+6kn

K1K2


1
Jawaban yang sangat bagus dan jelas!
Marzio De Biasi
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.