Skip to main content

Quantum Software:  2022-2023



Schedule C1 (CS&P)Computer Science and Philosophy

Schedule C1Computer Science

Schedule C1Mathematics and Computer Science

Hilary TermMSc in Advanced Computer Science

MSc in Mathematics and Foundations of Computer Science



In recent years, quantum computation has moved from a theoretical exercise to a practical one, as limited, small-scale quantum computers have become increasingly available. This course, which follows on from a basic course in quantum computation, addresses the practical challenges of programming these emerging devices. Toward that end, this course splits broadly into 2 topics:

  • Quantum compilation -- translating high-level descriptions of quantum algorithms into "machine code" suitable to run on quantum hardware and doing related tasks like optimisation and mapping operations on to physical memory locations
  • Quantum algorithms -- developing a deeper understanding of standard oracle-based (a.k.a. "1990s style") quantum algorithms that run on big, (distant) future quantum computers, as well as new families of hybrid classical/quantum algorithms designed to run on noisy intermediate-scale quantum (NISQ) devices, which are more like the small, limited quantum computers of today

The course will cover the following topics:

  • Quantum circuits and the ZX-calculus
  • Quantum circuit compilation and optimisation
  • Hardness and classical simulation of quantum computation
  • Cloud quantum computing
  • Hybrid/variational quantum algorithms
  • Quantum simulation and chemistry

This course will be given in person (LTB) for weeks 1-5, and online weeks 6-8.

  • Lectures will be held every Monday, Wednesday, and Friday 16:00-17:00 UK time (full timetable here). Recordings will appear on Panopto shortly after each lecture.
  • Problem sheets will be a mix of theoretical questions and coding assignments, with the latter given as Jupyter notebooks
  • Class info, including weekly deadlines is on Minerva
  • Everything else (problem sheets, schedule of material, etc) is here on the course website

The course consists of:

  • 24 lectures (see Lectures below)
  • There will be no in-person lectures in week 5 (13-17 Feb), but videos will still appear on Panopto. Everyone should watch these to keep up!
  • 5 classes (weeks 2, 4, 6, 7, 8). Here are the problem sheets: They will generally be made available a week before the deadline. Click here to see which class you are in and how to submit your work. For .ipynb files, you may need to right-click and click Save Link As to download.
  • The miniproject. This will have a similar format to the problem sheets, but questions will be much more in-depth and/or open-ended.

Completing Problem Sheets

Coding problem sheets are given as Jupyter notebooks. You can either either download them and do them on your own computer, or complete them in the browser using a service such as Google Colab.

If you are running on your own machine, make sure you get the latest version of PyZX by running pip install git+

If you are running on Colab, click the "open with Colab" link next to the problem sheet. The first time you save, make sure you click File > Save a copy in Drive (you will need a Google account to do this). After this, you will be working on your own copy, so you can save in the normal way.

To submit your sheet, email the .ipynb file to your teacher. If you completed the sheet with Colab, click File > Download > Download .ipynb to download this file for submission.


The following is a list of topics covered in the lectures. Since this is the first iteration of the course, topics of individual lectures haven't all be finalised yet.

The lecture notes for this course are a draft of the upcoming book Picturing Quantum Software, which will be updated regularly throughout the term. It can be downloaded from Course Materials.

Handwritten lecture notes are available here: part 1 | part 2 | part 3 | part 4 | part 5. These may change throughout the course of the lectures, so check back occasionally to see that you have the latest version. Some lectures have slides, which can be downloaded by clicking the links below.

The is also a collection of Jupyter notebooks covering the last 3 weeks of material. It is strongly recommended you download these and go through them yourself before starting the miniproject.

  • Lecture 1, 16 Jan: Introduction to quantum software (slides)
  • Lecture 2, 18 Jan: Quantum theory is SCUM
  • Lecture 3, 20 Jan: Circuits and ZX-diagrams
  • Lecture 4, 23 Jan: The ZX-calculus
  • Lecture 5, 25 Jan: Phase-free ZX and CNOT circuits
  • Lecture 6, 27 Jan: Cliffords and graph states
  • Lecture 7, 30 Jan: Simplifying Clifford diagrams
  • Lecture 8, 1 Feb: Strong classical simulation of Clifford circuits
  • Lecture 9, 3 Feb: Clifford completeness of the ZX-calculus
  • Lecture 10, 6 Feb: Pauli exponentials and Pauli gadgets
  • Lecture 11, 8 Feb: Normal forms for Clifford+phase circuits
  • Lecture 12, 10 Feb: Toffoli gates and phase gadget optimisations
  • Lecture 13, 13 Feb: Measurement-based quantum computing (online only)
  • Lecture 14, 15 Feb: Generalised flow and determinism for MBQC (online only)
  • Lecture 15, 17 Feb: Circuit extraction and quantum error correction (online only)
  • Lecture 16, 20 Feb: Quantum computing in the NISQ era (slides)
  • Lecture 17, 22 Feb: Introduction to IBMQ/qiskit (slides)
  • Lecture 18, 24 Feb: Preparing and visualising states
  • Lecture 19, 27 Feb: Measurements and quantum state tomography
  • Lecture 20, 1 Mar: Quantum machine learning concepts (slides)
  • Lecture 21, 3 Mar: Variational quantum eigensolver
  • Lecture 22, 6 Mar: Quantum approximate optimisation algorithm
  • Lecture 23, 8 Mar: Applied VQC, Part 1
  • Lecture 24, 10 Mar: Applied VQC, Part 2

Learning outcomes

After studying this course, students will be able to:

  1. Fluently represent, manipulate, and simplify quantum circuits using the ZX-calculus.
  2. Apply techniques for efficiently representing and synthesising quantum circuits to perform a variety of computational tasks.
  3. Understand key transformations done by a quantum compiler to optimise circuits and account for physical constraints of quantum hardware.
  4. Understand a broader class of oracle-based quantum algorithms using graphical techniques.
  5. Use variational quantum algorithms to solve numerical optimisation and quantum simulation problems.
  6. Be ready to tackle current research topics studied by the quantum group.


Students are strongly encouraged to take Quantum Processes and Computation before this course. However, students may also take this course if they have had another first course in quantum computation (e.g. Quantum Information in CS Part A/B or Introduction to Quantum Information in Maths). In the latter case, students are encouraged to do some background reading on the diagrammatic approach to quantum computation, namely:

This material will be reviewed in the first week of the course, but some prior knowledge will help students to keep up.

Reading list

Lecture notes and slides (see above).

Related research




Students are formally asked for feedback at the end of the course. Students can also submit feedback at any point here. Feedback received here will go to the Head of Academic Administration, and will be dealt with confidentially when being passed on further. All feedback is welcome.