# Introduction to Quantum Computing — For Newbies and IT Professionals — Part 3

## Enter the world of Quantum Computing with a 3-part Introduction

This is a continuation of the introduction to quantum computing series of articles. You can find the first part here and the second part here. In this last part, we will go through **teleportation, adiabatic quantum computing, quantum annealing, development frameworks etc.**

We will start with Teleportation and adiabatic quantum computing/quantum annealing, finally finishing with the development frameworks for quantum programming.

## Teleportation

In quantum computing, there is **no way to duplicate the quantum state** of a qubit, thus there is no way to copy a quantum state from one qubit to another. However, it is possible to “teleport” the quantum state of a qubit to another. During teleportation, the quantum state of the qubit I want to teleport gets **destroyed**, as it gets transferred / teleported to the destination qubit.

Let’s say we have three qubits:

*A*— a qubit that I own*B*— a qubit that you own*C*— a qubit whose state I want to transfer to you

Assuming **|ψ⟩ = **α**|0⟩ + **β**|1⟩** is the **quantum state **of *C***, **once we are done with teleportation, you will have access to *α* and *β*, whereas I won’t anymore. We start teleportation by entangling *A* and *B*. We can do it by using one of the **bell states** as shown in the previous article. Once they are entangled, we take a tensor product of *C* with the entangled *A* and *B:*

which can be further reduced to:

Note how ** α and β, which were the probability amplitudes of C, are now on B (the destination qubit)**. As we can also see from the equation,

**the entanglement between**Next

*A*and*B*is broken, whereas*A*and*C*are entangled now.**I**do a measurement in the Bell basis shown

**below**, which will collapse in one of the four states shown in the equation

**above**

Now I tell you which of the basis vectors I observed. This information is represented using two bits and is sent using a** classical communication channel**. Based on this information, *B* knows if it has already received the desired state or if it needs to apply some gate to change sign or do a bit flip and that’s it. The quantum state has been teleported!

## Adiabatic quantum computation and quantum annealing

Adiabatic quantum computation (AQC) is an alternative to the gate model of quantum computation introduced until now. It relies on the adiabatic theorem to do calculations and is closely related to **quantum annealing**.

Quantum annealing is all about **using quantum physics to find the minimum energy state of something**. Since in nature, everything’s always trying to find its minimum energy state (hot things get cold over time, moving things come to a stop unless given a push), we use physics to solve optimization problems because you can frame optimization problems as an energy minimization problem.

In quantum annealing, just like in gate model, you have a qubit in a superposition state which after all the computations collapses to a |0⟩ or |1⟩ state. In the beginning, a qubit has similar probabilites for both states. In order to change the probability of 0 or 1, you apply **magnetic field (bias)**. **Lower the energy, higher the probability! **The qubits are basically minimizing its energy in the presence of this external magnetic field.

Further a **coupler** is used to link the qubits so they can influence each other. A coupler can make the two coupled qubits want to end up in the same state so they are either both 0 or both 1 (00 or 11), or have the coupled qubits in opposite states (01 or 10). This coupler is doing similar work as entanglement.

Other two important concepts to understand in quantum annealing are **Hamiltonians** and **Eigenspectrum**. Hamiltonians are used to describe physical systems in terms of energies. You can see it as a function where you input is **the state of the system** and the output is **the energy of the system** for that state. This is really important since we are trying to find the minimum energy state. So we can input the state of all qubits to it and it will output the energy corresponding to that. Correspondingly, **quantam annealing is trying to find out the state for the qubits for which the energy is minimum**.

Lowest energy state of the initial Hamiltonian is when all the qubits are in a superposition state and the lowest energy state for the final Hamiltonian state is the solution to the problem you are trying to solve. So you as a user program the biases (magnetic field) and couplings for the qubits to represent your problem.

So you start off with the initial Hamiltonian and slowly introduce the final/problem Hamiltonian with all the biases and couplings. Then you slowly remove the initial Hamiltonian until it goes down to zero and in the end you are left with a final Hamiltonian. It’s important to note here that the states in the** initial Hamiltonian are all quantum states**, whereas **states in the final Hamiltonian in the end are all classic computing states**. This is because during quantum annealing each of the qubits collapses from quantum state to classical state.

**Eigenspectrum** on the other hand is used to **visualize the different energy states **the system goes through during quantum annealing. It’s a graph where the **lowest energy state **during the anneal is at the **bottom** and then any **higher excited states** are **above** it.

The annealing process should be slow enough so it doesn’t transit into high energy state. When it can run slow enough, it is an **adiabatic process (hence the name adiabatic quantum computing!). **So if you have a problem where the probability of staying in the lowest energy state is high, quantum annealing could be a good fit. One of the best known quantum computer using the quantum annealing approach is D-Wave.

Next we look at some of the development frameworks you can use for quantum programming.

## Quantum development frameworks / toolkits

**IBM Qiskit**— IBM Qiskit allows you write quantum programs in python. They also offer a cloud solution through IBM Quantum Experience. It allows you to learn quantum computing

Code in python

Create quantum programs graphically using the gate model

among other features.

**Microsoft Quantum**— Microsoft offers a quantum development toolkit (QDK) and have a special language,**Q#**written specially for quantum programming. They also have an extensive documentation for quantum concepts for starters. Furthermore they have**Quantum Katas**, which are notebooks to interactively understand and introduce you to quantum programming. There is also a special learning path for quantum computing foundations, which also introduces their quantum cloud offering, Azure Quantum. Azure Quantum allows access to quantum solutions like Honeywell, IONQ, 1QBit among others.

**Cirq**— Cirq is a Python library for writing, manipulating, and optimizing quantum circuits and running them against quantum computers and simulators. It is developed by Google, although it is not an official product. It is used for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.**Tensorflow Quantum**— TensorFlow Quantum (TFQ) is a quantum machine learning library for rapid prototyping of hybrid quantum-classical ML models. TensorFlow Quantum focuses on*quantum data*and building*hybrid quantum-classical models*. It integrates quantum computing algorithms and logic designed in Cirq, and provides quantum computing primitives compatible with existing TensorFlow APIs, along with high-performance quantum circuit simulators.**D-Wave Ocean**— If you want to solve your problems using quantum annealing, you can take a look at D-Wave Ocean software stack and a Leap (a cloud service for quantum annealing) account. You can also check out the 250+ user-developed applications like quantum chemistry simulation, automotive design, preventative healthcare here. D-Wave computers are already used by customers like Lockheed Martin and Google.**Rigetti Forest SDK**— Rigetti offers a suite of open source tools through its Forest SDK, ranging from higher level language interfaces for**Quil**and device simulation, to circuit optimization and compilation software for efficiently designing experiments and performing algorithm research. You can check out the Quantum cloud services from Rigetti here.

**Xanadu PennyLane**and**Strawberry fields**— PennyLane is a quantum machine learning offering from Xanadu. Strawberry fields is targeted at quantum developers to design, optimize, and utilize photonic quantum algorithms without the need of expert quantum knowledge. It comes with a built-in suite of quantum simulators and compilers, plus it offers integration with PennyLane and Tensorflow.

## Other important links for your quantum journey

- A drag-and-drop quantum circuit simulator — https://algassert.com/quirk
- Quantum computing for computer scientists — https://www.youtube.com/watch?v=F_Riqjdh2oM&t=792s
- D-Wave YouTube Channel — https://www.youtube.com/channel/UC6_etbfDnWMxAuYj9qD1qmA
- IBM Qiskit YouTube Channel — https://www.youtube.com/channel/UClBNq7mCMf5xm8baE_VMl3A
- A repository for quantum algorithms: https://quantumalgorithmzoo.org/