Clifford project

5. Displacement operators🔗

This section uses the generalized Pauli X and Z matrices to define the displacement operators D_{x,z}. These operators effectively constitute the generalized Pauli or Weyl–Heisenberg group on a single quantum system of dimension d. Unless stated otherwise, we assume that d ≥ 1.

Lean codevariable (d : ) [NeZero d]

We use the generalized Pauli X and Z to define the displacement operators, see Eq. (8) in Appleby (2005).

Definition5.1
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Lemma 5.2
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 3
Statement dependency previews
Preview
Definition 2.9
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
Used by 4
Reverse dependency previews
Preview
Definition 5.9
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

The displacement operator corresponding to x,z ∈ ℤ is defined as D_{x,z} = τ^{xz} X^x Z^z where τ comes from Definition 2.9, X comes from Definition 4.1, and Z comes from Definition 4.5.

Lean code for Definition5.1noncomputable def D (p : × ) : Matrix (ZMod d) (ZMod d) := (τ d) ^ (p.1 * p.2) (X d) ^ (p.1) * (Z d) ^ (p.2)

Displacement operators behave nicely under complex conjugation, see Eq. (9) in Appleby (2005).

Lemma5.2
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Definition 5.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 0used by 1L∃∀N

For all x,z ∈ ℤ, D_{x,z}^† = D_{-x,-z} where \dagger denotes the conjugate transpose.

Lean code for Lemma5.2@[simp] lemma declaration uses `sorry`conjTranspose_D (p : × ) : (D d p) = D d (-p) := d:inst✝:NeZero dp: × (D d p) = D d (-p) d:inst✝:NeZero dp: × (τ d ^ (p.1 * p.2) X d ^ p.1 * Z d ^ p.2) = τ d ^ ((-p).1 * (-p).2) X d ^ (-p).1 * Z d ^ (-p).2; d:inst✝:NeZero dp: × (τ d ^ (p.1 * p.2))⁻¹ ((Z d)⁻¹ ^ p.2 * (X d)⁻¹ ^ p.1) = τ d ^ (p.1 * p.2) (X d ^ (-p.1) * Z d ^ (-p.2)); d:inst✝:NeZero dp: × (τ d ^ (p.1 * p.2))⁻¹ (Z d ^ (-p.2) * X d ^ (-p.1)) = τ d ^ (p.1 * p.2) (X d ^ (-p.1) * Z d ^ (-p.2)); All goals completed! 🐙 -- need the backwards relation for ZX_XZ and the fact that τ^2 = ω

Multiplication of displacement operators corresponds to adding their subscripts and introducing a phase given by the symplectic inner product, see Eq. (10) in Appleby (2005).

Lemma5.3
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Definition 5.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 2
Statement dependency previews
Preview
Definition 2.9
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
Used by 5
Reverse dependency previews
Preview
Lemma 5.4
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

For all \p, \q ∈ ℤ^2, D_\p D_\q = τ^{\braket{\p,\q}} D_{\p+\q} where τ is the root of unity from Definition 2.9 and \braket{\cdot,\cdot} is the symplectic inner product from Definition 3.1.

Lean code for Lemma5.3lemma declaration uses `sorry`D_mul (p q : × ) : (D d p) * (D d q) = τ d ^ (symp p q) D d (p + q) := d:inst✝:NeZero dp: × q: × D d p * D d q = τ d ^ p,q D d (p + q) d:inst✝:NeZero dp: × q: × τ d ^ (p.1 * p.2) X d ^ p.1 * Z d ^ p.2 * (τ d ^ (q.1 * q.2) X d ^ q.1 * Z d ^ q.2) = τ d ^ p,q (τ d ^ ((p + q).1 * (p + q).2) X d ^ (p + q).1 * Z d ^ (p + q).2); d:inst✝:NeZero dp: × q: × τ d ^ (q.1 * q.2) τ d ^ (p.1 * p.2) (X d ^ p.1 * Z d ^ p.2 * (X d ^ q.1 * Z d ^ q.2)) = τ d ^ p,q τ d ^ ((p.1 + q.1) * (p.2 + q.2)) (X d ^ (p.1 + q.1) * Z d ^ (p.2 + q.2)); All goals completed! 🐙

The n-th power of a displacement operator is again a displacement operator.

Lemma5.4
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Definition 5.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 0
Used by 3
Reverse dependency previews
Preview
Lemma 5.7
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

For all \p \in ℤ^2 and n \geq 0, D_\p^n = D_{n\p}.

Proof for Lemma 5.4
Proof uses 2
Proof dependency previews
Preview
Lemma 3.3
Loading preview
Proof dependency preview content is loaded from the rendered-fragment cache.

We proceed by induction on n. The base case n = 0 gives D_\p^0 = I = D_\mathbf{0}. For the inductive step, assuming D_\p^n = D_{n\p} we get D_\p^{n+1} = D_\p^n · D_\p = D_{n\p} \cdot D_\p = \tau^{\langle n\p,\p\rangle} D_{(n+1)\p}, where the last step used Lemma 5.3. The result follows since \langle n\p,\p\rangle = n \langle\p,\p\rangle = 0 thanks to Lemma 3.3.

Lean code for Lemma5.4lemma declaration uses `sorry`D_pow_nsmul (p : × ) (n : ) : D d p ^ n = D d (n p) := d:inst✝:NeZero dp: × n:D d p ^ n = D d (n p) d:inst✝:NeZero dp: × n:(τ d ^ (p.1 * p.2) X d ^ p.1 * Z d ^ p.2) ^ n = τ d ^ ((n p).1 * (n p).2) X d ^ (n p).1 * Z d ^ (n p).2; d:inst✝:NeZero dp: × n:(τ d ^ (p.1 * p.2) (X d ^ p.1 * Z d ^ p.2)) ^ n = τ d ^ (n * p.1 * (n * p.2)) (X d ^ (n * p.1) * Z d ^ (n * p.2)); All goals completed! 🐙

If d is odd, adding a multiple of d to the index of a displacement operator does not change it, see Eq. (11) in Appleby (2005).

Lemma5.5
uses 0
Used by 2
Reverse dependency previews
Preview
Lemma 5.6
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

If d is odd then D_{\p+d\q} = D_{\p} for all \p, \q ∈ ℤ^2.

Lean code for Lemma5.5lemma declaration uses `sorry`D_add_nsmul (p q : × ) (hodd : Odd d) : D d (p + d q) = D d p := d:inst✝:NeZero dp: × q: × hodd:Odd dD d (p + d q) = D d p d:inst✝:NeZero dp: × q: × hodd:Odd dτ d ^ ((p + d q).1 * (p + d q).2) X d ^ (p + d q).1 * Z d ^ (p + d q).2 = τ d ^ (p.1 * p.2) X d ^ p.1 * Z d ^ p.2; d:inst✝:NeZero dp: × q: × hodd:Odd dτ d ^ ((p.1 + d * q.1) * (p.2 + d * q.2)) (X d ^ (p.1 + d * q.1) * Z d ^ (p.2 + d * q.2)) = τ d ^ (p.1 * p.2) (X d ^ p.1 * Z d ^ p.2); All goals completed! 🐙 -- dsimp -- rw [Matrix.zpow_add (isUnit_X_det d), Matrix.zpow_mul (X d) (isUnit_X_det d), zpow_natCast, X_pow_d_eq_one d, -- Matrix.one_zpow, mul_one, Matrix.zpow_add (isUnit_Z_det d), Matrix.zpow_mul (Z d) (isUnit_Z_det d), zpow_natCast, -- Z_pow_d_eq_one, Matrix.one_zpow, mul_one, zpow_mul] -- nth_rewrite 2 [zpow_add' (by left; exact (tau_ne_zero d))] -- rw [zpow_mul, zpow_natCast, tau_pow_d_eq_one_of_odd d hodd, one_zpow, mul_one, ← zpow_mul, mul_comm, add_comm, -- add_mul, zpow_add' (by left; exact (tau_ne_zero d)), mul_assoc, zpow_mul, zpow_natCast, -- tau_pow_d_eq_one_of_odd d hodd, one_zpow, one_mul, mul_comm]

If d is odd, the index \p of a displacement operator D_\p can be treated modulo d. In other words, it makes sense to write \p \in ℤ_d^2.

Lemma5.6
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Definition 5.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 0used by 0L∃∀N

If d is odd, then for all \p \in ℤ^2, D_\p = D_{\p \pmod d}.

Proof for Lemma 5.6

This is a direct consequence of Lemma 5.5

Lean code for Lemma5.6@[default_instance] instance : EuclideanDomain := Int.euclideanDomain lemma declaration uses `sorry`D_mod_d (p : × ) (hodd : Odd d): D d p = D d p.1 % d, p.2 % d := d:inst✝:NeZero dp: × hodd:Odd dD d p = D d (p.1 % d, p.2 % d) d:inst✝:NeZero dp: × hodd:Odd dτ d ^ (p.1 * p.2) X d ^ p.1 * Z d ^ p.2 = τ d ^ ((p.1 % d, p.2 % d).1 * (p.1 % d, p.2 % d).2) X d ^ (p.1 % d, p.2 % d).1 * Z d ^ (p.1 % d, p.2 % d).2; d:inst✝:NeZero dp: × hodd:Odd dτ d ^ (p.1 * p.2) (X d ^ p.1 * Z d ^ p.2) = τ d ^ (p.1 % d * (p.2 % d)) (X d ^ (p.1 % d) * Z d ^ (p.2 % d)); All goals completed! 🐙 /- by calc D d p.1 p.2 = D d (p.1 % d + d * (p.1 / d)) (p.2 % d + d * (p.2 / d)) := by rw[EuclideanDomain.mod_add_div p.1]; rw[EuclideanDomain.mod_add_div p.2] _ = D d (p.1 % d) (p.2 % d) := D_add_nsmul d (p.1 % d, p.2 % d) (p.1 / d, p.2 / d) hodd -/

The displacement operators have order d.

Lemma5.7
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Definition 5.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 0
Used by 2
Reverse dependency previews
Preview
Theorem 7.1
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

If d is odd, then for all \p \in ℤ^2, D_\p^d = I.

Proof for Lemma 5.7

By Lemma 5.4, D_\p^d = D_{d\p} = D_\mathbf{0} = I, using d\p = \mathbf{0} in ℤ_d^2.

Lean code for Lemma5.7lemma declaration uses `sorry`D_pow_d_eq_one (p : × ) (hOdd : Odd d) : D d p ^ d = 1 := d:inst✝:NeZero dp: × hOdd:Odd dD d p ^ d = 1 d:inst✝:NeZero dp: × hOdd:Odd d(τ d ^ (p.1 * p.2) X d ^ p.1 * Z d ^ p.2) ^ d = 1; d:inst✝:NeZero dp: × hOdd:Odd d(τ d ^ (p.1 * p.2) (X d ^ p.1 * Z d ^ p.2)) ^ d = 1; All goals completed! 🐙

Displacement operators with different \p (modulo d) are indeed different.

Lemma5.8
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Definition 5.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 0used by 1L∃∀N

Let \p,\q \in ℤ^2 and assume α,β ∈ ℂ are both non-zero. If α D_\p = β D_\q then \p \equiv \q \pmod{d}.

Proof for Lemma 5.8
uses 0

This theorem always holds when d = 1. For d > 1, (to be continues... from the assumption, you work out the matrices, take the diagonal entries at 0 and 1, and find your proof)

Lean code for Lemma5.8lemma declaration uses `sorry`D_p_neq_D_q (p q : × ) (α β : ) [NeZero α] [NeZero β] : α (D d p) = β (D d q) p = q := d:inst✝²:NeZero dp: × q: × α:β:inst✝¹:NeZero αinst✝:NeZero βα D d p = β D d q p = q All goals completed! 🐙

Displacement operators with phases that are arbitrary powers of τ form a group.

Definition5.9
Group: Core properties of the single-qudit Pauli group. (7)
Group member previews
Preview
Definition 5.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 2
Statement dependency previews
Preview
Definition 2.9
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 1L∃∀N

The generalized Pauli group or discrete Weyl–Heisenberg group consists of \GP(d) = \{τ^a D_\p : a ∈ ℤ_d, \p ∈ ℤ_d^2\} where τ is from Definition 2.9 and D_\p is from Definition 5.1.

Lean code for Definition5.9def declaration uses `sorry`pauliGroup (d : ) [NeZero d] : Subgroup (Matrix.unitaryGroup (ZMod d) ) where carrier := {U | (a : ) (p : × ), (U : Matrix (ZMod d) (ZMod d) ) = (τ d) ^ a D d p} one_mem' := d✝:inst✝¹:NeZero d✝d:inst✝:NeZero d1 {U | a p, U = τ d ^ a D d p} d✝:inst✝¹:NeZero d✝d:inst✝:NeZero d p, 1 = τ d ^ 0 D d p; d✝:inst✝¹:NeZero d✝d:inst✝:NeZero d1 = τ d ^ 0 D d (0, 0); d✝:inst✝¹:NeZero d✝d:inst✝:NeZero d1 = D d (0, 0); d✝:inst✝¹:NeZero d✝d:inst✝:NeZero d1 = τ d ^ ((0, 0).1 * (0, 0).2) X d ^ (0, 0).1 * Z d ^ (0, 0).2; All goals completed! 🐙 mul_mem' := @fun A B A' B' => sorry -- Need 5.30 inv_mem' := sorry

We could have equivalently written \GP(d) = \{τ^a X^x Z^z : a,x,z ∈ ℤ_d\} where X and Z are the generalized Pauli matrices. The generalized Pauli group \GP(d) modulo its center \{\tau^a I : a \in \Z_d\} is isomorphic to ℤ_d^2.