{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e5e44fb3",
   "metadata": {},
   "source": [
    "## Ejemplo 8.2: Transmisión por entrelazamiento"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71cd75b7",
   "metadata": {},
   "source": [
    "$\\newcommand{\\ket}[1]{|{#1}\\rangle}\\newcommand{\\bra}[1]{\\langle{#1}|}$La idea de la transmisión de información por entrelazamiento aparece representada en la siguiente figura:\n",
    "\n",
    "<img src=\"figs/medida-bipartida-alice.svg\" alt=\"Medida parcial de una estado cuantico compuesto compartico entre Alice y Bob\" style=\"width:380px;\"/>\n",
    "\n",
    "Definimos el estado máximamente entrelazado\n",
    "\\begin{align*}\n",
    "   \\delta^{AB} = \\frac{1}{2} \\left[\\begin{smallmatrix}\n",
    "                 1 & 0 & 0 & 1\\\\\n",
    "                 0 & 0 & 0 & 0\\\\\n",
    "                 0 & 0 & 0 & 0\\\\\n",
    "                 1 & 0 & 0 & 1 \\end{smallmatrix}\\right]\n",
    "\\end{align*}\n",
    "donde el superíndice $AB$ hace referencia a que la primera parte del estado pertenece a Alice y la segunda a Bob."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e51496e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "deltaAB =\n",
      "\n",
      "   0.5000        0        0   0.5000\n",
      "        0        0        0        0\n",
      "        0        0        0        0\n",
      "   0.5000        0        0   0.5000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "deltaAB = 1/2*[[1,0,0,1];[0,0,0,0];[0,0,0,0];[1,0,0,1]]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7625c52a",
   "metadata": {},
   "source": [
    "Consideramos los proyectores de medida:\n",
    "\\begin{align*}\n",
    "\\Pi_{0}^A=\\begin{bmatrix}1&0\\\\0&0\\end{bmatrix},\\quad\n",
    "\\Pi_{1}^A=\\begin{bmatrix}0&0\\\\0&1\\end{bmatrix},\\quad\n",
    "\\Pi_{+}^A=\\frac{1}{2}\\begin{bmatrix}+1&+1\\\\+1&+1\\end{bmatrix},\\quad\n",
    "\\Pi_{-}^A=\\frac{1}{2}\\begin{bmatrix}+1&-1\\\\-1&+1\\end{bmatrix}.\n",
    "\\end{align*}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "da91962a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pi0A =\n",
      "\n",
      "   1   0\n",
      "   0   0\n",
      "\n",
      "Pi1A =\n",
      "\n",
      "   0   0\n",
      "   0   1\n",
      "\n",
      "PipA =\n",
      "\n",
      "   0.5000   0.5000\n",
      "   0.5000   0.5000\n",
      "\n",
      "PimA =\n",
      "\n",
      "   0.5000  -0.5000\n",
      "  -0.5000   0.5000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "Pi0A = [[1,0];[0,0]]\n",
    "Pi1A = [[0,0];[0,1]]\n",
    "PipA = [[+1,+1];[+1,+1]]/2\n",
    "PimA = [[+1,-1];[-1,+1]]/2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a8faad0",
   "metadata": {},
   "source": [
    "Ahora, Alice aplica una medida a su parte del estado compartido con Bob:\n",
    "\n",
    "- Si $m=0$, Alice aplica la medida con respecto al POVM$_{01} = \\bigl\\{\\Pi^A_{0},\\Pi^A_{1}\\bigr\\}$.\n",
    "- Si $m=1$, Alice aplica la medida con respecto al POVM$_{+-} =\\bigl\\{\\Pi^A_{+},\\Pi^A_{-}\\bigr\\}$.\n",
    "\n",
    "Para aplicar la medida al estado conjunto, definimos las matrices de dimensión $4\\times 4$ dadas por $\\Pi_k^{AB} = \\Pi_k^A \\otimes \\boldsymbol{I}_2^B$, donde $k\\in\\{0,1,+,-\\}$. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "746f0b09",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "I2B =\n",
      "\n",
      "Diagonal Matrix\n",
      "\n",
      "   1   0\n",
      "   0   1\n",
      "\n",
      "Pi0AB =\n",
      "\n",
      "   1   0   0   0\n",
      "   0   1   0   0\n",
      "   0   0   0   0\n",
      "   0   0   0   0\n",
      "\n",
      "Pi1AB =\n",
      "\n",
      "   0   0   0   0\n",
      "   0   0   0   0\n",
      "   0   0   1   0\n",
      "   0   0   0   1\n",
      "\n",
      "PipAB =\n",
      "\n",
      "   0.5000        0   0.5000        0\n",
      "        0   0.5000        0   0.5000\n",
      "   0.5000        0   0.5000        0\n",
      "        0   0.5000        0   0.5000\n",
      "\n",
      "PimAB =\n",
      "\n",
      "   0.5000        0  -0.5000        0\n",
      "        0   0.5000        0  -0.5000\n",
      "  -0.5000        0   0.5000        0\n",
      "        0  -0.5000        0   0.5000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "I2B = eye(2) % Bob no hace nada en su parte\n",
    "% Definimos las medidas conjuntas:\n",
    "Pi0AB = kron(Pi0A,I2B)\n",
    "Pi1AB = kron(Pi1A,I2B)\n",
    "PipAB = kron(PipA,I2B)\n",
    "PimAB = kron(PimA,I2B)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94c1b5e6",
   "metadata": {},
   "source": [
    "Si Alice aplica el POVM$_{01}= \\bigl\\{\\Pi_{0}^A,\\Pi_{1}^A\\bigr\\}$, y teniendo en cuenta que Bob no puede conocer el resultado de la medida, obtenemos el nuevo estado conjunto:\n",
    "\\begin{align*}        \n",
    "   \\theta_{01}^{AB} = \\Pi_{0}^{AB} \\delta^{AB} \\Pi_{0}^{AB} + \n",
    "                   \\Pi_{1}^{AB} \\delta^{AB} \\Pi_{1}^{AB}  = \\frac{1}{2} \\left[\\begin{smallmatrix}\n",
    "                 1 & 0 & 0 & 0\\\\\n",
    "                 0 & 0 & 0 & 0\\\\\n",
    "                 0 & 0 & 0 & 0\\\\\n",
    "                 0 & 0 & 0 & 1 \\end{smallmatrix}\\right].\n",
    "\\end{align*}\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dfd352b5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "theta01AB =\n",
      "\n",
      "   0.5000        0        0        0\n",
      "        0        0        0        0\n",
      "        0        0        0        0\n",
      "        0        0        0   0.5000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "theta01AB = Pi0AB*deltaAB*Pi0AB + Pi1AB*deltaAB*Pi1AB"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd44255a",
   "metadata": {},
   "source": [
    "Si Alice aplica el POVM$_{+-}  =\\bigl\\{\\Pi_{+}^A,\\Pi_{-}^A\\bigr\\}$, como Bob no conoce el resultado de la medida, obtenemos:\n",
    "\\begin{align*}        \n",
    "   \\theta_{+-}^{AB} = \\Pi_{+}^{AB} \\delta^{AB} \\Pi_{+}^{AB} + \n",
    "                   \\Pi_{-}^{AB} \\delta^{AB} \\Pi_{-}^{AB}  = \\frac{1}{4} \\left[\\begin{smallmatrix}\n",
    "                 1 & 0 & 0 & 1\\\\\n",
    "                 0 & 1 & 1 & 0\\\\\n",
    "                 0 & 1 & 1 & 0\\\\\n",
    "                 1 & 0 & 0 & 1 \\end{smallmatrix}\\right].\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cbb0598a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "thetapmAB =\n",
      "\n",
      "   0.2500        0        0   0.2500\n",
      "        0   0.2500   0.2500        0\n",
      "        0   0.2500   0.2500        0\n",
      "   0.2500        0        0   0.2500\n",
      "\n"
     ]
    }
   ],
   "source": [
    "thetapmAB = PipAB*deltaAB*PipAB + PimAB*deltaAB*PimAB"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d54c0c2f",
   "metadata": {},
   "source": [
    "El estado conjunto tras aplicar la medida es diferente en los dos casos, $\\theta_{01}^{AB} \\neq \\theta_{+-}^{AB}$.\n",
    "\n",
    "Sin embargo, Bob no tiene acceso a este estado conjunto, sino solo a una parte del mismo. Para conocer el estado desde el punto de vista de Bob, debemos marginalizar $\\theta^{AB}$ eliminando la parte de Alice. Se tiene que\n",
    "\\begin{align*}        \n",
    " \\sigma^B_{01} = \\text{Tr}_A\\bigl[\\theta_{01}^{AB}\\bigr] = \\frac{1}{2} \\left[\\begin{matrix} 1 & 0 \\\\ 0 & 1 \\end{matrix}\\right],\\qquad\n",
    " \\sigma^B_{+-} = \\text{Tr}_A\\bigl[\\theta_{+-}^{AB}\\bigr] = \\frac{1}{2} \\left[\\begin{matrix} 1 & 0 \\\\ 0 & 1 \\end{matrix}\\right].\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "df045697",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sigma_01B =\n",
      "\n",
      "   0.5000        0\n",
      "        0   0.5000\n",
      "\n",
      "sigma_pmB =\n",
      "\n",
      "   0.5000        0\n",
      "        0   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",
    "sigma_01B = traceA(theta01AB)\n",
    "sigma_pmB = traceA(thetapmAB)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e225f01",
   "metadata": {},
   "source": [
    "Podemos ver que $\\sigma^B_0 = \\sigma^B_1$. Así, Bob no puede distinguir ambos casos teniendo aceso únicamente a su parte del estado. Por tanto, la comunicación no es posible con este esquema."
   ]
  }
 ],
 "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
}
