Implementação de nível de porta de inversão de valor próprio em HHL

Dec 28 2020

Estou tentando entender como funciona a implementação de nível de porta da etapa de inversão de valores próprios no algoritmo HHL.

Estou seguindo esta referência , onde se afirma (Lema 4) que isso pode ser feito pelo uso de rotações controladas:

$$ 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) $$

Onde $\widetilde{\theta}$ é a representação de precisão finita de n bits do ângulo $\theta$, e $\sigma_y$ a matriz Y Pauli.

Minha pergunta é: como são os ângulos de rotação $\widetilde{\theta}$ para o unitário $U_\theta$ calculado / aplicado sem conhecimento a priori dos autovalores $\lambda_j$ da matriz do sistema $A$?

Eu entendo que o vetor de estado $|\widetilde{\theta} \rangle$ é obtido na etapa anterior do algoritmo extraindo os autovalores $|\lambda_j \rangle$ de $A$usando QPE (e, em seguida, aplicando uma função inverse + arcsin conforme descrito aqui ), mas não tenho certeza de como esses ângulos também são aplicados como os parâmetros para as portas de rotação controlada (parâmetro expoente em$U_\theta$.)

Para sua informação, eu vi este outro post onde está afirmado: "Você ... ... tem (pelo menos uma boa aproximação) seus autovalores registrados em um registro. Se você controlar fora desse registro, você pode usá-lo para decidir o ângulo de rotação para cada autovetor. "

Minha pergunta é como você "usa [o registro que contém$|\widetilde{\theta} \rangle$] para decidir o ângulo de rotação [$\widetilde{\theta}$ no $\exp$ função de $U_\theta$] "?

Obrigado!

Respostas

1 Alex Dec 28 2020 at 18:25

Usar o registro para decidir o ângulo de rotação significa o seguinte: você tem um registro $|\tilde{\theta}\rangle$ (composto de potencialmente mais de um qubit) e você aplica rotações de outro registro controlado no valor dos qubits de $|\tilde{\theta}\rangle$. Diferentes rotações que você aplica resultam em diferentes funções sendo implementadas em seus qubits do Ancilla. Mas isso provavelmente já era conhecido por você.

A questão de quais rotações fazer para aplicar uma função específica é muito mais complicada e não estou ciente de qualquer solução geral. Pela primeira vez, o Qiskit tem sua própria implementação de HHL, mas não sei até que ponto é geral. Existem, no entanto, outros exemplos em que é "fácil" implementar, por exemplo, a função de inversão de valores próprios necessária para HHL. No presente trabalho , os autores implementar uma aproximação da sub-rotina de inversão de valores próprios (o código Quilpode ser encontrada no repositório gitlab associado) que é exato no caso de autovalores que são potências de 2. O motivo pelo qual é exato para potências de 2 é porque, nesse caso, a inversão pode ser escrita como uma combinação de trocas de bits, de modo que a sub-rotina de inversão de autovalor é uma coleção de portas SWAP controladas (uma representação pictórica do circuito está na Fig. 3 deste artigo ). Mas, como eu disse antes, não estou ciente das maneiras gerais de implementar grandes classes de funções, até agora.