Kontrolowanie propagacji błędów
Obliczenia kwantowe odporne na błędy przypominają wyścig między błędami a ich korekcją. Jeśli liczba błędów jest wystarczająco mała, korekcja błędów skutecznie je poprawi; jeśli jednak błędów jest zbyt wiele, korekcja zawiedzie.
Z tego powodu należy zachować szczególną ostrożność co do sposobu, w jaki wykonuje się obliczenia kwantowe w implementacjach układów odpornych na błędy, aby kontrolować propagację błędów. Błąd na jednym qubicie może bowiem potencjalnie rozprzestrzenić się na wiele qubitów wskutek działania gate'ów w układzie kwantowym, co może dramatycznie zwiększyć liczbę błędów. To kwestia pierwszorzędnej wagi — jeśli nie uda nam się kontrolować propagacji błędów, nasze wysiłki korekcyjne szybko zostaną przytłoczone przez błędy. Jeśli natomiast uda się utrzymać propagację błędów pod kontrolą, korekcja błędów ma realną szansę nadążyć, umożliwiając poprawianie błędów z wystarczająco wysoką częstotliwością, by obliczenia kwantowe działały zgodnie z zamierzeniem.
Punktem wyjścia do technicznej dyskusji na ten temat jest spostrzeżenie, że gate'y dwu-qubitowe (lub ogólniej: gate'y wieloqubitowe) mogą propagować błędy, nawet gdy działają bezbłędnie. Rozważmy na przykład gate CNOT i załóżmy, że tuż przed jego wykonaniem na qubicie kontrolnym pojawia się błąd . Jak zaobserwowaliśmy już w lekcji „Korekcja błędów kwantowych", jest to równoważne temu, że błąd pojawia się na obu qubitach po wykonaniu CNOT. Analogicznie sytuacja wygląda w przypadku błędu działającego na qubit docelowy zamiast kontrolny przed wykonaniem gate'u CNOT.
Jest to propagacja błędów, gdyż niefortunne położenie błędu lub przed gate'em CNOT skutecznie zamienia go w dwa błędy po wykonaniu CNOT. Dzieje się tak nawet wtedy, gdy gate CNOT jest idealny — nie możemy też zapomnieć, że dany gate CNOT może sam być zaszumiony, co może tworzyć skorelowane błędy na dwóch qubitach.
Naszą obawę potęguje fakt, że kolejne gate'y dwu-qubitowe mogą propagować te błędy jeszcze dalej, co sugeruje poniższy rysunek.
W pewnym sensie nigdy nie możemy tego uniknąć — dopóki używamy gate'ów wieloqubitowych, propagacja błędów będzie możliwa. Jednak, jak omówimy w kolejnych podrozdziałach, można podjąć kroki ograniczające wyrządzone szkody, co pozwala zarządzać propagowanymi błędami.
Transversal gate implementations
Najprostszym znanym sposobem ograniczenia propagacji błędów w układach kwantowych odpornych na błędy jest implementowanie gate'ów transversally, czyli budowanie dla nich gadżetów o pewnej prostej formie. Gadżety muszą być iloczynem tensorowym operacji (innymi słowy: układem kwantowym o głębokości jeden), gdzie każda operacja może działać jedynie na jednej pozycji qubitu w każdym bloku kodu, którego dotyka. Najłatwiej wyjaśnić to na przykładach.
Examples of transversal gate implementations
Rozważmy poniższy rysunek sugerujący transversal implementację gate'u CNOT. (Ta konkretna implementacja, w której CNOT-y wykonywane są qubit po qubicie, działa tylko dla CSS codes — lecz działa w istocie dla wszystkich CSS codes.)
Na rysunku widoczne są dwa bloki kodu, każdy złożony z pięciu qubitów (choć może ich być więcej, co już wcześniej sugerowano). Układ po prawej stronie ma głębokość jeden, a każdy z gate'ów CNOT działa na jednej pozycji qubitu w każdym bloku: zarówno qubit kontrolny, jak i docelowy pierwszego CNOT to najbardziej górny qubit (tj. qubit 0 według konwencji numerowania Qiskit), zarówno qubit kontrolny, jak i docelowy drugiego CNOT to qubit drugi od góry (tj. qubit 1) i tak dalej. Jest to zatem transversal gadżet.
Jako drugi przykład — a właściwie klasę przykładów — rozważmy dowolny Pauli gate. Pauli gates zawsze można implementować transversally dla dowolnego Stabilizer code, budując gadżety złożone z operacji Pauli. W szczególności każdą operację Pauli na logical qubicie zakodowanym przez Stabilizer code można implementować transversally, wybierając odpowiednią operację Pauli na fizycznych qubitach użytych do kodowania. Jest to zgodne z faktem wspomnianym mimochodem w lekcji „Formalizm Stabilizer": z dokładnością do globalnej fazy operacje Pauli komutujące z każdym generatorem Stabilizer danego Stabilizer code działają jak operacje Pauli na qubicie lub qubitach zakodowanych przez ten kod.
Jako konkretny przykład rozważmy 9-qubitowy kod Shora, dla którego stany bazy standardowej można zakodować następująco.
Gate na logical qubicie zakodowanym przez ten kod można implementować transversally za pomocą 9-qubitowej operacji Pauli
natomiast gate na logical qubicie można implementować transversally za pomocą 9-qubitowej operacji Pauli
Obie te operacje Pauli mają wagę co jest minimalną wymaganą wagą. (9-qubitowy kod Shora ma odległość więc każda nieidentycznościowa operacja Pauli o wadze lub mniejszej jest wykrywana jako błąd.)
I jako trzeci przykład: 7-qubitowy kod Steane'a (a w istocie każdy color code) umożliwia transversal implementację wszystkich Clifford gates. Widzieliśmy już, jak CNOT gates są implementowane transversally dla dowolnego CSS code — pozostaje zatem rozważyć gate'y i . Hadamard gate zastosowany do wszystkich qubitów kodu Steane'a jest równoważny zastosowaniu do logical qubitu, który koduje; natomiast gate (w odróżnieniu od gate'u ) zastosowany do wszystkich qubitów jest równoważny logicznemu gate'owi .
Error propagation for transversal gadgets
Teraz, gdy wiemy, czym są transversal implementacje gate'ów, omówmy ich związek z propagacją błędów.
W przypadku transversal implementacji gate'u jednobitowego mamy w gadżecie po prostu iloczyn tensorowy gate'ów jednobitowych, działający na blok fizycznych qubitów wybranego kwantowego kodu korekcji błędów. Choć każdy z tych gate'ów może zawieść i wprowadzić błąd, nie będzie propagacji błędów, ponieważ nie są zaangażowane gate'y wieloqubitowe. Bezpośrednio po zastosowaniu gadżetu wykonywana jest korekcja błędów — jeśli liczba błędów wprowadzonych przez gadżet (lub podczas jego wykonywania) jest wystarczająco mała, błędy zostaną skorygowane. Jeśli więc częstość błędów wprowadzanych przez wadliwe gate'y jest wystarczająco mała, korekcja błędów ma duże szanse powodzenia.
W przypadku transversal implementacji gate'u dwu-qubitowego istnieje natomiast potencjał propagacji błędów — nie ma możliwości, by tego uniknąć, jak już wcześniej zaobserwowaliśmy. Zasadnicza kwestia jest jednak taka, że transversal gadżet nigdy nie może spowodować propagacji błędów wewnątrz pojedynczego bloku kodu.
Rozważmy na przykład opisaną powyżej transversal implementację gate'u CNOT dla CSS code: błąd może pojawić się na górnym qubicie górnego bloku kodu tuż przed wykonaniem gadżetu, a pierwszy CNOT wewnątrz gadżetu propaguje ten błąd do górnego qubitu w dolnym bloku. Jednak dwa powstałe błędy znajdują się teraz w osobnych blokach kodu. Zakładając zatem, że nasz kod potrafi skorygować błąd , kroki korekcji błędów wykonywane po gadżecie skorygują dwa błędy niezależnie — ponieważ w każdym bloku kodu występuje tylko jeden błąd. Gdyby natomiast propagacja błędów zachodziła wewnątrz tego samego bloku kodu, mogłaby zamienić błąd o małej wadze w błąd o dużej wadze, którego kod nie może obsłużyć.