Поделиться через


Коньюгации

Конъюгации распространены в квантовых вычислениях. В математических терминах они представляют собой шаблоны формы U†VU для двух унитарных преобразований U и V. Этот шаблон имеет значение из-за особенностей квантовой памяти: вычисления создают квантовые корреляции или запутанности, чтобы использовать уникальные ресурсы квантовых вычислений. Однако это также означает, что после того, как subroutine больше не нуждается в его кубитах, эти кубиты не могут быть легко сброшены и освобождены, так как наблюдение за их состоянием повлияет на остальную часть системы. По этой причине эффект предыдущего вычисления обычно необходимо отменить перед освобождением и повторной обработкой квантовой памяти.

Q# поэтому имеет выделенную конструкцию для выражения вычислений, требующих такой очистки. Выражения состоят из двух блоков кода, которые содержат реализацию U и одну, содержащую реализацию V. некомпьютации (т. е. приложение U†) выполняется автоматически в рамках выражения.

Выражение принимает форму

within {
    <statements>
}
apply {
    <statements>
}

где <statements> заменяется любым количеством инструкций, определяющих реализацию U и V соответственно. Оба блока могут содержать произвольные классические вычисления, помимо обычных ограничений для автоматического создания локальных версий, которые применяются к блоку within. Изменяемые привязанные переменные, используемые в составе блока within, не могут быть переназначированы как часть блока apply.