Def_7: Space and Time Faults #
Statement #
In the context of fault-tolerant implementation of the gauging measurement procedure:
Space-fault: A Pauli error operator (single-qubit X, Y, or Z error) that occurs on some qubit at some time during the procedure. Space-faults are characterized by the qubit affected and the time of occurrence.
Time-fault (measurement error): An error where the result of a quantum measurement is reported incorrectly. The actual measurement projects onto an eigenspace, but the classical outcome is flipped. Time-faults are characterized by the measurement affected and the time step.
State initialization fault: Treated as equivalent to a time-fault. A faulty initialization of state |ψ⟩ is modeled as perfect initialization followed by an immediate space-fault.
Spacetime fault: A collection of space-faults and time-faults occurring at various locations and times during the procedure. The set of all spacetime faults forms a group under composition.
Main Definitions #
PauliType: The three Pauli error types (X, Y, Z)SpaceFault: A single-qubit Pauli error at a specific qubit and timeTimeFault: A measurement error (bit flip) at a specific measurement and timeInitializationFault: A state initialization fault (modeled as time-fault)SpacetimeFault: A collection of space-faults and time-faultsSpacetimeFaultGroup: The group structure on spacetime faults
Key Properties #
spaceFault_identity: Identity space-fault (no error)timeFault_identity: Identity time-fault (no measurement error)spacetimeFault_compose: Composition of spacetime faultsspacetimeFault_inv: Inverse of a spacetime faultspacetimeFault_group: Group structure on spacetime faults
Time Steps #
We model time discretely. Each round of the procedure corresponds to a time step. Time steps are indexed by natural numbers.
Pauli Error Types #
A single-qubit Pauli error can be X, Y, or Z. We also include Identity (I) for completeness, representing "no error".
Equations
- instReprPauliType.repr PauliType.I prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "PauliType.I")).group prec✝
- instReprPauliType.repr PauliType.X prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "PauliType.X")).group prec✝
- instReprPauliType.repr PauliType.Y prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "PauliType.Y")).group prec✝
- instReprPauliType.repr PauliType.Z prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "PauliType.Z")).group prec✝
Instances For
Equations
- instReprPauliType = { reprPrec := instReprPauliType.repr }
Equations
Instances For
Equations
- instInhabitedPauliType = { default := instInhabitedPauliType.default }
Pauli multiplication table. I is identity, X² = Y² = Z² = I, and XYZ = iI (we ignore global phases).
Equations
- PauliType.I.mul x✝ = x✝
- x✝.mul PauliType.I = x✝
- PauliType.X.mul PauliType.X = PauliType.I
- PauliType.Y.mul PauliType.Y = PauliType.I
- PauliType.Z.mul PauliType.Z = PauliType.I
- PauliType.X.mul PauliType.Y = PauliType.Z
- PauliType.Y.mul PauliType.X = PauliType.Z
- PauliType.Y.mul PauliType.Z = PauliType.X
- PauliType.Z.mul PauliType.Y = PauliType.X
- PauliType.Z.mul PauliType.X = PauliType.Y
- PauliType.X.mul PauliType.Z = PauliType.Y
Instances For
Equations
- PauliType.instMul = { mul := PauliType.mul }
Pauli operators are self-inverse (up to phase)
Equations
Instances For
Equations
- PauliType.instInv = { inv := PauliType.inv }
Identity element
Equations
- PauliType.instOne = { one := PauliType.I }
PauliType forms a group
Equations
- One or more equations did not get rendered due to their size.
Qubit Index Type #
Qubits are indexed by some type. In the gauging context, we have:
- Vertex qubits (indexed by V)
- Edge qubits (indexed by E) We use a unified qubit index type that can represent both.
Equations
- instDecidableEqQubitLoc.decEq (QubitLoc.vertex a) (QubitLoc.vertex b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- instDecidableEqQubitLoc.decEq (QubitLoc.vertex a) (QubitLoc.edge a_1) = isFalse ⋯
- instDecidableEqQubitLoc.decEq (QubitLoc.edge a) (QubitLoc.vertex a_1) = isFalse ⋯
- instDecidableEqQubitLoc.decEq (QubitLoc.edge a) (QubitLoc.edge b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Check if a location is a vertex qubit
Equations
- (QubitLoc.vertex a).isVertex = true
- (QubitLoc.edge a).isVertex = false
Instances For
Check if a location is an edge qubit
Equations
- (QubitLoc.vertex a).isEdge = false
- (QubitLoc.edge a).isEdge = true
Instances For
Extract the vertex index if this is a vertex qubit
Equations
- (QubitLoc.vertex a).getVertex = some a
- (QubitLoc.edge a).getVertex = none
Instances For
Extract the edge index if this is an edge qubit
Equations
- (QubitLoc.vertex a).getEdge = none
- (QubitLoc.edge a).getEdge = some a
Instances For
Measurement Index Type #
Measurements are indexed by type M. Each measurement corresponds to measuring some check operator (Gauss law A_v, flux B_p, or original stabilizer s_j).
A measurement index. This identifies which measurement is being referred to.
Equations
- MeasurementIdx M = M
Instances For
Space-Faults #
A space-fault is a single-qubit Pauli error occurring on a specific qubit at a specific time.
A space-fault: a Pauli error on a specific qubit at a specific time.
The error pauliType occurs on qubit qubit at time time.
- qubit : QubitLoc V E
The qubit where the error occurs
- time : TimeStep
The time step when the error occurs
- pauliType : PauliType
The type of Pauli error (X, Y, Z, or I for no error)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
The identity space-fault at a given location and time (no error)
Equations
- SpaceFault.identity q t = { qubit := q, time := t, pauliType := PauliType.I }
Instances For
Check if this space-fault represents an actual error
Equations
Instances For
Compose two space-faults at the same location and time
Equations
Instances For
The inverse of a space-fault (same fault, since Paulis are self-inverse)
Instances For
A space-fault on a vertex qubit
Equations
- SpaceFault.onVertex v t p = { qubit := QubitLoc.vertex v, time := t, pauliType := p }
Instances For
A space-fault on an edge qubit
Equations
- SpaceFault.onEdge e t p = { qubit := QubitLoc.edge e, time := t, pauliType := p }
Instances For
An X error on a vertex qubit
Equations
Instances For
A Y error on a vertex qubit
Equations
Instances For
A Z error on a vertex qubit
Equations
Instances For
An X error on an edge qubit
Equations
Instances For
A Y error on an edge qubit
Equations
Instances For
A Z error on an edge qubit
Equations
Instances For
Time-Faults (Measurement Errors) #
A time-fault is a measurement error: the classical outcome of a measurement is flipped. This is also called a "measurement error" or "readout error".
A time-fault: a measurement whose classical outcome is flipped.
The measurement measurement at time time reports the wrong outcome.
- measurement : M
The measurement that is affected
- time : TimeStep
The time step when the measurement occurs
- isFlipped : Bool
Whether this fault is active (true = flipped outcome)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
The identity time-fault (no measurement error)
Equations
- TimeFault.identity m t = { measurement := m, time := t, isFlipped := false }
Instances For
An active measurement error
Equations
- TimeFault.active m t = { measurement := m, time := t, isFlipped := true }
Instances For
Check if this time-fault represents an actual error
Equations
- f.isActualError = f.isFlipped
Instances For
Compose two time-faults at the same measurement and time (XOR of flips)
Equations
Instances For
Initialization Faults #
A state initialization fault is treated as equivalent to a time-fault. A faulty initialization of state |ψ⟩ is modeled as perfect initialization followed by an immediate space-fault.
We model this by having initialization faults be a special case that can be represented either as a time-fault on the initialization "measurement" or as a space-fault immediately after initialization.
An initialization fault on a qubit. This represents a faulty preparation of the initial state. It is modeled as equivalent to perfect initialization followed by a space-fault.
- qubit : QubitLoc V E
The qubit being initialized
- time : TimeStep
The time step of initialization
- effectiveError : PauliType
The effective Pauli error (applied after "perfect" initialization)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Convert an initialization fault to an equivalent space-fault. The space-fault occurs at the same time as the initialization.
Equations
- f.toSpaceFault = { qubit := f.qubit, time := f.time, pauliType := f.effectiveError }
Instances For
The identity initialization fault (no error)
Equations
- InitializationFault.identity q t = { qubit := q, time := t, effectiveError := PauliType.I }
Instances For
Check if this initialization fault represents an actual error
Equations
Instances For
Spacetime Faults #
A spacetime fault is a collection of space-faults and time-faults occurring at various locations and times during the procedure.
A spacetime fault: a collection of space-faults and time-faults.
We represent this as:
- A function from (qubit, time) pairs to Pauli errors (for space-faults)
- A function from (measurement, time) pairs to flip flags (for time-faults)
This representation allows for efficient composition (pointwise multiplication/XOR).
The Pauli error at each (qubit, time) location. Identity means no error.
Whether each (measurement, time) has a flipped outcome. False means no error.
Instances For
The identity spacetime fault (no errors anywhere)
Equations
- SpacetimeFault.identity = { spaceErrors := fun (x : QubitLoc V E) (x_1 : TimeStep) => PauliType.I, timeErrors := fun (x : M) (x_1 : TimeStep) => false }
Instances For
Equations
Composition of spacetime faults (pointwise multiplication/XOR)
Equations
- f.compose g = { spaceErrors := fun (q : QubitLoc V E) (t : TimeStep) => f.spaceErrors q t * g.spaceErrors q t, timeErrors := fun (m : M) (t : TimeStep) => f.timeErrors m t ^^ g.timeErrors m t }
Instances For
Equations
Inverse of a spacetime fault
Equations
- f.inv = { spaceErrors := fun (q : QubitLoc V E) (t : TimeStep) => (f.spaceErrors q t)⁻¹, timeErrors := f.timeErrors }
Instances For
Equations
- SpacetimeFault.instInv = { inv := SpacetimeFault.inv }
Equations
- One or more equations did not get rendered due to their size.
Create a spacetime fault from a single space-fault
Equations
- One or more equations did not get rendered due to their size.
Instances For
Create a spacetime fault from a single time-fault
Equations
- One or more equations did not get rendered due to their size.
Instances For
Create a spacetime fault from a single initialization fault
Instances For
The set of (qubit, time) locations where space errors occur
Equations
- f.spaceErrorLocations times = {x ∈ Finset.univ ×ˢ times | match x with | (q, t) => f.spaceErrors q t ≠ PauliType.I}
Instances For
The set of (measurement, time) locations where time errors occur
Equations
- f.timeErrorLocations times = {x ∈ Finset.univ ×ˢ times | match x with | (m, t) => f.timeErrors m t = true}
Instances For
The total weight of a spacetime fault (number of non-trivial errors) over given time range
Equations
- f.weight times = (f.spaceErrorLocations times).card + (f.timeErrorLocations times).card
Instances For
A spacetime fault is "pure space" if it has no time errors
Equations
- f.isPureSpace = ∀ (m : M) (t : TimeStep), f.timeErrors m t = false
Instances For
A spacetime fault is "pure time" if it has no space errors
Equations
- f.isPureTime = ∀ (q : QubitLoc V E) (t : TimeStep), f.spaceErrors q t = PauliType.I
Instances For
The space-only component of a spacetime fault
Equations
- f.spaceComponent = { spaceErrors := f.spaceErrors, timeErrors := fun (x : M) (x_1 : TimeStep) => false }
Instances For
The time-only component of a spacetime fault
Equations
- f.timeComponent = { spaceErrors := fun (x : QubitLoc V E) (x_1 : TimeStep) => PauliType.I, timeErrors := f.timeErrors }
Instances For
A spacetime fault decomposes into its space and time components
The Group of Spacetime Faults #
The set of all spacetime faults forms a group under composition.
This is captured by the Group instance on SpacetimeFault.
The subgroup of pure space-faults
Equations
- pureSpaceFaults V E M = { carrier := {f : SpacetimeFault V E M | f.isPureSpace}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
The subgroup of pure time-faults
Equations
- pureTimeFaults V E M = { carrier := {f : SpacetimeFault V E M | f.isPureTime}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
Summary #
This formalization captures the fault model for fault-tolerant quantum error correction:
Space-faults: Single-qubit Pauli errors (X, Y, Z) occurring at specific qubits and times.
- Represented by
SpaceFault V Ewhich records qubit location, time, and error type. - Can occur on vertex qubits (V) or edge qubits (E).
- Represented by
Time-faults: Measurement errors where classical outcomes are flipped.
- Represented by
TimeFault Mwhich records measurement index, time, and flip status. - Models readout errors in the measurement process.
- Represented by
Initialization faults: Faulty state preparation.
- Modeled as equivalent to a space-fault immediately after initialization.
- Represented by
InitializationFault V E.
Spacetime faults: Collections of space and time faults.
- Represented by
SpacetimeFault V E Mas functions from locations to errors. - Form a group under pointwise composition (
Groupinstance). - Can be decomposed into pure-space and pure-time components.
- Represented by
Key properties proven:
PauliTypeforms a group (Pauli operators under multiplication)SpacetimeFaultforms a group under composition- Pure space-faults form a subgroup
- Pure time-faults form a subgroup
- Every spacetime fault decomposes as space_component * time_component