$\newcommand{\ket}[1]{|{#1}\rangle}\newcommand{\bra}[1]{\langle{#1}|}$Considere un sistema cuántico compuesto formado por dos estados independientes \begin{align*} \delta^{AB} = \rho^A \otimes \sigma^B = \left[\begin{matrix} \rho_{11}\sigma^B& \rho_{12}\sigma^B \\ \rho_{21}\sigma^B & \rho_{22}\sigma^B \end{matrix}\right] = \left[\begin{matrix} \rho_{11}\sigma_{11} & \rho_{11}\sigma_{12} & \rho_{12}\sigma_{11} & \rho_{12}\sigma_{12} \\ \rho_{11}\sigma_{21} & \rho_{11}\sigma_{22} & \rho_{12}\sigma_{21} & \rho_{12}\sigma_{22} \\ \rho_{21}\sigma_{11} & \rho_{21}\sigma_{12} & \rho_{22}\sigma_{11} & \rho_{22}\sigma_{12} \\ \rho_{21}\sigma_{21} & \rho_{21}\sigma_{22} & \rho_{22}\sigma_{21} & \rho_{22}\sigma_{22} \end{matrix}\right]. \end{align*}
import numpy as np
print('Definimos un estado compuesto independiente:\n')
rhoA = np.array([[3/4, 0], [0, 1/4]])
sigmaB = np.array([[1/2, 1/2], [1/2, 1/2]])
deltaAB = np.kron(rhoA, sigmaB)
print("rhoA = \n", rhoA, "\nsigmaB = \n", sigmaB, "\ndeltaAB = kron(rhoA, sigmaB) =\n", deltaAB)
Definimos un estado compuesto independiente: rhoA = [[0.75 0. ] [0. 0.25]] sigmaB = [[0.5 0.5] [0.5 0.5]] deltaAB = kron(rhoA, sigmaB) = [[0.375 0.375 0. 0. ] [0.375 0.375 0. 0. ] [0. 0. 0.125 0.125] [0. 0. 0.125 0.125]]
Si descartamos la parte $A$ del sistema obtenemos \begin{align*} \text{Tr}_{A} \left[ \delta^{AB} \right] &= \left[\begin{matrix} \rho_{11}\sigma_{11} + \rho_{22}\sigma_{11} & \rho_{11}\sigma_{12} + \rho_{22}\sigma_{12} \\ \rho_{11}\sigma_{21} + \rho_{22}\sigma_{21} & \rho_{11}\sigma_{22} + \rho_{22}\sigma_{22} \end{matrix}\right] = \underbrace{\text{Tr}[\rho^A]}_{=1} \left[\begin{matrix} \sigma_{11} & \sigma_{12} \\ \sigma_{21} & \sigma_{22} \end{matrix}\right] = \sigma^B. \end{align*}
def traceA(delta): # traces out part A of a bipartite system
return np.array([[delta[0, 0] + delta[2, 2], delta[0, 1] + delta[2, 3]],
[delta[1, 0] + delta[3, 2], delta[1, 1] + delta[3, 3]]])
print('Descartamos la parte A del estado compuesto:\n')
sigmaB = traceA(deltaAB)
print("sigmaB = \n", sigmaB)
Descartamos la parte A del estado compuesto: sigmaB = [[0.5 0.5] [0.5 0.5]]
Si descartamos la parte $B$ del mismo queda \begin{align*} \text{Tr}_{B} \left[ \delta^{AB} \right] &= \left[\begin{matrix} \rho_{11}\sigma_{11} + \rho_{11}\sigma_{22} & \rho_{12}\sigma_{11} + \rho_{12}\sigma_{22} \\ \rho_{21}\sigma_{11} + \rho_{21}\sigma_{22} & \rho_{22}\sigma_{11} + \rho_{22}\sigma_{22} \end{matrix}\right] = \underbrace{\text{Tr}[\sigma^B]}_{=1} \left[\begin{matrix} \rho_{11} & \rho_{12} \\ \rho_{21} & \rho_{22} \end{matrix}\right] = \rho^A. \end{align*}
def traceB(delta): # traces out part B of a bipartite system
return np.array([[delta[0, 0] + delta[1, 1], delta[0, 2] + delta[1, 3]],
[delta[2, 0] + delta[3, 1], delta[2, 2] + delta[3, 3]]])
print('Descartamos la parte B del estado compuesto:\n')
rhoA = traceB(deltaAB)
print("rhoA = \n", rhoA)
Descartamos la parte B del estado compuesto: rhoA = [[0.75 0. ] [0. 0.25]]