Controlled RX Gate (CRX)
The Controlled RX gate is a two-qubit gate that applies an RX rotation to a target qubit only when the control qubit is in the |1⟩ state. It performs conditional rotations around the X-axis of the Bloch sphere, making it essential for quantum algorithms requiring X-axis conditional control.
Mathematical Definition
The CRX gate with rotation angle θ is defined by the 4×4 matrix:
This can be understood as:
Action on Basis States
- \(\text{CRX}(\theta)|00\rangle = |00\rangle\) (no change)
- \(\text{CRX}(\theta)|01\rangle = |01\rangle\) (no change)
- \(\text{CRX}(\theta)|10\rangle = \cos(\theta/2)|10\rangle - i\sin(\theta/2)|11\rangle\)
- \(\text{CRX}(\theta)|11\rangle = -i\sin(\theta/2)|10\rangle + \cos(\theta/2)|11\rangle\)
Quantum Circuit Representation
The control qubit (●) determines whether the X-rotation is applied to the target qubit.
Usage in Quantum Simulator
from quantum_simulator import QuantumSimulator, QuantumCircuit
from quantum_simulator.gates import H_GATE, X_GATE, controlled_RX
import numpy as np
# Create a CRX gate with specific angle
theta = np.pi/3 # 60-degree rotation
crx_gate = controlled_RX(theta)
# Apply to qubits
sim = QuantumSimulator(2)
circuit = QuantumCircuit(2)
# Create superposition on control qubit
circuit.add_gate(H_GATE, [0]) # Control in (|0⟩ + |1⟩)/√2
# Apply controlled X-rotation
circuit.add_gate(crx_gate, [0, 1])
circuit.execute(sim)
print(f"State after H and CRX: {sim.get_state_vector()}")
# Test conditional behavior
def test_conditional_behavior():
# Control = |0⟩: no rotation applied
sim1 = QuantumSimulator(2)
circuit1 = QuantumCircuit(2)
circuit1.add_gate(H_GATE, [1]) # Target in superposition
circuit1.add_gate(crx_gate, [0, 1]) # No effect since control = |0⟩
circuit1.execute(sim1)
print("Control |0⟩:", sim1.get_state_vector())
# Control = |1⟩: rotation applied
sim2 = QuantumSimulator(2)
circuit2 = QuantumCircuit(2)
circuit2.add_gate(X_GATE, [0]) # Control = |1⟩
circuit2.add_gate(H_GATE, [1]) # Target in superposition
circuit2.add_gate(crx_gate, [0, 1]) # Rotation applied
circuit2.execute(sim2)
print("Control |1⟩:", sim2.get_state_vector())
test_conditional_behavior()
Special Angles and Cases
Common Rotation Angles
import numpy as np
from quantum_simulator.gates import controlled_RX
# π/2 rotation (quarter turn around X-axis)
crx_pi_2 = controlled_RX(np.pi/2)
# π rotation (half turn, equivalent to controlled X gate)
crx_pi = controlled_RX(np.pi)
# π/4 rotation (eighth turn)
crx_pi_4 = controlled_RX(np.pi/4)
# Custom angle
crx_custom = controlled_RX(2*np.pi/3)
Relationship to Controlled-X (CNOT)
The CRX(π) gate is equivalent to a CNOT gate up to basis rotations:
# CRX(π) applies X rotation when control is |1⟩
# This is similar to CNOT but with phase factors
crx_pi = controlled_RX(np.pi)
# For comparison with CNOT behavior
from quantum_simulator.gates import CNOT_GATE
Applications
- Quantum Error Correction: Conditional bit-flip corrections
- Variational Quantum Algorithms: Parameterized entangling operations
- Quantum Machine Learning: Feature-dependent X-rotations
- Quantum Control: Implementing conditional bit operations
- State Preparation: Creating complex entangled states
- Quantum Simulation: Modeling conditional interactions
Geometric Interpretation
On the Bloch sphere, the CRX gate: - Leaves the target qubit unchanged when control is |0⟩ - Rotates the target qubit around the X-axis when control is |1⟩ - Creates entanglement between control and target qubits - Particularly useful for creating states in the YZ plane of the target
Properties
- Unitary: \(\text{CRX}(\theta)^\dagger \text{CRX}(\theta) = I\)
- Controlled Unitary: Generalizes single-qubit RX to controlled operation
- Reversible: \(\text{CRX}(\theta)^{-1} = \text{CRX}(-\theta)\)
- Hermitian for θ = π: \(\text{CRX}(\pi)^\dagger = \text{CRX}(\pi)\)
- Commutes with Z operations on control: Compatible with control qubit Z-basis operations
Decomposition
CRX can be decomposed using CNOT and single-qubit rotations:
Alternatively, using Hadamard gates to change basis:
Quantum Algorithm Applications
Conditional State Preparation
def conditional_state_prep(angle1, angle2):
"""Create states based on control qubit value."""
sim = QuantumSimulator(2)
circuit = QuantumCircuit(2)
# Create superposition on control
circuit.add_gate(H_GATE, [0])
# Different X-rotations based on control
circuit.add_gate(controlled_RX(angle1), [0, 1])
return sim, circuit
# Usage in quantum algorithms
sim, circuit = conditional_state_prep(np.pi/3, np.pi/6)
circuit.execute(sim)
Quantum Feature Maps
def feature_map_crx(features):
"""Encode classical features using CRX gates."""
n_qubits = len(features)
sim = QuantumSimulator(n_qubits)
circuit = QuantumCircuit(n_qubits)
# Initialize superposition
for i in range(n_qubits):
circuit.add_gate(H_GATE, [i])
# Apply feature-dependent rotations
for i in range(n_qubits-1):
crx = controlled_RX(features[i] * np.pi)
circuit.add_gate(crx, [i, i+1])
return sim, circuit
Relationship to Other Gates
- CNOT: \(\text{CNOT} \approx H_1 \cdot \text{CRX}(\pi) \cdot H_1\) (up to phases)
- CRY, CRZ: Other controlled rotations around different axes
- Controlled-Phase: Related through basis transformations
- Toffoli: CRX can be part of multi-controlled constructions
Circuit Symbol Variations
Phase Considerations
Unlike CRY and CRZ, the CRX gate introduces complex phase factors (involving i) in its matrix elements. This makes it particularly useful for:
- Creating states with specific phase relationships
- Implementing quantum interferometry protocols
- Building quantum circuits sensitive to X-axis rotations
The CRX gate provides essential X-axis conditional control, completing the set of controlled rotation gates and enabling comprehensive quantum state manipulation across all Bloch sphere axes.