Documentation

QEC1.Definitions.Def_10_FaultTolerantGaugingProcedure

Definition 10: Fault-Tolerant Gauging Procedure #

Statement #

The fault-tolerant gauging measurement procedure for measuring a logical operator L in an [[n,k,d]] stabilizer code using a connected graph G = (V, E) consists of three phases:

  1. Phase 1 (Pre-deformation): Measure original stabilizer checks for d rounds
  2. Phase 2 (Deformed code): Initialize edge qubits, measure Gauss's law, flux, and deformed checks for d rounds
  3. Phase 3 (Post-deformation): Measure Z_e on edge qubits to ungauge, resume original checks for d rounds

Main Results #

Phase Type #

inductive GaugingPhase :

The three phases of the fault-tolerant gauging procedure.

Instances For
    Equations
    Instances For

      Measurement Labels #

      structure PreDeformationMeasurement (J : Type u_1) (d : ) :
      Type u_1

      Phase 1 measurement: original check j at round r.

      • checkIdx : J
      • round : Fin d
      Instances For
        def instDecidableEqPreDeformationMeasurement.decEq {J✝ : Type u_1} {d✝ : } [DecidableEq J✝] (x✝ x✝¹ : PreDeformationMeasurement J✝ d✝) :
        Decidable (x✝ = x✝¹)
        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          Equations
          • One or more equations did not get rendered due to their size.
          inductive DeformedCodeMeasurement (V : Type u_1) (C : Type u_2) (J : Type u_3) (d : ) :
          Type (max (max u_1 u_2) u_3)

          Phase 2 measurement: Gauss (V), flux (C), or deformed (J) at round r.

          Instances For
            instance instFintypeDeformedCodeMeasurement {V : Type u_1} {C : Type u_2} {J : Type u_3} [Fintype V] [Fintype C] [Fintype J] {d : } :
            Equations
            • One or more equations did not get rendered due to their size.
            inductive PostDeformationMeasurement (J : Type u_1) (E : Type u_2) (d : ) :
            Type (max u_1 u_2)

            Phase 3 measurement: edge Z or original check at round r.

            Instances For
              structure EdgeInitialization (E : Type u_1) :
              Type u_1

              Edge qubit initialization in |0⟩ (treated as measurement per Def 7).

              • edge : E
              Instances For
                def instDecidableEqEdgeInitialization.decEq {E✝ : Type u_1} [DecidableEq E✝] (x✝ x✝¹ : EdgeInitialization E✝) :
                Decidable (x✝ = x✝¹)
                Equations
                Instances For
                  Equations
                  inductive FTGaugingMeasurement (V : Type u_1) (C : Type u_2) (J : Type u_3) (E : Type u_4) (d : ) :
                  Type (max (max (max u_1 u_2) u_3) u_4)

                  All measurement labels across the entire procedure.

                  Instances For
                    def instDecidableEqFTGaugingMeasurement.decEq {V✝ : Type u_1} {C✝ : Type u_2} {J✝ : Type u_3} {E✝ : Type u_4} {d✝ : } [DecidableEq V✝] [DecidableEq C✝] [DecidableEq J✝] [DecidableEq E✝] (x✝ x✝¹ : FTGaugingMeasurement V✝ C✝ J✝ E✝ d✝) :
                    Decidable (x✝ = x✝¹)
                    Equations
                    Instances For
                      instance instDecidableEqFTGaugingMeasurement {V✝ : Type u_1} {C✝ : Type u_2} {J✝ : Type u_3} {E✝ : Type u_4} {d✝ : } [DecidableEq V✝] [DecidableEq C✝] [DecidableEq J✝] [DecidableEq E✝] :
                      DecidableEq (FTGaugingMeasurement V✝ C✝ J✝ E✝ d✝)
                      Equations

                      Time Steps #

                      def phaseOf (d t : ) :

                      Determine which phase a time step belongs to.

                      Equations
                      Instances For
                        @[simp]
                        @[simp]
                        theorem phaseOf_deformedCode {d t : } (h1 : d t) (h2 : t < 2 * d) :
                        @[simp]

                        Fault-Tolerant Gauging Procedure #

                        structure FaultTolerantGaugingProcedure {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] (cycles : CSet G.edgeSet) [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] (checks : JPauliOp V) :
                        Type (max u_1 u_3)

                        The fault-tolerant gauging measurement procedure for measuring a logical operator L in an [[n,k,d]] stabilizer code using a connected graph G. Bundles: code distance d, original code data, gauging input, deformed code data, and cycle parity condition.

                        • d :

                          The code distance d: number of rounds per phase

                        • d_pos : 0 < self.d

                          d ≥ 1 (meaningful code distance)

                        • checks_commute (i j : J) : (checks i).PauliCommute (checks j)

                          The original stabilizer code checks pairwise commute

                        • The gauging input: base vertex and connectivity

                        • deformedData : DeformedCode.DeformedCodeData G checks

                          The deformed code data: edge-paths satisfying boundary conditions

                        • cycleParity (c : C) (v : V) : Even {e : G.edgeSet | e cycles c v e}.card

                          Cycle parity: each vertex incident to even edges in each cycle

                        Instances For

                          Phase Timing #

                          def FaultTolerantGaugingProcedure.phase2Start {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :

                          Phase 2 begins at time d.

                          Equations
                          Instances For
                            def FaultTolerantGaugingProcedure.phase3Start {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :

                            Phase 3 begins at time 2d.

                            Equations
                            Instances For
                              def FaultTolerantGaugingProcedure.procedureEnd {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :

                              The procedure ends at time 3d.

                              Equations
                              Instances For
                                @[simp]
                                theorem FaultTolerantGaugingProcedure.phase2Start_eq {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                proc.phase2Start = proc.d
                                @[simp]
                                theorem FaultTolerantGaugingProcedure.phase3Start_eq {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                proc.phase3Start = 2 * proc.d
                                @[simp]
                                theorem FaultTolerantGaugingProcedure.procedureEnd_eq {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                proc.procedureEnd = 3 * proc.d
                                theorem FaultTolerantGaugingProcedure.phase1_duration {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                proc.phase2Start = proc.d
                                theorem FaultTolerantGaugingProcedure.phase2_duration {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                proc.phase3Start - proc.phase2Start = proc.d
                                theorem FaultTolerantGaugingProcedure.phase3_duration {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                proc.procedureEnd - proc.phase3Start = proc.d
                                theorem FaultTolerantGaugingProcedure.total_duration {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                proc.procedureEnd = 3 * proc.d
                                theorem FaultTolerantGaugingProcedure.phase2Start_le_phase3Start {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                theorem FaultTolerantGaugingProcedure.phase3Start_le_procedureEnd {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :

                                Measurement Label Type #

                                @[reducible, inline]
                                abbrev FaultTolerantGaugingProcedure.MeasLabel {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                Type (max (max (max u_1 u_2) u_3) u_1)

                                The full measurement label type for this procedure.

                                Equations
                                Instances For

                                  Measurement Phase Assignment #

                                  @[simp]
                                  theorem FaultTolerantGaugingProcedure.measurementPhase_phase1 {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (m : PreDeformationMeasurement J proc.d) :
                                  @[simp]
                                  theorem FaultTolerantGaugingProcedure.measurementPhase_edgeInit {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (ei : EdgeInitialization G.edgeSet) :
                                  @[simp]
                                  theorem FaultTolerantGaugingProcedure.measurementPhase_phase2 {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (m : DeformedCodeMeasurement V C J proc.d) :
                                  @[simp]
                                  theorem FaultTolerantGaugingProcedure.measurementPhase_phase3 {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (m : PostDeformationMeasurement J (↑G.edgeSet) proc.d) :

                                  Integer Time Assignment #

                                  theorem FaultTolerantGaugingProcedure.measurementTime_phase1_lt {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (pm : PreDeformationMeasurement J proc.d) :
                                  theorem FaultTolerantGaugingProcedure.measurementTime_phase2_ge {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (dm : DeformedCodeMeasurement V C J proc.d) :
                                  theorem FaultTolerantGaugingProcedure.measurementTime_phase2_lt {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (dm : DeformedCodeMeasurement V C J proc.d) :
                                  theorem FaultTolerantGaugingProcedure.measurementTime_phase3_ge {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (pm : PostDeformationMeasurement J (↑G.edgeSet) proc.d) :
                                  theorem FaultTolerantGaugingProcedure.measurementTime_phase3_lt {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (pm : PostDeformationMeasurement J (↑G.edgeSet) proc.d) :
                                  theorem FaultTolerantGaugingProcedure.measurementTime_edgeInit {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (ei : EdgeInitialization G.edgeSet) :
                                  theorem FaultTolerantGaugingProcedure.measurementTime_consistent_with_phase {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (m : proc.MeasLabel) :

                                  Measurement time is consistent with phase assignment.

                                  Phase Predicates #

                                  def FaultTolerantGaugingProcedure.isPhase1 {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                  proc.MeasLabelBool

                                  A measurement label belongs to Phase 1.

                                  Equations
                                  Instances For
                                    def FaultTolerantGaugingProcedure.isPhase2 {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                    proc.MeasLabelBool

                                    A measurement label belongs to Phase 2.

                                    Equations
                                    Instances For
                                      def FaultTolerantGaugingProcedure.isPhase3 {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                      proc.MeasLabelBool

                                      A measurement label belongs to Phase 3.

                                      Equations
                                      Instances For

                                        Qubit Types #

                                        @[reducible, inline]

                                        The qubit type for the procedure: extended system V ⊕ E(G).

                                        Equations
                                        Instances For

                                          Operators Being Measured in Phase 2 #

                                          def FaultTolerantGaugingProcedure.phase2Operator {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (dm : DeformedCodeMeasurement V C J proc.d) :

                                          The Pauli operator for a Phase 2 measurement.

                                          Equations
                                          Instances For
                                            theorem FaultTolerantGaugingProcedure.phase2Operator_is_allChecks {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (dm : DeformedCodeMeasurement V C J proc.d) :
                                            ∃ (ci : DeformedCode.CheckIndex V C J), proc.phase2Operator dm = DeformedCode.allChecks G cycles checks proc.deformedData ci

                                            Each Phase 2 operator is a check of the deformed code.

                                            theorem FaultTolerantGaugingProcedure.phase2Operators_commute {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (dm₁ dm₂ : DeformedCodeMeasurement V C J proc.d) :
                                            (proc.phase2Operator dm₁).PauliCommute (proc.phase2Operator dm₂)

                                            All Phase 2 measurements pairwise commute.

                                            theorem FaultTolerantGaugingProcedure.phase2Operators_selfInverse {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (dm : DeformedCodeMeasurement V C J proc.d) :
                                            proc.phase2Operator dm * proc.phase2Operator dm = 1

                                            All Phase 2 operators are self-inverse.

                                            Phase 2 Check Identification #

                                            theorem FaultTolerantGaugingProcedure.phase2_gaussLaw_eq {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (v : V) (r : Fin proc.d) :
                                            theorem FaultTolerantGaugingProcedure.phase2_flux_eq {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (p : C) (r : Fin proc.d) :
                                            theorem FaultTolerantGaugingProcedure.phase2_deformed_eq {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (j : J) (r : Fin proc.d) :
                                            theorem FaultTolerantGaugingProcedure.phase2_gauss_product_eq_logical {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :

                                            The product of all Gauss's law operators equals the logical L.

                                            Detectors #

                                            def FaultTolerantGaugingProcedure.phase1RepeatedDetector {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (j : J) (r r' : Fin proc.d) (_hr : r + 1 = r') :

                                            Repeated measurement detector for consecutive Phase 1 rounds.

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              def FaultTolerantGaugingProcedure.phase2RepeatedDetector_gauss {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (v : V) (r r' : Fin proc.d) (_hr : r + 1 = r') :

                                              Repeated measurement detector for Gauss's law in Phase 2.

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For
                                                def FaultTolerantGaugingProcedure.phase2RepeatedDetector_flux {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (p : C) (r r' : Fin proc.d) (_hr : r + 1 = r') :

                                                Repeated measurement detector for flux in Phase 2.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  def FaultTolerantGaugingProcedure.phase2RepeatedDetector_deformed {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (j : J) (r r' : Fin proc.d) (_hr : r + 1 = r') :

                                                  Repeated measurement detector for deformed checks in Phase 2.

                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    def FaultTolerantGaugingProcedure.edgeInitDetector {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (e : G.edgeSet) :

                                                    Edge initialization detector: init |0⟩ at t_i and Z_e measurement at t_o.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      def FaultTolerantGaugingProcedure.phase1_to_phase2_detector {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (j : J) (r_last r_first : Fin proc.d) (_h_last : r_last + 1 = proc.d) (_h_first : r_first = 0) :

                                                      Boundary detector: last Phase 1 round to first Phase 2 round.

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      Instances For
                                                        def FaultTolerantGaugingProcedure.phase2_to_phase3_detector {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (j : J) (r_last r_first : Fin proc.d) (_h_last : r_last + 1 = proc.d) (_h_first : r_first = 0) :

                                                        Boundary detector: last Phase 2 round to first Phase 3 round.

                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For

                                                          Key Properties #

                                                          theorem FaultTolerantGaugingProcedure.phase1_measurement_count {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :

                                                          Phase 1 has |J| · d measurements.

                                                          theorem FaultTolerantGaugingProcedure.phase2_measurement_count {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :

                                                          Phase 2 has (|V| + |C| + |J|) · d measurements.

                                                          Gauging Sign #

                                                          def FaultTolerantGaugingProcedure.gaugingSign {V : Type u_1} [Fintype V] (gaussOutcomes : VZMod 2) :

                                                          The gauging measurement sign from Phase 2 Gauss outcomes.

                                                          Equations
                                                          Instances For
                                                            theorem FaultTolerantGaugingProcedure.gaugingSign_zero_or_one {V : Type u_1} [Fintype V] [DecidableEq V] (gaussOutcomes : VZMod 2) :
                                                            gaugingSign gaussOutcomes = 0 gaugingSign gaussOutcomes = 1
                                                            theorem FaultTolerantGaugingProcedure.gaugingSign_eq_measurementSign {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] (gaussOutcomes : VZMod 2) (edgeOutcomes : G.edgeSetZMod 2) :
                                                            gaugingSign gaussOutcomes = GaugingMeasurement.measurementSign G { gaussOutcome := gaussOutcomes, edgeOutcome := edgeOutcomes }

                                                            The sign from the FT procedure agrees with the Def 5 measurement sign.

                                                            Spacetime Fault Model #

                                                            @[reducible, inline]
                                                            abbrev FaultTolerantGaugingProcedure.ProcedureFault {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) :
                                                            Type (max u_1 (max u_1 u_2) u_3)

                                                            A spacetime fault in the fault-tolerant gauging procedure.

                                                            Equations
                                                            Instances For

                                                              Phase 2 Consistency #

                                                              theorem FaultTolerantGaugingProcedure.phase2_gaussLaw_pure_X {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (v : V) (r : Fin proc.d) :

                                                              Gauss's law checks in Phase 2 are pure X-type.

                                                              theorem FaultTolerantGaugingProcedure.phase2_flux_pure_Z {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (p : C) (r : Fin proc.d) :

                                                              Flux checks in Phase 2 are pure Z-type.

                                                              theorem FaultTolerantGaugingProcedure.phase2_deformed_noXOnEdges {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] [Fintype G.edgeSet] {C : Type u_2} [Fintype C] [DecidableEq C] {cycles : CSet G.edgeSet} [(c : C) → DecidablePred fun (x : G.edgeSet) => x cycles c] {J : Type u_3} [Fintype J] [DecidableEq J] {checks : JPauliOp V} (proc : FaultTolerantGaugingProcedure G cycles checks) (j : J) (r : Fin proc.d) (e : G.edgeSet) :

                                                              Deformed checks in Phase 2 have no X-support on edge qubits.