Over the course of this series, we have developed a solid foundational understanding of quantum computing, as we learned about the basic paradigms, mathematics and various computational concepts that characterize this unique disciple. We are now well equipped to start exploring some of the most important quantum algorithms – starting with today’s part 14, which will be devoted to a simple oracle problem formulated by David Deutsch.

## Introduction to quantum computing with Q# – Part 13, CHSH Game

Last time we had an in-depth look at the original Bell’s inequality, and we wrote some Q# code that allowed us to quickly empirically test the predictions of quantum mechanics in that area.

In today’s post, we will continue with a generalization of Bell’s inequalities, called Clauser-Horne-Shimony-Holt inequality (in short CHSH), and discuss a simple game based on that. In the process, we will arrive at a remarkable conclusions – we will learn that for a certain class of simple boolean logic problems, they can be solved more efficiently when adopting a quantum strategy compared to a classical “common sense” approach.

## Introduction to quantum computing with Q# – Part 12, Bell’s inequality

After a short multi-part detour into the world of quantum cryptography, in this part 12 of the series, we are going to return to some of the foundational concepts of quantum mechanics, and look at the programmatic verification of Bell’s inequality.

## Q# Advent Calendar 2020 – Creating Q# Compiler Rewrite Steps

On this day 120 years ago, December 14 1900, Max Planck presented to the German Physical Society his work on spectral density of black body radiation, and postulated that electromagnetic energy could only be emitted in quantized packets. This date is now widely considered to be the the birth of quantum theory. The work of Planck sparked an explosion of theoretical and empirical work, which resulted in arguably the most intense and transformational periods in the history of science. The discovery of photoelectric effect by Einstein, Bohr’s model of atomic structure, De Broglie’s wave-particly duality hypothesis, discovery of quantum mechanicss by Heisenberg and formulation of quantum electrodynamics by Dirac, all followed in the span of the next three decades.

It is quite amazing that I am able to celebrate this special date with a special blog post about quantum programming, that’s part of Q# Advent Calendar 2020. You can find my post on “Creating Q# Compiler Rewrite Steps” on the Q# Community Blog here.

## Introduction to quantum computing with Q# – Part 11, EPR Quantum Key Distribution

In the last two posts we covered quantum key exchange using the B92 and BB84 protocols. Both of those depended with their security on the no-cloning theorem. Today we are going to dedicate a third post to the topic of quantum key distribution, and this time around we will explore a variant of key distribution relying on the phenomenon of entanglement and quantum correlations.

## Introduction to quantum computing with Q# – Part 10, B92 Quantum Key Distribution

In the last part of this series we started talking about the area of quantum cryptography, or more accurately, quantum key distribution. We dissected, in considerable amount of detail, the BB84 protocol, and discussed how it can lead to effectively unbreakable cryptography.

Today we shall continue with quantum key distribution by looking at a sibling to BB84, the B92 protocol.

## Introduction to quantum computing with Q# – Part 9, BB84 Quantum Key Distribution

This is already part 9 of the series (time flies!). So far we have covered a wide array of topic around the nature of quantum computational units called qubits, superposition, entanglement, single-qubit gates, multi-qubit gates and some interesting concepts from the area of quantum information theory. In this post we will shift our attention to another interesting field in the quantum landscape – quantum cryptography. More specifically, we will explore a reference protocol for quantum key distribution, called BB884, discuss why it’s secure even when using a public channel to exchange qubits and realize a simple demonstrative implementation using Q#.

## Introduction to quantum computing with Q# – Part 8, Superdense coding

Last time, we discussed the quantum teleportation protocol, which relies on the phenomenon of quantum entanglement to move an arbitrary quantum state from one qubit to another, even if they are spatially separated. Today, we shall continue exploring the scenarios enabled by entanglement, by looking at the concept called “superdense coding”. It allows sending two classical bits of information by physically moving only a single qubit around, and is sometimes referred to as a conceptual inverse of teleportation.

## Introduction to quantum computing with Q# – Part 7, Quantum state teleportation

In the previous part of the series we discussed how quantum theory prohibits copying of an arbitrary quantum state. In computing terms, this means that regardless of the richness of features provided by high-level quantum-specific languages such as Q#, we cannot implement a classical functionality of copy-and-paste on a quantum computer.

It turns out, however, that we can achieve a cut-and-paste type of effect, through a remarkable process of quantum teleportation.

## Introduction to quantum computing with Q# – Part 6, No-cloning theorem

In the last part of this series we looked at the phenomenon of entanglement – one of the core concepts of quantum theory, which has been fundamentally important in the development of quantum information theory. We grappled with its deeply mysterious behavior and tried to understand and project its consequences onto the Q# code.

In today’s part 6, we shall ask ourselves a seemingly innocent question – how to you clone a quantum state, or in other words, how do you copy a qubit?