Documentation

QEC1.Remarks.Rem_3_NotationStabilizerCodes

Notation: Stabilizer Codes #

Statement #

An [[n,k,d]] stabilizer code encodes k logical qubits into n physical qubits with code distance d. The code is specified by a set of commuting Pauli operators called stabilizer checks {s_i} that generate the stabilizer group S. The codespace is the simultaneous +1 eigenspace of all stabilizer checks. A logical operator is a Pauli operator that commutes (in the full Pauli group) with all stabilizers but is not itself a stabilizer (i.e., lies in the centralizer C(S) but not in S). The distance d is the minimum weight of a non-trivial logical operator. A quantum low-density parity-check (qLDPC) code is a stabilizer code where each check has weight bounded by a constant w and each qubit participates in at most a constant number c of checks.

Main Results #

Corollaries #

Symplectic inner product #

In the full Pauli group (with phases), two Pauli operators P, Q commute iff their symplectic inner product ⟨P, Q⟩ = Σ_v (P.x_v · Q.z_v + P.z_v · Q.x_v) = 0 in ZMod 2.

def PauliOp.symplecticInner {V : Type u_1} [Fintype V] (P Q : PauliOp V) :

The symplectic inner product of two Pauli operators, determining commutation in the full Pauli group: P and Q commute iff symplecticInner P Q = 0.

Equations
Instances For
    def PauliOp.PauliCommute {V : Type u_1} [Fintype V] (P Q : PauliOp V) :

    Two Pauli operators commute (in the full Pauli group, including phases) iff their symplectic inner product vanishes.

    Equations
    Instances For
      @[simp]
      theorem PauliOp.symplecticInner_self {V : Type u_1} [Fintype V] (P : PauliOp V) :
      @[simp]
      @[simp]

      Symplectic inner product is additive in the first argument (over ZMod 2).

      Symplectic inner product is additive in the second argument (over ZMod 2).

      Stabilizer Code #

      structure StabilizerCode (V : Type u_2) [DecidableEq V] [Fintype V] :
      Type (max u_2 (u_3 + 1))

      A stabilizer code on qubits labeled by type V, specified by a finite index type I for stabilizer checks and a map from I to Pauli operators, with the condition that all checks pairwise commute (in the full Pauli group).

      • I : Type u_3

        Index type for stabilizer checks

      • instFintypeI : Fintype self.I

        Finite type instance for check indices

      • check : self.IPauliOp V

        The stabilizer checks: each index i gives a Pauli operator s_i

      • checks_commute (i j : self.I) : (self.check i).PauliCommute (self.check j)

        All stabilizer checks pairwise commute in the full Pauli group

      Instances For

        The stabilizer group #

        The stabilizer group S is the subgroup of PauliOp V generated by the checks.

        Equations
        Instances For

          Centralizer: operators commuting with all stabilizers #

          A Pauli operator P is in the centralizer of the stabilizer code if it commutes (in the full Pauli group) with every stabilizer check.

          Equations
          Instances For

            The set of Pauli operators in the centralizer of the stabilizer code.

            Equations
            Instances For

              Logical operators #

              A Pauli operator P is a non-trivial logical operator if:

              1. It commutes with all stabilizers (is in the centralizer)
              2. It is not in the stabilizer group
              3. It is not the identity
              Equations
              Instances For
                theorem StabilizerCode.isLogicalOp_ne_one {V : Type u_2} [DecidableEq V] [Fintype V] (C : StabilizerCode V) {P : PauliOp V} (h : C.isLogicalOp P) :
                P 1

                Code distance #

                noncomputable def StabilizerCode.distance {V : Type u_2} [DecidableEq V] [Fintype V] (C : StabilizerCode V) :

                The code distance is the minimum weight of a non-trivial logical operator. Defined as the infimum of the set of weights. Returns 0 if no logical operators exist.

                Equations
                Instances For

                  The number of physical qubits.

                  Equations
                  Instances For

                    The number of stabilizer checks.

                    Equations
                    Instances For

                      Code parameters [[n, k, d]] #

                      A stabilizer code has parameters [[n, k, d]] if it has n physical qubits, encodes k logical qubits, and has distance d.

                      Equations
                      Instances For

                        Check weight and qubit participation #

                        def StabilizerCode.checkWeight {V : Type u_2} [DecidableEq V] [Fintype V] (C : StabilizerCode V) (i : C.I) :

                        The weight of the i-th stabilizer check.

                        Equations
                        Instances For
                          noncomputable def StabilizerCode.qubitDegree {V : Type u_2} [DecidableEq V] [Fintype V] (C : StabilizerCode V) (v : V) :

                          The number of checks that act non-trivially on qubit v.

                          Equations
                          Instances For

                            Quantum LDPC codes #

                            def IsQLDPC {V : Type u_2} [DecidableEq V] [Fintype V] (C : StabilizerCode V) (w c : ) :

                            A quantum low-density parity-check (qLDPC) code is a stabilizer code where:

                            1. Each check has weight bounded by a constant w (each check acts on at most w qubits)
                            2. Each qubit participates in at most a constant number c of checks
                            Equations
                            Instances For

                              Basic properties #

                              The identity is not a logical operator.

                              The stabilizer group is contained in the centralizer.

                              A check is not a logical operator.