Коньюгации
Сопряжения часто используются в квантовых вычислениях. В математическом контексте сопряжения — это шаблоны вида U†VU для двух унитарных преобразований U и V. Этот шаблон особенно важен из-за особенностей квантовой памяти — чтобы использовать уникальные квантовые ресурсы, в рамках вычислений создаются квантовые корреляции, то есть запутанность. Но это также означает, что, когда кубиты больше не требуются для подпрограммы, их нельзя легко сбросить и освободить, так как наблюдение за их состоянием повлияет на остальную часть системы. По этой причине перед освобождением и повторным использованием квантовой памяти необходимо отменить эффект предыдущего вычисления.
Q# поэтому имеет выделенную конструкцию для выражения вычислений, требующих такой очистки. Выражения состоят из двух блоков кода: один содержит реализацию U , а второй — реализацию V. Некомпьютерация (то есть применение U†) выполняется автоматически как часть выражения .
Выражение принимает форму
within {
<statements>
}
apply {
<statements>
}
где <statements>
заменяется любым количеством операторов, определяющих реализацию U и V соответственно.
Оба блока могут содержать произвольные классические вычисления, помимо обычных ограничений для автоматического создания сопряженных версий, применяемых к блоку within
. Переменные с изменяемой привязкой, которые используются как часть блока within
, нельзя переназначить как часть блока apply
.