{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e5e44fb3",
   "metadata": {},
   "source": [
    "## Ejemplo 5.6: Marginalización de un estado independiente"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71cd75b7",
   "metadata": {},
   "source": [
    "$\\newcommand{\\ket}[1]{|{#1}\\rangle}\\newcommand{\\bra}[1]{\\langle{#1}|}$Considere un sistema cuántico compuesto formado por dos estados independientes\n",
    "\\begin{align*}\n",
    "   \\delta^{AB} \n",
    "     = \\rho^A \\otimes \\sigma^B \n",
    "     = \\left[\\begin{matrix}\n",
    "             \\rho_{11}\\sigma^B& \\rho_{12}\\sigma^B \\\\ \\rho_{21}\\sigma^B & \\rho_{22}\\sigma^B \\end{matrix}\\right]\n",
    "     = \\left[\\begin{matrix}\n",
    "             \\rho_{11}\\sigma_{11} & \\rho_{11}\\sigma_{12} & \\rho_{12}\\sigma_{11} & \\rho_{12}\\sigma_{12} \\\\\n",
    "             \\rho_{11}\\sigma_{21} & \\rho_{11}\\sigma_{22} & \\rho_{12}\\sigma_{21} & \\rho_{12}\\sigma_{22} \\\\\n",
    "             \\rho_{21}\\sigma_{11} & \\rho_{21}\\sigma_{12} & \\rho_{22}\\sigma_{11} & \\rho_{22}\\sigma_{12} \\\\\n",
    "             \\rho_{21}\\sigma_{21} & \\rho_{21}\\sigma_{22} & \\rho_{22}\\sigma_{21} & \\rho_{22}\\sigma_{22} \n",
    "        \\end{matrix}\\right].\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e51496e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Definimos un estado compuesto independiente:\n",
      "\n",
      "rhoA =\n",
      "\n",
      "   0.7500        0\n",
      "        0   0.2500\n",
      "\n",
      "sigmaB =\n",
      "\n",
      "   0.5000   0.5000\n",
      "   0.5000   0.5000\n",
      "\n",
      "deltaAB =\n",
      "\n",
      "   0.3750   0.3750        0        0\n",
      "   0.3750   0.3750        0        0\n",
      "        0        0   0.1250   0.1250\n",
      "        0        0   0.1250   0.1250\n",
      "\n"
     ]
    }
   ],
   "source": [
    "fprintf('\\nDefinimos un estado compuesto independiente:\\n\\n')\n",
    "rhoA    = [[3/4, 0]; [0, 1/4]]\n",
    "sigmaB  = [[1/2, 1/2]; [1/2, 1/2]]\n",
    "deltaAB = kron(rhoA, sigmaB)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7625c52a",
   "metadata": {},
   "source": [
    "Si descartamos la parte $A$ del sistema obtenemos\n",
    "\\begin{align*}\n",
    "   \\text{Tr}_{A} \\left[ \\delta^{AB} \\right]\n",
    "     &= \\left[\\begin{matrix}\n",
    "              \\rho_{11}\\sigma_{11} + \\rho_{22}\\sigma_{11}  & \\rho_{11}\\sigma_{12} + \\rho_{22}\\sigma_{12} \\\\\n",
    "              \\rho_{11}\\sigma_{21} + \\rho_{22}\\sigma_{21} & \\rho_{11}\\sigma_{22} + \\rho_{22}\\sigma_{22} \n",
    "        \\end{matrix}\\right]\n",
    "      = \\underbrace{\\text{Tr}[\\rho^A]}_{=1} \\left[\\begin{matrix}\n",
    "              \\sigma_{11}  & \\sigma_{12} \\\\\n",
    "              \\sigma_{21} & \\sigma_{22}  \\end{matrix}\\right]\n",
    "      = \\sigma^B.\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "746f0b09",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Descartamos la parte A del estado compuesto:\n",
      "\n",
      "sigmaB =\n",
      "\n",
      "   0.5000   0.5000\n",
      "   0.5000   0.5000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "function [sigma] = traceA(delta) % traces out part A of a bipartite system\n",
    "    sigma = [delta(1,1)+delta(3,3)  delta(1,2)+delta(3,4); ...\n",
    "             delta(2,1)+delta(4,3)  delta(2,2)+delta(4,4)];\n",
    "end\n",
    "\n",
    "fprintf('\\nDescartamos la parte A del estado compuesto:\\n\\n')\n",
    "sigmaB = traceA(deltaAB)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c724f473",
   "metadata": {},
   "source": [
    "Si descartamos la parte $B$ del mismo queda\n",
    "\\begin{align*}      \n",
    "   \\text{Tr}_{B} \\left[ \\delta^{AB} \\right] &= \\left[\\begin{matrix}\n",
    "                 \\rho_{11}\\sigma_{11} + \\rho_{11}\\sigma_{22} & \\rho_{12}\\sigma_{11} + \\rho_{12}\\sigma_{22} \\\\\n",
    "                 \\rho_{21}\\sigma_{11} + \\rho_{21}\\sigma_{22} & \\rho_{22}\\sigma_{11} + \\rho_{22}\\sigma_{22} \\end{matrix}\\right]\n",
    "      = \\underbrace{\\text{Tr}[\\sigma^B]}_{=1} \\left[\\begin{matrix}\n",
    "              \\rho_{11}  & \\rho_{12} \\\\\n",
    "              \\rho_{21} & \\rho_{22}  \\end{matrix}\\right]\n",
    "      = \\rho^A.\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "5c7f4474",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Descartamos la parte B del estado compuesto:\n",
      "\n",
      "rhoA =\n",
      "\n",
      "   0.7500        0\n",
      "        0   0.2500\n",
      "\n"
     ]
    }
   ],
   "source": [
    "function [rho] = traceB(delta) % traces out part B of a bipartite system\n",
    "    rho = [delta(1,1)+delta(2,2)  delta(1,3)+delta(2,4); ...\n",
    "           delta(3,1)+delta(4,2)  delta(3,3)+delta(4,4)];\n",
    "end\n",
    "\n",
    "fprintf('\\nDescartamos la parte B del estado compuesto:\\n\\n')\n",
    "rhoA = traceB(deltaAB)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Octave",
   "language": "octave",
   "name": "octave"
  },
  "language_info": {
   "file_extension": ".m",
   "help_links": [
    {
     "text": "GNU Octave",
     "url": "https://www.gnu.org/software/octave/support.html"
    },
    {
     "text": "Octave Kernel",
     "url": "https://github.com/Calysto/octave_kernel"
    },
    {
     "text": "MetaKernel Magics",
     "url": "https://metakernel.readthedocs.io/en/latest/source/README.html"
    }
   ],
   "mimetype": "text/x-octave",
   "name": "octave",
   "version": "8.2.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
