Implementazione a livello di gate di Eigenvalue-Inversion in HHL
Sto cercando di capire come funziona l'implementazione a livello di gate della fase di inversione degli autovalori nell'algoritmo HHL.
Seguo questo riferimento , dove si afferma (Lemma 4) che ciò può essere ottenuto mediante l'uso di rotazioni controllate:
$$ U_\theta: |\widetilde{\theta} \rangle |0 \rangle \rightarrow |\widetilde{\theta} \rangle \left(\cos \widetilde{\theta} |0\rangle + sin \widetilde{\theta} |1 \rangle \right ) $$
$$U_\theta = \sum_{\widetilde{\theta} \in \{0,1\}^n} |\widetilde{\theta}\rangle \langle \widetilde{\theta}| \otimes \exp \left(-i \widetilde{\theta} \sigma_y \right) $$
dove $\widetilde{\theta}$ è la rappresentazione a precisione finita di n bit dell'angolo $\theta$, e $\sigma_y$ la matrice Y Pauli.
La mia domanda è: come sono gli angoli di rotazione $\widetilde{\theta}$ per l'unità $U_\theta$ calcolato / applicato senza la conoscenza a priori degli autovalori $\lambda_j$ della matrice di sistema $A$?
Capisco che il vettore di stato $|\widetilde{\theta} \rangle$ si ottiene nel passaggio precedente dell'algoritmo estraendo gli autovalori $|\lambda_j \rangle$ di $A$usando QPE (e quindi applicando una funzione inversa + arcsin come descritto qui ), ma non sono sicuro di come questi angoli vengano applicati anche come parametri per le porte a rotazione controllata (parametro esponente$U_\theta$.)
Cordiali saluti, ho visto questo altro post in cui si afferma: "Tu ... ... hai (almeno una buona approssimazione) i tuoi autovalori registrati su un registro. Se controlli fuori da quel registro, puoi usarlo per decidere l'angolo di rotazione per ogni autovettore. "
Quindi la mia domanda è come si fa a "usarlo [il registro contenente$|\widetilde{\theta} \rangle$] per decidere l'angolo di rotazione [$\widetilde{\theta}$ nel $\exp$ funzione di $U_\theta$] "?
Grazie!
Risposte
Usare il registro per decidere l'angolo di rotazione significa quanto segue: hai un registro $|\tilde{\theta}\rangle$ (composto potenzialmente da più di un qubit) e si applicano rotazioni di un altro registro controllate sul valore dei qubit di $|\tilde{\theta}\rangle$. Diverse rotazioni applicate comportano l'implementazione di diverse funzioni sui qubit ancilla. Ma forse questo ti era già noto.
La questione di quali rotazioni fare per applicare una funzione specifica è molto più complicata e non sono a conoscenza di alcuna soluzione generale. Per una volta, Qiskit ha una propria implementazione di HHL, ma non so fino a che punto sia generale. Esistono tuttavia altri esempi in cui è "facile" implementare, ad esempio, la funzione di inversione degli autovalori richiesta per HHL. In questo articolo , gli autori implementano un'approssimazione della subroutine di inversione degli autovalori (il codice in Quilpuò essere trovato nel repository GitLab associato) che è esatto nel caso di autovalori che sono potenze di 2. Il motivo per cui è esatto per potenze di 2 è perché in quel caso l'inversione può essere scritta come una combinazione di scambi di bit, quindi la subroutine di inversione degli autovalori è una raccolta di porte SWAP controllate (una rappresentazione pittorica del circuito è in Fig. 3 in questo documento ). Ma, come ho detto prima, finora non sono a conoscenza dei modi generali di implementare grandi classi di funzioni.