Função QuantumROM
Aviso
Esta documentação refere-se ao QDK Clássico, que foi substituído pelo QDK Moderno.
https://aka.ms/qdk.api Veja a documentação da API para o QDK Moderno.
Espaço de nomes: Microsoft.Quantum.Preparation
Pacote: Microsoft.Quantum.Standard
Aviso
QuantumROM foi preterido. Em alternativa, utilize a função PurifiedMixedState .
Utiliza a técnica rom quântica para representar uma determinada matriz de densidade.
Dada uma lista de coeficientes $N$ $\alpha_j$, isto devolve um $U unitário$ que utiliza a técnica Quantum-ROM para preparar uma aproximação $\tilde\rho\sum_{j=0}^{N-1}p_j\ket{j}\bra{j}$ da purificação da matriz de densidade $\rho=\sum_{j=0}^{N-1}\frac{|alpha_j|} {\sum_k |\alpha_k|} \ket{j}\bra{j}$. Nesta aproximação, o erro $\epsilon$ é tal que $|p_j-\frac{|alpha_j|} {\sum_k |\alpha_k|}|\le \epsilon / N$ e $|\tilde\rho - \rho| \le \epsilon$. Por outras palavras, $$ \begin{align} U\ket{0}^{\lceil\log_2 N\rceil}\ket{0}^{m}=\sum_{j=0}^{N-1}\sqrt{p_j} \ket{j}\ket{\text{garbage}_j}. \end{align} $$
function QuantumROM (targetError : Double, coefficients : Double[]) : ((Int, (Int, Int)), Double, ((Microsoft.Quantum.Arithmetic.LittleEndian, Qubit[]) => Unit is Adj + Ctl))
Entrada
targetError: Duplo
O erro de destino $\epsilon$.
coeficientes: Duplo[]
Matriz de coeficientes de $N$ que especifica a probabilidade de estados de base. Os números negativos $-\alpha_j$ serão tratados como $|\alpha_j|$.
Saída: ((Int;(Int,Int)),Double,(LittleEndian,Qubit[]) =>Unit is Adj + Ctl)
Primeiro parâmetro
Uma cadeia de identificação (x,(y,z))
em que x = y + z
é o número total de qubits alocados é y
o número de qubits para o LittleEndian
registo e z
é o Número de qubits de lixo.
Segundo parâmetro
A norma única $\sum_j |\alpha_j|$ da matriz de coeficientes.
Terceiro parâmetro
O unitário $U$.
Exemplo
O fragmento de código seguinte prepara uma purificação do estado $3$-qubit $\rho=\sum_{j=0}^{4}\frac{|alpha_j|} {\sum_k |\alpha_k|} \ket{j}\bra{j}$, onde $\vec\alpha=(1.0,2.0,3.0,4.0,5.0)$, e o erro é 1e-3
;
let coefficients = [1.0,2.0,3.0,4.0,5.0];
let targetError = 1e-3;
let ((nTotalQubits, (nIndexQubits, nGarbageQubits)), oneNorm, op) = QuantumROM(targetError, coefficients);
using (indexRegister = Qubit[nIndexQubits]) {
using (garbageRegister = Qubit[nGarbageQubits]) {
op(LittleEndian(indexRegister), garbageRegister);
}
}
Referências
- Encoding Electronic Spectra in Quantum Circuits with Linear T Complexity Ryan Babbush, Craig Gidney, Dominic W. Berry, Nathan Wiebe, Jarrod McClean, Alexandru Paler, Austin Fowler, Hartmut Neven https://arxiv.org/abs/1805.03662