Skip to main content

Quantum Software:  2023-2024



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
  • Lecture will be held every Tuesday, Thursday, and Friday 16:00-17:00 UK time in LTB (full timetable here). Recordings will appear on Panopto shortly after each lecture.
  • Problem sheets will be made available on Moodle. There are a mix of theoretical questions and coding assignments, with the latter given as Jupyter notebooks
  • Class info, including weekly deadlines is on Minerva
  • The Course textbook is available on Moodle (for Oxford students).

The course consists of:

  • 24 lectures (see Lectures below)
  • 5 classes (weeks 2, 4, 6, 7, 8). Problem sheets will be made available on Moodle, generally a week before the deadline. Click here to see which class you are in and how to submit your work.
  • 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 may be updated throughout the term. It will be made available on Moodle.

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: states and compound systems
  • Lecture 3, 19 Jan: Quantum theory is SCUM: unitaries and measurements
  • Lecture 4, 23 Jan: Quantum circuits and algorithms
  • Lecture 5, 25 Jan: The ZX-calculus
  • Lecture 6, 26 Jan: Phase-free ZX and CNOT circuits
  • Lecture 7, 30 Jan: Normal forms and circuit extraction for phase-free diagrams
  • Lecture 8, 1 Feb: Cliffords and graph states
  • Lecture 9, 2 Feb: Simplifying Clifford ZX diagrams
  • Lecture 10, 6 Feb: Strong classical simulation of Clifford circuits
  • Lecture 11, 8 Feb: The AP form and Clifford completeness
  • Lecture 12, 9 Feb: Phase polynomials and Clifford+phase circuits
  • Lecture 13, 13 Feb: Toffoli gates, classical oracles, and the Fourier transform
  • Lecture 14, 15 Feb: Stabiliser theory
  • Lecture 15, 16 Feb: Quantum Error correction (slides *)
  • Lecture 16, 20 Feb: Pauli gadgets and Hamiltonian simulation
  • Lecture 17, 22 Feb: TBC
  • Lecture 18, 23 Feb: TBC
  • Lecture 19, 27 Feb: TBC
  • Lecture 20, 29 Feb: TBC
  • Lecture 21, 1 Mar: TBC
  • Lecture 22, 5 Mar: TBC
  • Lecture 23, 7 Mar: TBC
  • Lecture 24, 8 Mar: TBC

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.