Перенести запутанность между двумя парами
Алиса и Боб независимо располагают своими парами в состоянии $|\Phi^+\rangle=(|00\rangle+|11\rangle)/\sqrt2$. Каждый отдаёт один кубит своей пары Чарли. Он может телепортировать состояние полученного от Алисы кубита на оставшийся у Боба кубит. Боб выполняет поправки, зависящие от результатов Чарли. В итоге оставшиеся у Алисы и Боба кубиты должны образовать $|\Phi^+\rangle$, хотя они никогда не взаимодействовали.
Напишите операцию Q#, возвращающую пару операций:
1. Операция Чарли принимает два переданных ему кубита и выдаёт целое число — закодированное классическое сообщение для Боба.
2. Операция Боба принимает оставшийся у него кубит и это число, затем корректирует кубит так, чтобы два удалённых кубита оказались в общем состоянии $|\Phi^+\rangle$.
Нужно реализовать две отдельные вспомогательные операции и вернуть их, а не помещать весь протокол в тело верхней операции. Заготовка содержит вспомогательные SendMessage и ReconstructMessage из обычной телепортации.
Заготовка Q#:
namespace Kata {
import Std.Convert.*;
operation EntanglementSwapping() : ((Qubit, Qubit) => Int, (Qubit, Int) => Unit) {
return (SendMessageCharlie, ReconstructMessageBob);
}
// The skeleton operations for two parts of the protocol.
operation SendMessageCharlie(qAlice1 : Qubit, qBob1 : Qubit) : Int {
// Implement your solution here...
return -1;
}
operation ReconstructMessageBob(qBob2 : Qubit, resultCharlie : Int) : Unit {
// Implement your solution here...
}
// You might find these helper operations from earlier tasks useful.
operation SendMessage(qAlice: Qubit, qMessage: Qubit) : (Bool, Bool) {
CNOT(qMessage, qAlice);
H(qMessage);
return (M(qMessage) == One, M(qAlice) == One);
}
operation ReconstructMessage(qBob : Qubit, (b1 : Bool, b2 : Bool)) : Unit {
if b1 {
Z(qBob);
}
if b2 {
X(qBob);
}
}
}Предложить решение
Войти, чтобы отправить материал.