Operação de relançar
Nome totalmente qualificado: Std.Canon.Relabel
operation Relabel(current : Qubit[], updated : Qubit[]) : Unit is Adj
Resumo
Relança os qubits na matriz current
com os qubits na matriz updated
. A matriz updated
deve ser uma permutação válida da matriz current
.
Entrada
atual
Matriz de qubits a serem rotulados novamente.
atualizado
Matriz de qubits com os quais relançar a matriz de current
.
Observações
Essa operação é útil quando você precisa relançar qubits de uma maneira que não incorre em nenhuma operação quântica.
Observe que, ao compilar para execução em hardware com conectividade de qubit limitada, essa operação pode não resultar em alterações na adjacência do qubit e uma ou mais SWAP
portões ainda podem ser necessárias.
Exemplo
O exemplo a seguir demonstra como relançar qubits em um registro:
use qubits = Qubit[3];
let newOrder = [qubits[2], qubits[0], qubits[1]];
Relabel(qubits, newOrder);
Após essa operação, qualquer uso de qubits[0]
fará referência ao qubit que foi originalmente qubits[2]
e assim por diante.
Para trocar os rótulos em dois qubits, o equivalente virtual de uma porta de SWAP
, você pode usar o seguinte código:
use (q0, q1) = (Qubit(), Qubit());
Relabel([q0, q1], [q1, q0]);
Observe que o adjacente dessa operação altera efetivamente a ordem dos argumentos, de modo que Adjoint Relabel(qubits, newOrder)
é equivalente a Relabel(newOrder, qubits)
.