Операция переназначаемой метки
Полное имя: Std.Canon.Relabel
operation Relabel(current : Qubit[], updated : Qubit[]) : Unit is Adj
Сводка
Переназначает кубиты в массиве current
с кубитами в массиве updated
. Массив updated
должен быть допустимым перемещением массива current
.
Ввод
текущий
Массив кубитов для переназначения.
Обновлено
Массив кубитов, с помощью которых необходимо переназначить массив current
.
Замечания
Эта операция полезна, если необходимо переназначить кубиты таким образом, что не вызывает никаких квантовых операций.
Обратите внимание, что при компиляции для выполнения на оборудовании с ограниченным подключением к кубитам эта операция может не привести к каким-либо изменениям в зависимостях кубитов, а один или несколько SWAP
шлюзов по-прежнему требуются.
Пример
В следующем примере показано, как переназначить кубиты в регистре:
use qubits = Qubit[3];
let newOrder = [qubits[2], qubits[0], qubits[1]];
Relabel(qubits, newOrder);
После этой операции любое использование qubits[0]
будет ссылаться на кубит, который был первоначально qubits[2]
, и т. д.
Для обмена метками на двух кубитах виртуальный эквивалент шлюза SWAP
можно использовать следующий код:
use (q0, q1) = (Qubit(), Qubit());
Relabel([q0, q1], [q1, q0]);
Обратите внимание, что привязывание этой операции фактически изменяет порядок аргументов, таким образом, что Adjoint Relabel(qubits, newOrder)
эквивалентен Relabel(newOrder, qubits)
.