A quantum simulator is a classical program that models a quantum program or system without requiring access to quantum hardware. It can sit at different layers of the quantum software stack: running a complete small program, modeling device noise, or supporting validation of error-correction software. section 1.3.3
Simulation is especially useful during testing. Hardware measurement cannot reveal a complete quantum state, but a simulator stores that state as classical data and can expose it while a small program runs. Ideal simulations are usually noiseless, so they show the intended state rather than hardware-distorted results. section 1.3.4 section 2.2
Use a simulator to:
- Validate behavior on small problem instances by inspecting intermediate state that cannot be fully observed on hardware. section 1.3.4
- Check quantum-memory safety in Q#: releasing a qubit outside the |0⟩ state produces a runtime exception. section 2.1.3
- Inspect a unitary operation by obtaining its matrix representation instead of reconstructing it from output states. section 3.2
- Compare implementations and estimate whether qubit count, gate count, and noise constraints permit eventual hardware execution. section 1.3.4
Inspecting a prepared Q# state
After applying Ry(theta, q) with amplitudes 0.6 and 0.8, call DumpMachine before Reset. The simulator prints the nonzero basis states, complex amplitudes, measurement probabilities, and phases: |0⟩ has amplitude 0.6000 and probability 36%, while |1⟩ has amplitude 0.8000 and probability 64%. Q# selects a simulator or hardware target through the host program or Visual Studio Code extension rather than through an explicit instruction in the Q# operation. section 2.2.2
Full-state simulation is limited by exponential memory growth: an N-qubit state requires 2^N complex amplitudes. Regular simulators generally handle arbitrary programs below 30 qubits and may handle some near 40; sparse simulators can extend this range when only a small number of basis states have nonzero amplitudes. Reversible computations often suit sparse simulation because intermediate-result qubits need not expand the represented superposition. section 8.1 section 8.5
Figure 1.3 A quantum software stack serves as an interface between the quantum algorithms and the hardware running them. Its components mirror those of the classical software stack.
Use the software-stack diagram to place simulators between quantum algorithms, programming tools, and hardware-specific control layers. section 1.3.3
