Как будет выглядеть очень простая квантовая программа?

76

В свете анонса первого в мире программируемого квантово-фотонного чипа мне стало интересно, каким будет программное обеспечение для компьютера, использующего квантовую запутанность. Одна из первых программ, которые я когда-либо писал

for i = 1 to 10
  print i
next i

Кто-нибудь может привести пример кода сравнимой простоты, который бы использовал квантовые фотонные чипы (или подобное оборудование) на псевдокоде или языке высокого уровня? Мне трудно сделать концептуальный переход от традиционного программирования к запутыванию и т. Д.

xpda
источник
ваша ссылка не работает
Suresh Venkat
1
+1 и за этот вопрос. Мне очень любопытно узнать о языке программирования с другой парадигмой, чем у машин Тьюринга, однако мы далеко не можем фактически выполнить код на квантовом компьютере.
Янома

Ответы:

60

Предостережение 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, содержащая кубиты, и [...]ее классическая (сигнальная) память, содержащая логические значения.


  1. Danos et al. Исчисление измерений. arXiv (2007) vol. колич-фот
  2. Рауссендорф и Бригель. Односторонний квантовый компьютер. Physical Review Letters (2001) vol. 86 (22) с. 5188-5191
говяжий
источник
Отличное обсуждение темы, спасибо, Говядина. Кстати, ОП говорит о том, что «мне трудно сделать концептуальный переход от традиционного программирования к путанице и т. Д.» Итак, что-то, что помогает в этом переходе, должно приветствоваться.
Крис
Вы правы, я, кажется, на самом деле пропустил эту часть, к стыду: / Добавление абзаца.
Говядина
«Рассмотрим квантовый компьютер, который имеет только пять инструкций: N, E, M, X и Z». нет объяснения инструкции Z :(
Фернандо Гонсалес Санчес
Z очень похож на X;) en.wikipedia.org/wiki/Pauli_matrices Операция X превращает вектор [ab] в [ba], а операция Z превращает его в [a -b].
говядина
21

Я предполагаю, что libquantum C , квантовые монады Хаскелла или Quantum :: Entanglement в Perl - все верно представляют квантовые вычисления. Вы можете посмотреть на их примеры.

В общем, вы описываете квантовый алгоритм как классический алгоритм, который применяет ряд линейных операторов к суперпозиции, представляющей состояние вашей квантовой системы. Журнальные статьи часто изображают схему с линиями для квантовых битов / регистров и блоками для линейных операторов.

Конечно, сложная часть не описывает алгоритм, но понимает, почему он работает, точно так же, как вероятностные алгоритмы. Я всегда считал алгоритм Гровера вполне понятным. Вы также можете прочитать о квантовом преобразовании Фурье, используемом алгоритмом Шора .

Джефф Берджес
источник
11

Это выглядит так: введите описание изображения здесь

Вы тоже можете иметь доступ к настоящему квантовому процессору. Зайдите сюда и зарегистрируйтесь: http://www.research.ibm.com/quantum/

Он также включает в себя симулятор, так что вы можете тестировать без использования реального оборудования или использовать кредиты (бесплатно) для запуска на реальном оборудовании.

Роберт Лисецки
источник
3

Я думаю, что ответ «очень похоже на простую классическую программу».

Если мы считаем лямбда-исчисление простого типа (с продуктами) сердцем классического программирования, то мы можем использовать это как теорию внутреннего типа замкнутой декартовой категории, которая дает нам указатель.

nk

Итак, если STLC относится к декартовым замкнутым категориям, что означает замкнутые симметричные моноидальные категории? Хорошо, мы знаем, что внутренняя логика симметричной моноидальной категории - MILL . Итак, нам нужна теория типов, соответствующая MILL, - теория линейных типов.

Отойдя от абстрактной чепухи, что мы получим с линейной теорией типов? Линейность. Мы получаем линейность ресурсов. И это именно то, что мы хотим. Вам не разрешено клонировать квантовые биты. Вам не разрешено неявно измерять. А линейность означает, что вы не можете сделать ни одного из них во время сокращения.

Была некоторая работа над теориями линейного типа, но не тонна. В этой статье я получил некоторые идеи из этой статьи: « Физика, топология, логика и вычисления: камень Розетты», составленный Майком Стей и Джоном Баэсом, в котором содержится гораздо больше деталей, чем моего махания рукой.

Дариус Джахандари
источник
0

Я бы, вероятно, пошел с простой реализацией счетчика «делим на маленькие n» для начала.

Например: с учетом источника 10 ГГц сгенерируйте выход 5 ГГц (но эти числа являются произвольными и предназначены только для иллюстрации концепции).

Это позволяет нам игнорировать такие проблемы, как хранение и архитектура фон Неймана, и позволяет нам сосредоточиться на том, действительно ли компоненты делают что-то понятное.

Тогда следующей целью будет создание небольшого репертуара «small n» (но я также буду прислушиваться к отклику со стороны моих исследователей - если они чувствуют, что другие маленькие цели будут более плодотворными, я определенно хочу понять что они мне говорили.)

Долгосрочные цели будут включать механизмы для подачи информации в систему и из нее и удержания этой информации достаточно долго, чтобы использовать ее.

(Вероятно, стоит помнить, что все ранние компьютерные программы были «зашиты». Только после большого опыта работы с этими системами мы смогли реализовать хранимые программы.)

RDM
источник
-6

Я думаю, что программирование на квантовом компьютере должно рассматриваться с другой точки зрения, чем нормальное объектно-ориентированное программирование.

КК обладает той же способностью мозга мыслить и принимать решения. Способность мыслить означает способность извлекать данные из источника данных, который был бы возможным выбором, и решать, какой выбор выбрать из всех возможных состояний.

Программное обеспечение на этом этапе должно быть спроектировано таким образом, чтобы кубиты представляли собой источник данных, которые могут быть добыты и перепутаны с другими группами данных.

У QC должен быть data-miner, который обрабатывает чтение данных, связывая различные опции между различными группами источников данных, которые представляют информацию, считывая все возможные состояния и выбирая, какое из них продолжить.

Вот как работает наш мозг. КК способен понимать и действовать в соответствии с законом квантовой механики, это означает, что вы ставите задачу, а КК показывает вам все возможные решения для ее решения.

вот насколько мощным может быть КК, вы согласны?

https://www.cs.rutgers.edu/~mlittman/papers/openhouse11.pdf это точка, с которой нужно начать, затем создайте блок данных для построения квантового устройства с вентилями и т. д., считыватель, подключенный к блоку данных, для чтения и обеспечить обратную связь. данные о компонентах квантового источника данных и объем знаний о том, где действуют данные.

Алекс
источник