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


Коньюгации

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

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

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

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

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