Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

examples: add a second generation repeater #162

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

atomgardner
Copy link
Contributor

The idealized quantum repeater from https://arxiv.org/pdf/0809.3629.pdf is modelled with three repeater stations.

fixes: #91


This doesn't generalize to additional nodes easily, and there is no QEC. It is very much a unitaryHACK ;)

@atomgardner atomgardner changed the title examples: add an second generation repeater examples: add a second generation repeater Jun 13, 2023
@stephendiadamo stephendiadamo self-assigned this Jun 14, 2023
@stephendiadamo
Copy link
Collaborator

Although a very good attempt, unfortunately the second generation quantum repeater does implement some form of entanglement distillation. I would consider this implementation a first gen quantum repeater... I'll leave this open for now, in case you'd like to add that part in, even though the hack has finished.

@nathanshammah
Copy link

@atomgardner you have time until June 20th.

@atomgardner
Copy link
Contributor Author

@stephendiadamo, I'm probably misreading figure one in https://arxiv.org/pdf/1509.08435.pdf.

Are you talking about the HEG? that it should implement something like the nested purification protocol from https://arxiv.org/pdf/quant-ph/9803056.pdf, rather than generating epr pairs locally and sending?

Miscellaneously, https://arxiv.org/pdf/1509.08435.pdf justifies dropping the QEC for a 2nd gen repeater since op errors here are essentially impossible.

@stephendiadamo
Copy link
Collaborator

@atomgardner In https://arxiv.org/pdf/1509.08435.pdf, I'm referring to the quantum error correction step for the 2G repeater. Essentially, for this issue I'd imagine there would be an entanglement distribution step followed by an entanglement distillation/purification step. The entanglement can still come from the sender rather than a central node, but there should be something more than just the distribution step.

@atomgardner
Copy link
Contributor Author

@stephendiadamo! This is clearer to me now. I have the CX teleportation working with repetition codes, and the repeater working! Let me tidy up the code organization. Are repetition codes sufficient?

@nathanshammah thanks for the time extension but I was never gonna make it :)

@atomgardner
Copy link
Contributor Author

@stephendiadamo, took me a while to realize there's an easy way to generalize to an arbitrary number of intermediate nodes.

How's this looking?

@stephendiadamo
Copy link
Collaborator

@atomgardner

Thanks a lot for the efforts. I'll have a close look in the next couple of days and will send my feedback.

@atomgardner
Copy link
Contributor Author

@stephendiadamo, I can give this patch a polish if the code is difficult to follow. Let me know.

@stephendiadamo
Copy link
Collaborator

Hi @atomgardner, the code looks fine. Sorry for the delay. I'll check it today.

Copy link
Collaborator

@stephendiadamo stephendiadamo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall it looks good!

If I understand correctly, it transmits a bell pair encoded via a repetition code and performs a correction step to distill entanglement? Is that the remote CNOT part?

Maybe a high level overview at the top as a comment can help me better understand your approach as well as any future reader.

If you like, you can also create this as an example that we can add to the docs. You can check out some other examples and see if that's something you're in interested to do. Basically just walking through the steps with explanation and showing some code along the way.


def encoded_connection(host: Host, left: Host, right: Host, n: int):
ms = []
for k in range(3):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can the 3 be generalized? It's a bit of a "magic number"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

I'd be nice to have an abstraction for getting/storing logical qubits. But I reckon that's outside the scope of this example.

@atomgardner
Copy link
Contributor Author

If I understand correctly, it transmits a bell pair encoded via a repetition code and performs a correction step to distill entanglement? Is that the remote CNOT part?

I don't think there's any entanglement distillation happening. The paper I followed (https://arxiv.org/pdf/0809.3629.pdf) talks about performing state distillation when preparing the memory qubits—the encoded |+> and |0>—but that is not necessary here, since we can build the encoded states perfectly.

The remote CNOT is used to establish the local encoded Bell pairs shared between neighbouring nodes.

If you like, you can also create this as an example that we can add to the docs. You can check out some other examples and see if that's something you're in interested to do. Basically just walking through the steps with explanation and showing some code along the way.

Oh, this could be fun. I'll add it to my queue 👍

The quantum repeater from https://arxiv.org/pdf/0809.3629.pdf with
repetition code is modelled.

fixes: tqsd#91
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Implement an example of a second generation quantum repeater
3 participants