\n",
"\n",
"WARNING: This is not the same teleportation notebook as the one in the quantum\n",
"theory directory.\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"
The explanation of what's going on doesn't stand on its own.\n",
" I'm assuming people will either get a detailed walk-through\n",
" in person, or have the textbook.\n",
"
Alice has a bit to transmit and Alice and Bob have an\n",
" entangled pair.\n",
" Bit 1 is the state to be transmitted, bits 2 and 3 are Alice and Bob's entangled bits.\n",
"
Alice does a CNOT on her two bits
\n",
"
Alice does a Hadamard on the bit to be transmitted
\n",
"
Alice measures her two bits in the classical basis
\n",
"
Bob uses the classical measurement to operate on his bit
\n",
""
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Set up the three intitial qubits. Right now I just start\n",
"# off with Alice and Bob's pair already entangled.\n",
"q00=TP(q0,q0); q01=TP(q0,q1); q10=TP(q1,q0); q11=TP(q1,q1)\n",
"a=sy.Symbol('a'); b=sy.Symbol('b')\n",
"bit1=a*q0+b*q1\n",
"Print('Step 1')\n",
"Print('The bit Alice wants to transmit: $%s$'%mtq(bit1))\n",
"bits2and3 = 1/sqrt(2)*(q00 + q11)\n",
"Print('The bits Alice and Bob share: $%s$'%mtq(bits2and3))\n",
"bits_t0 = TP(bit1,bits2and3)\n",
"Print('All three bits: $%s$'%mtq(bits_t0))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"Step 1"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"The bit Alice wants to transmit: $a {\\left|0\\right\\rangle } + b {\\left|1\\right\\rangle }$"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"The bits Alice and Bob share: $\\frac{\\sqrt{2}}{2} \\left({\\left|00\\right\\rangle } + {\\left|11\\right\\rangle }\\right)$"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"All three bits: $\\frac{\\sqrt{2}}{2} \\left(a {\\left|000\\right\\rangle } + a {\\left|011\\right\\rangle } + b {\\left|100\\right\\rangle } + b {\\left|111\\right\\rangle }\\right)$"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
}
],
"prompt_number": 32
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here Alice's applies the CNOT and the the Hadamard"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Alice applies the CNOT and Hadamard\n",
"Print('Step 2')\n",
"bits_t1 = C3*bits_t0\n",
"Print('Alice applies the cnot, resulting in:')\n",
"Print('$%s$'%mtq(bits_t1))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"Step 2"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"Alice applies the cnot, resulting in:"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"$\\frac{\\sqrt{2}}{2} \\left(a {\\left|000\\right\\rangle } + a {\\left|011\\right\\rangle } + b {\\left|101\\right\\rangle } + b {\\left|110\\right\\rangle }\\right)$"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"Print('Step 3')\n",
"bits_t2 = H3*bits_t1\n",
"Print('Alice applies the Hadamard, resulting in:')\n",
"Print('$%s$'%mtq(bits_t2))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"Step 3"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"Alice applies the Hadamard, resulting in:"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"$\\frac{1}{2} \\left(a {\\left|000\\right\\rangle } + a {\\left|011\\right\\rangle } + a {\\left|100\\right\\rangle } + a {\\left|111\\right\\rangle } + b {\\left|001\\right\\rangle } + b {\\left|010\\right\\rangle } - b {\\left|101\\right\\rangle } - b {\\left|110\\right\\rangle }\\right)$"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
}
],
"prompt_number": 34
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now I'll express the same three bits in an alternate way, to show that they come out right. The expression here does appear to match expression (1.33) through (1.36) at the bottom of\n",
"Nielsen and Chuang page 27."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"one = TP(Qubit('00'), a*Qubit('0')+b*Qubit('1'))\n",
"two = TP(Qubit('01'), a*Qubit('1')+b*Qubit('0'))\n",
"three = TP(Qubit('10'), a*Qubit('0')-b*Qubit('1'))\n",
"four = TP(Qubit('11'), a*Qubit('1')-b*Qubit('0'))\n",
"alt = Rational(1,2)*(one+two+three+four)\n",
"Print('(Still on step 3)')\n",
"Print('The same bits can be expressed in (partially) factored form as:')\n",
"Print('$%s$'%latex(alt))\n",
"Print('The above should match (1.33) through (1.36) at the bottom of Nielsen and Chuang page 27.')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"(Still on step 3)"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"The same bits can be expressed in (partially) factored form as:"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"$\\frac{1}{2} \\left({{\\left|00\\right\\rangle }}\\otimes \\left({a {\\left|0\\right\\rangle } + b {\\left|1\\right\\rangle }}\\right) + {{\\left|01\\right\\rangle }}\\otimes \\left({a {\\left|1\\right\\rangle } + b {\\left|0\\right\\rangle }}\\right) + {{\\left|10\\right\\rangle }}\\otimes \\left({a {\\left|0\\right\\rangle } - b {\\left|1\\right\\rangle }}\\right) + {{\\left|11\\right\\rangle }}\\otimes \\left({a {\\left|1\\right\\rangle } - b {\\left|0\\right\\rangle }}\\right)\\right)$"
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
},
{
"html": [
"The above should match (1.33) through (1.36) at the bottom of Nielsen and Chuang page 27."
],
"metadata": {},
"output_type": "display_data",
"text": [
""
]
}
],
"prompt_number": 35
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Step 4: Alice measures her two bits in the classical basis\n",
"and sends the results (a classical two bit number) to Bob.\n",
"Looking at the \"factored\" form of the bits above, you can see\n",
"how the state of Bob's bit depends on Alice's result.\n",
"For example, if Alices measures $|00\\rangle$ then Bob's state is\n",
"$a|0\\rangle + b|1\\rangle$ and so on."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Step 5:\n",
"Bob can now set the state of his bit based on the two classical bits he receives\n",
"from Alice by doing one of the following operations:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"if00 = a*q0+b*q1 # (No operation needed)\n",
"if01 = X*(a*q1+b*q0)\n",
"if10 = Z*(a*q0-b*q1)\n",
"if11 = Z*X*(a*q1-b*q0)\n",
"if00, if01, if10, if11"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\begin{pmatrix}\\left[\\begin{matrix}a\\\\b\\end{matrix}\\right], & \\left[\\begin{matrix}a\\\\b\\end{matrix}\\right], & \\left[\\begin{matrix}a\\\\b\\end{matrix}\\right], & \\left[\\begin{matrix}a\\\\b\\end{matrix}\\right]\\end{pmatrix}$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAPMAAAAyBAMAAAB7bPAdAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiUSZq1TvELvdZiIy\nds1Wk1T5AAAD/UlEQVRYCcWYz2sTQRTHX1O7m7S1CXgSlObkxUN7Ubxo47VQ2lNBFBrUQv0BBiwi\nIiQg9KgBBU9ijnqxOfQP2IuKWLD+OCoGLHgSVNCCPxq/772ZbVKY7QhlM9Dpm5l832ff/NqZJULq\nKxJdaX+DBbvdLovRnQXtdkFqRts/u1u05ClX74tbHvbBnF99LhXh6tPyVktsBWdWK1K4uTobV3YY\nnnL1nmlZZV8J1mVbouFybG4ZQRTbz2Krw/CWi/cnVjnL8XhraRfQWR08Cs/yM6SKDuc17Ox46mgy\n82VO5k+qUVNOe/yuBJ8ueuA3Qwcll7EeOvn+PiXM8JWDL9BDzmnmJTfrR+LN1eKoDzWzXxPQmUt0\nB791or3kBr3Mo/yqaNHhReqvJaCvNegYfutC+8kNuroGT0eFzB3ev0E51JhGrbZ5EBFNVOgByi60\nn9x4H2nB03n8IQEd1KgaJaAXKPyDX7rQfnKD3osZNvyLwYKuFmiOKs6ow2808DV0o/3kBj30l4jx\nFj1DtweabvQPyrZOJ6C95HY4F4iy5Rg9sjZ4ry+hw7/Q41LBjfaTW/SSDLCNOpw6sPImAb34+uVU\n0Y32k1v0aJOq43HUajg73DQ7p5mf3KKXizTGCwwp3Y0U28kazc30Bo3e/hj1Bp0v0USzR+haz9BB\ni6YrvYk6qNO0klOf4blyL9F4E0pKe13n6oQNrSdojHXnur5+gZ9Ct7pqS57IZkFEFC7VuSjv63CT\nza3EneYltxspZjj2UknS4etsamNuQ+tNHkQwRkrIzB7+0AwU1yB5yy06X6O5okhV+4Nt03hY600e\nRDDyM1zSU0rGDBTXIAnaR27R2Eg7Xx8ZidQ0NsSlzYII1phEquhB26L/Ge0lt2i8Pjpfmn119qON\nYYPtOAURzP1SVPQNseOM0V5yi8ZrC8MtibUjU2/Rpdq4LaogQvv6hyPIFd2A1ZG85RaNlcWHfk6s\nrX4mPiiWubwtBRFm+GYl37Tobe3ecut9GsdCM5NZi4sfvmrYxi7nQUQ0sEH5QgLaS26941g4LNNS\noz5BOPC60f0twoHXdHjXg/2H3KD5MNxxBaBPlMGD2Ofqch5EmApYDzMJaC+58S5n8AlFcIf/4ruP\nG51v8N3HHbWX3KCzdfDGisJm9HfCjS4BXcSNLgHtJTfo/Bo85caR6WBN0i1Yzg7f08jyb3VxsaYj\n8ZN7yY13ueQO6hRn7dV3DeROdHh8Es1utJfceJe3BZ1jf7oJi+VES2sCWtt3kGtzRm96WI5IHLWm\nHbTuqL3k6l1GTtYMROmi5Ssh0RDf19NF61dCUE+ljjb9jW8opbSjfsTBSppC7vlVmXb3ozT1F1P+\nFC9r6h86Vdws91lvwgAAAABJRU5ErkJggg==\n",
"prompt_number": 36,
"text": [
"\u239b\u23a1a\u23a4, \u23a1a\u23a4, \u23a1a\u23a4, \u23a1a\u23a4\u239e\n",
"\u239c\u23a2 \u23a5 \u23a2 \u23a5 \u23a2 \u23a5 \u23a2 \u23a5\u239f\n",
"\u239d\u23a3b\u23a6 \u23a3b\u23a6 \u23a3b\u23a6 \u23a3b\u23a6\u23a0"
]
}
],
"prompt_number": 36
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 36
}
],
"metadata": {}
}
]
}