Denote $P_N=\{\tau \}$ the set of Pauli strings, composed out of tensor products of Pauli matrices $\sigma_i^\alpha$ acting on $N$ qubits, e.g. $\tau=\sigma^x_1 \otimes \mathbb{1}_2 \otimes \sigma^y_3 \otimes \cdots \otimes \mathbb{1}_N$.

Consider a mapping from a subset of $P_N$ to another subset of $P_N$. eg :

$11 \rightarrow 11 \\ XX \rightarrow ZY\\ YY \rightarrow YX\\ ZZ \rightarrow XZ$

Is there a systematic way to construct the Clifford circuit that implements a mapping between Pauli strings ? (Assuming this mapping is unitary)

The example above is implemented by a Hadamard gate on the first qubit and a S gate on the second one.

  • $\begingroup$ As you said you can transform $X \to Z$ and $Z \to X$ with a Hadamard gate. For $X \to Y$ use $S$ for $Y \to X$ use $S^†$. Finally we can do $Z \to Y$ and $Y \to Z$ with $V$ and $V^†$ gates. $\endgroup$
    – Callum
    Commented Jun 20, 2023 at 18:43
  • $\begingroup$ @Callum ok this works for single qubit gates. But some mappings are impossible to realize with single qubit gates. Consider X1 -> XX. This cannot be implemented with single qubit gates since 1->X is not trace preserving. A CNOT can do X1 -> XX. $\endgroup$
    – Nichola
    Commented Jun 20, 2023 at 18:50

1 Answer 1


You can convert a stabilizer tableau (a Pauli observable mapping) into a circuit by transforming the tableau into the identity tableau and keeping track of the steps you used. Basically, it's the same thing you do when finding the inverse of a matrix by performing Gaussian elimination using row operations, but dumping the operations into a list that ends up being the circuit.

Tableaus use a mapping where the inputs are the generators $X_q$ and $Z_q$ for each qubit $q$. To turn an arbitrary mapping that doesn't use these generators into a tableau, you can take one of the flows like $A \rightarrow B$ and add an intermediate step that is one of the generators like $A \rightarrow X_0 \rightarrow B$. When picking these intermediate states you must pick intermediates with the same commutation relationships between each other as the inputs (and also outputs) have between each other. This basically comes down to identifying the anticommuting pairs. If there aren't anticommuting pairs, it's not immediately clear to me how to get them into a standard form but should be doable... somhow... Anyways, once you've picked intermediates you can split each step into like $(X_0 \rightarrow A)^{-1}$ and $X_0 \rightarrow B$, which are both of the "coming from the usual generators" form. So you can make one tableau $T_{in}$ that sends $X_q$, $Z_q$ to your inputs, and another tableau $T_{out}$ that sends $X_q$, $Z_q$ to your outputs, then get your mapping as a tableau by computing $T = T_{out} \cdot T_{in}^{-1}$.

See stim.Tableau.to_circuit and its source code as well as stim.Tableau.__mul__ and stim.Tableau.inverse.

For more optimized constructions, I recommend looking up papers by Dmitri Maslov, who's done a lot of work on Clifford compilation, like this one and this one.


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.