Предостережение Emptor: на мои собственные исследования и взгляды в области КК сильно влияют Это не составляет общего консенсуса в данной области и может даже содержать некоторую саморекламу.
Проблема показа «привет мира» квантовых вычислений состоит в том, что мы в основном все еще далеки от квантовых компьютеров, как Лейбниц или Бэббидж были от вашего нынешнего компьютера. Хотя мы знаем, как они должны работать теоретически, не существует стандартного способа создания физического квантового компьютера. Побочным эффектом этого является то, что не существует единой модели программирования квантовых вычислений. Учебники, такие как Nielsen et al. покажет вам диаграмму «квантового контура», но она далека от формальных языков программирования: они немного «махают рукой» по таким деталям, как классическое управление или работа с результатами ввода / вывода / измерения.
Что мне больше всего понравилось в моих исследованиях в качестве программиста на языке программирования и для того, чтобы донести вопрос о контроле качества до другого ученого-программиста, так это использовать простейшую модель контроля качества, с которой я столкнулся, которая выполняет все.
Самая простая программа квантовых вычислений, которую я видел, которая содержит все существенные элементы, - это небольшая программа из трех команд в самой простой модели квантового программирования, с которой я столкнулся. Я использую это, как вы бы «Привет мир», чтобы донести основы.
Позвольте мне дать краткое упрощенное изложение исчисления измерений Danos et al. 1 основан на одностороннем квантовом компьютере 2 : кубит уничтожается при измерении, но измерение влияет на все другие кубиты, которые были запутаны в нем. Он имеет некоторые теоретические и практические преимущества перед квантовыми компьютерами на основе схем, реализованными фотонным чипом, но это другое обсуждение.
Рассмотрим квантовый компьютер, который имеет только пять инструкций: N, E, M, X и Z. Его «язык ассемблера» похож на ваш обычный компьютер, после выполнения одной инструкции он переходит к следующей инструкции в последовательности. Каждая инструкция принимает целевой идентификатор кубита, мы используем здесь только число и другие аргументы.
N 2 # create a new quantum bit and identify it as '2'
E 1 2 # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0 # measure qubit '1' with an angle of zero (angle can be anything in [0,2pi]
# qubit '1' is destroyed and the result is either True or False
# operations beyond this point can be dependent on the signal of '1'
X 2 1 # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'
Таким образом, вышеприведенная программа создает вспомогательную систему, связывает ее с входным кубитом, измеряет входную информацию и в зависимости от результата измерения выполняет операцию над вспомогательной программой. В результате кубит 2 теперь содержит состояние кубита 1 после операции Адамара .
Выше, естественно, на таком низком уровне, что вы не захотите его кодировать вручную. Преимущество исчисления измерений состоит в том, что оно вводит «шаблоны», своего рода составные макросы, которые позволяют вам составлять более крупные алгоритмы, как если бы вы использовали подпрограммы. Вы начинаете с шаблонов с 1 инструкцией и увеличиваете оттуда шаблоны большего размера.
Вместо последовательности команд, подобной ассемблеру, также обычно записывают программу в виде графа:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
где полные стрелки - зависимости кубита, а пунктирная стрелка - зависимость сигнала.
Ниже приведен тот же пример Адамара, выраженный в небольшом инструменте программирования, который я себе представлял бы «квантовый программист».
edit: (добавляя связь с «классическими» компьютерами) Классические компьютеры по-прежнему действительно эффективны в том, что они делают лучше всего, и поэтому видение состоит в том, что квантовые компьютеры будут использоваться для разгрузки определенных алгоритмов, аналогично тому, как нынешний компьютер выгружает графику в GPU. Как вы видели выше, процессор будет управлять квантовым компьютером, посылая ему поток команд и считывая результаты измерений из логических «сигналов». Таким образом, вы получаете строгое разделение классического управления процессором и квантовым состоянием и влиянием на квантовый компьютер.
Например, я собираюсь использовать свой квантовый сопроцессор для вычисления случайного логического значения или монеты. Классические компьютеры являются детерминированными, поэтому плохо возвращать хорошее случайное число. Хотя квантовые компьютеры по своей природе вероятностны, все, что мне нужно сделать, чтобы получить случайные 0 или 1, это измерить одинаково сбалансированный кубит. Связь между процессором и QPU будет выглядеть примерно так:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
Где { ... }
квантовая память QPU, содержащая кубиты, и [...]
ее классическая (сигнальная) память, содержащая логические значения.
- Danos et al. Исчисление измерений. arXiv (2007) vol. колич-фот
- Рауссендорф и Бригель. Односторонний квантовый компьютер. Physical Review Letters (2001) vol. 86 (22) с. 5188-5191