# Qiskit: Kraus decompostion of phase amplitude damping error is not appropriate

The phase_amplitude_damping_error(param_amp, param_phase, excited_state_population=0, canonical_kraus=True) in Qiskit allows only the parameter range $$p_a + p_p \le 1$$, although all parameters $$p_a, p_p \in [0,1]$$ must be valid and this restriction is not necessary. Furthermore one should relate the phase parameter $$p_p$$ to the pure phase relaxation time $$T_\phi$$ by $$p_p = 1- e^{t/T_\phi}$$ with $$T_\phi = T_1 T_2/(2T_1-T_2)$$ where $$T_1, T_2$$ are the relaxation time constants of a specific qubit and the constants of the thermal_relaxation_error(t1, t2, time, excited_state_population=0). All this can be achieved by choosing the appropriate Kraus matrices

\begin{align} A_0 & = \sqrt{1-p_\uparrow}\begin{bmatrix} 1&0 \\0 & \sqrt{1-p_p}\sqrt{1-p_a}\end{bmatrix}, \, &A_1 &= \sqrt{1-p_\uparrow}\begin{bmatrix}0 & 0 \\0 & \sqrt{1-p_a}\sqrt{p_p}\end{bmatrix}, \, &A_2 &= \sqrt{1-p_\uparrow}\begin{bmatrix}0& \sqrt{p_a} \\0 &0\end{bmatrix} \\ \\ B_0 &= \sqrt{p_\uparrow}\begin{bmatrix} \sqrt{1-p_p}\sqrt{1-p_a}&0\\0 & 1\end{bmatrix}, &B_1 &= \sqrt{p_\uparrow}\begin{bmatrix}\sqrt{1-p_a}\sqrt{p_p} & 0\\0 & 0\end{bmatrix}, &B_2 &= \sqrt{p_\uparrow}\begin{bmatrix}0& 0 \\ \sqrt{p_a} & 0\end{bmatrix} \,. \end{align}

where $$p_\uparrow$$ is the population probility of the exited state.

With transformations $$p_a = 1- e^{t/T_1}$$ and $$p_p = 1- e^{t/T_\phi}$$ one can use the same Kraus matrices for the thermal relaxation error without making a case distinction ($$T_1 < T_2$$) or detour via Choi matrices, as it is described in the source code of the thermal relaxation error.

In the following I want to give some hints how to give analytically a set of canonical or a simple minimal set of 4 Kraus matrices for phase amplitude damping channel or thermal relaxation channel. To achieve that we consider the Bloch vector transformation of the channel $$\left(r_x, r_y,r_z\right) \xrightarrow{\mathcal{E}_{PAD}} \left( \sqrt{1-p_a}\sqrt{1-p_p} \, r_x, \sqrt{1-p_a}\sqrt{1-p_p}\, r_y, (1-p_a)\, r_z +(1-2p_\uparrow)p_a \right)$$ with which the superoperator and by reshuffling the Choi matrix $$\Lambda$$ can be obtained directly $$\Lambda = \begin{bmatrix} 1 -p_\uparrow p_a & 0 & 0 &(\sqrt{1-p_a}\sqrt{1-p_p} \\ 0 & p_\uparrow p_a & 0 & 0 \\ 0 & 0 & (1-p_\uparrow)p_a & 0 \\ \sqrt{1-p_a}\sqrt{1-p_p} & 0 & 0 & 1 -(1-p_\uparrow)p_a \end{bmatrix} \,.$$ The canonical Kraus matrices $$E_0,E_1, E_2,E_3$$ can be read from this and are analytically given by \begin{align} E_1 = &\sqrt{p_\uparrow p_a}\begin{bmatrix} 0&0\\1&0\end{bmatrix} \\ E_2 = &\sqrt{(1-p_\uparrow) p_a}\begin{bmatrix} 0&1\\0&0\end{bmatrix}, \end{align}

where the diagonal matrices $$E_0,E_3$$ can be analytically determined with eigenvalues and eigenvectors of the remaining 2x2 matrix.

If you want to specify only the minimum set of Kraus matrices, it is sufficient to specify a simple root of the remaining 2x2 matrix to obtain, e.g., the following matrices \begin{align} E_0 = & \begin{bmatrix} \sqrt{1-p_\uparrow p_a}&0\\0&\sqrt{\frac{(1-p_a)(1-p_p)}{1-p_\uparrow p_a}}\end{bmatrix} \\ E_3 = & \sqrt{(1-(1-p_\uparrow)p_a - \frac{(1-p_a)(1-p_p)}{1-p_\uparrow p_a} ) }\begin{bmatrix}0&0\\0&1\end{bmatrix} \,. \end{align}
For $$p_\uparrow=0$$ we identify $$E_0 = A_0, E_1=0, E_2=A_2$$ and $$E_3=A_1$$.

For $$p_\uparrow=1$$ we obtain (in a numerical implementation, the fraction in $$E_0,\, E_3$$ should be replaced by $$1-p_p$$ to avoid division by zero)

\begin{align} E_0 = &\begin{bmatrix} \sqrt{1-p_a}&0\\0&\sqrt{1-p_p}\end{bmatrix}\\ E_1 = & \begin{bmatrix} 0&0\\\sqrt{p_a}&0\end{bmatrix}\\ E_2 = &0\\ E_3 = &\begin{bmatrix}0&0\\0&\sqrt{p_p}\end{bmatrix} \end{align}

which represents the same channel as $$B_0, B_1$$ and $$B_2$$ and is another useful representation of the channel.

Hence the question: Why are the appropriate Kraus matrices not used for the phase amplitude damping and thermal relaxation channels in Qiskit?

• Consider writing all this in an issue (github.com/Qiskit/qiskit-aer) Oct 30 at 6:51
• this is not the place to report bugs about some online programming framework. I'm editing out that part of the question
– glS
Nov 5 at 0:02
• that aside, this reads to me like you're trying to make a statement about how you think a certain functionality should be implemented in qiskit, by making it seem like a question in order to make it at least superficially ok for the site. Asking why one choice of Kraus operators should be preferable over another can be fine, but asking why someone "didn't make the appropriate choice" is not a genuine question, it's trying to tell developers something, and this is just not the best place to do it
– glS
Nov 5 at 0:12
• Thanks for pointing this out. I have now additionally addressed this question in github. But I also think that other users in qiskit might come across this point, so answering this question might be of general interest (hint in github: For questions that are more suited for a forum we use the Qiskit tag in the Stack Exchange). Nov 6 at 17:32