QUC  Quantum Computing 
Lecturer: Dr. Stefano Gogioso
Quantum computing refers to the harnessing and control of quantum mechanical phenomena to perform certain specialised computations, typically used as blackbox subroutines within larger traditional programs. Access to these quantum subroutines makes it possible to design algorithms that quickly solve problems which would otherwise be unsolvable on traditional architectures.
Quantum computing has seen a sharp acceleration over the past few years, both in terms of technological advances and in terms of early access to the public. Several companies now offer and maintain programmatic APIs that allow scientists and industry innovators to program the quantum hardware they are developing, to encourage evaluation, early adoption, and creation of knowhow in their target industry segments.
This module introduces the fundamentals of quantum computing through diagrammatic methods (such as the ZX calculus) and opensource Python APIs. Students will learn how quantum computers work, how they are programmed and how they can be used to solve problems of practical interest in the coming years. This module is handson and fully interactive, with all material presented in the form of Jupyter notebooks. The teaching week will feature both teoretical segments and practical quantum programming sessions.
For the assignment, students will be tasked to implement selected parts from a quantum technique appeared in recent academic papers, reproducing some of the published results.
Frequency
This course normally runs twice a year.
Course dates
13th May 2024  Oxford University Department of Computer Science  Held in the Department  08 places remaining. 
2nd September 2024  Oxford University Department of Computer Science  Held in the Department  14 places remaining. 
7th April 2025  Oxford University Department of Computer Science  Held in the Department  13 places remaining. 
Objectives
At the end of the course, students will:

understand the fundamentals of quantum computing

know how to create and execute quantum programs using opensource Python APIs

Contents
The theoretical part of the course is taught using diagrammatic methods, such as the ZX calculus. The practical part of the course is taught using opensource Python APIs, such as the IBM Qiskit API.
 Basics of Quantum Computing: states, gates, measurements, observables.
 Variational Quantum Circuits: VQE, quantum machine learning.
 Physical Simulations: Hamiltonian simulation, Quantum Annealing.
 Quantum Optimisation: problem Hamiltonians, the Quantum Annealing Algorithm (QAA), the Quantum Approximate Optimisation Algorithm (QAOA).
 Quantum Error Correction: the stabilizer formalism, CSS codes, the surface code, lattice surgery.
 MeasurementBased Quantum Computing: 1D and 2D cluster states, gate teleportation, flow.
Requirements
Summary of prerequisites for this course:
 Experience in Python 3 programming and familiarity with Jupyter notebook
 Knowledge of real linear algebra and familiarity with tensor networks
 Awareness of the overall context for quantum computing
Detailed prerequisites for this course:
 The course is entirely taught using the Python programming language, more specifically using version 3.9+. Good Python 3 programming skills are a prerequisite for this course, e.g. at the level provided by this course.
 The course is entirely taught using Jupyter notebooks: familiarity with Jupyter notebooks is a prerequisite for this course.
 Knowledge of real linear algebra is a prerequisite for this course, e.g. at the level provided by Lessons 15, 8, 9 and 13 of this series.
 A conceptual understanding of tensors, tensor networks and tensor contraction is a prerequisite for this course, e.g. as provided by the following materials:
 Knowledge of complex linear algebra is not a prerequisite for this course. Some topics in complex linear algebra will be covered during the course, to connect to existing literature on quantum computing, but are strictly optional. Students who wish to familiarise with this optional topic prior to the teaching week can read the online Qiskit textbook introduction.
 The course is a technical introduction to quantum computing, from day 1. For additional context, students are strongly encouraged to peruse online materials on quantum computing prior to the teaching week. Below is a brief selection, of varying tone and length:
 Quantum Computers Animated, by John Preskill and Spiros Michalakis (7m video).
 The Quantum Jumps series by PhD Comics (several videos and blog posts, including the one above).
 Quantum Computers Explained, by Kurzgesagt (7m video).
 The Talk, by Scott Aaronson and Zach Weinersmith (online comic).
 What is quantum computing?, by IBM (online article).
 What is a quantum computer?, by Google QuantumCasts (10m video).
There is no official textbook for this course, but the following references might prove helpful:
 Quantum in Pictures, a gentle introduction to the ZX calculus for quantum information and quantum computing.
 ZXcalculus for the working quantum computer scientist, a more technical introduction to the ZX calculus.
 The online Qiskit Textbook, a comprehensive reference for theory, programming and applications.