Operação AssertQubitIsInStateWithinTolerance
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.Diagnostics
Pacote: Microsoft.Quantum.QSharp.Foundation
Afirma que um qubit no estado esperado.
expected
representa um vetor complexo, $\ket{\psi} = \begin{bmatrix}a & b\end{bmatrix}^{\mathrm{T}}$.
O primeiro elemento das cadeias de identificação que representa cada uma das $a$, $b$ é a parte real do número complexo, enquanto a segunda é a parte imaginária.
O último argumento define a tolerância com que a asserção é feita.
operation AssertQubitIsInStateWithinTolerance (expected : (Microsoft.Quantum.Math.Complex, Microsoft.Quantum.Math.Complex), register : Qubit, tolerance : Double) : Unit is Adj + Ctl
Entrada
esperado: (Complexo,Complexo)
Amplitudes complexas esperadas para $\ket{0}$ e $\ket{1}$, respetivamente.
registar: Qubit
Qubit cujo estado deve ser afirmado. Tenha em atenção que este qubit é considerado separável de outros qubits alocados e não entrelaçado.
tolerância: Duplo
Tolerância a aditivos através da qual as amplitudes reais são autorizadas a desviarem-se do esperado. Veja as observações abaixo para obter detalhes.
Saída: Unidade
Exemplo
using (qubits = Qubit[2]) {
// Both qubits are initialized as |0〉: a=(1 + 0*i), b=(0 + 0*i)
AssertQubitIsInStateWithinTolerance((Complex(1., 0.), Complex(0., 0.)), qubits[0], 1e-5);
AssertQubitIsInStateWithinTolerance((Complex(1., 0.), Complex(0., 0.)), qubits[1], 1e-5);
Y(qubits[1]);
// Y |0〉 = i |1〉: a=(0 + 0*i), b=(0 + 1*i)
AssertQubitIsInStateWithinTolerance((Complex(0., 0.), Complex(0., 1.)), qubits[1], 1e-5);
}
Observações
O seguinte código matemático pode ser utilizado para verificar expressões para mi, mx, my, mz:
{Id, X, Y, Z} = Table[PauliMatrix[k], {k, 0, 3}];
st = {{ reA + I imA }, { reB + I imB} };
M = st . ConjugateTranspose[st];
mx = Tr[M.X] // ComplexExpand;
my = Tr[M.Y] // ComplexExpand;
mz = Tr[M.Z] // ComplexExpand;
mi = Tr[M.Id] // ComplexExpand;
2 m == Id mi + X mx + Z mz + Y my // ComplexExpand // Simplify
A tolerância é a distância $L_{\infty}$ entre o vetor real dimensional (x₂,x₃,x₄) definido por $\langle\psi|\psi\rangle = x_1 I + x_2 X + x_3 Y + x_4 Z$ e vetor real (1y₂,y₃,y₄) definido por ρ = y₁I + y₂X + y₃Y + y₄Z em que ρ é a matriz de densidade correspondente ao estado do registo. Isto só é verdade no pressuposto de que Tr(ρ) e Tr(|ψ⟩⟨ψ|) são ambos 1 (por exemplo, x₁ = 1/2, y₁ = 1/2). Se não for esse o caso, a função afirma que l∞ distância entre (x₂-x₁,x₃-x₁,x₄-x₁,x₄+x₁) e (y₂-y₁,y₃-y₁,y₄-y₁,y₄+y₁) é menor do que o parâmetro de tolerância.
Tenha em atenção que as versões Adjacentes e Controladas desta operação não verificarão a condição.