Clifford project

6. Clifford group🔗

Clifford group is defined as the normalizer of the Pauli group. Here we assume that d ≥ 1.

Definition6.55

The Clifford group \Cliff(d) consists of all d × d unitaries U such that U \GP(d) U^† = \GP(d), i.e., it is the normalizer of the Generalized Pauli group \GP(d), see Definition 5.54.

Lean code for Definition6.55def cliffordGroup (d : ) [NeZero d] := Subgroup.normalizer (pauliGroup d).carrier

Note that according to this definition the Clifford group is infinite since U ∈ \Cliff(d) implies that e^{i \varphi} U ∈ \Cliff(d) for all \varphi ∈ ℝ. To get a finite group we need to mod out the center of \Cliff(d) which consists of all e^{i\varphi} I where \varphi ∈ ℝ.

The following lemma gives a slightly more explicit description of how Clifford group elements act on displacement operators under conjugation.

Lemma6.56
groupL∃∀Nused by 0

For each Clifford unitary U ∈ \Cliff(d) (see Definition 6.55) there exist functions f: ℤ_d^2 → ℤ_d^2 and g: ℤ_d^2 → ℝ such that U D_\p U^† = e^{i g(\p)} D_{f(\p)} for all \p ∈ ℤ_d^2.

Lean code for Lemma6.56lemma declaration uses `sorry`cliffordGroupAction (d : ) [NeZero d] (U : Matrix.unitaryGroup (ZMod d) ) (hU : U cliffordGroup d) (p : ZMod d × ZMod d) : f : ZMod d × ZMod d ZMod d × ZMod d, g : ZMod d × ZMod d , U * (D d p.1.val p.2.val) * U.val.conjTranspose = Complex.exp (Complex.I * g p) (D d (f p).1.val (f p).2.val) := sorry