Эксперименты с игрой CHSH
В игре CHSH Алиса получает бит $X$, Боб — $Y$, и без общения возвращают $A,B$. Победа означает $X\land Y=A\oplus B$.
В приведённой программе игрокам готовят пару Белла $(|00\rangle+|11\rangle)/\sqrt2$. Алиса измеряет свой кубит в $Z$ или $X$, Боб — в базисе $\pi/8$ или $-\pi/8$ по собственному входному биту. Передача кубитов виртуальна: каждый игрок должен действовать только на своём кубите. После измерений кубиты возвращаются в $|0\rangle$, а ответы игроков сравниваются с условием победы. Пример сравнивает долю побед классической и квантовой стратегий.
Измените исходный код и проверьте, меняется ли результат в следующих случаях:
1. Судья выбирает входные биты не случайно. Как судье минимизировать вероятность победы Алисы и Боба?
2. Кубит Боба измеряется первым.
3. Алиса и Боб получают незапутанную пару кубитов.
Все три пункта относятся к одному авторскому эксперименту. Полный исходный пример приведён ниже.
Заготовка Q#:
namespace Quantum.Kata.CHSHGame {
import Std.Random.*;
import Std.Math.*;
import Std.Convert.*;
function WinCondition(x : Bool, y : Bool, a : Bool, b : Bool) : Bool {
return (x and y) == (a != b);
}
function AliceClassical(x : Bool) : Bool {
return false;
}
function BobClassical(y : Bool) : Bool {
return false;
}
operation AliceQuantum(bit : Bool, qubit : Qubit) : Bool {
if bit {
return MResetX(qubit) == One;
}
return MResetZ(qubit) == One;
}
operation BobQuantum(bit : Bool, qubit : Qubit) : Bool {
let angle = 2.0 * PI() / 8.0;
Ry(not bit ? -angle | angle, qubit);
return M(qubit) == One;
}
@EntryPoint()
operation CHSH_GameDemo() : Unit {
use (aliceQubit, bobQubit) = (Qubit(), Qubit());
mutable classicalWins = 0;
mutable quantumWins = 0;
let iterations = 1000;
for _ in 1..iterations {
H(aliceQubit);
CNOT(aliceQubit, bobQubit);
let (x, y) = (DrawRandomBool(0.5), DrawRandomBool(0.5));
if WinCondition(x, y, AliceClassical(x), BobClassical(y)) {
set classicalWins += 1;
}
if WinCondition(x, y, AliceQuantum(x, aliceQubit), BobQuantum(y, bobQubit)) {
set quantumWins += 1;
}
ResetAll([aliceQubit, bobQubit]);
}
Message($"Percentage of classical wins is {100.0 * IntAsDouble(classicalWins) / IntAsDouble(iterations)}%");
Message($"Percentage of quantum wins is {100.0 * IntAsDouble(quantumWins) / IntAsDouble(iterations)}%");
}
}Решения пока нет.
Предложить решение
Войти, чтобы отправить материал.