{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e5e44fb3",
   "metadata": {},
   "source": [
    "## Ejemplo 5.5: Medida parcial de un estado independiente"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71cd75b7",
   "metadata": {},
   "source": [
    "$\\newcommand{\\ket}[1]{|{#1}\\rangle}\\newcommand{\\bra}[1]{\\langle{#1}|}$Consideremos dos estados cuánticos independientes $\\rho^A$ y $\\sigma^B$,\n",
    "con una matriz de densidad de probabilidad asociada\n",
    "\\begin{align*}\n",
    " \\delta^{AB} = \\rho^A \\otimes \\sigma^B.\n",
    "\\end{align*}\n",
    "Asumamos que Alice realiza una medida con respecto a $\\bigl\\{ \\Pi_0^A, \\Pi_1^A \\bigr\\}$ en su parte del estado.\n",
    "\n",
    "Entonces, el POVM a aplicar al estado compuesto\n",
    "estaría dado por\n",
    "\\begin{align*}\n",
    "  \\bigl\\{ \\Pi_0^A \\otimes \\boldsymbol{I}_2^B,\\; \\Pi_1^A \\otimes \\boldsymbol{I}_2^B \\bigr\\}.\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e51496e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Definimos un estado compuesto independiente:\n",
      "\n",
      "rhoA = \n",
      " [[0.75 0.  ]\n",
      " [0.   0.25]] \n",
      "sigmaB = \n",
      " [[0.5 0.5]\n",
      " [0.5 0.5]] \n",
      "deltaAB = kron(rhoA, sigmaB) =\n",
      " [[0.375 0.375 0.    0.   ]\n",
      " [0.375 0.375 0.    0.   ]\n",
      " [0.    0.    0.125 0.125]\n",
      " [0.    0.    0.125 0.125]]\n",
      "\n",
      "Proyectores de medida:\n",
      "\n",
      "Pi0A = \n",
      " [[1 0]\n",
      " [0 0]] \n",
      "Pi1A = \n",
      " [[0 0]\n",
      " [0 1]] \n",
      "I2B = \n",
      " [[1 0]\n",
      " [0 1]]\n",
      "\n",
      "Pi0AB = \n",
      " [[1 0 0 0]\n",
      " [0 1 0 0]\n",
      " [0 0 0 0]\n",
      " [0 0 0 0]] \n",
      "Pi1AB = \n",
      " [[0 0 0 0]\n",
      " [0 0 0 0]\n",
      " [0 0 1 0]\n",
      " [0 0 0 1]]\n",
      "\n",
      "Probabilidades de la medida del sistema compuesto:\n",
      "\n",
      "PrA0 =  0.75 \n",
      "PrA1 =  0.25\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "print('\\nDefinimos un estado compuesto independiente:\\n')\n",
    "rhoA = np.array([[3/4, 0], [0, 1/4]])\n",
    "sigmaB = np.array([[1/2, 1/2], [1/2, 1/2]])\n",
    "deltaAB = np.kron(rhoA, sigmaB)\n",
    "\n",
    "print(\"rhoA = \\n\", rhoA, \"\\nsigmaB = \\n\", sigmaB, \"\\ndeltaAB = kron(rhoA, sigmaB) =\\n\", str(deltaAB))\n",
    "\n",
    "print('\\nProyectores de medida:\\n')\n",
    "Pi0A = np.array([[1, 0], [0, 0]])\n",
    "Pi1A = np.array([[0, 0], [0, 1]])\n",
    "I2B = np.array([[1, 0], [0, 1]])\n",
    "\n",
    "print(\"Pi0A = \\n\", Pi0A, \"\\nPi1A = \\n\", Pi1A, \"\\nI2B = \\n\", I2B)\n",
    "\n",
    "Pi0AB = np.kron(Pi0A, I2B)\n",
    "Pi1AB = np.kron(Pi1A, I2B)\n",
    "\n",
    "print(\"\\nPi0AB = \\n\", Pi0AB, \"\\nPi1AB = \\n\", Pi1AB)\n",
    "\n",
    "print('\\nProbabilidades de la medida del sistema compuesto:\\n')\n",
    "PrA0 = np.trace(Pi0AB @ deltaAB)\n",
    "PrA1 = np.trace(Pi1AB @ deltaAB)\n",
    "\n",
    "print(\"PrA0 = \", PrA0, \"\\nPrA1 = \", PrA1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7625c52a",
   "metadata": {},
   "source": [
    "De acuerdo a las ecuaciones de medida de un sistema compuesto, se tiene que\n",
    "\\begin{align*}\n",
    "   p_{0}\n",
    "   &= \\text{Tr}\\bigl[\\bigl(\\Pi_0^A \\otimes \\boldsymbol{I}_2^B\\bigr)\\delta^{AB}\\bigr]\\\\\n",
    "   &= \\text{Tr}\\bigl[\\bigl(\\Pi_0^A \\rho^A\\bigr) \\otimes \\bigl(\\boldsymbol{I}_2^B \\sigma^B\\bigr)\\bigr]\\\\\n",
    "   &= \\text{Tr}\\bigl[\\Pi_0^A \\rho^A\\bigr]\n",
    "   \\text{Tr}\\bigl[\\boldsymbol{I}_2^B \\sigma^B\\bigr]\\\\\n",
    "   &= \\text{Tr}\\bigl[\\Pi_0^A \\rho^A\\bigr]\n",
    "\\end{align*}\n",
    "donde hemos utilizado la propiedad del producto mixto, la propiedad $\\text{Tr}[\\boldsymbol{A} \\otimes \\boldsymbol{B}] = \\text{Tr}[\\boldsymbol{A}]\\text{Tr}[\\boldsymbol{B}]$; y que $\\text{Tr}\\bigl[\\boldsymbol{I}_2^B \\sigma^B\\bigr] = \\text{Tr}\\bigl[\\sigma^B\\bigr]=1$ ya que $\\sigma^B$ se corresponde a un estado cuántico.\n",
    "De forma análoga, se tiene que $p_{1} = \\text{Tr}\\bigl[\\Pi_1^A \\rho^A\\bigr]$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "746f0b09",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PrA0 =  0.75 \n",
      "PrA1 =  0.25\n"
     ]
    }
   ],
   "source": [
    "# Comprobamos que el desarrollo es correcto\n",
    "PrA0 = np.trace(Pi0A @ rhoA)\n",
    "PrA1 = np.trace(Pi1A @ rhoA)\n",
    "\n",
    "print(\"PrA0 = \", PrA0, \"\\nPrA1 = \", PrA1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83da6d7f",
   "metadata": {},
   "source": [
    "Concluimos que esta medida sobre estado conjunto independiente modela la medida sobre el sub-sistema $A$, como podríamos esperar."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
