# Qiskit: Sum of Kraus operators are not equal to identity matrix

I know that the one of the property of the Kraus Operator is:

So in qiskit, I first converted my array to super operator and then I found my kraus operators. However the sum of kraus operator is not equal to 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?

• I haven't gone through all the details, but I suspect that it's supposed to be np.matmul(kraus_list[0].conj().T, kraus_list[0]) (see that formula that you pasted) Feb 14, 2022 at 14:30
• thanks for the comment, you are right but id did not affect my result. I first tried what you suggested and then I inverse the equation just to see if something changes and then I pasted here the last version, As a result even if I write: np.matmul(kraus_list[0].conj().T, kraus_list[0]) nothing changes. BUt I guess I found the problem Feb 14, 2022 at 23:10
• @quest do you mind sharing the solution or close the question? Feb 15, 2022 at 9:56
• @luciano I am not so sure for my solution. That is why I need to wait 2 more days and if noone answers, I will add a comment regarding what I found and then I will close the topic Feb 15, 2022 at 11:44