Квантовые схемы из классических функций — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

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

2017-08-23 182
Квантовые схемы из классических функций 0.00 из 5.00 0 оценок
Заказать работу

Генерация квантовых схем из классического кода. Примечательной особенностью языка 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)

adder_circ = unpack template_adder

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

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

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

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

adder_reversible = classical_to_reversible adder_circ

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

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

adder_circ_b = decompose_generic Binary adder_circ

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


Поделиться с друзьями:

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

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.