Гипотеза о двух счетчиках автоматов

19

Я хотел бы доказать (или опровергнуть) следующую гипотезу:

Предположение : двух встречные автоматы (2CA) не могут выбрать следующий язык:

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

2CA может легко проверить, имеет ли двоичное представление четную или нечетную длину (просто делите на два и обновляйте флаг «четная длина» после каждого деления); таким же образом он может проверить, имеет ли троичное представление четную или нечетную длину (просто делите на три и обновляйте флаг «четная длина» после каждого деления).

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

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

Я попробовал тот же подход, которому следовал Ибарра, чтобы доказать, что 2CA не может решить{n2n1} , но, похоже, это не правильный путь.

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

  • INC : добавить один к переменной;
  • DEC : уменьшение (только если оно больше нуля);c
  • JZ lab c l a b : если равно нулю, перейти к метке противном случае продолжить;clab
  • MULK с К : умножить на стоимость ;cK
  • DIVK[,lab0,lab1,...,labK1] : разделить на постоянную и сохранить частное в ( ); возможно переходить к различным меткам в соответствии с остатком ( );cKcc=c/KcmodK
  • GOTO lab : безусловный прыжок;
  • 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
Я не знаю, как идут доказательства невозможности, но случай { ter троичного представления имеет нечетную длину} является разрешимым, потому что всякий раз, когда ваш вход имеет только известные простые факторы, вы можете обрабатывать свои показатели (n здесь ) в виде счетчиков в моделируемом автомате с таким количеством счетчиков (имитируемых дополнительными простыми числами), сколько вы хотите, таким образом, завершается по Тьюрингу. 2 n2n2n
Орджан Йохансен
2
Я отправил вам по электронной почте какой-то «код», а также разместил его на моем веб-сайте на случай, если кто-то еще смотрит.
Орджан Йохансен
1
@joro Метод, который я описал, имеет строгое ограничение: он может обрабатывать только конечное число простых множителей входных данных (за исключением проверки, если все остатки равны 0 или нет). Проблема в том, что в общей задаче показатели всех простых чисел факторы учитываются На самом деле вы можете вычислить либо ваше либо ваше точностью до паритета, но, насколько я знаю, нет никакого способа сравнить общий ввод с или не разрушая его в процессе, так что вы не можете проверить другой один позже. Я догадываюсь, что общая проблема с 2CA неразрешима. м 2 к 3 мkm2k3m
Орджан Йохансен
1
@ ØrjanJohansen: Я согласен с vzn: если вы хотите, вы можете опубликовать ответ с решением более простой проблемы с ограничением (стоит награды :-) и может помочь тем, кто хочет быстро войти в исходную проблему). Вы также можете ОЧЕНЬ кратко отметить, почему подход Ibarra не подходит для общей проблемы и почему решение более простой версии не удается для общей (скопируйте и вставьте комментарий в joro).
Марцио Де Биаси
1
Спасибо! замечательно / редко видеть всю заинтересованность / активность в этой проблеме. еще несколько комментариев / вопросов по этой проблеме
vzn

Ответы:

11

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

В конце этого я приведу кое-что из того, что я узнал из статьи Ибарры и Трэна, и почему этот метод не подходит для нашей общей проблемы, но, возможно, все же дает некоторую полезную информацию.

Но сначала мы рассмотрим более простую проблему, связанную с попыткой решить множество

2 nL={2n троичные и двоичные представления имеют как четную, так и нечетную длину2n}

Обратите внимание, что здесь а не как в исходной задаче. В частности, если входное число не является степенью 2, мы хотим отклонить его, а не пытаться вычислить его длину в любой базе. n2nn

Это значительно упрощает ситуацию: если исходное число записывается как простое множитель , то для всех кроме нам просто нужно проверить что они все .v i v 2 02v23v35v57v7...viv20

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

Для начала нам понадобится автомат с счетчиком. Мы будем использовать 3 счетчика с именами , и .v 2 v 3 v 5kv2v3v5

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

Вот некоторый код для этого в формате сборки, похожем на OP (я только что добавил переменные в инструкции). На самом деле я не проверял его, поскольку мне не с чем его запускать, но я считаю это формальностью: хорошо известно, что автоматы с 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, ну хорошо.

Как я уже упоминал, вышеупомянутый метод работает для упрощенной задачи, но он действительно не имеет шансов работать для общей задачи, потому что: В общей задаче точное значение показателя каждого простого числа учитывается при определении его общего размера и, следовательно, его длины имеет в разных базах. Это означает, что:

  • У нас нет «свободных» простых чисел для счетчиков.
  • Даже если мы действительно есть свободные простые числа для счетчиков, мы на самом деле не есть способ извлечь всю необходимую информацию из бесконечного множества других простых чисел , у которых показатель значения делают дело.

Итак, давайте закончим объяснением сути общего метода из вышеупомянутой связанной статьи Ibarra и Trân ( свободно скачиваемая версия ) о том, как доказать, что 2CA не могут решить некоторые проблемы , и как это досадно ломается в нашем кейс.

Во-первых, они превращают каждые 2CA в «нормальную форму», в которой два счетчика переключаются в «фазах» между одним, только увеличивающимся, а другим только уменьшающимся, пока не достигнет нуля. Число состояний этого нормализуется автомат играет важную роль в оценках.s

Затем они анализируют этот автомат, чтобы сделать вывод, что они могут построить определенные арифметические последовательности чисел, поведение которых связано. Чтобы быть точным (часть этого не сформулирована как теорема, но подразумевается в доказательстве обоих их двух основных примеров):

  1. Если автомат принимает число x без размера ненулевого счетчика в начале фазы когда-либо идущего , то существует целое число такое, что все числа , принимаются.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
Очень хороший и понятный ответ!
Марцио де Биаси