Circuits
În informatică, circuitele sunt modele de calcul în care informațiile sunt transportate prin fire printr-o rețea de porți (gates), care reprezintă operații asupra informațiilor purtate de fire. Quantum circuits sunt un model specific de calcul bazat pe acest concept mai general.
Deși cuvântul „circuit" se referă adesea la o cale circulară, căile circulare nu sunt de fapt permise în modelele de calcul de tip circuit studiate cel mai frecvent. Cu alte cuvinte, considerăm de obicei circuite aciclice atunci când ne gândim la circuite ca modele de calcul. Quantum circuits urmează acest tipar; un quantum circuit reprezintă o secvență finită de operații care nu poate conține bucle de feedback.
Circuite booleene
Iată un exemplu de circuit boolean (clasic), în care firele transportă valori binare, iar porțile (gates) reprezintă operații de logică booleană:
Fluxul de informații de-a lungul firelor se desfășoară de la stânga la dreapta: firele din partea stângă a figurii, notate și , sunt biți de intrare, fiecare putând fi setat la orice valoare binară dorim, iar firul din partea dreaptă este ieșirea. Firele intermediare iau valorile determinate de porți (gates), care sunt evaluate de la stânga la dreapta.
Porțile (gates) sunt porți AND (notate ), porți OR (notate ) și porți NOT (notate ). Funcțiile calculate de aceste porți vor fi probabil familiare multor cititori, dar iată-le reprezentate prin tabele de valori:
Cele două mici cercuri pline de pe fire, chiar în dreapta numelor și , reprezintă operații de fan-out, care creează pur și simplu o copie a valorii purtate pe firul pe care apar, permițând ca această valoare să fie introdusă în mai multe porți (gates). Operațiile de fan-out nu sunt întotdeauna considerate porți (gates) în contextul clasic; uneori sunt tratate ca și cum ar fi „gratuite" într-un anumit sens. Când circuitele booleene sunt convertite în quantum circuits echivalente, trebuie însă să clasificăm operațiile de fan-out explicit drept porți (gates) pentru a le gestiona și contabiliza corect. Iată același Circuit ilustrat într-un stil mai comun în ingineria electrică, care folosește simboluri convenționale pentru porțile AND, OR și NOT:
Nu vom folosi acest stil sau aceste simboluri particulare de poartă în continuare, dar vom folosi simboluri diferite pentru a reprezenta Gate-uri în circuite cuantice, pe care le vom explica pe măsură ce le întâlnim.
Circuitul particular din acest exemplu calculează sau-exclusiv (sau XOR pe scurt), notat cu simbolul :
În diagrama următoare considerăm o singură alegere pentru intrări: și Fiecare fir este etichetat cu valoarea pe care o transportă, astfel încât poți urmări operațiile. Valoarea de ieșire este în acest caz, ceea ce este valoarea corectă pentru XOR:
Celelalte trei configurații posibile ale intrărilor pot fi verificate într-un mod similar.
Alte tipuri de circuite
Așa cum s-a sugerat mai sus, noțiunea de circuit în informatică este foarte generală. De exemplu, sunt uneori analizate circuite ale căror fire transportă valori diferite de și , la fel ca și Gate-urile care reprezintă alegeri diferite de operații.
În circuitele aritmetice, de pildă, firele pot transporta valori întregi, în timp ce poartă-urile reprezintă operații aritmetice, cum ar fi adunarea și înmulțirea. Figura următoare reprezintă un circuit aritmetic care primește două valori variabile de intrare ( și ) precum și o a treia intrare setată la valoarea Valorile transportate de fire, ca funcții ale valorilor și sunt prezentate în figură.
Putem considera, de asemenea, circuite care încorporează aleatorul, cum ar fi cele în care Gate-urile reprezintă operații probabilistice.
Circuite cuantice
În modelul Circuit cuantic, firele reprezintă Qubiți, iar Gate-urile reprezintă operații asupra acestor Qubiți. Ne vom concentra deocamdată pe operațiile pe care le-am întâlnit până acum, și anume operații unitare și măsurători în baza standard. Pe măsură ce învățăm despre alte tipuri de operații cuantice și măsurători, putem extinde modelul în mod corespunzător.
Iată un exemplu simplu de circuit cuantic:
În acest circuit avem un singur qubit numit reprezentat prin linia orizontală, și o secvență de poartă-uri reprezentând operații unitare asupra acestui qubit. La fel ca în exemplele de mai sus, fluxul de informații merge de la stânga la dreapta — astfel, prima operație efectuată este o operație Hadamard, a doua este o operație , a treia este o altă operație Hadamard, iar ultima operație este o operație . Aplicând întregul Circuit se aplică astfel compoziția acestor operații, asupra Qubitului
Uneori poate fi dorit să indicăm explicit stările de intrare sau ieșire ale circuitelor. De exemplu, dacă aplicăm operația asupra stării obținem starea Aceasta poate fi indicată astfel:
Circuitele cuantice pornesc adesea cu toți Qubiții inițializați la așa cum avem în acest caz, dar există și situații în care Qubiții de intrare sunt inițial setați la stări diferite. Iată un alt exemplu de circuit cuantic, de această dată cu doi Qubiți:
Ca întotdeauna, Gate-ul etichetat se referă la o operație Hadamard, în timp ce al doilea Gate este o operație NOT controlat: cercul plin reprezintă qubit-ul de control, iar cercul care seamănă cu simbolul denotă qubit-ul țintă.
Înainte de a examina acest circuit mai în detaliu și de a explica ce face, este imperativ să clarificăm mai întâi cum sunt ordonați Qubiții în circuitele cuantice. Aceasta se leagă de convenția pe care Qiskit o folosește pentru denumirea și ordonarea sistemelor, menționată pe scurt în lecția anterioară.
În Qiskit, qubit-ul din vârful unui Circuit are indexul și corespunde poziției din dreapta unui tuplu de qubiți (sau dintr-un șir, produs cartezian sau produs tensorial corespunzător acestui tuplu); qubit-ul al doilea de sus are indexul și corespunde poziției a doua din dreapta a tuplului, și tot așa. Qubit-ul din josul diagramei, care are cel mai mare index, corespunde prin urmare poziției din stânga a tuplului. În special, denumirile implicite ale qubiților dintr-un Circuit cu qubiți în Qiskit sunt reprezentate prin -tuplul unde este qubit-ul din vârf, iar este qubit-ul din jos în diagramele de circuit cuantic.
Această convenție este inversul unei convenții mai comune de ordonare a qubiților în circuite și reprezintă o sursă frecventă de confuzie. Mai multe informații despre această convenție de ordonare se găsesc pe pagina de documentație Bit-ordering in Qiskit.
Deși uneori ne abatem de la denumirile implicite folosite de Qiskit pentru qubiți, vom urma întotdeauna convenția de ordonare descrisă mai sus când interpretăm diagrame de circuit pe parcursul acestui curs. Prin urmare, interpretarea noastră a Circuit-ului de mai sus este că acesta descrie o operație pe o pereche de qubiți Dacă intrarea în Circuit este o stare cuantică de exemplu, asta înseamnă că qubit-ul de jos pornește din starea iar qubit-ul de sus pornește din starea
Pentru a înțelege ce face Circuit-ul, putem parcurge operațiile sale de la stânga la dreapta.
-
Prima operație este operația Hadamard pe :
Când se aplică un poartă pe un singur qubit în acest mod, ceilalți qubiți nu sunt afectați (în acest caz există un singur alt qubit). Faptul că nu se întâmplă nimic este echivalent cu efectuarea operației identitate. Dreptunghiul punctat din figura de mai sus reprezintă astfel această operație:
Observă că matricea identitate se află în stânga produsului tensorial, iar în dreapta, ceea ce este consistent cu convenția de ordonare a lui Qiskit.
-
A doua operație este operația controlled-NOT, unde este qubit-ul de control, iar este qubit-ul țintă:
Acțiunea Gate-ului controlled-NOT asupra stărilor din baza standard este următoarea:
Ținând cont că ordonăm qubiții ca cu în jos și în sus în Circuit-ul nostru, reprezentarea matriceală a Gate-ului controlled-NOT este aceasta:
Operația unitară implementată de întregul Circuit, căreia îi vom da numele este compoziția operațiilor:
În particular, amintindu-ne notația pentru stările Bell,
obținem că
Acest circuit ne oferă astfel o modalitate de a crea starea dacă îl rulăm pe doi qubiți inițializați în Mai general, ne oferă o modalitate de a converti baza standard în baza Bell. (Observă că, deși nu este important pentru acest exemplu, factorul de fază din ultima stare, ar putea fi eliminat dacă am dori, printr-o mică adăugire la circuit. De exemplu, am putea adăuga un poartă controlled- la început, care este similar cu un poartă controlled-NOT, cu excepția că o operație este aplicată Qubitului țintă în loc de o operație NOT atunci când controlul este setat la Alternativ, am putea adăuga un swap gate la sfârșit. Oricare dintre aceste variante elimină semnul minus fără a afecta acțiunea Circuitului asupra celorlalte trei stări ale bazei standard.)
În general, circuitele cuantice pot conține oricâte fire de qubit. Putem include și fire de bit clasic, indicate prin linii duble, ca în acest exemplu:
Aici avem un Gate Hadamard și un poartă controlled-NOT pe doi qubiți și la fel ca în exemplul anterior. Avem de asemenea doi biți clasici, și precum și două gate-uri de măsurare. Gate-urile de măsurare reprezintă măsurători în baza standard: qubiții sunt transformați în stările lor post-măsurare, iar rezultatele măsurătorilor sunt suprascrise pe biții clasici spre care indică săgețile.
Este adesea convenabil să reprezentăm o măsurătoare ca un poartă care primește un qubit ca intrare și produce un bit clasic la ieșire (spre deosebire de a scoate qubit-ul în starea sa post-măsurare și a scrie rezultatul într-un bit clasic separat). Aceasta înseamnă că qubit-ul măsurat a fost eliminat și poate fi ignorat în siguranță ulterior, starea sa schimbându-se în sau în funcție de rezultatul măsurătorii.
De exemplu, următoarea diagramă de circuit reprezintă același proces ca cel din diagrama anterioară, dar în care renunțăm la și după ce îi măsurăm:
Pe măsură ce cursul continuă, vom vedea mai multe exemple de circuite cuantice, care sunt de obicei mai complexe decât exemplele simple de mai sus. Iată câteva exemple de simboluri folosite pentru a denota gate-uri care apar frecvent în diagramele de circuit:
-
Gate-urile cu un singur qubit sunt reprezentate în general ca pătrate cu o literă care indică operația respectivă, astfel:
Gate-urile NOT (sau, echivalent, gate-urile ) sunt uneori reprezentate și printr-un cerc în jurul unui semn plus:
-
Gate-urile swap sunt reprezentate astfel:
-
Gate-urile controlate, adică gate-urile care descriu operații unitare controlate, sunt reprezentate printr-un cerc plin (indicând controlul) conectat printr-o linie verticală la operația controlată. De exemplu, gate-urile controlled-NOT, gate-urile controlled-controlled-NOT (sau Toffoli) și gate-urile controlled-swap (Fredkin) sunt reprezentate astfel:
-
Operațiile unitare arbitrare pe mai mulți qubiți pot fi privite ca gate-uri. Acestea sunt reprezentate prin dreptunghiuri etichetate cu numele operației unitare. De exemplu, iată o reprezentare a unei operații unitare (nespecificate) ca Gate, împreună cu o versiune controlată a acestui Gate: