Note
Go to the end to download the full example code.
An extended nonlocal game with quantum advantage¶
In the previous tutorials on The BB84 extended nonlocal game and The CHSH extended nonlocal game, we saw examples where the standard quantum and unentangled values were equal (\(\omega(G) = \omega^*(G)\)). Here, we will construct an extended nonlocal game where the standard quantum value is strictly higher than the unentangled value, demonstrating a true quantum advantage.
A monogamy-of-entanglement game with mutually unbiased bases¶
Let \(\zeta = \exp(\frac{2 \pi i}{3})\) and consider the following four mutually unbiased bases:
Define an extended nonlocal game \(G_{MUB} = (\pi,R)\) so that
and \(R\) is such that
represents a measurement with respect to the basis \(\mathcal{B}_x\), for each \(x \in \{0,1,2,3\}\).
Taking the description of \(G_{MUB}\), we can encode this as follows.
49 from toqito.states import basis
50 import numpy as np
51
52
53 # The basis: {|0>, |1>}:
54 e_0, e_1 = basis(2, 0), basis(2, 1)
55
56 # Define the monogamy-of-entanglement game defined by MUBs.
57 prob_mat = 1 / 4 * np.identity(4)
58
59 dim = 3
60 e_0, e_1, e_2 = basis(dim, 0), basis(dim, 1), basis(dim, 2)
61
62 eta = np.exp((2 * np.pi * 1j) / dim)
63 mub_0 = [e_0, e_1, e_2]
64 mub_1 = [
65 (e_0 + e_1 + e_2) / np.sqrt(3),
66 (e_0 + eta**2 * e_1 + eta * e_2) / np.sqrt(3),
67 (e_0 + eta * e_1 + eta**2 * e_2) / np.sqrt(3),
68 ]
69 mub_2 = [
70 (e_0 + e_1 + eta * e_2) / np.sqrt(3),
71 (e_0 + eta**2 * e_1 + eta**2 * e_2) / np.sqrt(3),
72 (e_0 + eta * e_1 + e_2) / np.sqrt(3),
73 ]
74 mub_3 = [
75 (e_0 + e_1 + eta**2 * e_2) / np.sqrt(3),
76 (e_0 + eta**2 * e_1 + e_2) / np.sqrt(3),
77 (e_0 + eta * e_1 + eta * e_2) / np.sqrt(3),
78 ]
79
80 # List of measurements defined from mutually unbiased basis.
81 mubs = [mub_0, mub_1, mub_2, mub_3]
82
83 num_in = 4
84 num_out = 3
85 pred_mat = np.zeros([dim, dim, num_out, num_out, num_in, num_in], dtype=complex)
86
87 pred_mat[:, :, 0, 0, 0, 0] = mubs[0][0] @ mubs[0][0].conj().T
88 pred_mat[:, :, 1, 1, 0, 0] = mubs[0][1] @ mubs[0][1].conj().T
89 pred_mat[:, :, 2, 2, 0, 0] = mubs[0][2] @ mubs[0][2].conj().T
90
91 pred_mat[:, :, 0, 0, 1, 1] = mubs[1][0] @ mubs[1][0].conj().T
92 pred_mat[:, :, 1, 1, 1, 1] = mubs[1][1] @ mubs[1][1].conj().T
93 pred_mat[:, :, 2, 2, 1, 1] = mubs[1][2] @ mubs[1][2].conj().T
94
95 pred_mat[:, :, 0, 0, 2, 2] = mubs[2][0] @ mubs[2][0].conj().T
96 pred_mat[:, :, 1, 1, 2, 2] = mubs[2][1] @ mubs[2][1].conj().T
97 pred_mat[:, :, 2, 2, 2, 2] = mubs[2][2] @ mubs[2][2].conj().T
98
99 pred_mat[:, :, 0, 0, 3, 3] = mubs[3][0] @ mubs[3][0].conj().T
100 pred_mat[:, :, 1, 1, 3, 3] = mubs[3][1] @ mubs[3][1].conj().T
101 pred_mat[:, :, 2, 2, 3, 3] = mubs[3][2] @ mubs[3][2].conj().T
Now that we have encoded \(G_{MUB}\), we can calculate the unentangled value.
106 import numpy as np
107 from toqito.nonlocal_games.extended_nonlocal_game import ExtendedNonlocalGame
108
109 g_mub = ExtendedNonlocalGame(prob_mat, pred_mat)
110 unent_val = g_mub.unentangled_value()
111 print("The unentangled value is ", np.around(unent_val, decimals=2))
The unentangled value is 0.65
That is, we have that
However, if we attempt to run a lower bound on the standard quantum value, we obtain.
123 g_mub = ExtendedNonlocalGame(prob_mat, pred_mat)
124 q_val = g_mub.quantum_value_lower_bound()
125 print("The standard quantum value lower bound is ", np.around(q_val, decimals=2))
/home/docs/checkouts/readthedocs.org/user_builds/toqito/envs/latest/lib/python3.11/site-packages/scs/__init__.py:83: UserWarning: Converting A to a CSC (compressed sparse column) matrix; may take a while.
warn(
The standard quantum value lower bound is 0.65
Note that as we are calculating a lower bound, it is possible that a value this high will not be obtained, or in other words, the algorithm can get stuck in a local maximum that prevents it from finding the global maximum.
It is uncertain what the optimal standard quantum strategy is for this game, but the value of such a strategy is bounded as follows
For further information on the \(G_{MUB}\) game, consult [1].
References¶
Total running time of the script: (0 minutes 0.802 seconds)