Sari la conținutul principal

Codul Toric

În continuare vom discuta despre un cod CSS specific, cunoscut sub numele de codul Toric, descoperit de Alexei Kitaev în 1997. De fapt, codul Toric nu este un singur cod, ci mai degrabă o familie de coduri, câte unul pentru fiecare număr întreg pozitiv începând de la 2. Aceste coduri au câteva proprietăți cheie:

  • Generatorii Stabilizer au pondere mică și, în special, toți au ponderea 4. În limbajul teoriei codurilor, codul Toric este un exemplu de cod cuantic de verificare a parității cu densitate scăzută, sau cod cuantic LDPC (unde scăzut înseamnă 4 în acest caz). Acest lucru este avantajos deoarece fiecare măsurare a unui generator Stabilizer nu trebuie să implice prea mulți qubiți.

  • Codul Toric are localitate geometrică. Aceasta înseamnă că nu numai că generatorii Stabilizer au pondere mică, dar este posibil și să aranjezi qubiții spațial astfel încât fiecare măsurare a generatorului Stabilizer să implice doar qubiți aflați în apropiere. În principiu, acest lucru face aceste măsurări mai ușor de implementat decât dacă ar implica qubiți aflați la distanță în spațiu.

  • Membrii familiei de coduri Toric au o distanță din ce în ce mai mare și pot tolera o rată de eroare relativ ridicată.

Descrierea codului Toric

Fie L2L\geq 2 un număr întreg pozitiv și considerăm o rețea L×LL\times L cu așa-numite frontiere periodice. De exemplu, această figură ilustrează o rețea L×LL\times L pentru L=9.L=9.

O rețea 9x9 cu frontiere periodice

Observi că liniile din dreapta și de jos sunt linii punctate. Aceasta indică faptul că linia punctată din dreapta este aceeași linie cu linia din stânga extremă, iar similar, linia punctată de jos este aceeași cu cea din partea de sus.

Pentru a realiza fizic acest tip de configurație sunt necesare trei dimensiuni. În particular, am putea forma rețeaua într-un cilindru potrivind mai întâi laturile stângă și dreaptă, iar apoi să îndoim cilindrul astfel încât cercurile de la capete, care erau anterior marginile de sus și de jos ale rețelei, să se întâlnească. Sau am putea potrivi mai întâi sus și jos și apoi laturile; funcționează în ambele sensuri și nu contează pe care îl alegem în scopul acestei discuții.

Ceea ce obținem este un tor — sau, cu alte cuvinte, un covrig (deși a-l gândi ca pe camera unui pneu este poate o imagine mai potrivită, deoarece nu este un solid: rețeaua a devenit doar suprafața unui tor). De aici vine numele „codul Toric".

O rețea 9x9 înfășurată într-un tor

Modul în care te poți „deplasa" pe un tor ca acesta, între puncte adiacente ale rețelei, va fi probabil familiar celor care au jucat jocuri video retro, unde deplasarea în afara marginii de sus a ecranului te face să apari în jos, și la fel pentru marginile stângă și dreaptă ale ecranului. Astfel vom privi această rețea cu frontiere periodice, în loc să vorbim specific despre un tor în spațiul tridimensional.

În continuare, qubiții sunt aranjați pe muchiile acestei rețele, după cum ilustrează figura de mai jos, unde qubiții sunt indicați prin cercuri albastre pline.

Qubiți pe muchiile unei rețele periodice 9x9

Observă că qubiții plasați pe liniile punctate nu sunt plini deoarece sunt deja reprezentați pe liniile cele mai de sus și cele mai din stânga ale rețelei. În total există 2L22L^2 qubiți: L2L^2 qubiți pe linii orizontale și L2L^2 qubiți pe linii verticale.

Pentru a descrie codul Toric în sine, mai rămâne de descris generatorii Stabilizer:

  • Pentru fiecare celulă formată de liniile din rețea există un generator Stabilizer ZZ, obținut prin tensorizarea matricelor ZZ pe cei patru qubiți care ating acea celulă, împreună cu matricele identitate pe toți ceilalți qubiți.

  • Pentru fiecare vârf format de liniile din rețea există un generator Stabilizer XX, obținut prin tensorizarea matricelor XX pe cei patru qubiți adiacenți acelui vârf, împreună cu matricele identitate pe toți ceilalți qubiți.

În ambele cazuri obținem o operație Pauli de pondere 4. Individual, acești generatori Stabilizer pot fi ilustrați după cum urmează.

Tipuri de generatori Stabilizer pentru codul Toric

Iată o ilustrație care arată câteva exemple de generatori Stabilizer în contextul rețelei în sine. Observă că sunt incluși și generatorii Stabilizer care se înfășoară în jurul frontierelor periodice. Acești generatori care se înfășoară în jurul frontierelor periodice nu sunt speciali și nu se disting în niciun fel de cei care nu o fac.

Exemple de generatori Stabilizer pe o rețea

Generatorii Stabilizer trebuie să comute pentru ca acesta să fie un cod Stabilizer valid. Ca de obicei, toți generatorii Stabilizer ZZ comută între ei, deoarece ZZ comută cu el însuși și identitatea comută cu orice, și la fel pentru generatorii Stabilizer XX. Generatorii Stabilizer ZZ și XX comută evident atunci când acționează netrivial pe seturi disjuncte de qubiți, ca în exemplele din figura anterioară. Posibilitatea rămasă este că un generator Stabilizer ZZ și un generator Stabilizer XX se suprapun pe qubiții pe care acționează netrivial, și de fiecare dată când se întâmplă aceasta, generatorii trebuie să se suprapună întotdeauna pe doi qubiți, ca în figura următoare.

Generatori Stabilizer suprapuși pentru codul Toric

În consecință, doi generatori Stabilizer ca aceștia comută, la fel cum ZZZ\otimes Z și XXX\otimes X comută. Generatorii Stabilizer comută, prin urmare, toți între ei.

A doua condiție necesară pentru generatorii Stabilizer ai unui cod Stabilizer este că aceștia formează un set minimal de generatori. Această condiție nu este satisfăcută de această colecție: dacă înmulțim toți generatorii Stabilizer ZZ împreună, obținem operația identitate, și la fel pentru generatorii Stabilizer XX. Astfel, oricare dintre generatorii Stabilizer ZZ poate fi exprimat ca produsul tuturor celorlalți, și similar, oricare dintre generatorii Stabilizer XX poate fi exprimat ca produsul generatorilor Stabilizer XX rămași. Dacă eliminăm oricare unul dintre generatorii Stabilizer ZZ și oricare unul dintre generatorii Stabilizer XX, obținem totuși un set minimal de generatori.

Pentru a fi clar în privința aceasta, ne pasă în egală măsură de toți generatorii Stabilizer și, dintr-un punct de vedere strict operațional, nu este nevoie să selectăm un generator Stabilizer de fiecare tip pentru a-l elimina. Dar, pentru a analiza codul — și a număra generatorii în particular — putem imagina că un generator Stabilizer de fiecare tip a fost eliminat, pentru a obține un set minimal de generatori, ținând cont că am putea întotdeauna deduce rezultatele acestor generatori eliminați (gândindu-ne la ei ca la observabile) din rezultatele tuturor celorlalte observabile ale generatorilor Stabilizer de același tip.

Aceasta lasă L21L^2 - 1 generatori Stabilizer de fiecare tip, sau 2L222L^2 - 2 în total, într-un set minimal de generatori (ipotetic). Dat fiind că există 2L22L^2 qubiți în total, aceasta înseamnă că codul Toric codifică 2L22(L21)=22L^2 - 2 (L^2 - 1) = 2 qubiți.

Condiția finală cerută generatorilor Stabilizer este că cel puțin un vector de stare cuantică este fixat de toți generatorii Stabilizer. Vom vedea că acesta este cazul pe măsură ce continuăm analiza codului, dar este de asemenea posibil să argumentăm că nu există nicio modalitate de a genera 1-1 înmulțit cu identitatea pe toți 2L22L^2 qubiții din generatorii Stabilizer.

Detectarea erorilor

Codul Toric are o descriere simplă și elegantă, dar proprietățile sale de corectare a erorilor cuantice pot să nu fie deloc clare la prima vedere. Se dovedește că este un cod uimitor! Pentru a înțelege de ce și cum funcționează, să începem prin a considera diferite erori și sindroamele pe care le generează.

Codul Toric este un cod CSS, deoarece toți generatorii noștri Stabilizer sunt fie generatori Stabilizer ZZ, fie XX. Aceasta înseamnă că erorile XX și erorile ZZ pot fi detectate (și posibil corectate) separat. De fapt, există o simetrie simplă între generatorii Stabilizer ZZ și XX care ne permite să analizăm erorile XX și erorile ZZ în esență în același mod. Deci, ne vom concentra pe erorile XX, care sunt posibil detectate de generatorii Stabilizer ZZ — dar întreaga discuție care urmează poate fi tradusă de la erorile XX la erorile ZZ, care sunt detectate în mod analog de generatorii Stabilizer XX.

Diagrama de mai jos ilustrează efectul unei erori XX pe un singur qubit. Ipoteza este că cei 2L22L^2 qubiți ai noștri se aflau anterior într-o stare conținută în spațiul codului Toric, determinând toate măsurările generatorilor Stabilizer să producă +1.+1. Generatorii Stabilizer ZZ detectează erorile XX și există câte un astfel de generator Stabilizer pentru fiecare celulă din figură, deci putem indica rezultatul măsurării generatorului Stabilizer corespunzător prin culoarea acelei celule: Rezultatele +1+1 sunt indicate prin celule albe, iar rezultatele 1-1 sunt indicate prin celule gri. Dacă apare o eroare de inversare a biților pe unul dintre qubiți, efectul este că măsurările generatorilor Stabilizer corespunzătoare celor două celule care ating qubit-ul afectat produc acum 1.-1.

Efectul unei singure erori de inversare a biților asupra codului Toric

Aceasta este intuitivă atunci când considerăm generatorii Stabilizer ZZ și comportamentul lor. În esență, fiecare generator Stabilizer ZZ măsoară paritatea celor patru qubiți care ating celula corespunzătoare (față de baza standard). Deci, un rezultat +1+1 nu indică faptul că nu au avut loc erori XX pe acești patru qubiți, ci mai degrabă indică faptul că a avut loc un număr par de erori XX pe acești qubiți, în timp ce un rezultat 1-1 indică faptul că a avut loc un număr impar de erori XX. O singură eroare XX inversează, prin urmare, paritatea celor patru biți de pe ambele celule pe care le atinge, determinând măsurările generatorilor Stabilizer să producă 1.-1.

Să introducem acum mai multe erori XX pentru a vedea ce se întâmplă. În particular, vom considera un lanț de erori XX adiacente, unde două erori XX sunt adiacente dacă afectează qubiți care ating aceeași celulă.

Efectul unui lanț de erori de inversare a biților asupra codului Toric

Cei doi generatori Stabilizer ZZ de la capetele lanțului produc ambii rezultatul 1-1 în acest caz, deoarece a avut loc un număr impar de erori XX pe acele două celule corespunzătoare. Toți ceilalți generatori Stabilizer ZZ, pe de altă parte, produc rezultatul +1,+1, inclusiv cei care ating lanțul, dar nu la capete, deoarece a avut loc un număr par de erori XX pe qubiții care ating celulele corespunzătoare.

Astfel, atât timp cât avem un lanț de erori XX cu capete, codul Toric va detecta că au avut loc erori, rezultând în rezultate de măsurare 1-1 pentru generatorii Stabilizer ZZ corespunzătoare capetelor lanțului. Observă că lanțul real de erori nu este dezvăluit, ci doar capetele! Aceasta este în regulă — în subsecțiunea următoare vom vedea că nu avem nevoie să știm exact care qubiți au fost afectați de erori XX pentru a le corecta. (Codul Toric este un exemplu de cod foarte degenerat, în sensul că în general nu identifică în mod unic erorile pe care le corectează.)

Cu toate acestea, este posibil ca un lanț de erori XX adiacente să nu aibă capete, adică un lanț de erori ar putea forma o buclă închisă, ca în figura de mai jos.

O buclă închisă de erori de inversare a biților pentru codul Toric

Într-un astfel de caz, a avut loc un număr par de erori XX pe fiecare celulă, deci fiecare măsurare a generatorului Stabilizer produce un rezultat +1+1. Buclele închise de erori XX adiacente nu sunt, prin urmare, detectate de cod.

Acest lucru poate părea dezamăgitor, deoarece avem nevoie de doar patru erori XX pentru a forma o buclă închisă (și sperăm la ceva mult mai bun decât un cod de distanță 4). Cu toate acestea, o buclă închisă de erori XX de forma ilustrată în figura anterioară nu este de fapt o eroare — deoarece se află în Stabilizer! Amintește-ți că, pe lângă generatorii Stabilizer ZZ, avem și un generator Stabilizer XX pentru fiecare vârf al rețelei. Și dacă înmulțim generatorii Stabilizer XX adiacenți împreună, rezultatul este că obținem bucle închise de operații XX. De exemplu, bucla închisă din figura anterioară poate fi obținută prin înmulțirea generatorilor Stabilizer XX indicați în figura de mai jos.

O buclă închisă de erori de inversare a biților generată de generatorii Stabilizer X

Acesta nu este, totuși, singurul tip de buclă închisă de erori XX pe care le putem avea — și nu este adevărat că fiecare buclă închisă de erori XX este inclusă în Stabilizer. În particular, diferitele tipuri de bucle pot fi caracterizate după cum urmează.

  1. Bucle închise de erori XX cu un număr par de erori XX pe fiecare linie orizontală și fiecare linie verticală de qubiți. (Exemplul arătat mai sus se încadrează în această categorie.) Buclele de această formă sunt întotdeauna conținute în Stabilizer, deoarece pot fi reduse la nimic în mod efectiv prin înmulțirea lor cu generatorii Stabilizer XX.

  2. Bucle închise de erori XX cu un număr impar de erori XX pe cel puțin o linie orizontală sau cel puțin o linie verticală de qubiți. Buclele de această formă nu sunt niciodată conținute în Stabilizer și reprezintă, prin urmare, erori netriviale care trec nedetectate de cod.

Un exemplu de buclă închisă de erori XX din a doua categorie este prezentat în diagrama de mai jos.

O buclă închisă de erori de inversare a biților care nu se află în Stabilizer

Un astfel de lanț de erori nu este conținut în Stabilizer deoarece fiecare generator Stabilizer XX plasează un număr par de operații XX pe fiecare linie orizontală și fiecare linie verticală de qubiți. Acesta este, prin urmare, un exemplu real de eroare netrivială pe care codul nu reușește să o detecteze.

Cheia este că singurul mod de a forma o buclă de al doilea tip este să treci în jurul torului, adică fie în jurul găurii din mijlocul torului, prin ea, sau ambele. Intuitiv vorbind, un lanț de erori XX ca acesta nu poate fi redus la nimic prin înmulțirea lui cu generatorii Stabilizer XX deoarece topologia unui tor o interzice. Codul Toric este uneori categorisit ca un cod cuantic topologic de corectare a erorilor din acest motiv. Cea mai scurtă lungime a unei astfel de bucle este L,L, și prin urmare aceasta este distanța codului Toric: orice buclă închisă de erori XX cu lungime mai mică decât LL trebuie să se încadreze în prima categorie și este, prin urmare, conținută în Stabilizer; și orice lanț de erori XX cu capete este detectat de cod.

Dat fiind că codul Toric utilizează 2L22L^2 qubiți pentru a codifica 22 qubiți și are distanța L,L, rezultă că este un cod Stabilizer [[2L2,2,L]][[2L^2,2,L]].

Corectarea erorilor

Am discutat detectarea erorilor pentru codul Toric, și acum vom discuta pe scurt cum să corectăm erorile. Codul Toric este un cod CSS, deci erorile XX și erorile ZZ pot fi detectate și corectate independent. Menținând atenția pe generatorii Stabilizer ZZ, care detectează erorile XX, să considerăm cum poate fi corectat un lanț de erori XX. (Erorile ZZ sunt corectate într-un mod simetric.)

Dacă apare un sindrom diferit de sindromul (+1,,+1)(+1,\ldots,+1) atunci când generatorii Stabilizer ZZ sunt măsurați, rezultatele 1-1 dezvăluie capetele unuia sau mai multor lanțuri de erori XX. Putem încerca să corectăm aceste erori asociind în perechi rezultatele 1-1 și formând un lanț de corecții XX între ele. Când facem aceasta, are sens să alegem cele mai scurte căi de-a lungul cărora au loc corecțiile.

De exemplu, consideră diagrama de mai jos, care ilustrează un sindrom cu două rezultate 1-1, indicate prin celule gri, cauzate de un lanț de erori XX ilustrat prin linia și cercurile magenta. Cum am remarcat deja, lanțul în sine nu este dezvăluit de sindrom; numai capetele sunt vizibile.

Corectarea erorilor X cu o cale cea mai scurtă

Pentru a încerca să corectăm acest lanț de erori, se selectează cea mai scurtă cale între rezultatele de măsurare 1-1 și se aplică Gate-uri XX ca și corecții qubiților de-a lungul acestei căi (indicate în galben în figură). Deși corecțiile pot să nu corespundă cu lanțul real de erori, erorile și corecțiile împreună formează o buclă închisă de operații XX care este conținută în Stabilizer-ul codului. Corecția este, prin urmare, reușită în această situație, deoarece efectul combinat al erorilor și corecțiilor este să nu schimbe nimic la o stare codificată.

Această strategie nu va fi întotdeauna reușită. De exemplu, o explicație diferită pentru același sindrom ca în figura anterioară este prezentată în figura de mai jos.

Completarea unei erori logice cu corecții

De data aceasta, același lanț de corecții ca înainte nu reușește să corecteze acest lanț de erori, deoarece efectul combinat al erorilor și corecțiilor este că obținem o buclă închisă de operații XX care se înfășoară în jurul torului și, prin urmare, are un efect netrivial asupra spațiului codului. Deci, nu există nicio garanție că strategia tocmai descrisă, de a alege cea mai scurtă cale de corecții XX între două rezultate de măsurare a sindromului 1-1, va corecta corect eroarea care a cauzat acest sindrom.

Poate mai probabil, în funcție de modelul de zgomot, este că se măsoară un sindrom cu mai mult de două intrări 1-1, cum sugerează figura de mai jos.

Lanțuri de corecție multiple

Într-un astfel de caz, există diferite strategii de corecție cunoscute. O strategie naturală este să încerci să asociezi în perechi rezultatele de măsurare 1-1 și să efectuezi corecții de-a lungul celor mai scurte căi care conectează perechile, după cum este indicat în figură cu galben. În particular, se poate calcula o potrivire perfectă de greutate minimă între rezultatele de măsurare 1-1, iar apoi perechile sunt conectate prin cele mai scurte căi de corecții XX. Calculul unei potriviri perfecte de greutate minimă poate fi realizat eficient cu un algoritm clasic cunoscut sub numele de algoritmul blossom, descoperit de Edmonds în anii 1960.

Această abordare nu este în general optimă pentru cele mai frecvent studiate modele de zgomot, dar pe baza simulărilor numerice funcționează foarte bine în practică sub o rată de zgomot de aproximativ 10%, presupunând erori Pauli independente unde X,X, Y,Y, și Z,Z, sunt la fel de probabile.