[Physics] Matrix representation of the Clifford group

group-representationsgroup-theoryquantum mechanicsquantum-informationsoftware

The Clifford group $C_n$ on $n$ qubits is defined as
$$C_n = \left\{ U \in U(2^n) \mid \sigma \in P_n \rightarrow U\sigma U^\dagger \in P_n \right\}/U(1),$$
where
$$P_n = \left\{ \sigma_1 \otimes \dots \otimes \sigma_n \mid \sigma_i \in \{I,X,Y,Z\} \right\},$$
and $X,Y,Z$ are the Pauli matrices. Also $C_n$ may be generated as
$$<H_i,P_i,CNOT_{ij}>/U(1).$$

How exactly could one produce a matrix representation of $C_n$ for use in a program? I understand the abstract representation, however it seems quite difficult to obtain an explicit list of the elements.

Best Answer

There are algorithms to generate all elements of the Clifford group for a specified number of qubits. One implementation is available here: http://www.cgranade.com/python-quaec/ (see the qecc.clifford_group(nq, consider_phases=False) iterator). The code implementing this can be seen here. It basically generates all possible mappings and then filters out those that do not fulfill the commutation and anticommutation relations. The section "Number of Elements" of this goes in a bit more depth.

There are also algorithms that can give you a random Clifford operator without having to generate the entire group (which makes it exponentially more efficient if all you need is just a random sample of the Clifford group). See https://arxiv.org/pdf/1406.2170.pdf.