Я хотел бы доказать (или опровергнуть) следующую гипотезу:
Предположение : двух встречные автоматы (2CA) не могут выбрать следующий язык:
n } троичное и двоичное представления имеют как четную, так и нечетную длину
2CA может легко проверить, имеет ли двоичное представление четную или нечетную длину (просто делите на два и обновляйте флаг «четная длина» после каждого деления); таким же образом он может проверить, имеет ли троичное представление четную или нечетную длину (просто делите на три и обновляйте флаг «четная длина» после каждого деления).
Но для того, чтобы вычислить один из них, он должен уничтожить свой ввод и не может восстановить его для вычисления другого; так что кажется , что нет никакого способа решить .
Знаете ли вы технику, которая может быть использована для доказательства гипотезы?
Или вы можете опровергнуть гипотезу построения 2CA, которая решает ?
Я попробовал тот же подход, которому следовал Ибарра, чтобы доказать, что 2CA не может решить , но, похоже, это не правильный путь.
Примечание : для простоты 2CA эквивалентна программе с одной переменной которая изначально содержит входные данные и следующий набор команд:
- INC : добавить один к переменной;
- DEC : уменьшение (только если оно больше нуля);
- JZ c l a b : если равно нулю, перейти к метке противном случае продолжить;
- MUL с К : умножить на стоимость ;
- DIV : разделить на постоянную и сохранить частное в ( ); возможно переходить к различным меткам в соответствии с остатком ( );
- GOTO : безусловный прыжок;
- HALT Принять | Отклонить : остановить и принять или остановить и отклонить.
Например, программа для проверки, имеет ли двоичное представление четную длину:
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 nL={2n∣ троичные и двоичные представления имеют как четную, так и нечетную длину2n }
Обратите внимание, что здесь а не как в исходной задаче. В частности, если входное число не является степенью 2, мы хотим отклонить его, а не пытаться вычислить его длину в любой базе. n2n n
Это значительно упрощает ситуацию: если исходное число записывается как простое множитель , то для всех кроме нам просто нужно проверить что они все .v i v 2 02v23v35v57v7... vi v2 0
Это позволяет нам решить эту упрощенную проблему, используя обертку вокруг старого метода (я полагаю, Минского) кодирования состояния автомата счетчика в показателях простой факторизации одной переменной автомата умножения / деления, что, как отмечено в ОП выше, в значительной степени эквивалентно автомату с двумя счетчиками.k
Для начала нам понадобится автомат с счетчиком. Мы будем использовать 3 счетчика с именами , и .v 2 v 3 v 5k v2 v3 v5
Автомат будет принимать , если для начальных значений счетчика, тройные и двоичные представления имеют и даже длину или нечетную длину, и оба и равны нуль. Когда он принимает, он сначала обнуляет все свои счетчики.2v2 v3 v5
Вот некоторый код для этого в формате сборки, похожем на OP (я только что добавил переменные в инструкции). На самом деле я не проверял его, поскольку мне не с чем его запускать, но я считаю это формальностью: хорошо известно, что автоматы с 3 счетчиками полны по Тьюрингу и способны построить любую вычислимую функцию одного из их начальные значения.
Следующим шагом является повторное кодирование вышеупомянутого в показателях автомата с одной переменной. Поскольку результат довольно длинный, я просто опишу общий метод, но полная версия (немного «оптимизированная» в некоторых местах) есть на моем сайте.
становится (в основном, делим на p, а затем делаем очистку, чтобы отменить, если деление не было четным):
INC vp
становитсяMUL p
. ИндивидуальныйJZ
иDEC
может быть сначала изменен в комбинированную форму.GOTO label
иHALT Reject
без изменений.HALT Accept
будет без изменений, за исключением того, что в нашем случае мы еще одну окончательной проверка делать: мы должны убедиться , что нет простых множителей в числе других , чем 2,3 и 5. Так как наши частности 3-счетчика автоматных нулей счетчиков это использует, когда он принимает, это просто: просто проверьте, что конечная переменная равна 1, что можно сделать, перейдя к кодуКод на моем сайте также имеет начальную проверку, что число не равно нулю, что я только что понял, избыточно с проверками нуля v3, v5, ну хорошо.
Как я уже упоминал, вышеупомянутый метод работает для упрощенной задачи, но он действительно не имеет шансов работать для общей задачи, потому что: В общей задаче точное значение показателя каждого простого числа учитывается при определении его общего размера и, следовательно, его длины имеет в разных базах. Это означает, что:
Итак, давайте закончим объяснением сути общего метода из вышеупомянутой связанной статьи Ibarra и Trân ( свободно скачиваемая версия ) о том, как доказать, что 2CA не могут решить некоторые проблемы , и как это досадно ломается в нашем кейс.
Во-первых, они превращают каждые 2CA в «нормальную форму», в которой два счетчика переключаются в «фазах» между одним, только увеличивающимся, а другим только уменьшающимся, пока не достигнет нуля. Число состояний этого нормализуется автомат играет важную роль в оценках.s
Затем они анализируют этот автомат, чтобы сделать вывод, что они могут построить определенные арифметические последовательности чисел, поведение которых связано. Чтобы быть точным (часть этого не сформулирована как теорема, но подразумевается в доказательстве обоих их двух основных примеров):
Если множество содержит не менее принятых чисел, таких что для каждого числа существует фаза такая, что , то мы можем найти и целые числа такой, чтоX s2+1 x∈X i vxi≤s p,r∈X K1,K2
(Мысли:
Для своих собственных примеров они также часто используют тот факт, что имеют простых факторов . Чтобы доказать невозможность, они затем выводят противоречия, показывая, что такие арифметические последовательности не могут существовать. > сD,K1,K2 >s
В нашей задаче получение противоречия противоречит второму случаю. Если мы имеем , где достаточно велико, чтобы никакое число между и не делилось ни на ни на , то также не будет степеней 2 или 3 между и , так что они либо приняты, либо оба отклонены. k p r 2 k 3 k p + 6 k n q + 6 k nK1=K2=6k k p r 2k 3k p+6kn q+6kn
Точка 1 все еще может показаться невозможной, поскольку силы 2 и 3 в основном растут все дальше и дальше друг от друга. И я верю, что могу показать второй случай невозможным, если (я написал @MarzioDeBiasi аргумент). Так что, возможно, кто-то может использовать эту информацию, чтобы еще больше ограничить форму автомата, и, наконец, извлечь из этого противоречие.K1≠K2
источник