$\newcommand{\ket}[1]{|{#1}\rangle}\newcommand{\bra}[1]{\langle{#1}|}$Considere el canal definido por \begin{align*} \text{U} = \left[\begin{smallmatrix}0 &1\\1&0\end{smallmatrix}\right], \end{align*} y el esquema descrito anterioremente para la transmisión de un bit $m=0$:
import numpy as np
m = 0
ket0 = np.array([[1], [0]])
rho = np.outer(ket0, ket0)
print('m =', m, '\nrho =\n', rho)
m = 0 rho = [[1 0] [0 0]]
U = np.array([[0, 1], [1, 0]])
sigma = U @ rho @ U.conj().T
print('U =\n', U, '\nsigma = U @ rho @ U.H =\n', sigma)
U = [[0 1] [1 0]] sigma = U @ rho @ U.H = [[0 0] [0 1]]
Pi0tilde = np.array([[0, 0], [0, 1]])
Pi1tilde = np.array([[1, 0], [0, 0]])
Pr_m0 = np.trace(Pi0tilde @ sigma)
Pr_m1 = np.trace(Pi1tilde @ sigma)
print('Pr_m0 =', Pr_m0, '\nPr_m1 =', Pr_m1)
Pr_m0 = 1 Pr_m1 = 0
De forma análoga se puede analizar la transmisión de un bit $m=1$, observando $\hat{m}=1$ en este caso:
m = 1
ket1 = np.array([[0], [1]])
rho = np.outer(ket1, ket1)
print('m =', m, '\nrho =\n', rho)
sigma = U @ rho @ U.conj().T
print('\nsigma = U @ rho @ U.H =\n', sigma)
Pr_m0 = np.trace(Pi0tilde @ sigma)
Pr_m1 = np.trace(Pi1tilde @ sigma)
print('\nPr_m0 =', Pr_m0, '\nPr_m1 =', Pr_m1)
m = 1 rho = [[0 0] [0 1]] sigma = U @ rho @ U.H = [[1 0] [0 0]] Pr_m0 = 0 Pr_m1 = 1