Це лише ідея, яка мені прийшла в голову під час читання Марвіна Л. Мінського «Рекурсивна нерозв'язність проблеми тегів Поста та інших тем з теорії машин Тюрінга»; зокрема відома теорема Ia:
Теорема Ia: Ми можемо представити будь-яку часткову рекурсивну функцію
програмою, що працює на двох цілих числах S 1 і S 2,
використовуючи інструкції I j форм:
(i) ADD 1 to S j , і перейти до I j 1
( ii) ПІДПРИЄМСТВО 1 з S j , якщо S j ≠ 0 і переходимо до I j 1 , інакше переходимо до I j 2
Тобто ми можемо побудувати таку програму, яка починається з S 1f( n )S1S2Яj
SjЯj1
SjSj≠ 0Яj1Яj2
і S 2 = 0 і врешті-решт зупиняється на S 1 = 2 f ( n ) і S 2 = 0S1= 2нS2= 0S1= 2f( n )S2= 0
Якщо у вас двосторонній DFA з одним лічильником над (напів) нескінченною стрічкою, де введення подано унарі: тоді DFA може:$ 12н000 ...
- прочитати одинарний вхід (і зберегти його у лічильнику);
- працюйте над частиною стрічки і використовуйте відстань від 1 с як другу лічильник.0∞1
тож він може імітувати повну машину з двох лічильників Тюрінга.
Тепер, якщо у вас є рекурсивна функція яка працює в часі T ( n ) на стандартній машині Тьюрінга, двосторонній DFA з одним лічильником, який запускається на кінцевій стрічці $ 1 млн $f( n )Т( n ) $ 1м$(де і T ' ( n ) ≫ T ( n ) ) можуть:m = 2н3Т'( n )Т'( n ) ≫ T( n )
- прочитати одинарний вхід (і зберегти його у лічильнику);
- повернення до крайнього лівого символу;
- розділіть лічильник на 3, поки лічильник не містить таким чином: перейдіть направо циклу від станів q z 0 , q z 1 , q z 2 і віднімаючи 1; якщо лічильник досягає 0 у стані q z 0, перейдіть до символу вліво, додаючи +1, і продовжуйте цикл поділу, інакше додайте 1 (якщо у стані q z 1 ) або 2 (якщо у стані q z 2 ) та перейдіть до крайнього лівого символу додаючи + 3 (тобто відновити попереднє значення лічильника, не ділиться на 3), і перейти до кроку 4;2нqz0, qz1, qz2qz0qz1qz2
- в цей момент лічильник містить ;2н
- обчисліть використовуючи простір T ′ ( n ), доступний праворуч у якості другого лічильника (значення другого лічильника - відстань від крайнього лівого символу $ ).2f( n )Т'( n )$
Отже, описане вище спеціальне кодування на вході, що дає йому достатньо місця на кінцевій стрічці, двосторонній DFA з одним лічильником та одинарним алфавітом може обчислювати кожну рекурсивну функцію.
Якщо підхід правильний, було б цікаво міркувати про те, як вибрати або коли достатньо вибрати великий непарний k ≫ 2 і кодувати вхід як 1 м , m = 2 n k nТ'( n ) ≫ T( n )k ≫ 21мm = 2нкн