Rem_18: Lattice Surgery as Gauging #
Statement #
Lattice surgery is a special case of gauging measurement. The gauging measurement can be interpreted as a direct generalization of lattice surgery for surface codes.
Example: Measuring X̄₁ ⊗ X̄₂ on a pair of equally sized surface code blocks using a ladder graph G joining the edge qubits produces:
- A deformed code that is again a surface code on the union of the two patches
- The final step of measuring out individual edge qubits matches conventional lattice surgery
Non-adjacent patches: Use a graph with a grid of dummy vertices between the two edges.
Generalization: Extends to any pair of matching logical X operators using two copies of graph G with bridge edges. G is allowed to have h(G) < 1 if path-length and cycle-weight desiderata are satisfied.
Insight: h(G) ≥ 1 is overkill; expansion is only needed for subsets of qubits relevant to the logical operators being measured.
Main Results #
LadderGraphWithCycles: Ladder graph as aGraphWithCyclesinstanceladder_gaussLaw_product_is_allOnes: Product of Gauss's law operators = L (logical op)ladder_deformed_code_generators: The deformed code has surface-code generator structuredummy_grid_walk_exists: Dummy grids provide walks between non-adjacent patch edgesGeneralizedSurgeryGraph: Two copies of G with bridge edgesfull_expansion_implies_relaxed: h(G) ≥ 1 implies relaxed expansion for any supportrelaxed_expansion_vacuous_for_disjoint: Expansion not needed on irrelevant subsets
Ladder Graph as a GraphWithCycles #
The ladder graph on n rungs has:
- Vertices:
Bool × Fin n(left column = false, right column = true) - Edges: n horizontal rungs + 2(n-1) vertical rails
- n-1 independent cycles (square faces of the ladder)
We build it as a GraphWithCycles to connect to the gauging framework
(Gauss's law operators from Def_2, flux operators from Def_3).
Edge type for the ladder graph: horizontal rungs and vertical rails.
- rung
{n : ℕ}
: Fin n → LadderEdge n
Horizontal rung connecting (false, i) to (true, i)
- leftRail
{n : ℕ}
: Fin (n - 1) → LadderEdge n
Left vertical rail connecting (false, i) to (false, i+1)
- rightRail
{n : ℕ}
: Fin (n - 1) → LadderEdge n
Right vertical rail connecting (true, i) to (true, i+1)
Instances For
Equations
- One or more equations did not get rendered due to their size.
- QEC1.LatticeSurgeryAsGauging.instDecidableEqLadderEdge.decEq (QEC1.LatticeSurgeryAsGauging.LadderEdge.rung a) (QEC1.LatticeSurgeryAsGauging.LadderEdge.leftRail a_1) = isFalse ⋯
- QEC1.LatticeSurgeryAsGauging.instDecidableEqLadderEdge.decEq (QEC1.LatticeSurgeryAsGauging.LadderEdge.rung a) (QEC1.LatticeSurgeryAsGauging.LadderEdge.rightRail a_1) = isFalse ⋯
- QEC1.LatticeSurgeryAsGauging.instDecidableEqLadderEdge.decEq (QEC1.LatticeSurgeryAsGauging.LadderEdge.leftRail a) (QEC1.LatticeSurgeryAsGauging.LadderEdge.rung a_1) = isFalse ⋯
- QEC1.LatticeSurgeryAsGauging.instDecidableEqLadderEdge.decEq (QEC1.LatticeSurgeryAsGauging.LadderEdge.leftRail a) (QEC1.LatticeSurgeryAsGauging.LadderEdge.rightRail a_1) = isFalse ⋯
- QEC1.LatticeSurgeryAsGauging.instDecidableEqLadderEdge.decEq (QEC1.LatticeSurgeryAsGauging.LadderEdge.rightRail a) (QEC1.LatticeSurgeryAsGauging.LadderEdge.rung a_1) = isFalse ⋯
- QEC1.LatticeSurgeryAsGauging.instDecidableEqLadderEdge.decEq (QEC1.LatticeSurgeryAsGauging.LadderEdge.rightRail a) (QEC1.LatticeSurgeryAsGauging.LadderEdge.leftRail a_1) = isFalse ⋯
Instances For
Cycle type for the ladder: one square face for each pair of consecutive rungs.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
The ladder graph as a SimpleGraph.
Equations
- QEC1.LatticeSurgeryAsGauging.ladderGraph n = { Adj := QEC1.LatticeSurgeryAsGauging.ladderAdj n, symm := ⋯, loopless := ⋯ }
Instances For
Endpoints for each ladder edge.
Equations
- QEC1.LatticeSurgeryAsGauging.ladderEdgeEndpoints n (QEC1.LatticeSurgeryAsGauging.LadderEdge.rung i) = ((false, i), true, i)
- QEC1.LatticeSurgeryAsGauging.ladderEdgeEndpoints n (QEC1.LatticeSurgeryAsGauging.LadderEdge.leftRail i) = ((false, ⟨↑i, ⋯⟩), false, ⟨↑i + 1, ⋯⟩)
- QEC1.LatticeSurgeryAsGauging.ladderEdgeEndpoints n (QEC1.LatticeSurgeryAsGauging.LadderEdge.rightRail i) = ((true, ⟨↑i, ⋯⟩), true, ⟨↑i + 1, ⋯⟩)
Instances For
Each ladder edge connects adjacent vertices.
Each ladder edge is symmetric.
The cycles of the ladder: each square face consists of rung(i), rightRail(i), rung(i+1), leftRail(i).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Build the ladder as a GraphWithCycles to connect to the gauging framework.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Gauss's Law Product = Logical Operator (Gauging Measures L) #
By Property 3 of Gauss's law operators (Def_2), ∏_v A_v = L. In binary vectors: the sum of all vertex supports equals the all-ones vector on the ladder vertices, which represents L = X̄₁ ⊗ X̄₂.
This is the core mechanism making lattice surgery a gauging measurement: measuring all A_v and multiplying outcomes yields the eigenvalue of L.
The sum of all Gauss's law vertex supports on the ladder is the all-ones vector. (Instantiation of gaussLaw_product_vertexSupport_all_ones from Def_2.)
The edge support of the Gauss's law product is zero (edges cancel pairwise).
Combining: ∏_v A_v = L on the ladder (vertex support = all-ones, edge support = 0).
Deformed Code Structure on the Merged Patch #
For the ladder with n rungs:
- |V| = 2n vertices → 2n Gauss's law operators (2n - 1 independent)
- |E| = 3n - 2 edges → n - 1 independent cycles → n - 1 flux operators
- Each cycle (square face) has exactly 4 edges → each B_p has weight 4
The ladder has 2n vertices.
The ladder has n rungs + 2(n-1) rails = 3n - 2 edges when n ≥ 1.
The number of independent cycles in the ladder is n - 1.
Each cycle (square face) of the ladder consists of exactly 4 edges.
Split Step: Measuring Out Edge Qubits Matches Conventional Surgery #
Non-Adjacent Patches via Dummy Grid #
For non-adjacent patches, the gauging graph includes a grid of dummy vertices. The key property is that the dummy grid provides walks of bounded length between the left and right edges.
Grid graph adjacency: unit-distance neighbors on the grid.
Equations
Instances For
Equations
- QEC1.LatticeSurgeryAsGauging.gridGraph D = { Adj := QEC1.LatticeSurgeryAsGauging.gridAdj D, symm := ⋯, loopless := ⋯ }
Instances For
Generalization: Two Copies of G with Bridge Edges #
For any pair of matching logical X operators on two code blocks, use two copies of graph G with additional bridge edges connecting corresponding vertices.
The combined graph for generalized lattice surgery: two copies of G with bridges.
Equations
Instances For
The combined graph is a valid SimpleGraph.
Equations
- QEC1.LatticeSurgeryAsGauging.GeneralizedSurgeryGraph G bridges = { Adj := QEC1.LatticeSurgeryAsGauging.GeneralizedSurgeryAdj G bridges, symm := ⋯, loopless := ⋯ }
Instances For
The combined graph has 2|V| vertices.
Bridge edges provide direct cross-copy connections.
Intra-copy adjacency is preserved.
Relaxed Expansion: h(G) ≥ 1 is Overkill #
The full Cheeger condition h(G) ≥ 1 constrains ALL subsets S ⊆ V with |S| ≤ |V|/2. For lattice surgery, expansion is only needed for subsets that intersect the logical operator's support supp(L). Subsets disjoint from supp(L) are irrelevant.
Relaxed expansion: |∂S| ≥ |S| required only for S intersecting logical support.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Full Cheeger expansion h(G) ≥ 1 implies relaxed expansion for any support.
Relaxed expansion is strictly weaker: subsets disjoint from logical support are unconstrained.
When logical support = full vertex set, relaxed expansion implies full expansion (both conditions coincide since every subset intersects the full vertex set).
Full expansion implies relaxed expansion (converse direction).
When the total vertex count exceeds the logical support, there exist vertices outside the support (i.e., unconstrained by relaxed expansion).