Це поліцейські-грабіжники виклик, що ґрунтується на визначенні мов та доведенні їхнього завершення.
Це нитка копів. Нитка грабіжників тут .
Копи
Як коп, ви підготуєте дві речі:
Офіційна специфікація мови програмування або іншої обчислювальної системи. (Обчислювальні системи визначені нижче.)
Доказ того, що ваша система є Тьюрінгом завершеною, згідно дещо суворого визначення нижче.
Ви опублікуєте свою специфікацію своєї мови, і грабіжники спробують "зламати" її, довівши її цінність повноти. Якщо ваше подання не зламається протягом одного тижня, ви можете позначити його як безпечне та опублікувати підтвердження. (Ваша відповідь може бути визнана недійсною, якщо хтось виявить недолік у вашому доказі, якщо ви не зможете це виправити.)
Це популярність-конкурс, тож переможцем стане відповідь, яка має найбільше голосів, і яка не зламається і не визнається недійсною. Виклик відкритий - я не буду приймати відповідь.
Задля цього завдання обчислювальна система буде визначена як чотири речі:
"Набір програм"
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
бути лямбда-виразами взагалі.)
Зауважте, що вам не потрібно надавати реалізацію своєї мови, але ви бажаєте включити її у свою відповідь, якщо хочете. Однак, вам не слід покладатися на те, щоб реалізація якось визначала мову - специфікація повинна бути повною сама по собі, і якщо є суперечність між специфікацією та реалізацією, це слід трактувати як помилку в реалізації.