• Algorithms
  • Also: JW transformation
  • Also: Jordan-Wigner mapping

Jordan-Wigner Transformation

The Jordan-Wigner transformation maps fermionic creation and annihilation operators to qubit Pauli operators, enabling quantum computers to simulate fermionic systems such as molecular electronic structure.

The Jordan-Wigner (JW) transformation is a mathematical mapping from fermionic operators to qubit (spin-1/2) operators. It was introduced by Pascual Jordan and Eugene Wigner in 1928 in the context of one-dimensional quantum spin chains, and has become one of the most important tools in quantum computing for chemistry and materials simulation.

The Problem It Solves

Quantum computers operate on qubits, which satisfy Pauli algebra. Electrons and other fermions satisfy a different algebra: fermionic anticommutation relations, which encode the Pauli exclusion principle. To simulate a fermionic system on a quantum computer, you need a way to faithfully represent fermionic operators using qubit operators. The Jordan-Wigner transformation provides exactly this.

The Mapping

In the Jordan-Wigner transformation, each fermionic orbital jj is associated with one qubit. The fermionic creation operator aja^\dagger_j and annihilation operator aja_j are mapped to:

aj    (Z0Z1Zj1)12(XjiYj)aj    (Z0Z1Zj1)12(Xj+iYj)\begin{aligned} a^\dagger_j &\;\longmapsto\; (Z_0 \otimes Z_1 \otimes \cdots \otimes Z_{j-1}) \otimes \tfrac{1}{2}(X_j - iY_j) \\ a_j &\;\longmapsto\; (Z_0 \otimes Z_1 \otimes \cdots \otimes Z_{j-1}) \otimes \tfrac{1}{2}(X_j + iY_j) \end{aligned}

The key feature is the “Jordan-Wigner string”: a product of Pauli ZZ operators on all qubits 0 through j1j-1. This string encodes the ordering of orbitals and ensures that the mapped operators satisfy the fermionic anticommutation relations:

{ai,aj}=δij,{ai,aj}=0\{a_i, a^\dagger_j\} = \delta_{ij}, \qquad \{a_i, a_j\} = 0

The occupation number operator nj=ajajn_j = a^\dagger_j a_j maps to (IZj)/2(I - Z_j)/2, which is the projector onto the 1|1\rangle state of qubit jj. The 0|0\rangle qubit state corresponds to an unoccupied orbital and 1|1\rangle to an occupied orbital.

Effect on the Hamiltonian

Applying the Jordan-Wigner transformation to the second-quantized molecular Hamiltonian converts it into a weighted sum of Pauli strings. For a molecule with MM orbitals, the resulting qubit Hamiltonian has MM qubits and O(M4)O(M^4) Pauli terms. Each Pauli term is a tensor product of Pauli I,X,Y,ZI, X, Y, Z operators on subsets of qubits.

This Pauli string representation is exactly what is needed for VQE: each term can be measured independently on quantum hardware by rotating to the appropriate basis before measurement.

The Jordan-Wigner String Overhead

The main disadvantage of the Jordan-Wigner transformation is that operators for orbital jj require a string of jj Pauli ZZ gates. In a circuit implementation, each ZZ in the string adds depth. For orbitals near the end of a long chain, this can require O(M)O(M) gates per fermionic operator, leading to O(M5)O(M^5) circuit depth for a full molecular simulation (compared to O(M4)O(M^4) Pauli terms).

This overhead motivates alternative fermion-to-qubit mappings.

Alternative Mappings

The Bravyi-Kitaev (BK) transformation reorders the qubit register to achieve O(logM)O(\log M) gate overhead per fermionic operator, reducing the circuit depth from O(M5)O(M^5) to O(M4logM)O(M^4 \log M). It is more complex to construct but more circuit-efficient for large systems.

The parity basis and superfast encoding are other mappings with different qubit-count and gate-overhead tradeoffs, suited to specific Hamiltonian structures or hardware connectivity.

The choice of fermion-to-qubit mapping is an important practical decision in quantum chemistry simulation and is supported by libraries like OpenFermion, PySCF interface tools, and the quantum chemistry modules in PennyLane and Qiskit Nature.

Practical Example

In PennyLane, the Jordan-Wigner transformation is applied automatically when building a molecular Hamiltonian:

import pennylane as qml
from pennylane import qchem

symbols = ["H", "H"]
coordinates = [[0.0, 0.0, 0.0], [0.0, 0.0, 1.4]]

# This applies Jordan-Wigner internally
H, n_qubits = qchem.molecular_hamiltonian(
    symbols, coordinates, mapping="jordan_wigner"
)
print(f"Number of qubits: {n_qubits}")
print(f"Number of Pauli terms: {len(H.ops)}")

The output Hamiltonian is a linear combination of Pauli operators ready for use in VQE or other quantum algorithms.