Recently, I came across ZX calculus. It is an interesting method to describe quantum circuits. However, it seems to me, too complicated for day-to-day use in circuit design (something like to program an application in assembler instead of in higher level language) because it uses only few quantum gates ($Rx$, $Ry$, $H$ and $CNOT$).

My question is for what purposes the ZX calculus was developed?


3 Answers 3


The ZX calculus was not designed to be a programming language, or a language in which to specify things at a high level. It is a language for reasoning about things on a relatively low level, albeit without digging into the actual physics.

What it was designed for is hinted at in your observations, and by the name of the ZX calculus itself.

  • It can describe individual quantum gates: so it is a notation for circuits (and other quantum procedures — one of the things the ZX calculus was explicitly designed for was to analyse measurement based quantum computing [arXiv:0906.4725]; and Dom Horsman and I showed that it has a very close connection to surface code lattice surgery [arXiv:1704.08670]).

  • It is a calculus : it is a notation in which you can actually do calculations. If you're good with reasoning about commutation relations, you can do this to a limited extent with ordinary circuit diagrams; for the ZX calculus you can in principle do this entirely with diagrams.

There are people who are working on higher-level ZX descriptions of procedures on multiple qubits — eg. [arXiv:1905.00041] — which might become suitable to actually program with if developed further. But the existing version of the ZX calculus is more suitable for an intermediate representation of a compiler, or indeed performing computations or analysis by hand, than as a programming language.

  • $\begingroup$ Do you have some references about higher-level ZX versions? I saw this extention of ZX for multiple wires & matrices, but I'd love to here more about extensions. $\endgroup$ Feb 10, 2020 at 21:41
  • 1
    $\begingroup$ @tobiasBora: what you describe is exactly what I have in mind. (I'll add links to references when I get a moment later today.) I couldn't tell you what other people are working on to extend that, but I and others agree that further developments in that direction are one of the better ways to further develop the ZX calculus. If you are looking at [zxcalculus.com], then you'll be relatively up to date. $\endgroup$ Feb 11, 2020 at 9:08
  • $\begingroup$ Ok thanks! If you want to save some time I guess the reference is "SZX-calculus: Scalable Graphical Quantum" by Titouan Carette, Dominic Horsman and Simon Perdrix arxiv.org/pdf/1905.00041.pdf $\endgroup$ Feb 11, 2020 at 10:44

Since the question was for what purpose the ZX-calculus was developed, let me answer this with the original use case: understanding Measurement-Based Quantum Computation (MBQC). The ZX-calculus was originally introduced by Bob Coecke and Ross Duncan in a 2007 preprint here and first appeared in a published paper here.

Bob and Ross told me that they were looking for a way to better understand MBQC and graph states. When working on a language for this they noticed the connection between the strong complementarity of the Z and X observables, and the already established rewrite rules of bialgebras and Hopf algebras. The first paper wherein ZX was used to describe MBQC was this paper.


To complete the answer of Niel de Beaudrap, note that the book "Picturing Quantum Processes: A First Course in Quantum Theory and Diagrammatic Reasoning" (Coecke, Kissinger) presents a more top-down/high-level view of diagrammatic reasoning, where we can reason on arbitrary quantum process: the ZX-calculus is then just seen as a way to "open the box" and describe quantum processes on a more low level basis, but is not strictly necessary to reason on arbitrary processes.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.