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


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 >= 11→4→2→1

Ви маєте рацію, я хотів поставити це >, однак, поки у нас немає доказів для зупинки, >ми не можемо бути впевнені, що ми дістанемося до 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.