Квантовые схемы из классических функций

Генерация квантовых схем из классического кода. Примечательной особенностью языка Quipper является его способность генерировать обратимые квантовые схемы на основе обычных функциональных программ. Это достигается при помощи использования ключевого слова build_circuit непосредственно перед определением классической функции. Это заставляет язык Quipper определить новую функцию, генерирующую квантовую схему, у которой то же самое наименование, что и у классической функции, но с префиксом template_, в которой любой параметр типа Bool заменён на параметр типа Qubit. Мы нашли это способность языка особенно полезной во время определения большого количества оракулов, которые используются в квантовых алгоритмах, поскольку чаще всего они имеют классическую природу, но должны быть применены к квантовому регистру. Например, мы использовали эту возможность для реализации квантовой библиотеки для арифметики с числами фиксированной точности. Следующий пример показывает полный сумматор одного бита. Квантовая функция с наименованием template_adder будет сгенерирована автоматически.

build_circuit

adder :: (Bool, Bool, Bool) -> (Bool, Bool)

adder (a, b, carry_in) = (s, carry_out)

Where

s = bool_xor (bool_xor a b) carry_in

carry_out = (a && b) || (a && carry_in) || (b && carry_in)

Вспомогательная функция unpack используется для развёртывания типа произвольной функции, генерирующей квантовую схему, которая была построена при помощи ключевого слова build_circuit. Она удаляет некоторые ненужные проявления оператора Circ.

adder_circ :: (Qubit, Qubit, Qubit) -> Circ (Qubit, Qubit) Квантовые схемы из классических функций - student2.ru

adder_circ = unpack template_adder

Ключевое слово build_circuit реализовано при помощи расширения языка Haskell, которое называется Template Haskell, которое предоставляет программам на этом языке доступ к их собственному синтаксическому дереву в проанализированной форме. Благодаря этой обобщённой способности именно произвольные функции на языке Haskell могут быть записаны с использованием ключевого слова build_circuit. Однако при этом разработчик должен снабжать квантовыми шаблонами все библиотечные функции, если только они не являются стандартными шаблонами, предопределёнными в языке Quipper.

Синтез обратимых квантовых схем. Квантовая схема, полученная на основе функции adder_circ, не является самодостаточной обратимой квантовой схемой, поскольку автоматическая генерация вводит вспомогательные кубиты, которые могут остаться в недетерминированном состоянии, возможно сцепленном с другими кубитами. Оператор языка Quipper classical_to_reversible преобразует квантовую схему Квантовые схемы из классических функций - student2.ru в обратимую схему Квантовые схемы из классических функций - student2.ru , в которой гарантируется, что все вспомогательные кубиты должным образом выведены из вычислений, при этом считается, что в функции f используются только обратимые примитивы.

adder_reversible :: ((Qubit, Qubit, Qubit), (Qubit, Qubit))

-> Circ ((Qubit, Qubit, Qubit), (Qubit, Qubit))

adder_reversible = classical_to_reversible adder_circ

Квантовые схемы из классических функций - student2.ru

Преобразования квантовых схем. Язык Quipper также предоставляет средства для преобразования квантовых схем «на лету» во время генерации схемы. Это позволяет выполнять такие преобразования, как декомпозиция гейтов или добавление некоторых типов кодов, исправляющих ошибки. В языке Quipper имеются некоторые предопределённые трансформаторы, равно как и расширяемый фреймворк для преобразователей, определяемых пользователем. В качестве примеров предоставляются такие преобразователи, как симуляторы и преобразователи квантовых схем с декомпозицией гейтов только в бинарные гейты или только в бинарные гейты с элементом Тоффоли. В следующем примере мы применяем к квантовой схеме сумматора преобразователь, которые декомпозирует все гейты в бинарные.

adder_circ_b :: (Qubit, Qubit, Qubit) -> Circ (Qubit, Qubit)

adder_circ_b = decompose_generic Binary adder_circ

Квантовые схемы из классических функций - student2.ru

Окончательные замечания

Наши рекомендации