This repository contains a first-order formalisation of the
-
Axioms/QUA001-1.axq
: Axiomatisation of$QC_0$ . -
Axioms/gen-ARI001-0.py
: Generator for an axiomatisation of arithmetic modulo$n$ . -
Problems/QUA0xx-1.pq
: Corollaries in [1]. -
Problems/QUA1xx-1.pq
: Other true conjectures. -
Problems/QUA2xx-1.pq
: Other false conjectures. -
Problems/QUAxxx-1.min.pq
: Variants where only the necessary axioms are given, rather than the whole$QC_0$ . -
Solutions/QUAxxx-1.n.sq
: Stepn
of a proof of problemQUAxxx-1
. -
Solutions/QUAxxx-1.n.min.sq
: Variants where only the necessary axioms are given, rather than the whole$QC_0$ . -
Tools/preprocess.py
: Tool to parse the$(…)
macros containing custom notation.
These files use custom notation inside $(…)
macros (see below). Use Tools/preprocess.py
to preprocess them into valid tptp files to feed into any theorem prover of your choosing (the script reads from stdin and writes to stdout).
Run make
to preprocess all files in the repo (.axq
→ .ax
, .pq
→ .p
, .sq
→ .s
) and generate an ARI001
instance.
The encoding of quantum circuits is cumbersome and hard to read and write directly, so we provide a small tool that parses notation inside $(…)
into that encoding.
A gate over n
qubits, applied to qubits q1
, …, qn
is notated <gate> <q1> … <qn>
.
A sequence of gates is notated by a -
separated pipeline, where the first element is the initial state and the rest are the gates in order of application.
A global phase is notated on the initial state with o(<phase>,<state>)
.
When notating formulas over many-qubit quantum circuits, we need to assert that the qubits are distinct. When using this notation this is automatic; simply wrap your entire formula in another $(…)
Examples:
Alexandre Clément, Nicolas Heurtel, Shane Mansfield, Simon Perdrix, Benoit Valiron. “A Complete Equational Theory for Quantum Circuits”. [1]