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:
- Phase 1 (Pre-deformation): Measure original stabilizer checks for d rounds
- Phase 2 (Deformed code): Initialize edge qubits, measure Gauss's law, flux, and deformed checks for d rounds
- Phase 3 (Post-deformation): Measure Z_e on edge qubits to ungauge, resume original checks for d rounds
Main Results #
FaultTolerantGaugingProcedure: The procedure data with all three phasesGaugingPhase: The three phases as an inductive typephaseOf: Which phase a given time step belongs toFTGaugingMeasurement: The type of all measurements across the proceduremeasurementPhase,measurementTime: Phase/time assignment for measurements- Phase timing and measurement counting theorems
Phase Type #
The three phases of the fault-tolerant gauging procedure.
- preDeformation : GaugingPhase
- deformedCode : GaugingPhase
- postDeformation : GaugingPhase
Instances For
Equations
- instReprGaugingPhase.repr GaugingPhase.preDeformation prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "GaugingPhase.preDeformation")).group prec✝
- instReprGaugingPhase.repr GaugingPhase.deformedCode prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "GaugingPhase.deformedCode")).group prec✝
- instReprGaugingPhase.repr GaugingPhase.postDeformation prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "GaugingPhase.postDeformation")).group prec✝
Instances For
Equations
- instReprGaugingPhase = { reprPrec := instReprGaugingPhase.repr }
Equations
Measurement Labels #
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.
Phase 2 measurement: Gauss (V), flux (C), or deformed (J) at round r.
- gaussLaw {V : Type u_1} {C : Type u_2} {J : Type u_3} {d : ℕ} (v : V) (round : Fin d) : DeformedCodeMeasurement V C J d
- flux {V : Type u_1} {C : Type u_2} {J : Type u_3} {d : ℕ} (p : C) (round : Fin d) : DeformedCodeMeasurement V C J d
- deformed {V : Type u_1} {C : Type u_2} {J : Type u_3} {d : ℕ} (j : J) (round : Fin d) : DeformedCodeMeasurement V C J d
Instances For
Equations
- One or more equations did not get rendered due to their size.
- instDecidableEqDeformedCodeMeasurement.decEq (DeformedCodeMeasurement.gaussLaw v round) (DeformedCodeMeasurement.flux p round_1) = isFalse ⋯
- instDecidableEqDeformedCodeMeasurement.decEq (DeformedCodeMeasurement.gaussLaw v round) (DeformedCodeMeasurement.deformed j round_1) = isFalse ⋯
- instDecidableEqDeformedCodeMeasurement.decEq (DeformedCodeMeasurement.flux p round) (DeformedCodeMeasurement.gaussLaw v round_1) = isFalse ⋯
- instDecidableEqDeformedCodeMeasurement.decEq (DeformedCodeMeasurement.flux p round) (DeformedCodeMeasurement.deformed j round_1) = isFalse ⋯
- instDecidableEqDeformedCodeMeasurement.decEq (DeformedCodeMeasurement.deformed j round) (DeformedCodeMeasurement.gaussLaw v round_1) = isFalse ⋯
- instDecidableEqDeformedCodeMeasurement.decEq (DeformedCodeMeasurement.deformed j round) (DeformedCodeMeasurement.flux p round_1) = isFalse ⋯
Instances For
Phase 3 measurement: edge Z or original check at round r.
- edgeZ {J : Type u_1} {E : Type u_2} {d : ℕ} (e : E) : PostDeformationMeasurement J E d
- originalCheck {J : Type u_1} {E : Type u_2} {d : ℕ} (j : J) (round : Fin d) : PostDeformationMeasurement J E d
Instances For
Equations
- One or more equations did not get rendered due to their size.
- instDecidableEqPostDeformationMeasurement.decEq (PostDeformationMeasurement.edgeZ a) (PostDeformationMeasurement.edgeZ b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- instDecidableEqPostDeformationMeasurement.decEq (PostDeformationMeasurement.edgeZ e) (PostDeformationMeasurement.originalCheck j round) = isFalse ⋯
- instDecidableEqPostDeformationMeasurement.decEq (PostDeformationMeasurement.originalCheck j round) (PostDeformationMeasurement.edgeZ e) = isFalse ⋯
Instances For
Edge qubit initialization in |0⟩ (treated as measurement per Def 7).
- edge : E
Instances For
Equations
Instances For
Equations
- instFintypeEdgeInitialization = Fintype.ofEquiv E { toFun := fun (e : E) => { edge := e }, invFun := fun (ei : EdgeInitialization E) => ei.edge, left_inv := ⋯, right_inv := ⋯ }
All measurement labels across the entire procedure.
- phase1 {V : Type u_1} {C : Type u_2} {J : Type u_3} {E : Type u_4} {d : ℕ} (m : PreDeformationMeasurement J d) : FTGaugingMeasurement V C J E d
- edgeInit {V : Type u_1} {C : Type u_2} {J : Type u_3} {E : Type u_4} {d : ℕ} (init : EdgeInitialization E) : FTGaugingMeasurement V C J E d
- phase2 {V : Type u_1} {C : Type u_2} {J : Type u_3} {E : Type u_4} {d : ℕ} (m : DeformedCodeMeasurement V C J d) : FTGaugingMeasurement V C J E d
- phase3 {V : Type u_1} {C : Type u_2} {J : Type u_3} {E : Type u_4} {d : ℕ} (m : PostDeformationMeasurement J E d) : FTGaugingMeasurement V C J E d
Instances For
Equations
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase1 a) (FTGaugingMeasurement.phase1 b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase1 m) (FTGaugingMeasurement.edgeInit init) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase1 m) (FTGaugingMeasurement.phase2 m_1) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase1 m) (FTGaugingMeasurement.phase3 m_1) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.edgeInit init) (FTGaugingMeasurement.phase1 m) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.edgeInit a) (FTGaugingMeasurement.edgeInit b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.edgeInit init) (FTGaugingMeasurement.phase2 m) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.edgeInit init) (FTGaugingMeasurement.phase3 m) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase2 m) (FTGaugingMeasurement.phase1 m_1) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase2 m) (FTGaugingMeasurement.edgeInit init) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase2 a) (FTGaugingMeasurement.phase2 b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase2 m) (FTGaugingMeasurement.phase3 m_1) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase3 m) (FTGaugingMeasurement.phase1 m_1) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase3 m) (FTGaugingMeasurement.edgeInit init) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase3 m) (FTGaugingMeasurement.phase2 m_1) = isFalse ⋯
- instDecidableEqFTGaugingMeasurement.decEq (FTGaugingMeasurement.phase3 a) (FTGaugingMeasurement.phase3 b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Time Steps #
Determine which phase a time step belongs to.
Equations
Instances For
Fault-Tolerant Gauging Procedure #
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 ≥ 1 (meaningful code distance)
- checks_commute (i j : J) : (checks i).PauliCommute (checks j)
The original stabilizer code checks pairwise commute
- gaugingInput : GaugingMeasurement.GaugingInput G
The gauging input: base vertex and connectivity
- deformedData : DeformedCode.DeformedCodeData G checks
The deformed code data: edge-paths satisfying boundary conditions
Cycle parity: each vertex incident to even edges in each cycle
Instances For
Phase Timing #
Phase 2 begins at time d.
Equations
- proc.phase2Start = proc.d
Instances For
Phase 3 begins at time 2d.
Equations
- proc.phase3Start = 2 * proc.d
Instances For
The procedure ends at time 3d.
Equations
- proc.procedureEnd = 3 * proc.d
Instances For
Measurement Label Type #
The full measurement label type for this procedure.
Equations
- proc.MeasLabel = FTGaugingMeasurement V C J (↑G.edgeSet) proc.d
Instances For
Measurement Phase Assignment #
Which phase a measurement belongs to.
Equations
- proc.measurementPhase (FTGaugingMeasurement.phase1 m) = GaugingPhase.preDeformation
- proc.measurementPhase (FTGaugingMeasurement.edgeInit init) = GaugingPhase.deformedCode
- proc.measurementPhase (FTGaugingMeasurement.phase2 m) = GaugingPhase.deformedCode
- proc.measurementPhase (FTGaugingMeasurement.phase3 m) = GaugingPhase.postDeformation
Instances For
Integer Time Assignment #
The integer time associated with a measurement.
Equations
- proc.measurementTime (FTGaugingMeasurement.phase1 m) = ↑m.round
- proc.measurementTime (FTGaugingMeasurement.edgeInit init) = proc.d
- proc.measurementTime (FTGaugingMeasurement.phase2 (DeformedCodeMeasurement.gaussLaw v r)) = proc.d + ↑r
- proc.measurementTime (FTGaugingMeasurement.phase2 (DeformedCodeMeasurement.flux p r)) = proc.d + ↑r
- proc.measurementTime (FTGaugingMeasurement.phase2 (DeformedCodeMeasurement.deformed j r)) = proc.d + ↑r
- proc.measurementTime (FTGaugingMeasurement.phase3 (PostDeformationMeasurement.edgeZ e)) = 2 * proc.d + 0
- proc.measurementTime (FTGaugingMeasurement.phase3 (PostDeformationMeasurement.originalCheck j r)) = 2 * proc.d + ↑r
Instances For
Measurement time is consistent with phase assignment.
Phase Predicates #
A measurement label belongs to Phase 1.
Instances For
A measurement label belongs to Phase 2.
Equations
Instances For
A measurement label belongs to Phase 3.
Instances For
Qubit Types #
The qubit type for the procedure: extended system V ⊕ E(G).
Instances For
Operators Being Measured in Phase 2 #
The Pauli operator for a Phase 2 measurement.
Equations
- proc.phase2Operator (DeformedCodeMeasurement.gaussLaw v r) = DeformedCode.gaussLawChecks G v
- proc.phase2Operator (DeformedCodeMeasurement.flux p r) = DeformedCode.fluxChecks G cycles p
- proc.phase2Operator (DeformedCodeMeasurement.deformed j r) = DeformedCode.deformedOriginalChecks G checks proc.deformedData j
Instances For
Each Phase 2 operator is a check of the deformed code.
All Phase 2 measurements pairwise commute.
All Phase 2 operators are self-inverse.
Phase 2 Check Identification #
The product of all Gauss's law operators equals the logical L.
Detectors #
Repeated measurement detector for consecutive Phase 1 rounds.
Equations
- One or more equations did not get rendered due to their size.
Instances For
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
Repeated measurement detector for flux in Phase 2.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Repeated measurement detector for deformed checks in Phase 2.
Equations
- One or more equations did not get rendered due to their size.
Instances For
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
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
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 #
Phase 1 has |J| · d measurements.
Phase 2 has (|V| + |C| + |J|) · d measurements.
Edge initialization count is |E|.
Gauging Sign #
The gauging measurement sign from Phase 2 Gauss outcomes.
Equations
- FaultTolerantGaugingProcedure.gaugingSign gaussOutcomes = ∑ v : V, gaussOutcomes v
Instances For
The sign from the FT procedure agrees with the Def 5 measurement sign.
Spacetime Fault Model #
A spacetime fault in the fault-tolerant gauging procedure.
Equations
- proc.ProcedureFault = SpacetimeFault (GaussFlux.ExtQubit G) ℕ proc.MeasLabel
Instances For
Phase 2 Consistency #
Gauss's law checks in Phase 2 are pure X-type.
Flux checks in Phase 2 are pure Z-type.
Deformed checks in Phase 2 have no X-support on edge qubits.