Kody stabilizatorowe
Teraz zdefiniujemy kody stabilizatorowe w sposób ogólny. Omówimy również niektóre z ich podstawowych własności oraz sposób ich działania, w tym sposób kodowania stanów oraz wykrywania i korekcji błędów za pomocą tych kodów.
Definicja kodów stabilizatorowych
-kubitowy kod stabilizatorowy jest określony przez listę operacji Pauliego na kubitach, Operacje te nazywane są w tym kontekście generatorami stabilizatora i muszą spełniać następujące trzy warunki.
-
Wszystkie generatory stabilizatora komutują ze sobą nawzajem.
-
Generatory stabilizatora tworzą minimalny zbiór generujący.
-
Co najmniej jeden wektor stanu kwantowego jest ustalony przez wszystkie generatory stabilizatora.
(Nie jest oczywiste, że istnienie wektora stanu kwantowego ustalonego przez wszystkie generatory stabilizatora, czyli takiego, że jest równoważne warunkowi ale w istocie tak jest, a zobaczymy dlaczego nieco później w tej lekcji.)
Zakładając, że mamy taką listę przestrzeń kodowa zdefiniowana przez te generatory stabilizatora to podprzestrzeń zawierająca każdy -kubitowy wektor stanu kwantowego ustalony przez wszystkie tych generatorów stabilizatora.
Wektory stanu kwantowego w tej podprzestrzeni to dokładnie te, które można uznać za poprawne kodowania stanów kwantowych. Omówimy sam proces kodowania później.
Wreszcie, stabilizator kodu zdefiniowanego przez generatory stabilizatora to zbiór generowany przez te operacje:
Naturalnym sposobem myślenia o kodzie stabilizatorowym jest postrzeganie generatorów stabilizatora jako obserwabli i łączne interpretowanie wyników pomiarów związanych z tymi obserwablami jako syndromu błędu. Poprawne kodowania to -kubitowe wektory stanu kwantowego, dla których wyniki pomiarów, jako wartości własne, są wszystkie z pewnością równe Dowolny inny syndrome, w którym wystąpi co najmniej jeden wynik pomiaru , sygnalizuje wykrycie błędu.
Wkrótce przyjrzymy się kilku przykładom, ale najpierw kilka uwag na temat trzech warunków dotyczących generatorów stabilizatora jest na miejscu.
Pierwszy warunek jest naturalny w świetle interpretacji generatorów stabilizatora jako obserwabli, ponieważ oznacza, że nie ma znaczenia, w jakiej kolejności wykonywane są pomiary: obserwable komutują, więc pomiary komutują. Naturalnie nakłada to pewne ograniczenia algebraiczne na kody stabilizatorowe, które są istotne dla sposobu ich działania.
Drugi warunek wymaga, aby generatory stabilizatora tworzyły minimalny zbiór generujący, co oznacza, że usunięcie któregokolwiek z nich skutkowałoby mniejszym stabilizatorem. Ściśle rzecz biorąc, warunek ten nie jest tak naprawdę istotny dla sposobu działania kodów stabilizatorowych w sensie operacyjnym — i, jak zobaczymy w następnej lekcji, czasami sensowne jest rozważanie zbiorów generatorów stabilizatora dla kodów, które w rzeczywistości nie spełniają tego warunku. Jednak na potrzeby analizy kodów stabilizatorowych i wyjaśniania ich własności będziemy zakładać, że warunek ten jest spełniony. Krótko mówiąc, warunek ten gwarantuje, że każda obserwabla, którą mierzymy, aby uzyskać syndrome błędu, dodaje informację o możliwych błędach, a nie jest redundantna i nie daje wyników, które można by wywnioskować z pomiarów pozostałych generatorów stabilizatora.
Trzeci warunek wymaga, aby co najmniej jeden niezerowy wektor był ustalony przez wszystkie generatory stabilizatora, co jest równoważne temu, że nie jest zawarte w stabilizatorze. Potrzeba tego warunku wynika z faktu, że faktycznie możliwe jest wybranie minimalnego zbioru generującego operacji Pauliego na kubitach, które wszystkie komutują ze sobą nawzajem, a mimo to żaden niezerowy wektor nie jest ustalony przez każdą z tych operacji. Nie interesują nas "kody", dla których nie istnieją poprawne kodowania, więc wykluczamy tę możliwość, wymagając tego warunku jako części definicji.
Przykłady
Oto kilka przykładów stabilizer codes dla małych wartości Więcej przykładów, w tym takich, dla których może być znacznie większe, zobaczymy w następnej lekcji.
3-kubitowy kod powtórzeniowy
3-kubitowy kod powtórzeniowy jest przykładem stabilizer code, w którym naszymi generatorami stabilizer są oraz
Możemy łatwo sprawdzić, że te dwa generatory stabilizer spełniają wymagane warunki. Po pierwsze, oba generatory stabilizer oraz komutują ze sobą.
Po drugie, mamy minimalny zbiór generujący (w tym przypadku raczej trywialnie).
A po trzecie, wiemy już, że oraz jak również dowolna kombinacja liniowa tych wektorów, są niezmiennicze względem zarówno , jak i Alternatywnie możemy to stwierdzić, korzystając z równoważnego warunku z definicji.
Warunki te mogą być znacznie trudniejsze do sprawdzenia w przypadku bardziej skomplikowanych stabilizer codes.
Zmodyfikowany 3-kubitowy kod powtórzeniowy
W poprzedniej lekcji zobaczyliśmy, że możliwe jest zmodyfikowanie 3-kubitowego kodu powtórzeniowego tak, aby chronił przed błędami phase-flip zamiast błędów bit-flip. Jako stabilizer code, ten nowy kod jest łatwy do opisania: jego generatorami stabilizer są oraz
Tym razem generatory stabilizer reprezentują obserwable zamiast obserwabli , więc są to zasadniczo testy parzystości w bazie plus/minus zamiast w bazie standardowej. Trzy wymagane warunki dotyczące generatorów stabilizer są łatwe do zweryfikowania, podobnie jak w przypadku zwykłego 3-kubitowego kodu powtórzeniowego.
9-kubitowy Shor code
Oto 9-kubitowy Shor code, który również jest stabilizer code, wyrażony przez generatory stabilizer.
W tym przypadku mamy w zasadzie trzy kopie 3-kubitowego kodu powtórzeniowego, po jednej dla każdego z trzech bloków trzech kubitów, a także dwa ostatnie generatory stabilizer, które przyjmują postać przypominającą obwód służący do wykrywania phase flips dla tego kodu.
Alternatywny sposób myślenia o dwóch ostatnich generatorach stabilizer polega na tym, że przyjmują one tę samą postać co w 3-kubitowym kodzie powtórzeniowym dla phase flips, z tym że zastępuje co jest spójne z faktem, że odpowiada operacji na logical qubits zakodowanych przy użyciu 3-kubitowego kodu powtórzeniowego.
Zanim przejdziemy do innych przykładów, warto zauważyć, że symbole iloczynu tensorowego są często pomijane przy opisywaniu stabilizer codes za pomocą list generatorów stabilizer, ponieważ zwykle ułatwia to ich czytanie i dostrzeganie wzorców. Na przykład te same generatory stabilizer co powyżej dla 9-kubitowego Shor code wyglądają tak, gdy symbole iloczynu tensorowego nie są zapisane jawnie.
7-qubit Steane code
Oto kolejny przykład stabilizer code, znany jako 7-qubit Steane code. Ma on kilka niezwykłych cech i będziemy do niego wracać od czasu do czasu w pozostałych lekcjach tego kursu.
Na razie po prostu zauważmy, że jest to poprawny stabilizer code. Pierwsze trzy generatory stabilizer wyraźnie komutują ze sobą, ponieważ komutuje ze sobą, a identyczność komutuje ze wszystkim; sytuacja jest analogiczna dla ostatnich trzech generatorów stabilizer. Pozostaje sprawdzić, że jeśli weźmiemy jeden z generatorów stabilizer typu (czyli jeden z pierwszych trzech) i jeden z generatorów stabilizer typu (czyli jeden z ostatnich trzech), to te dwa generatory komutują — można przejść przez wszystkie 9 możliwych par i to zweryfikować. We wszystkich tych przypadkach macierze Pauli i zawsze ustawiają się w tej samej pozycji parzystą liczbę razy, więc oba generatory będą komutować, podobnie jak komutują i . Jest to również minimalny zbiór generujący i definiuje nietrywialną przestrzeń kodową — te fakty pozostawiamy do przemyślenia.
7-qubit Steane code jest podobny do 9-qubit Shor code w tym, że koduje pojedynczy qubit i umożliwia korekcję dowolnego błędu na jednym qubicie, ale wymaga tylko 7 qubitów zamiast 9.
5-qubit code
Siedem to nie jest najmniejsza liczba qubitów potrzebna do zakodowania jednego qubitu i ochrony go przed dowolnym błędem na jednym qubicie — oto stabilizer code, który realizuje to przy użyciu jedynie 5 qubitów.
Ten code jest zazwyczaj nazywany the 5-qubit code. Jest to najmniejsza liczba qubitów w kwantowym code korygującym błędy, która pozwala na korekcję dowolnego błędu pojedynczego qubitu.
One-dimensional stabilizer codes
Oto kolejny przykład stabilizer code, choć w rzeczywistości nie koduje on żadnych qubitów: przestrzeń kodowa jest jednowymiarowa. Zgodnie z definicją jest to jednak nadal poprawny stabilizer code.
Konkretnie, przestrzeń kodowa jest jednowymiarową przestrzenią rozpiętą przez e-bit
Oto pokrewny przykład stabilizer code, którego przestrzeń kodowa jest jednowymiarową przestrzenią rozpiętą przez stan GHZ
Wymiar przestrzeni kodu
Przypuśćmy, że mamy kod stabilizatorowy opisany przez -kubitowe generatory stabilizatora Być może pierwsze pytanie, które przychodzi na myśl w związku z tym kodem, brzmi: „Ile kubitów on koduje?”
Pytanie to ma prostą odpowiedź. Zakładając, że -kubitowe generatory stabilizatora spełniają trzy wymagania definicji (mianowicie, że wszystkie generatory stabilizatora komutują ze sobą, że jest to minimalny zbiór generujący, oraz że przestrzeń kodu jest niepusta), musi wtedy być tak, że przestrzeń kodu dla tego kodu stabilizatorowego ma wymiar a więc przy użyciu tego kodu można zakodować kubitów.
Intuicyjnie mówiąc, mamy kubitów do wykorzystania w tym kodowaniu, a każdy generator stabilizatora efektywnie „zabiera jeden kubit” pod względem liczby kubitów, które możemy zakodować. Zauważ, że nie dotyczy to tego, które lub ile błędów może zostać wykrytych lub skorygowanych — jest to jedynie stwierdzenie dotyczące wymiaru przestrzeni kodu.
Na przykład, zarówno dla 3-bitowego kodu powtórzeniowego, jak i dla zmodyfikowanej wersji tego kodu dla błędów odwrócenia fazy, mamy kubity oraz generatory stabilizatora, a zatem każdy z tych kodów może zakodować 1 kubit. Jako inny przykład rozważmy kod 5-kubitowy: mamy 5 kubitów i 4 generatory stabilizatora, więc ponownie przestrzeń kodu ma wymiar 2, co oznacza, że przy użyciu tego kodu można zakodować jeden kubit. Jako ostatni przykład, kod, którego generatorami stabilizatora są oraz , ma jednowymiarową przestrzeń kodu, rozpiętą przez stan co jest zgodne z posiadaniem kubitów oraz generatorów stabilizatora.
Zobaczmy teraz, jak można udowodnić ten fakt. Pierwszym krokiem jest zaobserwowanie, że ponieważ generatory stabilizatora komutują, a każda operacja Pauliego jest swoją własną odwrotnością, każdy element stabilizatora może być wyrażony jako iloczyn
gdzie Równoważnie, każdy element stabilizatora otrzymuje się przez pomnożenie pewnego podzbioru generatorów stabilizatora. W istocie, każdy element stabilizatora może być wyrażony w ten sposób jednoznacznie, ze względu na warunek, że jest minimalnym zbiorem generującym.
Następnie zdefiniujmy jako rzut na przestrzeń wektorów własnych operatora odpowiadających wartości własnej , dla każdego Rzuty te można uzyskać przez uśrednienie odpowiednich operacji Pauliego z operacją tożsamościową w następujący sposób.
Przestrzeń kodu jest podprzestrzenią wszystkich wektorów ustalanych przez wszystkie generatorów stabilizatora lub równoważnie, przez wszystkie rzutów
Biorąc pod uwagę, że wszystkie generatory stabilizatora komutują ze sobą, rzuty również muszą komutować. Pozwala nam to skorzystać z faktu z algebry liniowej, mianowicie że iloczyn tych rzutów jest rzutem na przecięcie podprzestrzeni odpowiadających poszczególnym rzutom. To znaczy, iloczyn jest rzutem na przestrzeń kodu
Możemy teraz rozwinąć iloczyn korzystając ze wzorów na te rzuty, otrzymując następujące wyrażenie.
Innymi słowy, rzut na przestrzeń kodu kodu stabilizatorowego jest równy, jako macierz, średniej po wszystkich elementach stabilizatora tego kodu.
Wreszcie, możemy obliczyć wymiar przestrzeni kodu, korzystając z faktu, że wymiar dowolnej podprzestrzeni jest równy śladowi rzutu na tę podprzestrzeń. Zatem wymiar przestrzeni kodu jest dany następującym wzorem.
Możemy ocenić to wyrażenie, korzystając z kilku podstawowych faktów.
-
Mamy a zatem
-
Dla iloczyn musi być równy razy pewna operacja Pauliego — ale nie możemy otrzymać , ponieważ byłoby to sprzeczne z minimalnością zbioru i nie możemy otrzymać , ponieważ trzeci warunek nałożony na generatory stabilizatora tego zabrania. Dlatego, ponieważ ślad każdej nietożsamościowej operacji Pauliego jest równy zero, otrzymujemy
Wymiar przestrzeni kodu wynosi zatem zgodnie z tezą:
Na marginesie, możemy teraz zauważyć, że założenie, iż nie należy do stabilizatora, implikuje, że przestrzeń kodu musi zawierać co najmniej jeden wektor stanu kwantowego. Wynika to z tego, że — jak właśnie zweryfikowaliśmy — założenie to implikuje, że przestrzeń kodu ma wymiar który nie może być zerem. Implikacja odwrotna jest trywialna: jeśli należy do stabilizatora, to przestrzeń kodu nie może zawierać żadnych wektorów stanu kwantowego, ponieważ żadne niezerowe wektory nie są ustalane przez tę operację.
Operacje Clifforda i kodowania
Następnie krótko omówimy, w jaki sposób kubity mogą być kodowane przy użyciu kodów stabilizatorowych, ale aby to zrobić, musimy najpierw wprowadzić operacje Clifforda.
Operacje Clifforda
Operacje Clifforda to operacje unitarne, na dowolnej liczbie kubitów, które mogą zostać zaimplementowane przez obwody kwantowe z ograniczonym zestawem bramek:
- bramki Hadamarda
- bramki
- bramki CNOT
Zauważ, że bramki nie są uwzględnione, podobnie jak bramki Toffoliego i bramki Fredkina. Te bramki nie tylko nie znajdują się na liście, ale w rzeczywistości nie da się ich zaimplementować przy użyciu tych wymienionych tutaj; nie są to operacje Clifforda. Operacje Pauliego są natomiast operacjami Clifforda, ponieważ można je zaimplementować za pomocą sekwencji bramek Hadamarda i bramek .
Jest to prosty sposób zdefiniowania operacji Clifforda, ale nie wyjaśnia on, dlaczego są one zdefiniowane w ten sposób ani co jest szczególnego w tym konkretnym zbiorze bramek. Prawdziwy powód, dla którego operacje Clifforda definiuje się w ten sposób, polega na tym, że — z dokładnością do globalnych czynników fazowych — operacje Clifforda to dokładnie te operacje unitarne, które poprzez sprzężenie zawsze przekształcają operacje Pauliego w operacje Pauliego. Precyzyjniej, -kubitowa operacja unitarna jest równoważna operacji Clifforda z dokładnością do czynnika fazowego wtedy i tylko wtedy, gdy dla każdej -kubitowej operacji Pauliego zachodzi
dla pewnej -kubitowej operacji Pauliego
(Zauważ, że nie jest możliwe, aby dla , gdy jest unitarna, a i są operacjami Pauliego. Wynika to z faktu, że macierz po lewej stronie powyższego równania jest zarówno unitarna, jak i hermitowska, a i są jedynymi wyborami dla , przy których prawa strona również może być unitarna i hermitowska.)
Łatwo zweryfikować właśnie opisaną własność sprzężenia, gdy jest bramką Hadamarda, bramką lub bramką CNOT. W szczególności jest to proste dla bramek Hadamarda,
oraz bramek ,
W przypadku bramek CNOT do sprawdzenia jest 15 nietożsamościowych operacji Pauliego na dwóch kubitach. Oczywiście można je sprawdzać pojedynczo — ale relacje między bramkami CNOT oraz bramkami i przedstawione (w postaci obwodów) w poprzedniej lekcji, wraz z regułami mnożenia macierzy Pauliego, oferują skrót do tego samego wniosku.
Gdy wiemy już, że ta własność sprzężenia jest prawdziwa dla bramek Hadamarda, i CNOT, możemy od razu wywnioskować, że jest ona prawdziwa dla obwodów złożonych z tych bramek — czyli dla wszystkich operacji Clifforda.
Trudniej jest udowodnić, że relacja działa w drugą stronę — że jeśli dana operacja unitarna spełnia własność sprzężenia dla operacji Pauliego, to musi istnieć możliwość jej zaimplementowania (z dokładnością do fazy globalnej) przy użyciu wyłącznie bramek Hadamarda, i CNOT. Nie będzie to wyjaśniane w tej lekcji, ale jest to prawdą.
Operacje Clifforda nie są uniwersalne dla obliczeń kwantowych; w przeciwieństwie do uniwersalnych zbiorów bramek kwantowych, przybliżanie dowolnych operacji unitarnych z żądaną dokładnością za pomocą operacji Clifforda nie jest możliwe. Istotnie, dla danej wartości istnieje tylko skończenie wiele -kubitowych operacji Clifforda (z dokładnością do czynników fazowych). Wykonywanie operacji Clifforda na stanach bazy standardowej, a następnie pomiarów w bazie standardowej, również nie pozwala nam wykonywać obliczeń, które są poza zasięgiem algorytmów klasycznych — ponieważ możemy efektywnie symulować klasycznie obliczenia tej postaci. Fakt ten znany jest jako twierdzenie Gottesmana-Knilla.
Kodery dla kodów stabilizatorowych
Kod stabilizatorowy definiuje przestrzeń kodową o pewnym wymiarze i mamy swobodę wykorzystania tej przestrzeni kodowej w dowolny sposób — nic nie zmusza nas do kodowania kubitów w tej przestrzeni kodowej w określony sposób. Zawsze jednak można, jeśli taki wybór uczynimy, użyć operacji Clifforda jako kodera. Precyzyjniej, dla każdego kodu stabilizatorowego, który pozwala zakodować kubitów w kubitach, istnieje -kubitowa operacja Clifforda taka, że dla dowolnego -kubitowego wektora stanu kwantowego mamy
jest wektorem stanu kwantowego w przestrzeni kodowej naszego kodu, który możemy interpretować jako zakodowanie
Jest to korzystne, ponieważ operacje Clifforda są stosunkowo proste w porównaniu z dowolnymi operacjami unitarnymi, a istnieją sposoby optymalizacji ich implementacji przy użyciu technik podobnych do tych, które znajdują się w dowodzie twierdzenia Gottesmana-Knilla. W rezultacie obwody do kodowania stanów przy użyciu kodów stabilizatorowych nigdy nie muszą być zbyt duże. W szczególności zawsze można wykonać kodowanie dla -kubitowego kodu stabilizatorowego przy użyciu operacji Clifforda, która wymaga bramek. Wynika to z faktu, że każdą operację Clifforda na kubitach można zaimplementować za pomocą obwodu o takim rozmiarze.
Na przykład oto koder dla 7-kubitowego kodu Steane'a. Jest to faktycznie operacja Clifforda i, jak się okazuje, ten koder nie potrzebuje nawet bramek .
Wykrywanie błędów
W przypadku -kubitowego kodu stabilizatorowego opisanego przez generatory stabilizatora wykrywanie błędów działa w następujący sposób.
Aby wykryć błędy, wszystkie generatory stabilizatora są mierzone jako obserwable. Mamy generatorów stabilizatora, a zatem wyników pomiarów, z których każdy wynosi lub (lub jest wartością binarną, jeśli zdecydujemy się skojarzyć z oraz z ). Interpretujemy te wyników łącznie, jako wektor lub ciąg, jako syndrom. Syndrom oznacza, że nie wykryto żadnego błędu, natomiast wystąpienie co najmniej jednej gdzieś w syndromie oznacza, że wykryto bł ąd.
Załóżmy w szczególności, że jest -kubitową operacją Pauli reprezentującą hipotetyczny błąd. (Przy okazji rozważamy tylko operacje Pauli jako błędy, ponieważ dyskretyzacja błędów działa tak samo dla dowolnych kodów stabilizatorowych, jak dla 9-kubitowego kodu Shora.) Istnieją trzy przypadki, które określają, czy zostanie wykryty jako błąd, czy nie.
Przypadki wykrywania błędów
-
Operacja jest proporcjonalna do elementu w stabilizatorze.
W tym przypadku musi komutować z każdym generatorem stabilizatora, więc otrzymujemy syndrom Oznacza to, że nie jest wykrywany jako błąd.
-
Operacja nie jest proporcjonalna do elementu w stabilizatorze, ale mimo to komutuje z każdym generatorem stabilizatora.
Jest to błąd, który zmienia wektory w przestrzeni kodu w pewien nietrywialny sposób. Ale ponieważ komutuje z każdym generatorem stabilizatora, syndrom wynosi więc pozostaje niewykryty przez kod.
-
Operacja antykomutuje z co najmniej jednym z generatorów stabilizatora.
Syndrom różni się od więc błąd jest wykrywany przez kod.
W pierwszym przypadku błąd nie stanowi problemu, ponieważ ta operacja nie wpływa na wektory w przestrzeni kodu, poza ewentualnym wprowadzeniem nieistotnej fazy globalnej: dla każdego zakodowanego stanu W istocie nie jest to tak naprawdę błąd — jakiekolwiek nietrywialne działanie ma miejsce poza przestrzenią kodu — więc dobrze jest, że nie jest wykrywany jako błąd, ponieważ nic nie trzeba z nim robić.
Drugi przypadek, intuicyjnie rzecz biorąc, jest tym złym przypadkiem. To właśnie antykomutacja błędu z generatorem stabilizatora powoduje pojawienie się gdzieś w syndromie, sygnalizując błąd, ale w tym przypadku to się nie dzieje. Mamy więc błąd który zmienia wektory w przestrzeni kodu w pewien nietrywialny sposób, ale pozostaje niewykryty przez kod. Na przykład w 3-bitowym kodzie powtórzeniowym operacja należy do tej kategorii.
To, że taki błąd musi zmieniać niektóre wektory w przestrzeni kodu w nietrywialny sposób, można uzasadnić w następujący sposób. Z założenia, że komutuje z ale nie jest proporcjonalny do elementu stabilizatora, możemy wywnioskować, że otrzymalibyśmy nowy, prawidłowy kod stabilizatorowy, dołączając jako generator stabilizatora wraz z Przestrzeń kodu dla tego nowego kodu ma jednak tylko połowę wymiaru oryginalnej przestrzeni kodu, z czego możemy wywnioskować, że działanie na oryginalnej przestrzeni kodu nie może być proporcjonalne do operacji identyczności.
W ostatnim z trzech przypadków, w którym błąd antykomutuje z co najmniej jednym generatorem stabilizatora, syndrom zawiera gdzieś co najmniej jedną co wskazuje, że coś jest nie tak. Jak już omówiliśmy, syndrom na ogół nie zidentyfikuje jednoznacznie, więc nadal konieczne jest wybranie operacji korekcyjnej dla każdego syndromu, która może, ale nie musi, skorygować błąd Omówimy ten krok niebawem, w ostatniej części lekcji.
Odległość kodu stabilizatorowego
Jako kwestię terminologii, kiedy mówimy o odległości kodu stabilizatorowego, mamy na myśli minimalną wagę operacji Pauli która należy do drugiej kategorii powyżej — czyli zmienia przestrzeń kodu w pewien nietrywialny sposób, ale kod tego nie wykrywa. Gdy mówimy, że dany kod stabilizatorowy jest kodem stabilizatorowym używając podwójnych nawiasów kwadratowych, oznacza to, co następuje:
- Kodowania mają długość kubitów,
- kod pozwala na zakodowanie kubitów oraz
- odległość kodu wynosi
Jako przykład rozważmy 7-kubitowy kod Steane'a. Oto generatory stabilizatora dla tego kodu:
Ten kod ma odległość 3, co możemy uzasadnić w następujący sposób.
Najpierw rozważmy dowolną operację Pauli o wadze co najwyżej 2 i załóżmy, że ta operacja komutuje ze wszystkimi sześcioma generatorami stabilizatora. Wywnioskujemy, że musi być operacją identyczności, która (jak zawsze) jest elementem stabilizatora. Pokaże to, że odległość kodu jest ściśle większa niż 2. Załóżmy w szczególności, że ma postać
dla i będących możliwie nieidentycznościowymi macierzami Pauli. Jest to tylko jeden przypadek i konieczne jest powtórzenie poniższego rozumowania dla wszystkich pozostałych możliwych położeń nieidentycznościowych macierzy Pauli wśród czynników tensorowych ale rozumowanie jest zasadniczo takie samo dla wszystkich możliwych położeń.
Operacja komutuje ze wszystkimi sześcioma generatorami stabilizatora, więc komutuje w szczególności z tymi dwoma:
Czynnik tensorowy w naszym błędzie pokrywa się z macierzą identyczności w obu tych generatorach stabilizatora (dlatego właśnie zostały wybrane). Biorąc pod uwagę, że mamy macierze identyczności na 5 najbardziej wysuniętych na prawo pozycjach wnioskujemy, że musi komutować z i w przeciwnym razie antykomutowałby z jednym z dwóch generatorów. Jednakże jedyną macierzą Pauli, która komutuje zarówno z jak i z jest macierz identyczności, więc
Teraz, gdy to wiemy, możemy wybrać dwa kolejne generatory stabilizatora, które mają i na drugiej pozycji od lewej, i wyciągamy podobny wniosek: Tak więc jest operacją identyczności.
Zatem nie ma sposobu, aby błąd o wadze co najwyżej 2 pozostał niewykryty przez ten kod, chyba że błąd jest operacją identyczności (która znajduje się w stabilizatorze, a zatem nie jest w rzeczywistości błędem). Z drugiej strony, istnieją operacje Pauli o wadze 3, które komutują ze wszystkimi sześcioma tymi generatorami stabilizatora, ale nie są proporcjonalne do elementów stabilizatora, takie jak oraz To dowodzi, że ten kod ma odległość 3, jak twierdziliśmy.
Korekcja błędów
Ostatnim tematem omawianym w tej lekcji jest korekcja błędów dla kodów stabilizatorowych. Jak zwykle, zakładamy, że mamy kod stabilizatorowy określony przez n-kubitowe generatory stabilizatora
-kubitowe operacje Pauliego, traktowane jako błędy, które mogą wpływać na stany zakodowane za pomocą tego kodu, są podzielone na równoliczne zbiory zgodnie z tym, jaki syndrom powodują. Istnieje różnych syndromów i operacji Pauliego, co oznacza, że dla każdego syndromu istnieje operacji Pauliego, które go powodują. Każdy z tych błędów mógłby być odpowiedzialny za odpowiadający mu syndrom.
Jednakże wśród operacji Pauliego powodujących każdy syndrom istnieją takie, które powinny być uważane za równoważne. W szczególności, jeśli iloczyn dwóch operacji Pauliego jest proporcjonalny do elementu stabilizatora, to te dwie operacje są efektywnie równoważne jako błędy.
Innymi słowy, jeśli zastosujemy operację korekcji w celu skorygowania błędu to ta korekcja powiedzie się tak długo, jak długo złożenie jest proporcjonalne do elementu stabilizatora. Biorąc pod uwagę, że w stabilizatorze jest elementów, wynika z tego, że każda operacja korekcji koryguje różnych błędów Pauliego. Pozostawia to nierównoważnych klas operacji Pauliego, traktowanych jako błędy, które są zgodne z każdym możliwym syndromem.
Oznacza to, że chyba że (w którym to przypadku mamy trywialną, jednowymiarową przestrzeń kodu), nie jesteśmy w stanie skorygować każdego błędu wykrytego przez kod stabilizatorowy. Zamiast tego musimy wybrać tylko jedną operację korekcji dla każdego syndromu, w nadziei na skorygowanie tylko jednej klasy równoważnych błędów powodujących ten syndrom.
Jedną z naturalnych strategii wyboru, którą operację korekcji wykonać dla każdego syndromu, jest wybranie operacji Pauliego o najniższej wadze, która jako błąd powoduje ten syndrom. W rzeczywistości może istnieć wiele operacji, które mają jednakową najniższą wagę błędu zgodną z danym syndromem, a w takim przypadku można wybrać dowolną z nich. Idea polega na tym, że operacje Pauliego o niższej wadze reprezentują bardziej prawdopodobne wyjaśnienia zmierzonego syndromu. Faktycznie może to nie być prawdą dla niektórych modeli szumu, a jedną z alternatywnych strategii jest obliczenie najbardziej prawdopodobnego błędu powodującego dany syndrom, w oparciu o wybrany model szumu. W tej lekcji jednak zachowamy prostotę i rozważymy tylko korekcje o najniższej wadze.
Dla kodu stabilizatorowego o odległości ta strategia wyboru operacji korekcji jako operacji Pauliego o najniższej wadze zgodnej ze zmierzonym syndromem zawsze pozwala na korekcję błędów o wadze ściśle mniejszej niż połowa czyli innymi słowy, o wadze co najwyżej Pokazuje to, na przykład, że 7-kubitowy kod Steane'a może korygować dowolny błąd Pauliego o wadze jeden, a dzięki dyskretyzacji błędów oznacza to, że kod Steane'a może korygować dowolny błąd na jednym kubicie.
Aby zobaczyć, jak to działa, rozważmy poniższy diagram. Okrąg po lewej stronie reprezentuje wszystkie operacje Pauliego, które dają syndrom czyli syndrom sugerujący, że nie wystąpiły żadne błędy i wszystko jest w porządku. Wśród tych operacji mamy elementy stabilizatora (lub, mówiąc dokładniej, operacje, które są proporcjonalne do elementów stabilizatora), a także nietrywialne błędy, które w jakiś sposób zmieniają przestrzeń kodu, ale nie są wykrywane przez kod. Z definicji odległości, każda operacja Pauliego w tej kategorii musi mieć wagę co najmniej ponieważ jest zdefiniowane jako minimalna waga tych operacji.
Okrąg po prawej stronie reprezentuje operacje Pauliego, które dają inny syndrom w tym błąd o wadze ściśle mniejszej niż który rozważymy.
Operacja korekcji wybrana dla syndromu to operacja Pauliego o najniższej wadze w zbiorze reprezentowanym przez okrąg po prawej stronie diagramu (lub dowolna z nich w przypadku remisu). Mogłoby więc być tak, że ale niekoniecznie. To, co możemy jednak stwierdzić z pewnością, to że nie może mieć wagi większej niż waga ponieważ ma minimalną wagę spośród operacji w tym zbiorze — a zatem ma wagę ściśle mniejszą niż
Teraz rozważmy, co się stanie, gdy operacja korekcji zostanie zastosowana do stanu, który otrzymaliśmy po wystąpieniu błędu Zakładając, że oryginalne kodowanie to pozostajemy ze stanem Naszym celem będzie wykazanie, że jest proporcjonalne do elementu stabilizatora, co implikuje, że korekcja jest udana i (z dokładnością do fazy globalnej) pozostajemy z oryginalnym zakodowanym stanem
Po pierwsze, ponieważ i powodują ten sam syndrom, złożenie musi komutować z każdym generatorem stabilizatora. W szczególności, jeśli jest dowolnym z generatorów stabilizatora, to musimy mieć
dla tej samej wartości ponieważ jest to -ty wpis w syndromie który generują zarówno jak i Zatem mamy
więc komutuje z Pokazaliśmy zatem, że należy do okręgu po lewej stronie diagramu, ponieważ generuje syndrom
Po drugie, złożenie musi mieć wagę co najwyżej równą sumie wag i — co wynika z chwili zastanowienia nad iloczynami operacji Pauliego — a zatem waga jest ściśle mniejsza niż To implikuje, że jest proporcjonalne do elementu stabilizatora naszego kodu, co chcieliśmy pokazać. Wybierając nasze operacje korekcji jako reprezentantów o najniższej wadze zbioru błędów generujących każdy syndrom, mamy zatem gwarancję skorygowania dowolnych błędów Pauliego o wadze mniejszej niż połowa odległości kodu.
Jest jednak pewien problem. Dla kodów stabilizatorowych w ogólności, obliczenie operacji Pauliego o najniższej wadze powodującej dany syndrom jest problemem trudnym obliczeniowo. (W istocie, jest to prawdą nawet dla kodów klasycznych, które w tym kontekście możemy traktować jako kody stabilizatorowe, w których jako czynniki tensorowe w generatorach stabilizatora występują tylko macierze i ) Zatem, w przeciwieństwie do kroku kodowania, operacje Clifforda tym razem nie przyjdą nam z pomocą.
Rozwiązaniem jest wybór konkretnych kodów, dla których dobre korekcje mogą być obliczone efektywnie, dla czego nie ma prostej recepty. Mówiąc prosto, projektowanie kodów stabilizatorowych, dla których dobre operacje korekcji mogą być obliczone efektywnie, jest częścią artyzmu projektowania kodów kwantowych.