Noise Models ​
Kettle's quantum simulator includes realistic noise modeling based on actual qubit physics. This guide explains how to configure and use different noise models.
Quick Start ​
-- Use a transmon (superconducting) qubit model
fn main() -> Unit using quantum_simulator(qubit_type = "transmon"), file_io
q = qubit()
q <- hadamard
result = measure(q)
print(result)
end fnAvailable Qubit Types ​
| Type | T1 | T2 | Gate Speed | Best For |
|---|---|---|---|---|
ideal | Infinite | Infinite | Instant | Algorithm development, debugging |
transmon | 150us | 100us | 25ns/300ns | IBM-like superconducting qubits |
trapped_ion | Infinite | 1s | 10us/200us | IonQ-like trapped ion systems |
cat | 100us | 50us | 50ns | Biased noise (error correction research) |
Physics Background ​
Decoherence Times ​
Quantum states are fragile. They lose information through two main processes:
T1 (Longitudinal Relaxation) - Energy decay
- The qubit spontaneously decays from |1> to |0>
- Caused by energy exchange with the environment
- Like a ball rolling down a hill to its lowest energy state
T2 (Transverse Relaxation) - Phase coherence loss
- The qubit loses its phase information
- Superposition states (a|0> + b|1>) "forget" the relative phase between a and b
- Combines T1 effects and pure dephasing (T_phi)
T_phi (Pure Dephasing) - Phase randomization without energy loss
- Phase scrambling that doesn't involve energy exchange
- Relationship: 1/T2 = 1/(2*T1) + 1/T_phi
The T2 <= 2*T1 Constraint ​
This is a fundamental law of quantum mechanics, not a hardware limitation:
- T2 cannot exceed 2*T1 because amplitude damping (T1) contributes to dephasing
- When T2 = 2*T1, there is no pure dephasing (the system is "T1-limited")
- When T2 < 2*T1, pure dephasing adds to the T1 contribution
Kettle validates this constraint and rejects unphysical configurations:
-- This will cause an error: T2 > 2*T1
fn main() -> Unit using quantum_simulator(qubit_type = "transmon", t1 = 100.0, t2 = 250.0), file_io
-- Error: Unphysical coherence times
end fnDecoherence vs Gate Infidelity ​
These are separate error sources:
Decoherence (T1/T2 effects)
- Happens during gate execution time
- Longer gates = more decoherence
- Doesn't depend on which gate you apply
Gate Infidelity
- Errors in the gate operation itself
- Control imperfections, calibration errors
- Depends on the specific gate
For example, a transmon CX gate has:
- ~300ns execution time -> decoherence during that time
- ~99.5% fidelity -> 0.5% chance of depolarizing error
Qubit Type Details ​
Ideal (Default) ​
fn main() -> Unit using quantum_simulator, file_io -- or qubit_type = "ideal"
q = qubit()
q <- hadamard
print(measure(q))
end fn- No noise at all
- Use for algorithm development and debugging
- Results are deterministic (given the same random seed)
Transmon (Superconducting) ​
fn main() -> Unit using quantum_simulator(qubit_type = "transmon"), file_io
q = qubit()
q <- hadamard
print(measure(q))
end fn- Based on IBM/Google superconducting qubit specifications
- Fast single-qubit gates (25ns), moderate two-qubit gates (300ns)
- T1 = 150us, T2 = 100us
- Good for: Most algorithms, near-term quantum computing
Trapped Ion ​
fn main() -> Unit using quantum_simulator(qubit_type = "trapped_ion"), file_io
q = qubit()
q <- hadamard
print(measure(q))
end fn- Based on IonQ/Quantinuum specifications
- Infinite T1 (hyperfine qubits don't spontaneously decay)
- Very long T2 (~1 second)
- Slow gates: single-qubit 10us, two-qubit 200us
- Highest gate fidelities (99.99% single, 99.8% two-qubit)
- Good for: Deep circuits, high-precision algorithms
Cat Qubit ​
fn main() -> Unit using quantum_simulator(qubit_type = "cat"), file_io
q = qubit()
q <- hadamard
print(measure(q))
end fn- Bosonic encoding in coherent states |+a> and |-a>
- Biased noise: Phase errors >> bit flip errors
- For n=4 photons: Z errors are ~3000x more likely than X errors
- Good for: Error correction research, bias-preserving operations
Custom Parameters ​
Override default values for any qubit type:
-- Use transmon but with custom coherence times
fn main() -> Unit using quantum_simulator(qubit_type = "transmon", t1 = 200.0, t2 = 150.0), file_io
-- t1 and t2 are in microseconds
q = qubit()
q <- hadamard
print(measure(q))
end fnStochastic Simulation ​
Kettle uses quantum trajectory simulation (stochastic unraveling):
- Each shot randomly samples error events
- Results are ensemble averages over many shots
- This is accurate for shot-based results and fidelity estimates
Limitations:
- Cannot compute exact density matrix elements
- Entanglement measures requiring the full density matrix are not available
- For these, density matrix simulation would be needed (much more expensive)
Tips ​
- Start with ideal, then add noise once your algorithm works
- Trapped ions are better for deep circuits despite slower gates
- Transmons are better for shallow, wide circuits
- Cat qubits are specialized - use only if studying biased noise codes
- Check T2: If your circuit time > T2, expect significant dephasing