Автор: Олег Баклан
24 февраля 2007 г.
1 - С чего всё началось
К своему результату я пришёл неожиданно, и, когда начинал, не представлял, что приду к этому результату.
Всё началось с того, что однажды я прочитал эссе Пола Грэма на тему о том, каким будет язык программирования через 100 лет, и будут ли тогда люди вообще программировать. Я никогда не занимался программированием, а тем более - языками программирования, но мне понравились мысли Пола Грэма и их ход, и вопрос как-то сразу отложился в сознании. Однако, в силу того, что я действительно никогда не занимался ни программированием, ни языками программирования, в тот момент я ничего не собирался делать – просто прочитал интересное эссе умного человека, и всё.
Примерно через неделю я вдруг включился в вопрос, и стал целенаправленно работать над ним. Чуда не произошло, я не выучил за неделю программирование и не стал программистов, а тем более не стал разбираться в языках программирования. Однако вдруг мне подумалось, что ключ к новому языку программирования лежит в новом математическом понятии, которое (если его придумать) автоматически приведёт к нужному результату.
Мне подумалось, что если я такое понятие придумаю, то 99% работы будет сделано, а сам язык программирования на основе нового понятия придумать уже не составит труда. Кто-то (не имеет значения, кто будет этот человек или группа людей), узнав это понятие, очень быстро придумает и сам язык программирования.
2 - Ключ к решению
Если у вас есть ключ к решению, у вас есть решение. Ключ к созданию нового языка программирования, о котором поставил свой вопрос Пол Грэм, - это новое математическое понятие. Попробую пояснить.
Во-первых, любой язык программирования реализует некое, лежащее в его основе математическое понятие, и через 100 лет исключения из этого правила, скорее всего не будет, с тогдашним языком программирования также будет связано некоторое математическое понятие.
Во-вторых, прогресс и перемены шагают очень стремительно, а 100 лет – долгое время, поэтому там будет всё по-другому, очень не похоже на нашу нынешнюю действительность, и, скорее всего, за 100 лет очень сильно изменится математика, и требуемое для нового языка программирования скорее всего будет принадлежать будущей математике, не нынешней, а, значит, его сейчас ещё нет.
Но если ключ к решению – новое математическое понятие, которое появится в математике лишь через 100 лет, то можно ли его найти уже сейчас?
На мой взгляд, можно. Эта мысль – своего рода аналог мысли Пола Грэма, что уже сейчас можно создать язык программирования, который будет в ходу через 100 лет.
3 – Перспективный кандидат
Будущее туманно, но тенденции, которые ведут в него, более или менее ясны, покрывая большой кусок будущего, и позволяя угадать его заранее. Одна из тенденций – возрастание общего количества информации, которая обрабатывается на компьютерах, а значит рост их быстродействия. Классические компьютеры обладают ограничением скорости роста своего быстродействия, и, скорее всего, через 100 лет основной объем вычислений будет делаться не на классических, а на квантовых компьютерах, чей принцип работы отличается от классического компьютера.
Квантовый компьютер – это устройство, работающее по квантовым законам, а не классическим, а центральным квантовым законом является задание состояния как самого квантового компьютера в целом, так и его отдельных частей (например, ячеек памяти) с помощью волновой функции, значения которой являются комплексными числами. Если же комплексные числа – центральное математическое понятие, описывающее работу квантового компьютера и задающее ход его программирования, а, следовательно, влияющее на язык программирования, то, скорее всего, некое новое математическое понятие, как-то связанное с ними, есть то понятие, которое мы должны придумать, чтобы затем на его основе создать новый язык программирования.
Эта мысль буквально впрыгнула мне в голову, обратив моё внимание на комплексные числа, и заставив искать новое математическое понятие где-то рядом с ними.
4 - Требование простоты
Когда ищешь что-то на большой территории гипотез, то нужны какие-то ограничения, чтобы область поиска была сужена. На мой взгляд, таким ограничением является требование простоты.
До сих пор прогресс науки направлен в сторону более простых фундаментальных сущностей, чем те, которые используются в прошлом. Более простые аксиомы, понятия, идеи и принципы, чем те, что были раньше, размечают путь науки как вехи, и эта мысль направила моё внимание на что-то очень простое, и не просто «очень простое», а даже более простое, чем являются комплексные числа.
Итак, перспективный кандидат в новое математическое понятие должен быть чем-то, что лежит рядом с понятием комплексных чисел, и быть даже проще, чем они сами.
Что может лежать рядом с комплексными числами и быть проще, чем они: действительные числа?
Нет, конечно, иначе это не было бы новым математическим понятием. Но тогда что?
Ответ, возможно, состоит в том, чтобы придумать нечто, что выглядит точь-в-точь как действительные числа (и в силу этого является чем-то более простым, чем комплексные числа), но не является действительными числами в буквальном смысле, а является ещё одной разновидностью комплексных чисел, их обобщение.
5 - Конкретный вид нового понятия
Многосоставность – естественное свойство абсолютно всех чисел, так как нет такого числа, которое бы не являлось суммой некоторых других чисел. Но в случае одних чисел (например, в случае действительных чисел) от многосоставности можно отвлечься, в случае других нельзя отвлечься от многосоставности (например, в случае комплексных чисел), и с помощью заимствованных понятий из теории расплывчатых множеств гипотетически должны существовать некие промежуточные числа, от многосоставности которых и можно отвлечься, и нельзя.
Понятие об этом и есть то новое математическое понятие, с помощью которого можно попробовать придумать новый язык программирования. Его результатом является возможность сделать такие записи:
1, 3, 95 – вещественные числа: к(1) = 1, к(3) = 1, к(95) = 1, от многосоставности отвлечься можно
2+5i, 17+1i, 8+305i – комплексные числа: к(2+5i) = 0, к(17+1i) = 0, к(8+305i) = 0, от многосоставности отвлечься нельзя
восемь, сто пять, двадцать – те самые промежуточные числа, которые выглядят точь-в-точь как вещественные числа, но не являются ими, а есть ещё одна разновидность комплексных чисел: к(восемь) = 0.76, к(сто пять) = 0.00873, к(двадцать) = 0.8, от многосоставности отвлечься и можно, и нельзя одновременно.
В этом очерке я не буду излагать полное описание придуманных промежуточных чисел и операций с ними, скажу только, что если другой формой записи комплексных чисел является запись, например, {2, 5} вместо 2+5i, то другой формой записи придуманных промежуточных чисел является запись, например, {6.08, -1.92i} вместо восьми: к({6.08, -1.92i}) = 0.76
Перейду сразу к сути: к вопросу о вкладе придуманного понятия в возможность создать новый язык программирования.
Как это работает?
6 – Новый способ квантового кодирования
Идея, которую высказал Р.Фейман и с которой начались квантовые компьютеры, состоит в том, что вычисления квантовых процессов стоит делать с помощью квантовых же процессов. Сейчас уже существуют квантовые компьютеры первого поколения, которые эту идею реализуют. Но обратим внимание, что квантовая кодировка в таких компьютерах несёт отпечаток классичности, а именно: бит информации кодируется двумя разными состояниями. С помощью нового математического описания можно освободить воображение, и открыть новый способ квантового кодирования, когда для кодирования одного бита информации потребуется всего одно состояние.
Это кажется невероятным, но это возможно.
Фокус состоит в существовании особого квантового оператора, результатом которого является умножение волновой функции квантового состояния на промежуточную единицу. В зависимости от того, является ли промежуточная единица числом {1, -0i} (для этого числа к=1 … в полной записи к({1, -0i}) = 1) или числом {0, -1i} (для этого числа к=0 … в полной записи к({0, -1i}) = 0) , результат умножения можно соотносить либо со значением 1, либо со значением 0 квантового кодирования. Заметим, что в обоих случаях результат умножения один и тот же.
Это фантастика, которая, тем не менее, является реальностью.
Разберём на конкретном примере.
Сделаем вычисление (a, b - вещественные числа):
{1, -0i}*{a, b} = {1*a - (-0i)b, 1*b + a*(-0i)} = {a, b}
{0, -1i}*{a, b} = {0*a - (-1i)*b, 0*b + a*(-1i)} = i*{b, - a}
Можно показать, что {a, b} = i*{b, -a}.
{a, b} = a+ bi
i*{b, -a} = i*(b + (-a)*i) = bi + a
a+ bi = bi + a
Здесь всё верно, не так ли?
В моей теории, такое вычисление происходит, когда волновая функция {a, b} подвергается действию квантового оператора ЕДИНИЦА, сообщающего квантовому состоянию с такой волновой функцией кодирующее значение 1 в первом случае (когда ЕДИНИЦА равна {1, -0i}), и кодирующее значение 0 во втором случае (когда ЕДИНИЦА равна {0, -1i}).
Правило такое: если волновую функцию можно записать в виде a+ bi , то квантовое состояние соответствует кодирующей записи 1, а если волновую функцию можно записать в виде bi + a, то квантовое состояние соответствует кодирующей записи 0.
Кодирование связано с местом a и bi в a+ bi и bi + a.
С точки зрения физики гипотетически в таком кодировании есть смысл.
Кодирование бита одним квантовым состоянием, а не на двумя!
Какая красивая идея.
Пусть {a, b} - значение волновой функции квантового состояния. Всё что нужно - знать играет ли содержательную физическую роль математическое место а и bi в их математической сумме типа а + bi.
7 – Новый класс квантовых вычислений
В завершение очерка изложу идею, что новый способ квантового кодирования открывает дверь новому классу квантовых вычислений, которые принципиально нельзя сделать при помощи существующего сейчас квантового кодирования.
Основным его отличием от существующих квантовых вычислений, а тем более от классических вычислений является то, что с его помощью можно будет делать вычисления неограниченного объёма. Таким образом, через 100 лет язык программирования будет позволять такие (неограниченные!) вычисления делать.
Фокус тут состоит, во-первых, в том, что если классическое или обычное квантовое кодирование позволяет вводить в классический компьютер или в обычный квантовый компьютер лишь саму по себе информацию, то новое квантовое кодирование позволяет вводить в компьютер наряду с информацией также так называемую «информацию об информации», во-вторых, в том, что оба процесса (1. ввод самой по себе информации; 2. ввод информации вместе с «информацией об информации») подчиняются разным законам роста их объёмов в вычислительных системах. В данном очерке я не буду касаться всего этого, просто скажу, что мы стоим на пороге чего-то неописуемого, что выглядит фантастикой даже с точки зрения самой фантастики, но тем не менее является реальной возможностью.