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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

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

2017-08-23 181
Квантовые схемы из классических функций 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.006 с.