Які дуже короткі програми з невідомим статусом зупинки?


32

Ця 579-розрядна програма в обчисленні Binary Lambda має невідомий статус зупинки:

01001001000100010001000101100111101111001110010101000001110011101000000111001110
10010000011100111010000001110011101000000111001110100000000111000011100111110100
00101011000000000010111011100101011111000000111001011111101101011010000000100000
10000001011100000000001110010101010101010111100000011100101010110000000001110000
00000111100000000011110000000001100001010101100000001110000000110000000100000001
00000000010010111110111100000010101111110000001100000011100111110000101101101110
00110000101100010111001011111011110000001110010111111000011110011110011110101000
0010110101000011010

Тобто невідомо, припиняється чи ні ця програма. Для того, щоб визначити це, ви повинні розв'язати гіпотезу Колатца - або, принаймні, для всіх чисел до 2 ^ 256. У цьому сховищі є повне пояснення того, як ця програма була отримана.

Чи є (набагато) більш короткі програми BLC, які також мають невідомий статус зупинки?


6
Дуже пов'язане питання . Громади громади, будь ласка: дублікат?
Рафаель

9
Завдання виразити таку програму якомога менше бітів, як видається, є проблемою Code Golf , не менш інформатикою .
Рафаель

2
Я думаю, що відповідь Ріккі про 5-державні ТМ краща за відповідь на оригінальне запитання. Якщо цей закритий як дуп, чи можна відповідь перемістити?
Девід Річербі


6
Вам не вистачає ключової деталі: ви не вказали, якою мовою має бути написана програма. У вашому прикладі використовується двійкове обчислення лямбда - це єдина мова, яка вас цікавить? Ми можемо бачити, що тривіально розробити 1-бітну програму, яка має невідомий статус зупинки, просто вставивши тіло алгоритму безпосередньо в саму мову. Це лазівка, але на яку ви повинні звернути увагу, коли просите рішення про гольф. Вони люблять свої лазівки! Складність Колмогова може бути важливою темою для вивчення тут.
Корт Аммон - Поновіть Моніку

Відповіді:


30

Так. Ця сторінка говорить , що є 98 5-стан машини Тьюринга , чиї запинається статуси невідомі. Прикро, що це не дає жодних прикладів таких машин, але ця 26-річна сторінка містить 2 5-державні машини Тьюрінга, статуси зупинки яких, очевидно, були невідомі на той час. (Пошук "простого лічильника" приведе вас прямо між цими 2-ма.

Input Bit   Transition on State     Steps            Comment
             A   B   C   D   E

    0       B1L C1R D0R A1L H1L   > 2*(10^9)       ``chaotic''
    1       B1R E0L A0L D0R C0L

    0       B1L A0R C0R E1L B0L       ?        complex ``counter''
    1       A1R C0L D1L A0R H1L

Внизу сторінки написано: $ Date: 2007/11/03, то як це 26 років?
Фалак

1
@Falaque Вгорі сторінки зазначено "Ця сторінка є авторським HTML-переписом від ... лютого 1990 року". Тексту 26 років, переклад у HTML з (або востаннє оновлений) у 2007 році.
IMSoP

5

Гіпотеза Колац:

Наступна програма завжди зупиняється:

void function( ArbitraryInteger input){
     while( input > 1){
            if(input % 2 == 0)
                input /= 2;
            else
                input = (input*3) + 1;
     }

     // Halt here
}

Незначна варіація (все-таки здогадка, оскільки вона заснована на результаті Колатца):

Для деякого введення наступна програма ніколи не ввійде в один і той же стан двічі (де стан визначається значенням, що міститься "введенням"):

void function( ArbitraryInteger input){
     while( input >= 1){ // notice the "="
            if(input % 2 == 0)
                input /= 2;
            else
                input = (input*3) + 1;
     }
}

Зауважте, що друга програма ніколи не зупиняється, незалежно від того, зупиняється перша програма чи ні.

Вважається, що перша програма завжди припиняється для будь-якого введення, однак у нас немає доказів цього, і все одно може існувати ціле число, для якого програма не зупиняється (є також приз у розмірі 100 доларів) .

Друга програма теж цікава: в ній зазначено, що програма ніколи не буде входити в один і той самий стан для деякого введення, що, як правило, вимагає, щоб перша програма мала послідовність, яка, як відомо, розходилася без повторення. Він вимагає не лише хибності думки Коллаца , але й помилкової та без циклів , крім очевидних циклів 1,4,2,1.

  • Якщо у Колатца є лише контр-приклади, то варіація хипотези є помилковою

  • Якщо Collatz хибний без циклів, то варіація гіпотези вірна

  • Якщо Collatz вірно, то варіант хибний

  • Якщо Collatz помилковий і тому, що він має петлі, і тому, що він має число, на яке він розходиться, варіація на хипотезі є вірною (для цього просто потрібне число, на яке він розходиться, не вводячи цикл)

Я думаю, що варіант є цікавішим (не лише тому, що я його випадково знайшов і помітив завдяки @LieuweVinkhuijzen), а тому, що він насправді вимагає реального доказу. Шляхом грубого форсування ми можемо знайти день або інший цикл (і це буде цикл довше 70 номерів: сучасний стан техніки полягає в тому, що не може бути нескінченних циклів, коротших від 68) і грубої примушувати не цікаво: це просто хрускіт числа. Однак ми не можемо грубо примусити нескінченну розбіжну послідовність, ми не знаємо, чи справді це закінчиться без реального доказу.

EDIT: Я пропустив частину про Collatz Conjecture вибачте, я щиро відповів напам'ять алгоритмом, про який я прочитав кілька років тому, я не сподівався, що це вже було згадано.

EDIT2: У коментарі змусили мене помітити, що я написав алгоритм з помилкою, однак ця помилка справді відрізняє мою відповідь від гіпотези Колатца (але прямої її зміни).


1
input > 1input >= 11421

Ви маєте рацію, я хотів поставити це >, однак, поки у нас немає доказів для зупинки, >ми не можемо бути впевнені, що ми дістанемося до 1 -> 4 -> 2 -> 1циклу (наприклад, якщо це не закінчиться для >цього не робимо " т дістатися >=)
GameDeveloper

1
>=14211421>=>

2
n<1n=1n4n>1n11

1
Це правда :) Ви маєте рацію, я мав би додати свій перший коментар "якщо гіпотеза Колатца правдива". Я бачу вашу редакцію, дуже добре. Друга програма вам не потрібна, оскільки здогадка "ця програма ніколи не переходить в один і той же стан двічі" також не вирішена для першої програми: можливо, існує число, яке не відходить у нескінченність, а натомість застрягає в великий цикл десь у дуже великій кількості.
Lieuwe Vinkhuijzen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.