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.

  • Lecture 1, 16 Jan: Introduction to quantum software (slides)
  • Lecture 2, 18 Jan: Quantum theory is SCUM
  • Lecture 3, 20 Jan: Quantum circuits and algorithms
  • Lecture 4, 23 Jan: The ZX-calculus
  • Lecture 5, 25 Jan: Phase-free ZX and CNOT circuits
  • Lecture 6, 27 Jan: Normal forms and circuit extraction for phase-free diagrams
  • Lecture 7, 30 Jan: Cliffords and graph states
  • Lecture 8, 1 Feb: Simplifying Clifford ZX diagrams and Clifford completeness
  • Lecture 9, 3 Feb: Strong classical simulation of Clifford circuits
  • 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, classical oracles, and the Fourier transform
  • 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: Pauli gadgets and universal circuit optimisation
  • Lecture 17, 22 Feb: Gate-based quantum computers (slides)
  • Lecture 18, 24 Feb: NISQ Hardware (slides)
  • Lecture 19, 27 Feb: Introduction to Qiskit (Jupyter notebook)
  • Lecture 20, 1 Mar: Quantum approximate optimisation algorithm (Jupyter notebook)
  • Lecture 21, 3 Mar:
  • Lecture 22, 6 Mar:
  • Lecture 23, 8 Mar:
  • Lecture 24, 10 Mar:

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.

Taking our courses

This form is not to be used by students studying for a degree in the Department of Computer Science, or for Visiting Students who are registered for Computer Science courses

Other matriculated University of Oxford students who are interested in taking this, or other, courses in the Department of Computer Science, must complete this online form by 17.00 on Friday of 0th week of term in which the course is taught. Late requests, and requests sent by email, will not be considered. All requests must be approved by the relevant Computer Science departmental committee and can only be submitted using this form.