phy-521/presentation/Entanglement.ipynb

388 lines
50 KiB
Plaintext
Raw Normal View History

2020-12-23 21:45:08 +00:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# EPR Paradox Example\n",
"\n",
"# A neutral pi meson (pi0) decays into an electron/positron (e-/e+) \n",
"# pair.\n",
"\n",
"# pi0 --> e+ + e- (electron-positron pair)\n",
"# pi0 has angular momentum l = s = 0\n",
"\n",
"# Align electron and positron detectors in opposite directions.\n",
"\n",
"# | pi0 |\n",
"# |e- <------ ------> e+|\n",
"\n",
"# Where hbar = 1, the measurement of the spin in some direction is \n",
"# +/-1 with spin state [1 0] (up) or [0 1] (down).\n",
"\n",
"# The Pauli exclusion principle with conserved angular momentum 0\n",
"# dictates this system must be in the singlet state \n",
"# chi = [1/sqrt(2) (|up+>|down-> - |down+>|up->)].\n",
"\n",
"# In this state, if the positron is measured to have spin [1 0], the \n",
"# electron must have spin [0 1], or vice versa. There is an equal \n",
"# probability to find either state during the first measurement.\n",
"\n",
"# This view is consistent with the realist view. The realist view could \n",
"# hold that the electron and position had those angular momenta \n",
"# from creation.\n",
"\n",
"# EPR assumes influences cannot propagate faster than the speed of \n",
"# light. \"Wave function collapse\" is apparently instantaneous, however.\n",
"\n",
"\n",
"import numpy as np\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.patches as mpatches\n",
"%matplotlib inline "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7f22020bd208>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# If information about the measurement of the wave function propagated\n",
"# at a finite speed, the particles could conceivably be measured such\n",
"# that both are equally likely to hold either spin up or spin down.\n",
"\n",
"# What would happen if the measurements were uncorrelated?\n",
"\n",
"plt.hist(np.random.randint(0,2,1000),bins=4)\n",
"plt.hist(np.random.randint(3,5,1000),bins=4)\n",
"elepatch = mpatches.Patch(color='blue', label='e-')\n",
"pospatch = mpatches.Patch(color='orange', label='e+')\n",
"#plt.legend(handles=[elepatch,pospatch])\n",
"plt.text(0.5,565,\"e-\",size=20)\n",
"plt.text(3.5,565,\"e+\",size=20)\n",
"\n",
"plt.suptitle(\"Uncorrelated Spins\",fontsize=20)\n",
"plt.ylim([400,600])\n",
"plt.xlim([-1,5])\n",
"plt.xticks([0.125,0.85,3.125,3.85],[\"down\",\"up\",\"down\",\"up\"])\n",
"plt.tick_params(axis='both',labelsize=15)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f22020419e8>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2202041dd8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f22020419e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# How many violations of angular momentum would be measured?\n",
"\n",
"# From running several simulations, it's evident a violation in the \n",
"# conservation of angular momentum would be measured half of the time.\n",
"# We can conclude that the information that the entangled particles are in\n",
"# orthogonal spin states is instantaneously agreed once a measurement\n",
"# is made.\n",
"\n",
"violations = 0\n",
"\n",
"for trial in range(0,1000):\n",
" elespin = np.random.randint(0,2)\n",
" posspin = np.random.randint(0,2)\n",
" if elespin == 0:\n",
" elespin = np.matrix('0 1')\n",
" else:\n",
" elespin = np.matrix('1 0')\n",
" if posspin == 0:\n",
" posspin = np.matrix('0 1')\n",
" else:\n",
" posspin = np.matrix('1 0')\n",
" \n",
" elespin.transpose()\n",
" posspin.transpose()\n",
" chi_squared = elespin*np.matrix('1; 0')*posspin*np.matrix('0; 1') - posspin*np.matrix('1; 0')*elespin*np.matrix('0; 1')\n",
" \n",
" if chi_squared == 0:\n",
" violations = violations + 1\n",
"\n",
"zeroes = np.zeros(violations,dtype=int)\n",
"ones = np.full((1000-violations),1,dtype=int)\n",
"result = np.concatenate((ones,zeroes))\n",
"\n",
"plt.ylim([400,600])\n",
"plt.xlim([-1,2])\n",
"plt.xticks([0.125,0.85],[\"violation\",\"adherence\"])\n",
"plt.tick_params(axis='both',labelsize=15)\n",
"plt.suptitle(\"Conservation Violations\",fontsize=20)\n",
"plt.hist([result],bins=4)\n",
"plt.figure()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f22020737f0>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEXCAYAAACwHc/gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAGx1JREFUeJzt3XucXVV99/HPkHCLXAOIRYEgKCAIqGgNChxALBQordJIQSVeqdoKVbEFwYzPQy0V+1BFreCjRJ9iFajcpQKag9xELiKKEFEycgl3EkJIAEnm+eO3DrNnzz4z+8ycmclKPu/Xa15zzt7r7L3Onn2+e+211klAkiRJkiRJkiRJkiRJkiRJE2QlMK+D8o30mjkdvKY3vWafDl6jajOIY3lOafnctHybCa7PWPQBC8a4jRlUH49um532c8w472eNttZkV2CSrUw/w+mj/Qe9fxT7HM1rViWzmZgAGC/l499fsWwG4/8e/znt419rlD07lT0uPa+q82iNdTsNhm+g9NPd+qrCmh7kUO8EqyqzE/DeLtclJ6vLB/NEYGdgYWFZf+n3ePhG2v57gKnDlHsJcCTwLPDttGx/4IBxrNtotDtWFxLH96IJrMsaxyAfvd8CD0x2JTRmDxN/yxcKy3pKv8dDH3A18DLgsGHKHQlsAPw3sDgtW8DYu1a6rd2xWkIc3yUTWJc1jkE+eu36yLcEvgk8AiwDfsHILfc3AP8DPA08BVwFvHmE1+xE9O/eDzxHBNK5wKsrys5N9d0WOBb4FbA8veYsYKMR9jUWrwK+AzyY6vkg0bLcoU35KcDfAtcTx2IZcA/Rgi2+Zivgs6ncw4Vtn0u0AOuay+Cus17g3vT4GAa631r9vH+WHn+rzfbWBR4HHgPWHmHfZ6ffHxqmTGvd2YVlfVQH+brAPxF/32eI4/dT4K9HqEfRq4HTgFuI9/Bs2t9ZwMtLZecCP0mP5zD4WLXGdWbTvo/8DcQF6tHCfr5KXNzK5tL5Obwb8F9pu8+m/dwKnMHwd0HZWa3ezCQo305uDtwAbAdcC1xHBM7XiXCushfRMpsK/AD4HfA6oMnAh6TsoFR2CnBpes3WwDuAQ4D9iAtI2enA24FLiAvH/kRQ7MD43Kq/kXhvGwAXA78hQvbdwOHA24jAaFkHuCwtvw/4T6Iltx3wl8Qx/V0quw/wj8Qxug1YSoTQEcBfAG8B7qhZz+LfcR6wMdEffTuDuwR+kbb5e2AWcDxDW5rvBKYDXwT+OMJ+LybC8u3E3+/+0vpdgTcB84n33q7OEMfuR8RxuQv4CtEtcwTwfWAP4DMj1AfiHDqWOK7XAc+nenyQuHPYk4FuqAtTPY4hztdmYTt9I9T3UCLE+4ELgD+kbX+EODfeWrENqH8O7wbcBKxIZRcQYf+qtI/PMPguTBlrtR7mEC2xqp/FxMlQHuxcydCgbQ1K/Vtp+RuID8RKohXZ0gPcnbZfvr3+eCq/gsGzVjYFFhGti51Kr9mFaNXfWlo+N22rD3hFYfkU4Jq07o3UM5vhW6QtPUSgrAD+prRuVtrGXQy+Jf98Wn4RQ1uzaxMXypYtiKAq2404Bj8sLZ/Rpt5zGTqYvW2bsi2fTOs/VrGuSbzndnccZafRfrDwS2ndJ0rL+xi4a2g5MZW9jMF32lsQIbYSmFlYPoPq97gV1XcSBxLB97XS8gZDz+ui2Wl98a50A+AJ4kL3llL5T6fyPyotn0tn5/C/pWVV3VYbM77dZppgK2v+1AnytYnb2cXAhhX7OoehJ/xbaN9FsxbRpVCefnhcWvaRNu/pjLS+2L0wNy17f0X52WndR9tsr135kYK89d6ua7P+p2n93un5FOLYLaX61roTlxC33VMKy2ZQP8jblW3ZlOjyKbf4d0yvu7qDum5PnF99DA6XdYmwW0608Iv6GBrk9xBBW9W19v5Ur28Wls2g3t+xqHU3UtSg8yA/Oi37z4ryUxi48GxdWD6Xzs7hVpAf2KZeqxX7yOPWbq1hfu6ruZ2dgPWJ2/GnK9ZfU7Hs9cOsW0n0/5a1WlV7UH0H0fogV/UT31KxrDVgu2nFurFovbd23UOti9ce6fdOxK3vHUS/Zx2HEF1LDzFwx7OSuG1fh8Et+G5aRHRX7MrgVu6H0++vd7Ct3xPHYhui/73lncTf5CLgyRG2sSFxQVhIDCyWtf4Ge1Ssq/Ju4mL0GNFqbh3XXYkW+1gNd26sIC7yEF2MZXXP4e+lbV1EjMm8lzhGqyX7yLtn4/T7kTbrq8JpNK/ZLP0eboCsn+puh8UVy1r9hFMq1o1F67091GZ9a/kmpd8P1tz+ccTdx5PE+MN9RCu5H/grYHeiVTte/oPoGz4WuDHt6xjib3lhh9v6BtHX+0Gi35f0GAYPcrYz0rFunUebtFlfdAZxbBcCVxB/j+Vp3fvozhen6p4bG1esq3sO30zc7X2GGCd4T1o+H/gcEfSrDYO8e55Kv7dss76qu2Asr9kN+HW9qk2KVj3bdZP8Salc6wNanhlRZSpx9/EQ0borXwjL/a7j4efEIGtr0PPPiS6Q04iWYCd+QHSjHAa8lLgzaRDdJXW+PdzpsW7npcTYzK+IQfhnSuuPrlGXOrpV35H8jDimaxMDqQcBfw98l7jb+PEYt7/KsGule+4iWi57UD0VqlGx7NZh1k0hRu7Lbky/96lYtyq5Lf3er836/Url7iY+uLsz8EFuZ3OitXYDQ0N8AyLcx/JlnlYQj3SX8jVgPeK2/cNE90OdFnTZH4k+4LWJVv0H0vL/W/P1TxNdNK+gepC1fKzbeSXRT38lQ0P8FWl9Wd1jVTTcuTGVaEn3M3J96/oj8bmZQ1yoIGY2rTYM8u55gRi82YhoLRbtSXVr5gbiVm8fhp5Yf0d8cMqBdA7Rep1D9UyTtai+MEy064n39laiv7foiLR8PgODoSuIOcTrE33M65ReU+zzfpToRtmTwV1IaxMzPTZjbBal39uOUO6/iL/Fp4m/4VVUT5mr4xvp94eIMH+eCPe6vkWE8OkM/lxvDpxCnEcjDWy25qbvXdrGBql+VWH9RPo90rEqavX7/w3wp6V1xxMDsVczti/c7UVcZMtadwHLxrDtVY5dK/XUnap0EjGX9XgiZK4nWpezgMupbgV8gAiA/yZusX9PtOr3J/pLDyqVf5IIwguJW8cfE/Oz+4lR/pnEoM+0mnUerb1pHzS3AmcSgXQVMTB4MRHcOxJzwpcw9ItSnyM+2IcRg3aXE63NrYnZB58ivly0EvgyA19+uYQI+v2IfuB5tL8TqGMpcWz3Ji7O9xAXmovT/lqWEwNprX8D5awx7PO3xCBf607rAuL2v64vAgcTc7B/SfRvTyO+DLQ58AWi4TCcR4i+4yOJQfuriDufA4ngu52hA6Z3E/3oRxIt3/uIc/E7tJ8o8Awx++R8YqD/fGIO/RvSvh4ixh7G4tPEOXAtcXFdSkzPPYj4DI3mzkmrqNbUwuEsoP48chj4Zmer1XgbEVj70n6a1uuJD96S9HMlEWhzGDqPvGVbIix/SwTKYiLQv83QC8Y5bd4DjDx9rKz1bccVtJ+q+YNC+VcTH+qFRCvzwfT8VW22P4WYn30TEeJLiQvA1xl8az8F+AfgTuI4LyTe+9Zt3u8MqqfbtTs22xMXiMfT+hVUf0P3tWm7DzD2O9yjGDiGbxum3AKGTj+EGHA9kbjYLGPgm53vqig7g+rjsT5wKnHxWk58UedMov9/HtWflz2JFnTrOxfFc3Y27Y/dnsS58ijxzdw+2n+zs9Nz+MD03u5kYFrrXcC/M3haoyS9OEf7c5NdEUlS56YSrd/n6M78aknSBHkrMT/5KqI1/qXJrY4kqVOtf+nvMaLvfjy/eCRJkiRJkiRJkqQ2JvwfV9933337r7mm6l9tlSQN4xra/PMbk/G/ZPT3968u/wG76urt7aW3t3eyq5E1j+GaraenB9pktv9oliRlziCXpMwZ5JoQjUZjsquQPY+h2rGPXJIyYB+5JK3GDHJJypxBLkmZM8glKXMGuSRlziCXpMwZ5JKUOYNckjJnkEtS5gxyScqcQS5JmTPIJSlzBrkkZc4gl6TMGeSSlDmDXJIyZ5BLk2SjjabT09MzYT8bbTR9st+yxon/Q5A0SeJ/fJnIz0IPfvby5f8QJEm
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2201ef4358>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f22020737f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Bell's Experiment took this a step further, to rule out locality \n",
"# completely. Establish the detectors to \"float\" such that they \n",
"# measure the components of the spins of the electron and positron \n",
"# along a unit vector a or b, with angles phi_a and phi_b, \n",
"# respectively. Compute a product P of the spins in units of hbar/2. \n",
"# This will give +/-1. \n",
"\n",
"# / pi0 \\\n",
"# /e- <------ ------> e+\\\n",
"\n",
"# QM predicts P(a,b) = -a dot b, the expectation value of the product \n",
"# of the spins.\n",
"\n",
"# In 1964, Bell derived the Bell inequality for a local hidden variable\n",
"# theory: abs(P(a,b) - P(a,c)) <= 1 + P(b,c)\n",
"\n",
"# For any local hidden variable theory, the Bell inequality must hold. \n",
"# It introduces a third unit vector c, which is any other unit vector \n",
"# than a or b.\n",
"\n",
"# Does the quantum mechanical prediction violate the Bell inequality?\n",
"# Testing several detector configurations in a plane, systematically \n",
"# from 0 to pi, we determine whether the QM prediction is consistent \n",
"# with a local hidden variable theory.\n",
"\n",
"violations = 0\n",
"trials = 0\n",
"for step_a in range(0,6):\n",
" for step_b in range (0,6):\n",
" phi_a = step_a/6*np.pi\n",
" phi_b = step_b/6*np.pi\n",
" phi_c = phi_a - 0.5*phi_b\n",
" P_ab = -1 * np.cos(phi_a - phi_b)\n",
" P_ac = -1 * np.cos(phi_a - phi_c)\n",
" P_bc = -1 * np.cos(phi_b - phi_c)\n",
" \n",
" bell_lhs = np.abs(P_ab - P_ac)\n",
" bell_rhs = 1 + P_bc\n",
" \n",
" if bell_lhs > bell_rhs:\n",
" violations = violations + 1\n",
" \n",
" trials = trials + 1\n",
" \n",
"zeroes = np.zeros(violations,dtype=int)\n",
"ones = np.full((trials-violations),1,dtype=int)\n",
"result = np.concatenate((ones,zeroes))\n",
"\n",
"plt.ylim([trials/2-10,trials/2+10])\n",
"plt.xlim([-1,2])\n",
"plt.xticks([0.125,0.85],[\"violation\",\"adherence\"])\n",
"plt.tick_params(axis='both',labelsize=15)\n",
"plt.suptitle(\"Hidden Locality Violations\",fontsize=20)\n",
"plt.hist([result],bins=4)\n",
"plt.figure()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f220202b080>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7f22020bdb38>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f220202b080>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# It is seen that the QM prediction disagrees with a local hidden \n",
"# variable theory in a significant number of configurations.\n",
"\n",
"# On average, for random orientations between 0 and pi, how often? \n",
"# After running several trials, it appears to be about half of the, \n",
"# which is what one would expect from the quantum mechanical\n",
"# prediction.\n",
"\n",
"violations = 0\n",
"trials = 0\n",
"for rand_a in range(0,10):\n",
" for rand_b in range (0,10):\n",
" phi_a = np.random.rand(1)*np.pi\n",
" phi_b = np.random.rand(1)*np.pi\n",
" phi_c = phi_a - 0.5*phi_b\n",
" P_ab = -1 * np.cos(phi_a - phi_b)\n",
" P_ac = -1 * np.cos(phi_a - phi_c)\n",
" P_bc = -1 * np.cos(phi_b - phi_c)\n",
" \n",
" bell_lhs = np.abs(P_ab - P_ac)\n",
" bell_rhs = 1 + P_bc\n",
" \n",
" if bell_lhs > bell_rhs:\n",
" violations = violations + 1\n",
" \n",
" trials = trials + 1\n",
"\n",
"zeroes = np.zeros(violations,dtype=int)\n",
"ones = np.full((trials-violations),1,dtype=int)\n",
"result = np.concatenate((ones,zeroes))\n",
"\n",
"plt.ylim([trials/2-10,trials/2+10])\n",
"plt.xlim([-1,2])\n",
"plt.xticks([0.125,0.85],[\"violation\",\"adherence\"])\n",
"plt.tick_params(axis='both',labelsize=15)\n",
"plt.suptitle(\"Hidden Locality Violations\",fontsize=20)\n",
"plt.hist([result],bins=4)\n",
"plt.figure()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# The prediction (Bell's inequality) made by assuming a local hidden\n",
"# variable is violated by a significant number of the possibile \n",
"# bborientations. This simulation cannot determine which theory is\n",
"# correct, but the QM prediction has been confirmed through experiment.\n",
"# No hidden local variable holds actionable information about the \n",
"# state. Entangled states retain their entanglement in a non-local \n",
"# nature."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}