{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e5e44fb3",
   "metadata": {},
   "source": [
    "## Ejemplo 8.1: Transmisión de un cúbit"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71cd75b7",
   "metadata": {},
   "source": [
    "$\\newcommand{\\ket}[1]{|{#1}\\rangle}\\newcommand{\\bra}[1]{\\langle{#1}|}$Queremos transmitir un estado cuántico binario\n",
    "   $\\rho = \\ket{0}\\bra{0} = \\left[\\begin{smallmatrix}1&0\\\\0&0\\end{smallmatrix}\\right]$\n",
    "sobre un canal\n",
    "\\begin{align*}\n",
    "      U = \\frac{1}{\\sqrt{2}} \\left[\\begin{matrix}+1&+1\\\\+1&-1\\end{matrix}\\right],\\quad U^H = U,\n",
    "\\end{align*}\n",
    "donde la matriz $U$ se asume conocida en el receptor.\n",
    "En este caso, la salida del canal está dada por\n",
    "\\begin{align*}\n",
    "\\sigma = U \\rho U^{H}\n",
    "        = \\frac{1}{2} \\left[\\begin{matrix}1&1\\\\1&1\\end{matrix}\\right].\n",
    "\\end{align*}\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e51496e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rho =\n",
      "\n",
      "   1   0\n",
      "   0   0\n",
      "\n",
      "U =\n",
      "\n",
      "   0.7071   0.7071\n",
      "   0.7071  -0.7071\n",
      "\n",
      "sigma =\n",
      "\n",
      "   0.5000   0.5000\n",
      "   0.5000   0.5000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "ket0 = [1;0];\n",
    "rho  = ket0*ket0'\n",
    "U = [[1, 1]; [1, -1]]/sqrt(2)\n",
    "sigma = U*rho*U'"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7625c52a",
   "metadata": {},
   "source": [
    "Para recuperar el estado original, invertimos la transformación introducida por el canal\n",
    "\\begin{align*}\n",
    "    \\hat\\rho &= U^{H} \\sigma U =\n",
    "    \\frac{1}{4} \\left[\\begin{matrix}1&1\\\\1&-1\\end{matrix}\\right]\n",
    "                 \\left[\\begin{matrix}1&1\\\\1&1\\end{matrix}\\right]\n",
    "                 \\left[\\begin{matrix}1&1\\\\1&-1\\end{matrix}\\right]\n",
    "        = \\left[\\begin{matrix}1&0\\\\0&0\\end{matrix}\\right] = \\rho.\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "746f0b09",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rho_hat =\n",
      "\n",
      "   1.0000e+00   6.2233e-19\n",
      "   3.2518e-17   5.9779e-34\n",
      "\n"
     ]
    }
   ],
   "source": [
    "rho_hat = U' * sigma * U"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94c1b5e6",
   "metadata": {},
   "source": [
    "Podemos ver que hemos recuperado el estado original. Esto ocurre no solo para el estado considerado en este ejercicio, sino para para cualquier estado $\\rho$ a la entrada del canal. Entonces, con este esquema podemos transmitir sin errores un cúbit de información a través de este canal cuántico binario."
   ]
  }
 ],
 "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
}
