Operação de reetiquetagem
Nome totalmente qualificado: Std.Canon.Relabel
operation Relabel(current : Qubit[], updated : Qubit[]) : Unit is Adj
Resumo
Rerotula 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 remarcados.
atualizado
Matriz de qubits com a qual rerotular a matriz current
.
Comentários
Essa operação é útil quando você precisa rerotular qubits de uma forma que não incorra 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 de qubit e uma ou mais portas de SWAP
ainda podem ser necessárias.
Exemplo
O exemplo a seguir demonstra como rerotular 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]
se referirá ao qubit que foi originalmente qubits[2]
e assim por diante.
Para trocar as etiquetas em dois qubits, o equivalente virtual de um portão de SWAP
, você pode usar o seguinte código:
use (q0, q1) = (Qubit(), Qubit());
Relabel([q0, q1], [q1, q0]);
Note-se que o adjunto desta operação altera efetivamente a ordem dos argumentos, de modo que Adjoint Relabel(qubits, newOrder)
é equivalente a Relabel(newOrder, qubits)
.