Skip to content

Add Clifford-to-transvection decomposition from arXiv:2102.11380 - #118

Open
Marcus P S (marcusps) wants to merge 7 commits into
microsoft:mainfrom
marcusps:masilv/clifford-to-pauli-exp-unphased
Open

Marcus P S (marcusps) wants to merge 7 commits into
microsoft:mainfrom
marcusps:masilv/clifford-to-pauli-exp-unphased

Conversation

@marcusps

Copy link
Copy Markdown
Contributor

Summary

  • Decomposes a Clifford symplectic action into a linear number of Clifford transvections (π/4 Pauli exponents).
  • Adds clifford_centralizer and Rust/Python APIs.
  • Includes deterministic reconstruction, factor-count, and centralizer tests.

Published reference

Implements the greedy O’Meara-style reduction from the transvection framework of Decomposition of Clifford Gates (arXiv:2102.11380). The contract is deliberately unphased: it reproduces the symplectic action, not Pauli-image signs or global phase.

Review series

This is the first of two dependent PRs for Clifford transvection decomposition and is independent of the phased outcome-complete simulation PRs. Review and merge this PR before the strict-minimum decomposition follow-up.

Marcus P S (marcusps) and others added 4 commits June 14, 2026 04:21
Implement a linear-size decomposition of a Clifford into Clifford
transvections (pi/4 Pauli exponents) reproducing its symplectic
(conjugation) action, plus the centralizer generators (the paper's
headline application), in the paulimer crate.

- paulimer::clifford::clifford_to_transvections: greedy O'Meara-style
  reduction producing O(n) factors that reproduce the symplectic action
  (signs and global phase are not tracked; contrast the sign-exact,
  O(n^2) clifford_to_pauli_exponents). Not guaranteed strictly minimal;
  exact r/r+1 minimality via congruence triangulation is a follow-up.
- paulimer::clifford::clifford_centralizer: generators of Paulis fixed up
  to sign under conjugation (kernel of the residue map over GF(2), via
  binar).
- Python bindings CliffordUnitary.to_transvections() / .centralizer()
  with .pyi stubs.
- Extensive Rust (unit + proptest) and Python (hypothesis) tests:
  symplectic round trip, linear factor bound, no-shorter-than-minimum,
  and centralizer conjugation-fixedness.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Marcus P S (marcusps) and others added 3 commits July 18, 2026 15:15
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Apply the conventions established while addressing @jmbr's review on the
phased-outcome / decomposition stack (PRs microsoft#115/microsoft#116) to the transvection
decomposition, anticipating the same feedback here:

- Replace the seed + internal-RNG proptests (`seed in any::<u64>()` feeding
  `CliffordUnitary::random`) with a `Gate`-sequence `Strategy`, mirroring
  phased_clifford_dense.rs and measure_with_hint_sign_test.rs, so a failing
  input shrinks to a minimal gate sequence instead of an opaque seed. The
  deterministic sweep (which needs no shrinking) keeps using a seeded RNG.
- Derive `qubit_count` inside `next_transvection` from `working.num_qubits()`
  instead of threading it as a parameter, matching the earlier "derive qubit
  count" tidy on the Gaussian-elimination decomposition.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 16f923fe-a72a-4430-97b0-b7677f48dfb7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant