I know that one of the properties of the Kraus Operator is: $$\sum_k A_k^\dagger A_k=I\,.$$
So, in qiskit, I first converted my array to a super operator, and then I found my Kraus operators. However, the sum of the Kraus operator is not equal to the identity. And I do not know if I found my Kraus operator correctly or not. Here is my process matrix:
array([[ 1. , 0. , 0. , 0. ],
[ 0.001, 0.986, 0.02 , 0.04 ],
[ 0.014, 0.01 , 0.019, -0.957],
[-0.028, -0.031, 0.949, 0.008]])
Here is my code:
q_process=qi.SuperOp(process)
kraus_=qi.Kraus(q_process)
kraus_
From kraus_,
I put Kraus operators into kraus_list
Here is how I found the sum of Kraus operators:
kraus_list = np.array([[[-0.833+0.j, 0.14 +0.j],
[-0.14 +0.j, -0.821+0.j]],
[[ 0.134+0.j, 0.812+0.j],
[-0.806+0.j, 0.139+0.j]],
[[ 0.14 +0.j, -0.06 +0.j],
[-0.061+0.j, -0.142+0.j]],
[[-0.012+0.j, -0.029+0.j],
[-0.029+0.j, 0.012+0.j]],
[[-1.168-0.j, -0.026-0.j],
[ 0.014+0.j, -0.205-0.j]],
[[ 0.201+0.j, -0.008-0.j],
[ 0.021+0.j, -1.142-0.j]],
[[ 0.004+0.j, -0.147-0.j],
[ 0.16 +0.j, 0.005+0.j]],
[[ 0. +0.j, -0.032-0.j],
[-0.03 -0.j, -0. -0.j]]])
sum_of_kraus= np.matmul(kraus_list[0].conj().T,kraus_list[0])+np.matmul(kraus_list[1].conj().T,kraus_list[1])+np.matmul(kraus_list[2].conj().T,kraus_list[2])+np.matmul(kraus_list[3].conj().T,kraus_list[3])+np.matmul(kraus_list[4].conj().T,kraus_list[4])+np.matmul(kraus_list[5].conj().T,kraus_list[5])+np.matmul(kraus_list[6].conj().T,kraus_list[6])+np.matmul(kraus_list[7].conj().T,kraus_list[7])
Here is the result:
array([[2.843+0.j, 0.009+0.j],
[0.009+0.j, 2.761+0.j]])
As it can be seen, it is not equal to identity. Could someone explain to me why I am finding 2.843 instead of 1. Am I doing something wrong in the code?
np.matmul(kraus_list[0].conj().T, kraus_list[0])
(see that formula that you pasted) $\endgroup$np.matmul(kraus_list[0].conj().T, kraus_list[0])
nothing changes. BUt I guess I found the problem $\endgroup$