Udostępnij przez


Operacja ponownego etykietowania

W pełni kwalifikowana nazwa: Std.Canon.Relabel

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

Streszczenie

Zwija kubity w tablicy current z kubitami w tablicy updated. Tablica updated musi być prawidłową permutacją tablicy current.

Wkład

aktualny

Tablica kubitów do ponownego etykietowania.

aktualizowano

Tablica kubitów, z którymi należy ponownie opracować tablicę current.

Uwagi

Ta operacja jest przydatna, gdy konieczne jest ponowne oznaczenie kubitów w sposób, który nie powoduje żadnych operacji kwantowych. Należy pamiętać, że podczas kompilowania na potrzeby wykonywania na sprzęcie z ograniczoną łącznością kubitową ta operacja może nie spowodować żadnych zmian w sąsiedztwie kubitów i może być nadal wymagana co najmniej jedna brama SWAP.

Przykład

W poniższym przykładzie pokazano, jak ponownie obelować kubity w rejestrze:

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

Po wykonaniu tej operacji każde użycie qubits[0] będzie odnosić się do kubitu, który pierwotnie qubits[2]itd. Aby wymienić etykiety na dwóch kubitach, wirtualny odpowiednik bramy SWAP, można użyć następującego kodu:

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

Należy pamiętać, że przyleganie tej operacji skutecznie zmienia kolejność argumentów, tak aby Adjoint Relabel(qubits, newOrder) był odpowiednikiem Relabel(newOrder, qubits).