Втеча з брезенту (Копи)


9

Це виклик, що ґрунтується на визначенні мов та доведенні їхнього завершення.

Це нитка копів. Нитка грабіжників тут .

Копи

Як коп, ви підготуєте дві речі:

  • Офіційна специфікація мови програмування або іншої обчислювальної системи. (Обчислювальні системи визначені нижче.)

  • Доказ того, що ваша система є Тьюрінгом завершеною, згідно дещо суворого визначення нижче.

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

Це , тож переможцем стане відповідь, яка має найбільше голосів, і яка не зламається і не визнається недійсною. Виклик відкритий - я не буду приймати відповідь.

Задля цього завдання обчислювальна система буде визначена як чотири речі:

  • "Набір програм" P. Це буде незмінно нескінченний набір, наприклад, рядки, цілі числа, двійкові дерева, конфігурації пікселів на сітці тощо (але див. Технічне обмеження нижче.)

  • "Вхідний набір" I, який також буде незмінно нескінченним набором, і не повинен бути таким самим набором, що P(хоча це може бути).

  • "Вихідний набір" O, який аналогічно буде нескінченним безліччю, і може бути, або не може бути таким самим, як PабоI

  • Детермінована, механістична процедура для отримання вихідного сигналу oз програми pі введення i, де p, iі oє членами P, Iі Oвідповідно. Ця процедура повинна бути такою, щоб вона, в принципі, могла бути реалізована на машині Тьюрінга або іншій абстрактній моделі обчислення. Процедура, звичайно, може не припинятися, залежно від програми та її внеску.

Набори P, Iі Oповинні бути такими , що ви можете висловити їх у вигляді рядків обчислюваності чином. (Для більшості розумних варіантів це не має значення; це правило існує для того, щоб не вибирати дивні набори, наприклад, набір машин Тьюрінга, які не зупиняються.)

Повнота завершення визначається наступним чином:

  • Для будь-якої обчислюваної часткової функції fвід Iдо O, існує програма pв Pтакій, що задана pта введена i, вихід є, f(i)якщо f(i)має значення. (Інакше програма не зупиняється.)

Слово "обчислюється" у наведеному вище визначенні означає "можна обчислити за допомогою машини Тьюрінга".

Зауважте, що ні правило 110, ні бітовий циклічний тег за цим визначенням не завершені Тьюрінгом, оскільки вони не мають необхідної структури вводу-виводу. Обчислення лямбди є Тюрінг завершеним, доки ми визначаємо Iі Oбудемо числом Церкви . (Це не є Тьюрінг-повним, якщо взяти Iі Oбути лямбда-виразами взагалі.)

Зауважте, що вам не потрібно надавати реалізацію своєї мови, але ви бажаєте включити її у свою відповідь, якщо хочете. Однак, вам не слід покладатися на те, щоб реалізація якось визначала мову - специфікація повинна бути повною сама по собі, і якщо є суперечність між специфікацією та реалізацією, це слід трактувати як помилку в реалізації.


9
Вибачте, хлопці, але популярність-конкурс є об'єктивним критерієм виграшу. Бути поп-кон не викличе тему, і ніколи цього не робив. На останню мета-дискусію на це йде консенсус +27, тому, хоча п'ятеро з вас, можливо, вважають за краще, щоб це було інакше, у вас насправді немає ноги. Оскільки це питання закрите проти узгодженої політики, я прошу його відновити.
Натаніел

2
(зауважте, що WhatWizard закрив його з іншої причини.)
користувач202729

2
Будь ласка, не використовуйте закриті голоси як кнопку "Я не згоден" або "Мені це не подобається". Близькі голоси повинні бути використані для дотримання політики щодо сайту. Якщо ви не погоджуєтесь з політикою, прийміть її до мета - не закривайте виклики, які є актуальними консенсусом громади.
Мего

1
@Mego Я проголосував за те, щоб закрити це як занадто широке, але я також вважаю, що це поза темою, що є в наших діючих правилах для поп-мінусів. Ми очікуємо, що на конкурсах популярності буде "Чітка конкретизація мети, яку необхідно досягти", це питання - зробити X найкреативнішим чином. Мені зрозуміло, що немає жодної цілі, крім правильної відповіді, і тег pop-con додається лише для того, щоб він був відкритим.
Ad Hoc Hunter Hunter

2
@WhatWizard ціль, яка повинна бути досягнута, - це не очевидно, що Тюрінг є повним, а неочевидність оцінюється тим, що не буде зламана протягом тижня. Це не ясно?
Натаніел

Відповіді:


10

Арифметика із зав'язаними очима

Можливо, досить легку мову для початку, відносно кажучи. (Є обмеження щодо того, наскільки складною мовою я можу скласти, тому що я мушу доводити це Тьюрінг-довершення!)

Для цієї мови набір програм - це набір програм з арифметикою із зав'язаними очима, як зазначено в розділі "програма" нижче, набір входів - це набір позитивних цілих чисел, а вихідний набір - це набір цілих чисел (весь набір, а не лише натуральні числа).

Ця мова є досить цікавою - можливо, навіть практично корисною - тому що вона має більш-менш повну відсутність потоку управління, будучи повністю заснованою на обчисленнях чисел, яких ви не бачите. Це робить його потенційно корисним як мова для реалізації програм всередині систем гомоморфного шифрування .

Специфікація

Арифметика із зав'язаними очима - це езотерична мова програмування з такими специфікаціями:

Зберігання даних

Стан запущеної програми з арифметикою із зав'язаними очима складається з шести змінних, кожна з яких може зберігати ціле число. (Там немає ніяких обмежень щодо того, як великі або малі ці числа можна отримати, зокрема, вони можуть піти негативні.) Змінні називаються a, b, c, d, e, і i.

На початку програми, aщоб eвключено кожен инициализируются в 0, і iне започатковано до позитивного цілого числа , взятого з призначеного для користувача введення. (Якщо немає вводу, iініціалізується на 1.)

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

Програма

Арифметична програма із зав'язаними очима - це список команд, кожна з яких має одну з таких форм (де v може бути замінено будь-яким ім'ям змінної, потенційно іншим ім'ям кожного разу, коли воно використовується):

  • v = v + v
  • v = v - v
  • v = v * v
  • v = v / v

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

Виконання програми виконується за допомогою виконання кожної з команд послідовно, а потім циклічно повертаючись до початку та продовжуючи виконувати команди знову в послідовності, ad infinitum (або поки не буде спроби розділити на нуль, чим закінчується програма) .

Кожна команда має ту саму семантику, яку можна було б очікувати від позначень, яка нічим не відрізняється від тієї, яка використовується більшістю практичних мов програмування: приймаються значення другої та третьої змінних, зазначаються в команді, арифметична операція (додавання / віднімання / множити / ділити відповідно для чотирьох форм команд) до них застосовується, а отримане значення зберігається в першій змінній. Ділення тут - ціле ділення, округлення до 0.

Немає жодного потоку управління, крім виходу з програми; команди завжди кружляють послідовно, до тих пір, поки не відбудеться ділення на нуль (якщо є) і не закінчиться програма. Зокрема, немає способу безпосередньо читати змінні, лише використовувати їх як джерело розрахунків, результати яких впливають на значення, присвоєні іншим змінним.


Чи можете ви перевірити, чи моєї відповіді чогось не вистачає?
користувач202729

@ user202729: (коментуючи тут, оскільки я не маю відповіді, щоб коментувати там) Ви не можете імітувати "переміщення, якщо помилкове", з "фліп" і "переміщення, якщо істинне", тому що ви не можете скасувати фліп після переїзду. Тому вам знадобиться інший спосіб впоратися з цим (наприклад, спосіб інвертувати тести, що не повинно бути важким). Більш помітно, однак, це доказ цілісності Тьюрінга з точки зору зупинки поведінки, але визначення у запитанні вимагає від вас вміння робити введення-виведення, тому вам потрібно довести, що ви можете це зробити.
ais523

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

@ user202729: це все ще не зовсім правильно (наприклад, запитання вимагає, щоб ви мали змогу виводити негативні числа, а також вам потрібно змінити призначення, iщоб номер штату - який завжди буде "зупинений") не буде бути частиною результату), але це досить близько, що я не збираюсь відзначати це як безпечне, оскільки ви, очевидно, отримаєте повний тріщину з урахуванням достатнього часу та з достатньою уточненням правил. Я не хочу перемагати в цьому виклику з технічних питань.
ais523

Це дуже близько до обмежень, які використовує de.ioccc.org/years-spoiler.html#1992_buzzard.1 . Ця реалізація використовує цілі числа фіксованого розміру, і тому не є повною для Тьюрінга, і ця кількість серйозно обмежена у кількості ваших змінних, але я думаю, що доказ все-таки схожий.
b_jonas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.