Читать книгу Програмуючи Всесвіт. Космос – квантовий комп’ютер - Сет Ллойд - Страница 5

Частина 1. Загальна картина
Розділ 2. Обчислення

Оглавление

Інформація

Я почав першу зустріч мого випускного курсу МТІ з інформації так, як зазвичай починаю всі свої курси лекцій:

– По-перше, – сказав я, звертаючись до двадцятьох студентів, – ви ставите питання, я пробую на них відповісти. По-друге: якщо ви не ставите питань, то їх ставитиму вам я. По-третє: якщо ви не відповісте на мої питання, я вам розповім те, що ви, на мою думку, маєте знати. Є питання?

Я чекав. Відповіді не було.

Щось не так. Зазвичай студенти МТІ дуже радіють можливості спробувати спантеличити професора, особливо якщо альтернативою є спроба професора спантеличити їх.

Я перейшов до пункту другого:

– Немає питань? Тоді ось вам одне. Що таке інформація?

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

– Гаразд. Тоді так. Що таке одиниця інформації?

Тут аудиторія зреагувала одразу:

– Біт!

Про що ж свідчить відповідь моїх студентів або її відсутність? Про те, що визначити кількість інформації значно простіше, ніж сказати, що таке інформація. І взагалі часто простіше відповісти на питання «Скільки?», ніж на «Що таке…?». Що таке енергія? Що таке гроші? Це важкі питання. Скільки енергії потрібно, щоб..? Скільки грошей треба, щоб..? Ці питання мають точні та доступні відповіді.

– Що таке біт? – спитав я.

Тепер відповіді посипалися швидко та навперебій:

– 0 або 1!

– Орел чи решка!

– Так або ні!

– Правда чи брехня!

– Вибір між двома альтернативами!

Усі ці відповіді були правильні. Слово «біт» означає binary digit – двійкова цифра. Двійкова – це та, що складається з двох частин; а біт подає одну з цих двох альтернатив. Традиційно ці альтернативи відомі як 0 і 1, але будь-які дві відмінні альтернативи (гаряче/холодне, чорне/біле, всередині/зовні) означають біт.

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

Як бачите навіть із цих кількох результатів, коли ви продовжуєте підкидати монетки, кількість загальних альтернатив – загальна можлива кількість результатів рядів підкидань – зростає швидко. Фактично з кожним наступним підкиданням (пам’ятайте: кожне підкидання видає один біт) кількість загальних альтернатив подвоюється. Тож, щоб підрахувати кількість результатів альтернативних рішень у даній ситуації, ви просто підносите два до степеня, що дорівнює кількості бітів. Наприклад, десять бітів дають два в десятому степені, або 1024 альтернативи (2  × 2  × 2  × 2  × 2  × 2  × 2  × 2  × 2  × 2 = 210 = 1,024 ≈ 103).

Інакше кажучи, десять бітів відповідають трьом цифрам на позиціях «одиниці», «десятки» та «сотні», як ми традиційно рахуємо. Визначення кількості інформації – це просто лічба. Лічба бітами простіша, хоча менш відома, ніж лічба цифрами. Лічба цифрами від 0 до 9 проста: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. У цьому місці у вас, щоправда, цифри закінчуються, тож наступне число пишеться як 1, за яким іде 0, тобто 10. Число 10 має 1 у розряді десятків та 0 у розряді одиниць. Наступне число, 11, має 1 у розряді десятків і 1 у розряді одиниць. Ви можете продовжувати рахувати в цьому напрямку до 99. Наступним є число 100, що має 1 у розряді сотень, 0 у розряді десятків та 0 у розряді одиниць. (Тепер зрозуміло, чому так непросто засвоїти цей спосіб лічби вперше, коли вам років п’ять.)

Лічба бітами аналогічна. Починайте лічити: 0 = нуль, 1 = один. Поки що все йшло добре, але тепер у нас закінчилися біти. Наступною комбінацією бітів є 10, що дорівнює двом: тобто 1 у розряді «двійок» та 0 у розряді «одиниць». (Подання «двох» як «10» є особливістю двійкової арифметики, що завдає користувачеві-початківцю найбільше клопоту, як-от: «Існує 10 типів людей: ті, хто знає, що таке двійковий код, і ті, кому це невідомо».) Наступна комбінація – це 11, що дорівнює трьом: 1 у розряді двійок та 1 у розряді одиниць. Тепер у нас закінчилися двобітові числа.

Наступна комбінація – це 100, що дорівнює чотирьом: 1 у розряді четвірок, 0 у розряді двійок та 0 у розряді одиниць. Потім іде 101, що дорівнює п’яти (1 у розряді четвірок плюс 1 у розряді одиниць), 110 = шість, 111 = сім. Вісім представлене чотирма бітами: 1000, де одиниця в розряді вісімок, та 0 у розрядах четвірок, двійок та одиниць. Оскільки в них два біти замість десяти, двійкові числа подовжуються швидше, ніж звичайні.


Як числа, кратні десятьом (десятки, сотні, тисячі, мільйони), важливі у звичайному, десятковому способі лічби, – так числа, кратні двом, важливі для лічби бітами: 1 = один = 20, 10 = два = 21, 100 = чотири = 22, 1000 = вісім = 23, 10000 = шістнадцять = 24, 100000 = тридцять два = 25, 1000000 = шістдесят чотири = 26, 10000000 = сто двадцять вісім = 27. Ці числа мають бути знайомі кулінарам. Англійська система мір та ваг – це двійкова система: вісім унцій у чашці, шістнадцять – у пінті (американській, бо британська пінта дорівнює двадцятьом унціям, а тройська – дванадцятьом), тридцять дві – у кварті, шістдесят чотири – у половині галона, сто двадцять вісім – у галоні загалом. Двійкове подання числа не складніше, ніж вимірювання у квартах, пінтах та унціях. Сто сорок шість унцій, наприклад, – це один галон плюс одна пінта плюс одна чверть чашки: 128+16+2 = 146. Написане двійковим способом 146 – це 10010010: одиниця в розряді «галонів», одиниця в розряді «пінт», одиниця в розряді «чвертей чашок», нулі в інших місцях. Щоб перевести число в двійкову систему, досить просто виміряти його чайними ложечками.

Лічба двійковим способом настільки ж проста (хоч і не для тих із нас, для кого це новина), як і двійкова арифметика. Уся двійкова таблиця додавання складається з: 0+0 = 0, 0+1 = 1, 1+1 = 10. Двійкове множення навіть простіше: 0  × 0 = 0, 0 × 1 = 0, 1 × 1 = 1. Двійкова система красива.

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

Точність

– А якщо є незліченне число варіантів? – спитав один студент. – Наприклад, існує незліченна кількість реальних чисел між 0 і 1.

– Якщо у вас є незлічена кількість варіантів, то у вас є незліченна кількість інформації, – відповів я.

Візьмімо двійкове число: 1001001 0110110 0100000 1110100 1101000 1100101 0100000 1100010 1100101 1100111 1101001 1101110 1101110 1101001 1101110 1101111, наприклад. За звичайною схемою кодування, відомою як ASCII3, кожній літері або машинописному символові відповідає семибітове кодове слово.

Це число, інтерпретоване в ASCII, відповідає символам I = 1001001, n = 1101110, (пробіл) = 0100000, t = 1110100, h = 1101000, e = 1100101, (пробіл) = 0100000, b = 1100010, e = 1100101, g = 1100111, i = 1101001, n = 1101110, n = 1101110, i = 1101001, n = 1101110, g = 1100111 – і виходить «In the beginning», тобто початок тексту: «Спочатку було слово…» Додаючи більше бітів, ви можете створити число, що відповідає всьому текстові Євангелія від Йоана. Додаючи ще більше, ви можете створити число всієї Біблії, потім – Корану, відтак – Сутри Лотоса, а далі – всіх книжок Бібліотеки Конгресу і так далі. Безмежна кількість варіантів відповідає безмежній кількості чисел, або бітів, іншими словами, безмежній кількості інформації.

Проте в реальності кількість варіантів у будь-якій скінченній системі є скінченною, тож кількість інформації також скінченна. Зазвичай нам на думку спадають такі величини, як довжина, висота й вага, що безперервно змінюються: оскільки існує безмежна кількість реальних чисел між 0 і 1, вочевидь, існує безмежне число можливих довжин між нулем і одним метром. Причина, чому безперервні величини, такі як довжина металевого стрижня, можуть передавати лише скінченну кількість інформації, полягає в тому, що ці кількості здебільшого визначені та обмежені до скінченного рівня точності. Щоб розгледіти взаємодію між точністю та інформацією, уявіть вимірювання довжини того стрижня за допомогою рейки. Рейка виготовлена з деревини. На ній позначено та пронумеровано сто сантиметрів. Є позначки тисячі міліметрів, по десять на кожний сантиметр, але щоб їх пронумерувати, місця вже не вистачило. Ви можете скористатися рейкою для вимірювання довжини стрижня з точністю до міліметра. Менші за міліметр величини рейка не вимірює добре з тієї простої причини, що її фізичні властивості дають їй обмежену роздільну здатність. Загальна кількість варіантів – 1000, що відповідає трьом цифрам точності, або приблизно десятьом бітам інформації.

Найвідоміший металевий стрижень – це той зроблений зі сплаву платини та іридію, що міститься в Міжнародному комітеті мір та ваг у Парижі, і саме він приблизно на століття визначив довжину метра (доти метр було визначено як одну десятимільйонну відстані від Північного полюса до екватора, виміряної вздовж Паризького меридіана). Якщо наша рейка виміряє цей стрижень, то вона визначить, що його довжина один метр плюс-мінус півміліметра.

Існує ще один вимірювальний пристрій, точніший за рейку, завдяки якому стануть доступними більше бітів інформації. Погляньте на стрижень під оптичним мікроскопом. Тепер можна вийти на порядок довжини хвилі видимої частини спектра світла – трохи менше за мікрон, що є мільйонною часткою метра. Мікроскоп можна використати для вимірювання довжини стрижня з точністю до мікрона. Він вимірює стрижень до шести цифр точності, що відповідає двадцятьом бітам інформації. Аналогічний ступінь точності може дати інтерферометр – пристрій, що вимірює довжину довжинами хвиль світла. Інтерферометр, який використовує світлову хвилю довжиною в один мікрон, виміряє стрижень як один мільйон довжин хвилі.

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

Вимірюючи такий макроскопічний об’єкт, як стрижень, складно досягти більшої точності. У певних випадках можливо виміряти відстань значно точніше, як, наприклад, в експериментах фізика Нормана Ремзі з вимірювання мікроскопічних розрядів розміром мільярдна частка мільярдної частки мільярдної частки метра в межах нейтрона. Загальна кількість значень, яку можна виміряти за допомогою пристрою, задана діапазоном величин (наприклад, метр), поділеним на одиницю найвищої точності, на яку здатний пристрій (наприклад, міліметр). Діапазон, розділений на точність, демонструє, скільки відмінних величин значень можна зареєструвати. Кількість доступної інформації задана кількістю бітів, що необхідні для підрахунку наявних величин. Пристрій, який бере тридцять три біти інформації (десять цифр) про якусь величину, і справді працює чудово.

Щоб отримати тридцять три біти інформації про довжину нашого стрижня, нам доведеться підрахувати цю довжину в атомах, тобто зазвичай необхідні героїчні зусилля, щоб вичавити кількадесят бітів про неперервну величину, як-от довжина стрижня. І навпаки, якщо ми використовуємо багато окремих чисел для передавання інформації, ми можемо швидко накопичити багато бітів. У квантовому комп’ютері кожен атом передає біт; щоб отримати тридцять три біти, потрібні тридцять три атоми. Наш стрижень містить приблизно мільярд мільярдів мільярдів атомів. Якщо кожен атом передає біт, то атоми в стрижні можуть передавати мільярд мільярдів мільярдів бітів – значно більше, ніж довжина стрижня передає сама по собі. У принципі, найкращий спосіб отримати інформацію – не підвищувати точність вимірювань на безперервній величині, а додавати все більшу кількість величин, кожна з яких містить лише кілька бітів. Це скупчення бітів (цифрова репрезентація) є ефективним, бо описане число загальних альтернатив зростає значно швидше, ніж кількість бітів.

Згадаймо короля в казці, що здуру погодився винагородити героя зернами пшениці: одну зернину поклали на перший квадрат шахівниці, дві зернини – на другий, чотири – на третій і так далі до двох у шістдесят четвертому степені (264) зернят для останнього квадрата. Наслідок: загальна кількість зернин – 10 мільярдів мільярдів. Якби кожна мала діаметр лише в міліметр, вони б заповнили майже сорок кубічних кілометрів. Як видно з прикладу, лише кілька бітів необхідні для конкретизації одного з дуже великої кількості варіантів. Щоб дати кожній зернині на шахівниці унікальний штрих-код, наприклад, потрібно лише шістдесят п’ять бітів, або шістдесят п’ять часточок інформації. Маючи лише 300 бітів, ви можете надати унікальний штрих-код кожній із 1090 елементарних частинок у Всесвіті. Астрономічно гігантське число можливих генетичних кодів є джерелом неймовірного розмаїття живих істот, але інформація, що продукує ці коди, може міститись у крихітній хромосомі.

Значення

– Але невже інформація не повинна щось означати? – стурбовано спитав один студент.

– Справді, коли ми думаємо про інформацію, то зазвичай асоціюємо її зі значенням, змістом, – відповів я. – Але значення «значення» не є зрозумілим.

Упродовж тисяч років філософи з різним успіхом намагалися встановити, що ж означає «значення». Причина того, чому так складно дати дефініцію, полягає в тому, що значення частки інформації великою мірою залежить від того, як інформація інтерпретується. Якщо ви не знаєте, як повідомлення має бути інтерпретоване, тоді ви не знаєте його значення. Наприклад, я вам кажу: «Так», – але ви не ставили питання. Тоді ви не знаєте, що я маю на увазі. Якщо ви спитаєте: «Можна мені ще один шматочок торта?», і я скажу: «Так», – тоді ви знаєте, що я маю на увазі. Якщо ви спитаєте: «Скільки буде два плюс два?», і я скажу: «Так», – тоді ви не знатимете, що я маю на увазі (хоча можете почати підозрювати, що в мене лише одна відповідь на будь-яке питання). Якщо ви спитаєте: «Скільки буде два плюс два?», і я скажу: «Чотири», – тоді ви знаєте, що я маю на увазі. Значення трохи подібне до порнографії: ви його знаєте, якщо побачите.

Розгляньмо комбінацію бітів, подану раніше: 1001001 1101110 0100000 1110100 1101000 1100101 0100000 1100010 1100101 1100111 1101001 1101110 1101110 1101001 1101110 1100111. Розтлумачена як повідомлення, зашифроване в ASCII, ця комбінація означає «спочатку». Але якщо взяти його окремо, без уточнення того, яким чином його тлумачити, це означає не що інше, як саме себе. Значення визначається лише відносно схеми інтерпретації, подібно до того, як розкривається в розмові між Алісою і Хитуном-Бовтуном:

– Я не знаю, що ти маєш на увазі під словом «слава», – мовила Аліса.

Хитун-Бовтун презирливо посміхнувся.

– Звісно, що не знаєш, – доки я тобі не скажу. Я мав на увазі «детальний аргумент, що збиває з пантелику!»

– Але «слава» не означає «детальний аргумент, що збиває з пантелику», – заперечила Аліса.

– Коли я вживаю слово, – відрізав Хитун-Бовтун доволі зневажливим тоном, – це означає лише те, що значення обираю я, – і ніяк не інакше.

– Питання в тому, – зазначила Аліса, – чи ти можеш зробити так, щоб слова мали стільки різних значень.

– Питання в тому, – заперечив Хитун-Бовтун, – хто над ким головний, – тільки і всього.

Льюїс Керролл, автор творів про пригоди Аліси, в реальності мав ім’я Чарльз Доджсон і був філософом-номіналістом. Доджсону був вельми до вподоби принцип, що слова мають те значення, яке він для них обирає.

Традиційним способом вираження залежності значення від тлумачення є використання принципу мовної гри Людвіґа Вітґенштайна. Це гра, у якій словам надано значення з погляду дій, до яких вони спонукають гравців. «Філософські дослідження» Людвіґа Вітґенштайна, наприклад, починаються з простої мовної гри. Будівельниця може попросити свого помічника принести їй блок, колону, панель або балку. Якщо вона каже «блок», її помічник подасть їй блок. Якщо вона скаже «панель», помічник принесе панель. У найпростішій із мовних ігор ми припускаємо, що помічник знає, що будівельниця має на увазі, і коли вона каже «блок», має на увазі «принеси мені блок».

Але мовні ігри ускладнюються, і значення стає дедалі складнішим – у цьому динаміка гри. Частково проблема в тому, що природна людська мова часто багатозначна: вислів може мати багато значень. А частково – в тому, що ми не повністю розуміємо, яким чином мозок реагує на мову, тож навіть якщо знаємо, що «блок» означає «принеси мені блок», нам невідомий фізичний механізм, за яким мозок слухача приходить до такого значення. Було б корисним мати приклад ситуації, у якій частка інформації може бути розтлумачена лише одним способом і в якій механізм реакції слухача є цілком зрозумілим.

Комп’ютери дають нам такий механізм. Вони реагують на комп’ютерні мови (Java, C, Fortran, BASIC). Такі мови складаються з простих команд, як-от ДРУКУВАТИ або ДОДАВАТИ, що можуть бути пов’язані між собою і давати інструкцію комп’ютерові на виконання складних завдань. Якщо ви приймаєте точку зору Вітґенштайна, що значення частки інформації виявляється в дії, яку провокує ця інформація, то значення комп’ютерної програми, написаної певною комп’ютерною мовою, виявляється в діях, які комп’ютер виконує в міру того, як він тлумачить ту програму. Усе, що робить комп’ютер, – це виконує послідовності елементарних логічних операцій, таких як І, НЕ, КОПІЮВАТИ (обговоримо їх пізніше). Комп’ютерна програма чітко інструктує комп’ютер на виконання особливої послідовності тих операцій. «Значення» комп’ютерної програми, відповідно, має універсальний характер у тому розумінні, що два комп’ютери, які дотримуються тих самих інструкцій, виконуватимуть ту саму серію операцій з обробки інформації та отримають той самий результат.

Чіткий характер комп’ютерної програми означає, що одне і тільки одне значення приписане кожному вислову. Якщо вислів у комп’ютерній мові має більш ніж одне тлумачення, результатом буде помилка в повідомленні: для комп’ютерів багатозначність – це хиба. Натомість людські мови сповнені багатозначності: за винятком особливих обставин, більшість висловів мають безліч потенційних значень, і це є ключовим аспектом у поезії, художній літературі та побутовій розмові. Багатозначність людської мови – це не хиба. Це бонус!

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

Так само як слова можуть репрезентувати ідеї та предмети, їх також репрезентують і біти. Слово і біт – це засоби, за допомогою яких передається інформація, а інтерпретатор має надати їм значення.

Комп’ютер

– Що таке комп’ютер? – запитав я у своєї групи.

Відповіді не було. Дивно, бо я був упевнений, що мої студенти користувалися комп’ютерами від самого народження.

Я чекав. Врешті хтось зголосився відповісти:

– Машина, що маніпулює даними, які зберігаються у вигляді 0 і 1.

Інший студент не погодився:

– Ти говориш про цифровий комп’ютер. А є ж аналогові. Вони зберігають інформацію в безперервних аналогових сигналах.

У результаті всі разом дали значно ширше визначення: комп’ютер – це машина, що обробляє інформацію.

– Добре, – сказав я, – тоді яким був перший комп’ютер?

Тепер клас пожвавився: «Марк 1», «механічний пристрій Беббіджа», «логарифмічна лінійка», «абак», «мозок», «ДНК»… Одна рука заворушила пальцями: «Цифри!»

Безперечно, якщо ви визначаєте комп’ютер як машину, що обробляє інформацію, то багато що здатне бути ним.

– Поки що, – сказав я, – просто погляньмо на машини, які люди створюють для обробки інформації, і залишмо питання про людей як машини, що обробляють інформацію, на потім.

Комп’ютери беруть свій початок від давньої епохи Homo sapiens – людини розумної. Подібно до перших інструментів, перші комп’ютери були кам’яними. Calculus – латинське слово, що означає «камінець», і перші калькуляції-підрахунки виконувалися шляхом розташування чи перерозташування саме камінців. І кам’яні комп’ютери не обов’язково були малими. Цілком можливо, що Стоунгендж був великим кам’яним комп’ютером для вираховування зв’язку між календарем і розташуванням планет.

Метод, що використовується в обчисленнях, накладає об’єктивні обмеження на обчислення, які можуть бути виконані (уявіть камінці проти Intel Pentium IV). Кам’яні комп’ютери підходять для додавання та віднімання, але гірше пристосовані для множення та ділення. А щоб давати раду великим числам, вам потрібно багато каміння. Кілька тисяч років тому комусь сяйнула геніальна думка поєднати каміння з деревом: якщо тримати камінці в заглибинах на дерев’яному столі, їх легше пересувати туди-сюди. Потім відкрили: якщо ви використовуєте замість камінців кісточки й нанизуєте їх на дерев’яні стрижні, кісточки складно пересувати туди й назад, але також важко загубити.

Дерев’яний комп’ютер, або абак, – це потужний пристрій для лічби. До винайдення електронних комп’ютерів кваліфікований користувач абака міг перевершити в лічбі досвідченого користувача арифмометра. Але абак – це не просто зручна машина для числових маніпуляцій. Він утілює могутню математичну абстракцію – нуль. Поняття нуля є невідʼємною частиною арабської числової системи – системи, що дає можливість легко подавати й комбінувати в довільному порядку великі числа, і абак є її механічним утіленням. Але що з’явилося першим? Беручи до уваги походження слова «зеро» та стародавність першого абака, ймовірно, що таки пристрій4. Іноді пристрої створюють ідеї.

І навпаки, ідеї також створюють пристрої. Спершу камінь, потім деревина: який матеріал забезпечить дальший прогрес в обробці інформації? Кістка. На початку XVII століття шотландський математик Джон Непер відкрив спосіб замінити множення додаванням. Він вирізав зі слонової кістки палички, зробив на них позначки відповідно до чисел, а потім виконував множення, рухаючи палички одну поряд з одною й зіставляючи позначки, що відповідають двом числам. Загальна довжина двох паличок давала добуток двох чисел. Так народилася логарифмічна лінійка.

На початку XIX століття один дивакуватий британець на ім’я Чарльз Беббідж запропонував створювати комп’ютери з металу. «Різницева машина» Беббіджа, призначенням якої було розраховувати численні тригонометричні та логарифмічні таблиці, повинна була мати в основі шестерні й вали, подібно до парової машини. Кожна шестерня передавала б інформацію своїм розташуванням, і машина обробляла б ту інформацію, поєднуючи шестерні та обертаючи їх. Хоча за своєю конструкцією машина Беббіджа була повністю механічною, її спосіб організовувати інформацію став передвісником способу структурування інформації сучасними електронними комп’ютерами. Її було створено з центральним блоком обробки даних та запам’ятовувальним пристроєм, що міг містити і програму, і дані.

Незважаючи на щедру фінансову підтримку від британської корони, план Беббіджа з конструювання різницевої машини зазнав краху. Технології початку ХІХ століття не давали ні достатньої точності методів обробки, ні достатньо твердих сплавів для конструювання шестерень та валів. (Спроба, проте, не минула даремно: розробка техніками Беббіджа більш точних методів обробки та твердіших сплавів значно прискорила промислову революцію, що тоді розгорталася.) Хоча дієві механічні калькулятори були доступні наприкінці ХІХ століття, великомасштабним робочим комп’ютерам довелось очікувати на технологію електронної схеми початку ХХ століття.

До 1940 року серед різноманітних груп виникло міжнародне змагання з побудови комп’ютерів із використанням електронних перемикачів, таких як електровакуумна трубка або електромеханічні реле. Перший простий електронний комп’ютер був сконструйований Конрадом Цузе в Німеччині у 1941 році, що, своєю чергою, підштовхнуло появу комп’ютерів у Сполучених Штатах Америки та Великій Британії пізніше в 1940-х роках. Вони мали розмір кількох кімнат з електровакуумними трубками, перемикальними схемами та блоками електропостачання, але за обчислювальною потужністю були слабкими – їхня потужність була в мільйони разів менша, ніж у комп’ютера, на якому зараз пишеться ця книжка.

Перші електронні комп’ютери хоч і коштували недешево, проте були достатньо широковживаними, тож були спроби вдосконалити їх. У 1960-х роках електровакуумні трубки та електромеханічні реле замінено на транзистори – напівпровідникові перемикальні схеми, що були меншими, надійнішими й потребували менше енергії. Напівпровідник – це матеріал, наприклад кремній, що проводить електроенергію краще, ніж непровідники, такі як скло або гума, але гірше за такий провідник, як мідь.

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

З 1960-х років досягнення у фотолітографії – науці проектування дедалі складніших схем – зменшували вдвічі розміри складників інтегральних схем приблизно кожних півтора року. У результаті потужність комп’ютерів подвоювалася з такою самою швидкістю – явище, відоме як закон Мура. У наші дні проводи в інтегральних схемах у пересічних комп’ютерах мають ширину лише 1000 атомів.

Дозвольте мені визначити для деяких видів комп’ютерів терміни, які я використовуватиму. Цифровий комп’ютер – це комп’ютер, що працює завдяки застосуванню логічних схем бітів; цифровий комп’ютер може бути електронним або механічним. Класичний комп’ютер – це комп’ютер, що обчислює завдяки використанню законів класичної механіки. Класичний цифровий комп’ютер – це той, що працює, виконуючи класичні логічні операції на класичних бітах. Електронний комп’ютер – це той, що обчислює, використовуючи електронні пристрої, такі як електровакуумні трубки або транзистори. Цифровий електронний комп’ютер – то цифровий комп’ютер, що працює в електронному режимі. Аналоговий комп’ютер – це той, що працює на тривалих сигналах на противагу бітам; його так назвали, бо зазвичай такий комп’ютер використовується для конструювання обчислювального «аналога» фізичної системи. Аналогові комп’ютери можуть бути електронними або механічними. Квантовий комп’ютер – це той, що працює, використовуючи закони квантової механіки. Квантові комп’ютери мають властивості як цифрові, так і аналогові.

Логічні схеми

Що ж роблять іще потужніші комп’ютери? Вони обробляють інформацію, розбиваючи її на біти й використовуючи ті біти по кілька за один раз. Як зазначено вище, інформація, що має бути оброблена, наявна в комп’ютері у формі програми – серії інструкцій комп’ютерною мовою. Програма закодована в пам’ять комп’ютера як послідовність бітів. Наприклад, команда ДРУКУВАТИ (PRINT) пишеться в коді ASCII як P = 1010000, R = 1010010, I = 1001001, N = 1001110, T = 1010100. Комп’ютер зчитує програму по кілька бітів за раз, інтерпретує біти як інструкцію і виконує її. Потім він дивиться наступні кілька бітів і виконує їхню інструкцію. І так далі. Складні процедури можуть бути побудовані з серій простих інструкцій, але це не межа.

Звичайні комп’ютери складаються переважно з електронних схем, що фізично втілюють логічні схеми. Логічні схеми забезпечують логічне вираження, побудоване на простих операціях, що мають справу з кількома бітами за один раз. З точки зору фізики, логічні схеми складаються з бітів, сполучень та елементів. Біти, як бачимо, можуть передавати або 0, або 1; сполучення переміщують біти з одного місця в інше; елементи трансформують один або два біти за один раз.


Наприклад, елемент НЕ бере вхідний біт і змінює його, тобто НЕ перетворює 0 на 1, а 1 – на 0. Елемент КОПІЮВАТИ робить копію біта: він перетворює вхідний біт 0 на два вихідні біти 00, а вхідний біт 1 – на два вихідні біти 11. Елемент І бере два вхідні біти й утворює один-єдиний вихідний біт, що дорівнює 1, якщо і тільки якщо обидва вхідні біти дорівнюють 1, інакше він утворить вихідний 0. Елемент АБО бере два вхідні біти й утворює вихідний біт, що дорівнює 1, якщо один або обидва біти дорівнюють 1; якщо обидва вхідні біти дорівнюють 0, тоді він утворює вихідний 0. Від часу, як логік Джордж Буль, викладач Королівського коледжу в місті Корк, опублікував своє «Дослідження законів думки» у 1854 році, ми знаємо, що будь-який логічний вираз, зокрема й складні математичні розрахунки, може ґрунтуватися на складниках НЕ, КОПІЮВАТИ, І й АБО. Вони складають універсальний набір логічних елементів.

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

В електронному комп’ютері біти реєструються такими електронними пристроями, як конденсатори. Конденсатор – це щось на кшталт відра, в якому містяться електрони. Щоб наповнити відро, до конденсатора підводять напругу. Конденсатор за нульової напруги не має зайвих електронів і вважається незарядженим. Незаряджений конденсатор у комп’ютері передає 0. Конденсатор за ненульової напруги містить певну кількість надлишкових електронів і передає 1.


Конденсатори – це не просто електронні пристрої, що використовуються комп’ютерами для зберігання інформації. На жорсткому диску вашого комп’ютера біти реєструються мікроскопічними магнітами; магніт, північний полюс якого напрямлений угору, означає 0, а той, чий північний полюс напрямлений униз, означає 1. Як завжди, будь-який пристрій, що має два визначальні стани, здатний передавати біт.

У звичайному цифровому електронному комп’ютері логічні схеми застосовуються в транзисторах. Транзистор може вважатися перемикачем. Коли перемикач відкритий, струм не може проходити по ньому. Коли ж перемикач закритий, струм проходить крізь нього. Транзистор має два входи та один вихід. У транзисторі n-типу, коли перший вхід утримується за низької напруги, перемикач увімкнений і струм не може проходити крізь другий вхід до виходу; підвищення напруги на першому вході дає можливість струмові проходити. У транзисторі p-типу, коли перший вхід утримується за низької напруги, перемикач вимкнено, тож струм може проходити з другого входу до виходу. Транзистори n- та p-типів можуть бути з’єднані разом для утворення елементів І, АБО, НЕ та КОПІЮВАТИ.

Коли комп’ютер обчислює, він просто застосовує логічні елементи до бітів. Комп’ютерні ігри, обробка слів, обробка великих обсягів числових даних та спаму – усе походить із електронної трансформації бітів, одного чи двох за раз.

Необчислюваність

До цього моменту ми робили акцент на глибинній простоті інформації та обчислення. Біт – це проста річ, комп’ютер – це проста машина. Але це не означає, що комп’ютери не здатні функціонувати у складному режимі. Парадоксальний результат операції комп’ютера – нібито в суті своїй логічної – полягає в тому, що його майбутня поведінка непередбачувана. Єдиний спосіб дізнатися, що робитиме комп’ютер, почавши обчислення, – чекати й дивитися, що відбувається.

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

Загальновідома проблема, чия відповідь є необчислюваною, – це так звана проблема зупинення. Запрограмуйте комп’ютер. Запустіть його в роботу. Чи комп’ютер коли-небудь зупиниться і дасть результат? Чи він працюватиме вічно? Загальноприйнятої процедури вирахування відповіді на це питання немає. Інакше кажучи, жодна комп’ютерна програма не може прийняти як вхідні дані іншу комп’ютерну програму та визначити зі 100-відсотковою ймовірністю, чи зупиняється перша комп’ютерна програма, чи ні.

Звісно, щодо багатьох програм ви можете сказати, чи зупиниться комп’ютер. Наприклад, програма «print 1 000 000 000»: комп’ютер, якому задано цю програму, друкує «1 000 000 000» і зупиняється. Але, як правило, хоч як довго комп’ютер робить обчислення без зупинки, ви не можете певно сказати, що він ніколи не зупиниться.

Хоча це може звучати затеоретизовано, проблема зупинення має багато практичних наслідків. Візьмімо, наприклад, усунення «баґів» комп’ютера. Більшість комп’ютерних програм містять дефекти, помилки, «баґи», через які комп’ютер поводиться неочікувано, наприклад, ламається. Було б корисно мати «універсальний усувач дефектів» для комп’ютерних програм. Такий усувач брав би як вхідні дані комп’ютерну програму разом з описом того, що програма повинна здійснити, і потім пересвідчувався б, що програма робить належне. Такий усувач неможливий.

Універсальний усувач повинен підтвердити, що його вхідна програма дає правильний результат. Тож перше, що універсальний усувач дефектів має перевірити, – чи ця вхідна програма має взагалі якийсь результат. Але щоб підтвердити, що програма дає результат, універсальний усувач дефектів повинен розв’язати проблему зупинення. Тобто те, чого він зробити не може. Єдиний спосіб визначити, чи програма зупиниться, – це запустити її й побачити, та в цей момент нам уже не потрібен універсальний усувач дефектів. Тож наступного разу, коли «баґ» змушує ваш комп’ютер зависати, ви можете знайти відраду в глибокій математичній істині: системного способу усунути всі дефекти не існує. Або ви можете просто вилаятись і перезавантажити.

Ґедель показав, що самопосилання призводить до парадоксів у логіці, а британський математик Алан Тьюрінг – що воно ж призводить до необчислюваності в комп’ютерах. З’являється спокуса побачити аналогічні парадокси в тому, як функціонують люди. Усе-таки люди є майстрами самопосилань (деякі, схоже, не здатні до інших форм посилань) і однозначно піддаються дії парадоксу.

Люди відомі своєю нездатністю передбачати власні майбутні дії. Це важлива особливість того, що ми називаємо свободою волі. «Свобода волі» означає нашу очевидну свободу вирішувати. Наприклад, коли я сідаю в ресторані й дивлюся в меню, я і тільки я вирішую, що замовлю; і до того, як я вирішу, навіть я не знаю, яким буде мій вибір. Іншими словами, наші власні майбутні вибори є загадкою для нас самих. (Вони можуть, звісно, не бути загадкою для інших. Упродовж років ми з дружиною ходили обідати в ресторан «Джозі» в Санта-Фе. Довго й ретельно досліджуючи меню, я завжди замовляю півтарілки фаршированого перцю релено, з червоним та зеленим перцем чилі й посоле замість рису. У мене було сильне відчуття того, що я практикував свободу волі: доки я не обирав півтарілки чилі релено, я відчував, що можливе будь-що. Проте моя дружина весь час точно знала, що я замовлю!)

Загадковий характер наших виборів, коли ми практикуємо свободу волі, – це близький аналог проблеми зупинення: ми сідаємо в поїзд нашої думки, він рушає, але нам невідомо, куди він нас привезе. Навіть якщо він нас привозить кудись, ми не знаємо куди, доки не прибудемо.

Іронія полягає в тому, що звичною справою є списати непередбачувану поведінку нас самих та інших людей на ірраціональність: якщо ми будемо поводитися раціонально, міркуємо ми, світ буде більш передбачуваним. Насправді ж лише тоді, коли ми поводимося раціонально й рухаємося логічно, як комп’ютер, крок за кроком, – наша поведінка стає доказово непередбачуваною. Раціональність поєднується з самопосиланням, щоб зробити наші дії парадоксальними й сумнівними.

Ця прекрасна загадковість чистого логічного міркування повертає нас до питання про роль логіки у Всесвіті. Розмірковуючи у своєму домі в Кордові про праці Аристотеля, ісламський філософ ХІІ століття Аверроес (Ібн-Рушд) дійшов висновку, що безсмертною в людях є не душа, а здатність до логічного міркування. Логічне міркування безсмертне саме тому, що воно не стосується конкретної особи – насправді воно є спільним надбанням усіх осіб.

Комп’ютери, безумовно, володіють здатністю до логічного міркування та самопосилання. І якраз тому, що вони мають ці здібності, їхні дії за своєю природою загадкові. Тож не дивно, що в міру того, як вони стають потужнішими та виконують різноманітніші завдання, комп’ютери виявляють непередбачуваність, таку, як у людей. Насправді, за Аверроесом, вони володіють безсмертям тією ж мірою, що й люди.

Програмування комп’ютерів на виконання простих людських завдань є важким: запрограмувати робота, щоб пропилососити кімнату або помити посуд, навіть із мінімальними вимогами до якості результату, – це проблема, над якою ламають голови кілька поколінь дослідників у галузі штучного інтелекту. Зате щоб запрограмувати комп’ютер на непередбачувану поведінку, яка нас роздратує, особливі зусилля не потрібні. З кожним днем комп’ютери стають дедалі більш схожими на людей, коли справа доходить до їхньої здатності все псувати5.

3

American Standard Code for Information Interchange – Американський стандартний код обміну інформацією. (Прим. перекл.)

4

У XVIII ст. до н. е. у вавилонян була вже усталена «арабська» числова система, але нуль був вилучений з контексту, його не писали (наприклад, 210 і 21 писали однаково). Найстаріша відома «прото-абакова» Саламінська лічильна табличка датована IV ст. до н. е. Використання 0 (нуля) було введене Птолемеєм у 130 р. н. е. і стало загальноприйнятим в Індії на середину VII ст. н. е. (Прим. авт.)

5

Як на наклейці на бампері: «Помилятися властиво людині. Та щоб усерйоз усе зіпсувати, потрібен комп’ютер». (Прим. авт.)

Програмуючи Всесвіт. Космос – квантовий комп’ютер

Подняться наверх