AssertQubitIsInStateWithinTolerance-Vorgang

Warnung

Diese Dokumentation bezieht sich auf das klassische QDK, das durch das moderne QDK ersetzt wurde.

Weitere Informationen finden https://aka.ms/qdk.api Sie in der API-Dokumentation für das moderne QDK.

Namespace: Microsoft.Quantum.Diagnostics

Paket: Microsoft.Quantum.QSharp.Foundation

Bestätigt, dass sich ein Qubit im erwarteten Zustand befindet.

expected stellt einen komplexen Vektor dar, $\ket{\psi} = \begin{bmatrix}a & b\end{bmatrix}^{\mathrm{T}}$. Das erste Element der Tupel, das jedes der $a$darstellt, $b$ ist der reale Teil der komplexen Zahl, während das zweite der imaginäre Teil ist. Das letzte Argument definiert die Toleranz, mit der die Assertion vorgenommen wird.

operation AssertQubitIsInStateWithinTolerance (expected : (Microsoft.Quantum.Math.Complex, Microsoft.Quantum.Math.Complex), register : Qubit, tolerance : Double) : Unit is Adj + Ctl

Eingabe

erwartet: (Komplex,Komplex)

Erwartete komplexe Amplituden für $\ket{0}$ bzw. $\ket{1}$.

register : Qubit

Qubit, dessen Zustand bestätigt werden soll. Beachten Sie, dass dieses Qubit von anderen zugeordneten Qubits getrennt und nicht verschränkt ist.

Toleranz: Double

Additive Toleranz, durch die die tatsächlichen Amplituden von den erwarteten abweichen dürfen. Weitere Informationen finden Sie weiter unten in den Hinweisen.

Ausgabe: Einheit

Beispiel

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);
}

Hinweise

Der folgende Mathematica-Code kann verwendet werden, um Ausdrücke für mi, mx, my, mz zu überprüfen:

{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

Die Toleranz ist der durch $\langle\psi|\psi\rangle = x_1 I + x_2 X + x_3 X + x_3 Y + x_4 Z definierte $L_{\infty}$-Abstand zwischen dreidimensionalen realen Vektoren (x). $ und realer Vektor (y²,y₃,y₄), definiert durch ρ = y₁I + y₃Y + y₄Z, wobei ρ die Dichtematrix ist, die dem Zustand des Registers entspricht. Dies gilt nur unter der Annahme, dass Tr(ρ) und Tr(|ψ⟩⟨ψ|) beide 1 sind (z. B. x₁ = 1/2, y₁ = 1/2). Wenn dies nicht der Fall ist, gibt die Funktion an, dass l∞ Abstand zwischen (x²-x₁,x₃-x₁,x₄-x₁,x₄+x₁ und (y²-y₁,y₃-y₁,y₄-y₁,y₄+y₁) ist kleiner als der Toleranzparameter.

Beachten Sie, dass die Versionen "Adjoint" und "Controlled" dieses Vorgangs die Bedingung nicht überprüfen.