Vai al contenuto principale

Circuiti

In informatica, i circuiti sono modelli di computazione in cui l'informazione viene trasportata da fili attraverso una rete di gate, che rappresentano operazioni sull'informazione portata dai fili. I circuiti quantistici sono un modello di computazione specifico basato su questo concetto più generale.

Sebbene la parola "circuito" spesso evochi un percorso circolare, i percorsi circolari non sono in realtà consentiti nei modelli di computazione a circuito più comunemente studiati. In altre parole, di solito consideriamo circuiti aciclici quando pensiamo ai circuiti come modelli computazionali. I circuiti quantistici seguono questo schema: un circuito quantistico rappresenta una sequenza finita di operazioni che non può contenere cicli di retroazione.

Circuiti booleani​

Ecco un esempio di circuito booleano (classico), in cui i fili trasportano valori binari e i gate rappresentano operazioni di logica booleana:

Esempio di circuito booleano

Il flusso di informazioni lungo i fili va da sinistra a destra: i fili sul lato sinistro della figura, etichettati X\mathsf{X} e Y\mathsf{Y}, sono i bit di input, che possono essere impostati a qualsiasi valore binario si desideri, mentre il filo sul lato destro è l'output. I fili intermedi assumono i valori determinati dai gate, che vengono valutati da sinistra a destra.

I gate sono gate AND (etichettati ∧\wedge), gate OR (etichettati ∨\vee) e gate NOT (etichettati ¬\neg). Le funzioni calcolate da questi gate saranno probabilmente familiari a molti lettori, ma qui sono rappresentate tramite tabelle di valori:

a¬a0110aba∧b000010100111aba∨b000011101111\begin{array}{c} \begin{array}{c|c} a & \neg a\\ \hline 0 & 1\\ 1 & 0\\ \end{array}\\ \\ \\ \end{array} \qquad\quad \begin{array}{c|c} ab & a \wedge b\\ \hline 00 & 0\\ 01 & 0\\ 10 & 0\\ 11 & 1 \end{array} \qquad\quad \begin{array}{c|c} ab & a \vee b\\ \hline 00 & 0\\ 01 & 1\\ 10 & 1\\ 11 & 1 \end{array}

I due piccoli cerchi pieni sui fili appena a destra dei nomi X\mathsf{X} e Y\mathsf{Y} rappresentano operazioni di fan-out, che creano semplicemente una copia del valore trasportato dal filo su cui compaiono, permettendo a questo valore di essere inviato come input a più gate. Le operazioni di fan-out non sono sempre considerate gate nel contesto classico; a volte vengono trattate come se fossero "gratuite" in un certo senso. Quando i circuiti booleani vengono convertiti in circuiti quantistici equivalenti, tuttavia, è necessario classificare esplicitamente le operazioni di fan-out come gate per gestirle e contabilizzarle correttamente.

Ecco lo stesso circuito illustrato in uno stile più comune in ingegneria elettrica, che utilizza simboli convenzionali per i gate AND, OR e NOT:

Circuito booleano in stile classico

Non utilizzeremo ulteriormente questo stile né questi particolari simboli di gate, ma useremo simboli diversi per rappresentare i gate nei circuiti quantistici, che spiegheremo man mano che li incontreremo.

Il circuito particolare in questo esempio calcola l'OR esclusivo (o XOR in breve), denotato dal simbolo ⊕\oplus:

aba⊕b000011101110\begin{array}{c|c} ab & a \oplus b\\ \hline 00 & 0\\ 01 & 1\\ 10 & 1\\ 11 & 0 \end{array}

Nel diagramma successivo consideriamo una sola scelta degli input: X=0\mathsf{X}=0 e Y=1.\mathsf{Y}=1. Ogni filo è etichettato con il valore che trasporta, così puoi seguire le operazioni. Il valore di output è 11 in questo caso, che è il valore corretto per lo XOR: 0⊕1=1.0 \oplus 1 = 1.

Valutazione di un circuito booleano

Le altre tre possibili configurazioni di input possono essere verificate in modo analogo.

Altri tipi di circuiti​

Come suggerito sopra, la nozione di circuito in informatica è molto generale. Ad esempio, vengono talvolta analizzati circuiti i cui fili trasportano valori diversi da 00 e 11, così come gate che rappresentano scelte diverse di operazioni.

Nei circuiti aritmetici, ad esempio, i fili possono trasportare valori interi mentre i gate rappresentano operazioni aritmetiche, come addizione e moltiplicazione. La figura seguente mostra un circuito aritmetico che prende due valori di input variabili (xx e yy) più un terzo input impostato al valore 1.1. I valori trasportati dai fili, come funzioni dei valori xx e y,y, sono mostrati nella figura.

Esempio di circuito aritmetico

Possiamo anche considerare circuiti che incorporano casualità, come quelli in cui i gate rappresentano operazioni probabilistiche.

Circuiti quantistici​

Nel modello a circuito quantistico, i fili rappresentano qubit e i gate rappresentano operazioni su questi qubit. Ci concentreremo per ora sulle operazioni incontrate finora, ovvero le operazioni unitarie e le misurazioni nella base standard. Man mano che apprenderemo altri tipi di operazioni e misurazioni quantistiche, potremo arricchire il modello di conseguenza.

Ecco un semplice esempio di circuito quantistico:

Semplice circuito quantistico

In questo circuito abbiamo un singolo qubit chiamato X,\mathsf{X}, rappresentato dalla linea orizzontale, e una sequenza di gate che rappresentano operazioni unitarie su questo qubit. Proprio come negli esempi precedenti, il flusso di informazioni va da sinistra a destra — quindi la prima operazione eseguita è un'operazione di Hadamard, la seconda è un'operazione SS, la terza è un'altra operazione di Hadamard e l'ultima è un'operazione TT. Applicare l'intero circuito equivale quindi ad applicare la composizione di queste operazioni, THSH,T H S H, al qubit X.\mathsf{X}.

A volte potremmo voler indicare esplicitamente gli stati di input o di output dei circuiti. Ad esempio, se applichiamo l'operazione THSHT H S H allo stato ∣0⟩,\vert 0\rangle, otteniamo lo stato 1+i2∣0⟩+12∣1⟩.\frac{1+i}{2}\vert 0\rangle + \frac{1}{\sqrt{2}} \vert 1 \rangle. Questo può essere indicato come segue:

Semplice circuito quantistico valutato

I circuiti quantistici spesso iniziano con tutti i qubit inizializzati a ∣0⟩,\vert 0\rangle, come in questo caso, ma ci sono anche situazioni in cui i qubit di input sono impostati inizialmente su stati diversi. Ecco un altro esempio di circuito quantistico, questa volta con due qubit:

Circuito quantistico che crea un e-bit

Come sempre, il gate etichettato HH si riferisce a un'operazione di Hadamard, mentre il secondo gate è un'operazione controlled-NOT: il cerchio pieno rappresenta il qubit di controllo e il cerchio che ricorda il simbolo ⊕\oplus indica il qubit target.

Prima di esaminare questo circuito in maggiore dettaglio e spiegare cosa fa, è fondamentale chiarire come vengono ordinati i qubit nei circuiti quantistici. Questo si collega alla convenzione che Qiskit usa per nominare e ordinare i sistemi, menzionata brevemente nella lezione precedente.

Convenzione di ordinamento dei qubit in Qiskit per i circuiti

In Qiskit, il qubit più in alto in un diagramma di circuito ha indice 00 e corrisponde alla posizione più a destra in una tupla di qubit (o in una stringa, prodotto cartesiano o prodotto tensore corrispondente a questa tupla), il qubit secondo dall'alto ha indice 11 e corrisponde alla posizione seconda da destra in una tupla, e così via. Il qubit più in basso, che ha l'indice più alto, corrisponde quindi alla posizione più a sinistra in una tupla. In particolare, i nomi predefiniti di Qiskit per i qubit in un circuito a nn qubit sono rappresentati dalla nn-tupla (qn−1,…,q0),(\mathsf{q_{n-1}},\ldots,\mathsf{q_{0}}), con q0\mathsf{q_{0}} come qubit in cima e qn−1\mathsf{q_{n-1}} in fondo nei diagrammi di circuito quantistico.

Nota che questa è un'inversione rispetto a una convenzione più comune per l'ordinamento dei qubit nei circuiti, ed è una fonte frequente di confusione. Ulteriori informazioni su questa convenzione di ordinamento sono disponibili nella pagina di documentazione Bit-ordering in Qiskit.

Sebbene a volte ci discostiamo dai nomi predefiniti specifici q0,…,qn−1\mathsf{q_{0}},\ldots,\mathsf{q_{n-1}} usati da Qiskit per i qubit, seguiremo sempre la convenzione di ordinamento descritta sopra nell'interpretare i diagrammi di circuito nel corso. Pertanto, la nostra interpretazione del circuito sopra è che descrive un'operazione su una coppia di qubit (X,Y).(\mathsf{X},\mathsf{Y}). Se l'input del circuito è uno stato quantistico ∣ψ⟩⊗∣ϕ⟩,\vert\psi\rangle \otimes \vert\phi\rangle, ad esempio, ciò significa che il qubit inferiore X\mathsf{X} inizia nello stato ∣ψ⟩\vert\psi\rangle e il qubit superiore Y\mathsf{Y} inizia nello stato ∣ϕ⟩.\vert\phi\rangle.

Per capire cosa fa il circuito, possiamo scorrere le sue operazioni da sinistra a destra.

  1. La prima operazione è un'operazione di Hadamard su Y\mathsf{Y}:

    Prima operazione del creatore di e-bit

    Quando si applica un gate a un singolo qubit in questo modo, agli altri qubit non succede nulla (in questo caso è solo un altro qubit). Il fatto che non succeda nulla è equivalente all'esecuzione dell'operazione identità. Il rettangolo tratteggiato nella figura sopra rappresenta quindi questa operazione:

    I⊗H=(12120012−12000012120012−12). \mathbb{I}\otimes H = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0\\[2mm] \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix}.

    Nota che la matrice identità è a sinistra del prodotto tensoriale e HH è a destra, il che è coerente con la convenzione di ordinamento di Qiskit.

  2. La seconda operazione è l'operazione controlled-NOT, dove Y\mathsf{Y} è il controllo e X\mathsf{X} è il target:

    Seconda operazione del creatore di e-bit

    L'azione del gate controlled-NOT sugli stati della base standard è la seguente:

    gate controlled-NOT

    Dato che ordiniamo i qubit come (X,Y),(\mathsf{X}, \mathsf{Y}), con X\mathsf{X} in basso e Y\mathsf{Y} in cima nel nostro circuito, la rappresentazione matriciale del gate controlled-NOT è questa:

    (1000000100100100). \begin{pmatrix} 1 & 0 & 0 & 0\\[2mm] 0 & 0 & 0 & 1\\[2mm] 0 & 0 & 1 & 0\\[2mm] 0 & 1 & 0 & 0 \end{pmatrix}.

L'operazione unitaria implementata dall'intero circuito, che chiameremo U,U, è la composizione delle operazioni:

U=(1000000100100100)(12120012−12000012120012−12)=(1212000012−1200121212−1200).U = \begin{pmatrix} 1 & 0 & 0 & 0\\[2mm] 0 & 0 & 0 & 1\\[2mm] 0 & 0 & 1 & 0\\[2mm] 0 & 1 & 0 & 0 \end{pmatrix} \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0\\[2mm] \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\[2mm] \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0 \end{pmatrix}.

In particolare, ricordando la nostra notazione per gli stati di Bell,

∣ϕ+⟩=12∣00⟩+12∣11⟩∣ϕ−⟩=12∣00⟩−12∣11⟩∣ψ+⟩=12∣01⟩+12∣10⟩∣ψ−⟩=12∣01⟩−12∣10⟩,\begin{aligned} \vert \phi^+ \rangle & = \frac{1}{\sqrt{2}} \vert 0 0 \rangle + \frac{1}{\sqrt{2}} \vert 1 1 \rangle \\[2mm] \vert \phi^- \rangle & = \frac{1}{\sqrt{2}} \vert 0 0 \rangle - \frac{1}{\sqrt{2}} \vert 1 1 \rangle \\[2mm] \vert \psi^+ \rangle & = \frac{1}{\sqrt{2}} \vert 0 1 \rangle + \frac{1}{\sqrt{2}} \vert 1 0 \rangle \\[2mm] \vert \psi^- \rangle & = \frac{1}{\sqrt{2}} \vert 0 1 \rangle - \frac{1}{\sqrt{2}} \vert 1 0 \rangle, \end{aligned}

troviamo che

U∣00⟩=∣ϕ+⟩U∣01⟩=∣ϕ−⟩U∣10⟩=∣ψ+⟩U∣11⟩=−∣ψ−⟩.\begin{aligned} U \vert 00\rangle & = \vert \phi^+\rangle\\ U \vert 01\rangle & = \vert \phi^-\rangle\\ U \vert 10\rangle & = \vert \psi^+\rangle\\ U \vert 11\rangle & = -\vert \psi^-\rangle. \end{aligned}

Questo circuito ci fornisce quindi un modo per creare lo stato ∣ϕ+⟩\vert\phi^+\rangle se lo eseguiamo su due qubit inizializzati a ∣00⟩.\vert 00\rangle. Più in generale, ci offre un modo per convertire la base standard nella base di Bell. (Nota che, sebbene non sia importante per questo esempio, il fattore di fase −1-1 sull'ultimo stato, −∣ψ−⟩,-\vert \psi^-\rangle, potrebbe essere eliminato se lo volessimo aggiungendo una piccola modifica al circuito. Ad esempio, potremmo aggiungere un gate controlled-ZZ all'inizio, che è simile a un gate controlled-NOT tranne per il fatto che un'operazione ZZ viene applicata al qubit target anziché un'operazione NOT quando il controllo è impostato a 1.1. In alternativa, potremmo aggiungere un gate di swap alla fine. Entrambe le scelte eliminano il segno meno senza influenzare l'azione del circuito sugli altri tre stati della base standard.)

In generale, i circuiti quantistici possono contenere un numero qualsiasi di fili qubit. Possiamo anche includere fili per bit classici, indicati da doppie linee, come in questo esempio:

Circuito di esempio con misurazioni

Qui abbiamo un gate di Hadamard e un gate controlled-NOT su due qubit X\mathsf{X} e Y,\mathsf{Y}, proprio come nell'esempio precedente. Abbiamo anche due bit classici, A\mathsf{A} e B,\mathsf{B}, e due gate di misurazione. I gate di misurazione rappresentano misurazioni nella base standard: i qubit vengono modificati nei loro stati post-misurazione, mentre i risultati della misurazione vengono sovrascritti sui bit classici a cui puntano le frecce.

Spesso è conveniente rappresentare una misurazione come un gate che prende un qubit come input e restituisce un bit classico (invece di restituire il qubit nel suo stato post-misurazione e scrivere il risultato su un bit classico separato). Ciò significa che il qubit misurato è stato scartato e può essere tranquillamente ignorato in seguito, poiché il suo stato è diventato ∣0⟩\vert 0\rangle o ∣1⟩\vert 1\rangle a seconda del risultato della misurazione.

Ad esempio, il seguente diagramma di circuito rappresenta lo stesso processo di quello nel diagramma precedente, ma in cui ignoriamo X\mathsf{X} e Y\mathsf{Y} dopo averli misurati:

Circuito di esempio con misurazioni compatto

Man mano che il corso prosegue, vedremo altri esempi di circuiti quantistici, generalmente più complicati dei semplici esempi sopra. Ecco alcuni esempi di simboli usati per denotare gate che compaiono comunemente nei diagrammi di circuito:

  • I gate a singolo qubit sono generalmente mostrati come quadrati con una lettera che indica di quale operazione si tratta, come questo:

    gate a singolo qubit

    I gate NOT (o equivalentemente gate XX) sono talvolta denotati anche da un cerchio attorno a un segno più:

    gate NOT

  • I gate di swap sono denotati come segue:

    gate di swap

  • I gate controllati, ovvero gate che descrivono operazioni unitarie controllate, sono denotati da un cerchio pieno (che indica il controllo) collegato da una linea verticale all'operazione controllata. Ad esempio, i gate controlled-NOT, i gate controlled-controlled-NOT (o Toffoli) e i gate controlled-swap (Fredkin) sono denotati in questo modo:

    gate controllato

  • Le operazioni unitarie arbitrarie su più qubit possono essere viste come gate. Sono rappresentate da rettangoli etichettati con il nome dell'operazione unitaria. Ad esempio, ecco una rappresentazione di un'operazione unitaria UU (non specificata) come gate, insieme a una versione controllata di questo gate:

    Operazione unitaria arbitraria insieme alla versione controllata