Концепція про два автомати лічильника


19

Я хотів би довести (або спростувати) таку гіпотезу:

Концепція : два автоматичних лічильника (2CA) не можуть визначитися з наступною мовою:

L={n потрійні та двійкові представленняn мають як парну, так і непарну довжину}

2CA може легко перевірити, чи двійкове представлення має парну чи непарну довжину (просто продовжуйте ділити на два та оновлювати прапор "парної довжини" після кожного поділу); таким же чином він може перевірити, чи має потрійне представлення парну чи непарну довжину (просто продовжуйте ділити на три і оновлювати прапор "парної довжини" після кожного поділу).

Але для обчислення одного з них він повинен знищити його вхід, а не може відновити його для обчислення іншого; так що здається , що немає ніякого способу вирішити L .

Чи знаєте ви техніку, яка може бути використана для доведення гіпотези?
Або ви можете спростувати домовленість будувати 2CA, яка вирішує L ?

Я спробував тим же підходом, який дотримувався Ібарра, щоб довести, що 2CA не може вирішити {n2n1} , але це здається не правильним.

Примітка : для простоти 2CA еквівалентна програмі з однією змінною c яка спочатку містить вхід і наступний набір інструкцій:

  • INC : додайте його до змінної;
  • DEC : декремент c (лише якщо він більший за нуль);
  • JZ lab : якщо c дорівнює нулю, перейти до мітки lab інакше продовжувати;
  • MUL K : помножити c на костант K ;
  • K[,lab0,lab1,...,labK1]cKcc=c/KcmodK
  • GOTOlab : безумовний стрибок;
  • HALT Прийняти | Відхилити : зупинити і прийняти або зупинити і відхилити.

Наприклад програма, яка перевіряє, чи має двійкове представлення рівну довжину:n

   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

(ми можемо створити еквівалент 2CA)


2
Я не знаю , як неможливість доказ йти, але { | потрійне уявлення має непарну довжину} випадок є вирішуваним, тому що всякий раз , коли ваш внесок знав тільки прості множники , ви можете ставитися до свого експоненту (п тут ) як лічильники в змодельованому автоматі з такою кількістю лічильників (змодельованих додатковими праймерами), скільки ви хочете, таким чином, Тюрінг-повний. 2 n2n2n
Ørjan Johansen

2
Я надіслав вам електронний код, а також розмістив його на своєму веб-сайті, якщо хтось ще дивиться.
Ørjan Johansen

1
@joro Метод, який я описав, має суворе обмеження: він може обробляти лише безмежно багато простих коефіцієнтів введення (крім тестування, якщо решта всі 0 чи ні.) Проблема полягає в тому, що в загальній проблемі експоненти всіх простих фактори враховуються. Ви можете насправді обчислити або ваш або ваш до паритету, але, наскільки я знаю, немає способу порівняти загальний вхід до або не руйнуючи його в процесі, так що ви не можете перевірити інший один пізніше. Моя думка зараз полягає в тому, що загальна проблема з 2CA нерозв’язна. m 2 k 3 mkm2k3m
Ørjan Johansen

1
@ ØrjanJohansen: Я погоджуюсь з vzn: якщо хочете, ви можете опублікувати відповідь з вирішенням обмеженої простішої проблеми (вартий винагороди :-) і може допомогти тим, хто хоче швидше потрапити в початкову проблему). Ви також можете ДУЖЕ коротко зазначити, чому підхід Ібарри не відповідає загальній проблемі, і чому рішення простішої версії не відповідає загальній (скопіюйте вставте коментар до joro).
Marzio De Biasi

1
Дякую! чудово / рідко бачити всю зацікавленість / активність у цій проблемі. ще кілька коментарів / запитань щодо цієї проблеми
vzn

Відповіді:


11

Тож люди продовжують нудити мене публікувати це, хоча це вирішує лише спрощену версію проблеми. Тоді добре :)

Наприкінці цього я викладу деякі з того, що я дізнався з паперів Ібарри та Трана, і чому цей метод розпадається на нашу загальну проблему, але, можливо, все ж дає корисну інформацію.

Але спочатку ми розглянемо більш просту проблему спроби вирішити множину

L={2n потрійних та двійкових уявлень мають як парну, так і непарну довжину2n}

Зверніть увагу, як це має а не як у вихідній задачі. Зокрема, якщо число вводу не є потужністю 2, ми хочемо відхилити його, а не намагатися обчислити його довжину в будь-якій базі.2nn

Це значно спрощує питання: Якщо оригінальне число записується простим фактором як , то для всіх крім нам просто потрібно перевірити що вони всі .2v23v35v57v7...viv20

Це дозволяє вирішити цю спрощену задачу за допомогою обгортки навколо старого методу (я вважаю, як вважає Мінський) кодування стану автоматичного обчислювача в експонентах первинної факторизації єдиної змінної автомата множення / ділення, що, як зазначалося в ОП вище, в значній мірі еквівалентно 2-лічильному автомату.k

По-перше, нам потрібен автомат -счетчика, щоб обернути його. Ми будемо використовувати 3 лічильники, іменовані , та .kv2v3v5

Автомат прийме iff для початкових значень лічильника, потрійні та двійкові представлення мають як і непарну довжину, а і дорівнюють нулю. Коли він прийме, він спочатку обнуляє всі свої лічильники.2v2v3v5

Ось код для цього у форматі складання, подібному до ОП (я щойно додав змінні до інструкцій). Я насправді не перевіряв його, оскільки мені не було з чим його запускати, але я вважаю це формальністю: 3-лічильні автомати добре відомі як повний Тьюрінг і здатні побудувати будь-яку обчислювальну функцію однієї з їх початкові значення.

// 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

Наступним кроком є ​​повторне кодування вищевказаного в експонентах одного автомата змінної. Оскільки результат досить довгий, я просто опишу загальний метод, але повна версія (трохи «оптимізована» в плямах) є на моєму веб-сайті.

                JZ vp, label
                DEC vp
next:           ...

стає (в основному розділіть на p, а потім очистіть, щоб скасувати, якщо поділ не було рівним):

                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 vpстає MUL p. Індивідуальний JZі DECспочатку може бути змінений у комбіновану форму. GOTO labelі HALT Rejectє незмінними.

HALT Acceptбуде без змін, за винятком того, що в нашому випадку ми ще одну остаточної перевірка робити: ми повинні переконатися , що немає простих множників в числі інших , ніж 2,3 і 5. Так як наші зокрема 3-лічильника автоматних нулів лічильників це використовує, коли він приймає, це просто: просто перевірити, що кінцева змінна дорівнює 1, що можна зробити, перейшовши до коду

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

Код на моєму веб-сайті також має початкову перевірку того, що число не дорівнює нулю, що я щойно зрозумів, що це зайве з перевіркими нуля v3, v5, ну добре.

Як я вже згадував, вищевказаний метод працює для спрощеної задачі, але він дійсно не має шансів працювати на загальну, тому що: У загальній проблемі точне значення експонента кожного прем'єра рахується для визначення його загального розміру і, таким чином, довжини його є в різних базах. Це означає що:

  • У нас немає "безкоштовних" прайменів, які можна використовувати для лічильників.
  • Навіть якщо ми дійсно є вільні прості числа для лічильників, ми на самому ділі не є спосіб витягти всю необхідну інформацію з нескінченної кількості інших простих чисел , у яких показник значення роблять справу.

Отже, давайте закінчимо поясненням суті загального методу з вищезгаданого зв'язаного документа Ібарри та Трана ( вільно завантажувана версія ) про те, як довести, що певні проблеми не вирішуються 2CA і як це дратівливо руйнується в нашій справа.

По-перше, вони змінюють кожен 2CA на "нормальну форму", в якій два лічильника перемикаються у "фази" між одним лише зростаючим, а другий лише зменшується, поки він не досягне нуля. Число станів цього нормалізується автомат грає важливу роль в оцінках.s

Потім вони аналізують цей автомат для висновку, що вони можуть побудувати певні арифметичні послідовності чисел, поведінка яких пов'язана. Якщо бути точним (Деякі з цих питань не викладені як теореми, але явно маються на увазі обох основних їх прикладів):

  1. Якщо число х приймається автоматом, без розміру лічильника ненульовим на початку фази коли - небудь збирається , то існує ціле число таке , що всі числа , приймаються.vixi sD>0x+nDn0
  2. Якщо множина містить принаймні прийнятих чисел, таких, що для кожного числа є фаза така, що , то ми можемо знайти та цілі числа такі, щоXs2+1xXivixsp,rXK1,K2

    • Для кожного цілого числа автомат приймає або і , або обидва відхиляються.n0p+nK1r+nK2

(Думки:

  • Їм потрібно для але я думаю, що це насправді непотрібно. Власне так, що їх приймають.x>sxX
  • Більшість цього має також стосуватися відхилених чисел, якщо відхилення відбувається шляхом явного припинення, а не невиконання.)

Для власних прикладів вони також часто використовують той факт, що не мають простих факторів . Щоб довести неможливість, вони виводять протиріччя, показуючи, що такі арифметичні послідовності не можуть існувати.D,K1,K2>s

У нашій проблемі отримання протиріччя з цього розпадається на другий випадок. Якщо у нас , де досить великий, що жодне число між і не ділиться ні на ні на , тоді також не буде сили 2 або 3 між і , тому вони або прийняті, або обидва відхилені. k p r 2 k 3 k p + 6 k n q + 6 k nK1=K2=6kkpr2k3kp+6knq+6kn

Точку 1 все ще можна виявити неможливою, оскільки сили 2 і 3 здебільшого зростають все далі і далі. І я вважаю, що я можу показати другий випадок неможливим, якщо (я аргументував електронною поштою @MarzioDeBiasi). Тож, можливо, хтось міг би скористатися цією інформацією для подальшого обмеження форми автомата і, нарешті, з цього вивести протиріччя.K1K2


1
Дуже гарна і чітка відповідь!
Марціо Де Біасі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.