The Pauli rotation branching rule, with its case split closed #
Rotation.lean proves the two branches of apd:eq:pauli_rotation_branch over
an abstract ℂ-algebra: rot_conj_of_commute for a commuting generator,
rot_conj_of_anticommute for an anticommuting one. What it cannot see is that those two branches
exhaust the cases: in an abstract algebra a pair G, P need neither commute nor anticommute.
This file specializes the rule to Pauli strings, where the dichotomy is a theorem, and states the
rule as a single identity whose branch is decided by the symplectic form.
PauliString.toMatrix_commute_or_anticommute supplies the dichotomy,
PauliString.isSelfAdjoint_iff_mul_self_eq_one supplies both rot_* hypotheses from one, and
pauli_rotation_branch is then the paper's equation with an if, not a hypothesis, deciding the
branch.
Main results #
rot_toMatrix_mem_unitary: a rotation generated by a Hermitian Pauli string is unitary.pauli_rotation_branch:apd:eq:pauli_rotation_branchfor Pauli strings, the branch being selected bysympForm G s.pauli_rotation_branch_commute,pauli_rotation_branch_anticommute: the two branches separately.pauli_rotation_branch_anticommute_hermitian: the anticommuting branch with the real coefficientsin θon the Hermitian partneri G s.pauli_rotation_branch_anticommute_bounds: the anticommuting branch together with the two-sided weight bound and the non-collinearity of the two terms.
The three consequences of the identity #
The paper draws three consequences from the identity: (1) the transition is sparse in the Pauli
basis, (2) the weight change is bounded by the locality of G, and (3) the amplitude of the new
term is damped by sin(dt). Rotation.lean delivers the arithmetic under (1) and (3) over an
abstract algebra. pauli_rotation_branch_anticommute_bounds collects what holds at the level of
Pauli operators: (2) in full and the non-degeneracy half of (3). The statements about
coefficients in the Pauli basis live in Pauli/Coeff.lean and Pauli/Flow.lean.
- Sparsity. The image is a ℂ-combination of at most two Pauli operators,
sandG s("at most", since the second coefficient vanishes atθ = 0and the first atθ = π/2). Sparsity in the Pauli basis is a statement about a coefficient vector, and no basis is built in this file: it needs the orthogonality relationTr(s s') = δofdef:pauli_basis(Pauli/Trace.lean), and the coefficient-level form of the rule iscoeffVec_conjinPauli/Flow.lean. "Two terms of the Pauli group" is strictly weaker than "two non-zero coefficients in the Pauli basis", and it is the former that is proved here. - Weight.
|s| - (k_h - 1) ≤ |G s| ≤ |s| + (k_h - 1)for|G| ≤ k_h, fromPauli/Weight.lean, proved in both directions. - Damping. The second term's coefficient is
i sin(θ), and the two terms are non-collinear (toMatrix_mul_ne_smul), so the decomposition is non-degenerate and that coefficient is not a rescaling of the first term.Rotation.leanrecords that distinctness is not enough for this, by the pairG = Z,P = E₁₀inMatrix (Fin 2) (Fin 2) ℂ, for which both rotation hypotheses hold andG * P = -P. No Pauli string can play that role. The damping of the coefficient in the Pauli basis needs the basis and is part of the norm flow inPauli/Flow.lean.
Scope #
The sin(dt) factor being small is a statement about dt, not about Paulis, and belongs to the
ladder (Lean4LPD.Ladder). Orthogonality of the Pauli operators is in Pauli/Trace.lean, the
coefficient vector in Pauli/Coeff.lean, and the orthogonality of conjugation acting on it, used
in the proof of apd:thm:local_flow_k_local, is norm_rotAct in Pauli/Flow.lean.
The theorems below are stated for the closed form rot G θ and for the entrywise matrix
toMatrix. That rot (toMatrix G) θ is the matrix exponential exp(i G θ/2) is
rot_toMatrix_eq_exp in RotationExp.lean. That toMatrix s is a fourth root of unity times
the tensor product P₁ ⊗ ⋯ ⊗ Pₙ of one-qubit Pauli matrices is toMatrix_eq_phase_tensor in
Pauli/Tensor.lean; the one-qubit case is also checked entry by entry in Pauli/Matrix.lean.
Rotations generated by a Hermitian Pauli string are unitary, so any product of them is —
including the product U_g = ∏_{l ≤ g} e^{-i G_l dt/2} of apd:thm:local_flow_k_local. That is
the whole prefix of the trajectory, not a layer: a layer V_γ in the sense of
apd:thm:layer_inflow carries the extra hypothesis of pairwise disjoint supports and is treated
in Pauli/LayerFlow.lean.
In this file's convention U_g is ∏ rot G_l (-dt), not ∏ rot G_l dt, since rot G θ is the
+ exponential (Rotation.lean's Conventions block). This is Lean4LPD.rot_mem_unitary with
both of its hypotheses discharged from the single hypothesis IsSelfAdjoint G.
apd:eq:pauli_rotation_branch, for Pauli strings, with the case split
closed.
e^{i G dt/2} s e^{-i G dt/2} = s if ⟪G,s⟫ = 0,
e^{i G dt/2} s e^{-i G dt/2} = cos(dt) s + i sin(dt) · G s if ⟪G,s⟫ = 1.
The paper states the rule as two cases, [G,P] = 0 and {G,P} = 0. Here the branch is
selected by sympForm G s, which takes only the values 0 and 1
(sympForm_eq_zero_or_one) — so the if is total and the two branches really are all of them.
That is the difference between this statement and Lean4LPD.rot_conj_of_commute /
rot_conj_of_anticommute, which are conditioned on hypotheses that over an abstract algebra are
not exhaustive. That the branch condition is the paper's condition, and not merely a sufficient
one, is toMatrix_commute_iff and toMatrix_anticommute_iff — iffs at the level of operators, so
sympForm G s = 0 holds exactly when [G,P] = 0 does.
The left-hand side is written with rot, the closed form. By rot_toMatrix_eq_exp and
rot_toMatrix_neg_eq_exp in RotationExp.lean the two factors are the matrix exponentials
exp(i G θ/2) and exp(-i G θ/2), so this is the paper's equation and not only a closed-form
analogue of it.
The only hypothesis is IsSelfAdjoint G, which by isSelfAdjoint_iff_mul_self_eq_one also
supplies the G * G = 1 that both rot_* lemmas need. Note θ is the paper's conjugation
angle dt, following Rotation.lean's convention: a physical rotation e^{-i α_l G_l τ} has
dt = 2 α_l τ.
The commuting branch: if ⟪G,s⟫ = 0, no rotation occurs and the Pauli operator is
unchanged; in particular its weight does not change.
The anticommuting branch: if ⟪G,s⟫ = 1, the image has two terms, the new one G s
carrying i sin(θ).
The anticommuting branch in the variables of the norm-flow proof: a real coefficient on a Hermitian partner.
The proof of apd:thm:local_flow_k_local treats conjugation as a real orthogonal matrix acting on
the coefficient vector in the Pauli basis: the Paulis anticommuting with the generator are paired
as s ↔ ±i G_g s, and each pair undergoes a planar rotation by the angle dt.
pauli_rotation_branch_anticommute above is not yet in that form: it carries the complex
coefficient i sin θ on G s, and G s is anti-Hermitian when G and s anticommute.
Absorbing the i into the operator fixes both at once — i G s is Hermitian
(isSelfAdjoint_phaseMul_one_mul) and the coefficient becomes the real sin θ.
This is the form consumed by the coefficient-vector computation coeff_conj in
Pauli/Flow.lean, and the reason isSelfAdjoint_phaseMul_one_mul and
weight_sub_le_weight_phaseMul_one_mul are stated about the partner rather than the bare
product.
The anticommuting branch with the bounds that go with it, for a k_h-local generator.
The conjuncts are, in order: the identity; the two halves of the weight bound; and the non-collinearity of the two terms.
Measured against the three consequences the paper draws from apd:eq:pauli_rotation_branch,
that is consequence (2), the weight bound, in full, the non-degeneracy half of (3) — the
i sin(θ) coefficient is not a rescaling of the first term — and none of (1), which is a
statement about coefficients in the Pauli basis and needs a basis that this file does not build
(see the module docstring). The subtraction weight s - (kh - 1) is truncated subtraction in
ℕ; that is harmless, since when it truncates to 0 the lower bound holds trivially.
Stated as one theorem because the paper states one equation with one set of consequences, and because a reader checking the correspondence should not have to assemble it.