Compartir a través de


Operación de cambio de etiqueta

Nombre completo: Std.Canon.Relabel

operation Relabel(current : Qubit[], updated : Qubit[]) : Unit is Adj

Resumen

Vuelve a etiquetar los cúbits de la matriz current con los cúbits de la matriz updated. La matriz updated debe ser una permutación válida de la matriz current.

Entrada

actual

Matriz de cúbits que se van a etiquetar.

Actualizado

Matriz de cúbits con la que se va a cambiar la etiqueta de la matriz current.

Observaciones

Esta operación es útil cuando necesita volver a etiquetar cúbits de una manera que no incurre en ninguna operación cuántica. Tenga en cuenta que, al compilar para su ejecución en hardware con conectividad de cúbit limitada, es posible que esta operación no produzca ningún cambio en la adyacencia de cúbits y todavía se necesiten una o varias puertas de SWAP.

Ejemplo

En el ejemplo siguiente se muestra cómo volver a etiquetar cúbits en un registro:

use qubits = Qubit[3];
let newOrder = [qubits[2], qubits[0], qubits[1]];
Relabel(qubits, newOrder);

Después de esta operación, cualquier uso de qubits[0] hará referencia al cúbit que originalmente se qubits[2], etc. Para intercambiar las etiquetas en dos cúbits, el equivalente virtual de una puerta de SWAP, puede usar el código siguiente:

use (q0, q1) = (Qubit(), Qubit());
Relabel([q0, q1], [q1, q0]);

Tenga en cuenta que el adyacente de esta operación cambia eficazmente el orden de los argumentos, de modo que Adjoint Relabel(qubits, newOrder) es equivalente a Relabel(newOrder, qubits).