Дозволяє бути алфавітом, тобто не порожнім кінцевим набором. Рядок - це будь-яка кінцева послідовність елементів (символів) з. Як приклад, - двійковий алфавіт і є рядком для цього алфавіту.
Зазвичай до тих пір, поки містить більше 1 елемента, точну кількість елементів у не має значення: у кращому випадку ми десь опиняємося з іншою константою. Іншими словами, насправді не має значення, якщо ми використовуємо двійковий алфавіт, числа, латинський алфавіт або Unicode.
Чи є приклади ситуацій, коли важливо, наскільки великий алфавіт?
Причина, яка мене цікавить, полягає в тому, що мені трапилося натрапити на один такий приклад:
Для будь-якого алфавіту визначимо випадковий оракул бути оракулом, який повертає випадкові елементи з , такий, що кожен елемент має рівний шанс повернутись (тому шанс для кожного елемента є ).
Для деяких алфавітів і - можливо, різного розміру - розгляньте клас машин Oracle з доступом до . Нас цікавлять машини oracle цього класу, які поводяться так само, як. Іншими словами, ми хочемо перетворити оракул в оракул за допомогою машини Тьюрінга. Ми назвемо таку машину Тьюрінга програмою перетворення.
Дозволяє і . Перетворення в оракул легко: ми запитуємо двічі, перетворюючи результати таким чином: , , , . Зрозуміло, ця програма працює час.
Тепер нехай і . Для цих двох мов працюють усі програми перетворення час, тобто немає програм перетворення з до які бігають час.
Це можна довести суперечливістю: припустимо, існує програма перетворення з до бігаючи час. Це означає, що є такий як робить щонайбільше запити до .
може становити менше, ніж запити в певних шляхах виконання. Ми можемо легко побудувати програму перетворення що виконує , відслідковуючи, скільки разів робився запит на оракул. Дозволяє бути кількість запитів oracle. потім робить додаткові запити oracle, відкидання результатів, повернення того, що повернувся б.
Таким чином, є саме такі шляхи виконання для . Саме так цих шляхів виконання призведе до повернення . Однак,не є цілим числом, тому ми маємо протиріччя. Отже, такої програми не існує.
Більш загально, якщо у нас є алфавіти і з і , то існує програма перетворення з до якщо і лише тоді, коли всі прайми, що з'являються в основній факторизації також з'являються в основній факторизації (тому експоненти праймерів у факторизації не мають значення).
Наслідком цього є те, що якщо у нас є генератор випадкових чисел, що генерує двійковий рядок довжини , ми не можемо використовувати цей генератор випадкових чисел для генерації числа в з точно однаковою ймовірністю.
Я придумав вищезгадану проблему, коли стояв у супермаркеті, обдумував, що слід пообідати. Мені було цікаво, чи можу я використовувати монети кидок, щоб визначитись між варіантами A, B і C. Як виявляється, це неможливо.