⚛️

Quantum Chemistry

VQE algorithms with uncertainty quantification for quantum computing research

Quantum Chemistry with Sounio

Sounio provides tools for quantum chemistry simulations with built-in uncertainty quantification for variational quantum algorithms.

Quantum Computing Challenges

Quantum computations are inherently probabilistic:

  • Shot noise from finite measurements
  • Gate errors and decoherence
  • Variational parameter optimization
  • Hardware calibration uncertainty

Sounio’s epistemic types naturally model these uncertainties.

Variational Quantum Eigensolver

use std::quantum::{Circuit, Hamiltonian, Qubit}
use std::epistemic::{Knowledge, measure}

fn vqe_iteration(
    hamiltonian: &Hamiltonian,
    ansatz: &Circuit,
    params: Vec<f64>,
    shots: i32
) -> Knowledge<f64> with Quantum {
    // Prepare parameterized circuit
    let circuit = ansatz.bind(params)

    // Measure expectation value with shot noise
    let measurements = (0..shots).map(|_| {
        let state = circuit.execute()
        hamiltonian.expectation(state)
    })

    // Result includes statistical uncertainty
    Knowledge {
        value: measurements.mean(),
        uncertainty: measurements.std_dev() / (shots as f64).sqrt(),
        confidence: confidence_from_shots(shots),
        provenance: vec!["vqe_measurement"],
    }
}

Confidence-Gated Optimization

fn optimize_vqe(
    hamiltonian: &Hamiltonian,
    ansatz: &Circuit,
    initial_params: Vec<f64>
) -> OptimizationResult with Quantum, IO {
    var params = initial_params
    var energy = vqe_iteration(hamiltonian, ansatz, params, 1000)

    loop {
        let gradient = estimate_gradient(hamiltonian, ansatz, params)

        // Only update if gradient is confident
        if gradient.confidence > 0.90 {
            params = params - learning_rate * gradient.value
            let new_energy = vqe_iteration(hamiltonian, ansatz, params, 1000)

            // Check convergence with uncertainty
            if (energy.value - new_energy.value).abs() < energy.uncertainty {
                return OptimizationResult {
                    energy: new_energy,
                    params: params,
                    converged: true,
                }
            }

            energy = new_energy
        } else {
            // Need more shots for reliable gradient
            perform IO::log("Increasing shots for gradient estimation")
            gradient = estimate_gradient(hamiltonian, ansatz, params, shots: 10000)
        }
    }
}

Molecular Simulation

use std::chemistry::{Molecule, basis_set}

fn compute_ground_state(
    molecule: Molecule
) -> Knowledge<Hartree> with Quantum, IO {
    // Build molecular Hamiltonian
    let hamiltonian = molecule.hamiltonian(basis_set::STO3G)

    // Map to qubit representation
    let qubit_hamiltonian = jordan_wigner(hamiltonian)

    // Hardware-efficient ansatz
    let ansatz = hardware_efficient_ansatz(
        n_qubits: qubit_hamiltonian.n_qubits(),
        depth: 3,
    )

    // Run VQE
    let result = optimize_vqe(qubit_hamiltonian, ansatz, random_initial())

    perform IO::log(
        "Ground state energy: " + result.energy.to_string() +
        " (confidence: " + result.energy.confidence.to_string() + ")"
    )

    result.energy
}

Error Mitigation

fn mitigated_expectation(
    circuit: &Circuit,
    observable: &Observable,
    calibration: &NoiseCalibration
) -> Knowledge<f64> with Quantum {
    // Zero-noise extrapolation
    let noise_levels = vec![1.0, 1.5, 2.0]
    var results = vec![]

    for scale in noise_levels {
        let scaled_circuit = scale_noise(circuit, scale)
        let result = measure_expectation(scaled_circuit, observable)
        results.push((scale, result))
    }

    // Extrapolate to zero noise
    let mitigated = richardson_extrapolation(results)

    // Combine measurement and extrapolation uncertainty
    Knowledge {
        value: mitigated.value,
        uncertainty: (
            mitigated.measurement_uncertainty.pow(2) +
            mitigated.extrapolation_uncertainty.pow(2)
        ).sqrt(),
        confidence: mitigated.confidence,
        provenance: vec!["zne_mitigated"],
    }
}

Features for Quantum Chemistry

  • Shot noise modeling: Automatic uncertainty from finite samples
  • Gate error tracking: Propagate hardware imperfections
  • Optimizer integration: Confidence-aware parameter updates
  • Error mitigation: Built-in ZNE and other techniques
  • Backend agnostic: Works with simulators and real hardware

Supported Platforms

  • IBM Qiskit integration
  • Google Cirq support
  • Amazon Braket compatibility
  • Local simulators

Get Started

sounio new quantum-project --template quantum-chemistry
cd quantum-project
sounio run examples/h2_vqe.sio