La grammatica del calcolo quantistico

Lo stato di un qubit

In un computer classico, un bit è un interruttore: acceso (1) o spento (0). Un qubit è qualcosa di matematicamente più ricco. Il suo stato è descritto da un vettore unitario nello spazio di Hilbert bidimensionale, che si scrive nella notazione di Dirac come:

“`
|ψ⟩ = α|0⟩ + β|1⟩
“`

dove α e β sono numeri complessi che soddisfano la condizione di normalizzazione |α|² + |β|² = 1. I valori |α|² e |β|² rappresentano le probabilità di ottenere, rispettivamente, 0 o 1 al momento della misurazione.

Finché non misuriamo, il qubit è in una sovrapposizione di entrambi gli stati. Dopo la misurazione, collassa deterministicamente su uno dei due. Questo collasso è irreversibile ed è uno dei motivi per cui progettare circuiti quantistici utili richiede attenzione: vuoi che il circuito abbia già “lavorato” prima che tu misuri.

La sfera di Bloch: visualizzare uno stato quantistico

La Sfera di Bloch è la rappresentazione geometrica dello stato puro di un singolo qubit. È una sfera unitaria in cui:

– Il polo nord rappresenta lo stato |0⟩
– Il polo sud rappresenta lo stato |1⟩
– Ogni punto sulla superficie corrisponde a una sovrapposizione valida.

Parametrizzando in coordinate sferiche con angoli θ e φ:

“`
|ψ⟩ = cos(θ/2)|0⟩ + e^(iφ) sin(θ/2)|1⟩
“`

Applicare una porta logica quantistica a un qubit equivale a ruotare il vettore di stato sulla sfera. È una visualizzazione potente perché rende intuitivo ciò che altrimenti è solo algebra lineare: le porte sono rotazioni, i circuiti sono sequenze di rotazioni.

Le porte logiche quantistiche fondamentali

A differenza dei gate classici (AND, OR, NOT), le porte quantistiche sono **unitarie e reversibili — una conseguenza diretta della meccanica quantistica. Le più importanti per capire i circuiti variazionali:

Hadamard (H): porta il qubit da |0⟩ a una sovrapposizione uniforme (|0⟩ + |1⟩)/√2. È il modo standard per inizializzare qubit in sovrapposizione. Geometricamente, è una rotazione di π attorno all’asse X+Z della sfera di Bloch.

Porte di rotazione (RX, RY, RZ): ruotano il vettore di stato di un angolo θ attorno agli assi X, Y o Z. Sono le porte parametrizzate, quelle che negli algoritmi variazionali vengono ottimizzate durante il training. In PennyLane si usano come `qml.RY(theta, wires=0)`.

Pauli (X, Y, Z): le tre porte di singolo qubit corrispondenti alle matrici di Pauli. X è l’equivalente quantum del NOT classico (inverte |0⟩ e |1⟩). Z introduce una fase relativa. Y combina entrambi gli effetti.

CNOT (Controlled-NOT): la porta fondamentale a due qubit. Applica una X al qubit target condizionatamente allo stato del qubit di controllo. È il meccanismo primario per creare entanglement tra qubit. Senza entanglement, un sistema a N qubit è riducibile a N sistemi indipendenti e si perde tutto il vantaggio computazionale.

CZ (Controlled-Z): simile a CNOT, ma applica una Z condizionale. Ampiamente usata nei circuiti per quantum machine learning grazie alla sua simmetria.

Circuiti variazionali: il paradigma moderno

Un circuito quantistico variazionale (VQC) è una sequenza di porte parametrizzate il cui valore dipende da un vettore di parametri θ. La struttura tipica è:

1. Strato di encoding: i dati classici vengono “caricati” nel circuito tramite rotazioni (angle embedding, amplitude embedding)
2. Strati variazionali: sequenze di rotazioni RY/RZ intervallate da entanglement (CNOT o CZ)
3. Misurazione: lettura del valore atteso di un osservabile (tipicamente σ_Z su uno o più qubit)

Il circuito diventa quindi una funzione differenziabile: dato un input x e parametri θ, produce un output f(x; θ). Questo è esattamente la struttura di un layer di rete neurale, e motiva direttamente l’uso di VQC come componenti di reti neurali quantistiche (QNN).

Il gradiente quantistico: parameter shift rule

Per ottimizzare i parametri del circuito, abbiamo bisogno dei gradienti. Classicamente si usa la backpropagation. Sui circuiti quantistici si usa la parameter shift rule: il gradiente di una porta RY(θ) rispetto a θ si calcola come:

“`
∂f/∂θ = [f(θ + π/2) – f(θ – π/2)] / 2
“`

Questo richiede due esecuzioni del circuito per parametro, ma è esatto (non un’approssimazione numerica) e funziona sia sui simulatori sia sull’hardware reale. PennyLane implementa questa regola automaticamente tramite il suo sistema di differenziazione automatica, compatibile con PyTorch, JAX e NumPy.

Da qui in poi: algoritmi

Avere chiaro il funzionamento di qubit, porte e circuiti variazionali è il prerequisito per capire i grandi algoritmi quantistici ibridi (VQE, QAOA, QNN) che affronterò nei prossimi articoli. La grammatica è questa; ora possiamo costruire frasi.