E020: Compare pi(x) to li(x) numerically

Preview figure for E020
Preview figure for E020

Tags: number-theory, quantitative-exploration, visualization See: Valid Tags.

Highlights

  • This is a thin wrapper that follows the standard experiment template and delegates the actual computation to :mod:mathxlab.experiments.prime_suite.

  • Writes reproducible artifacts (params.json, report.md, and figures).

  • Designed to surface patterns and “looks-true-until-it-breaks” behavior.

Goal

This is a thin wrapper that follows the standard experiment template and delegates the actual computation to :mod:mathxlab.experiments.prime_suite.

Background (quick refresher)

Research question

Which prime-related claim, heuristic, or algorithm breaks first under a clean, controlled computational sweep, and what does the smallest or clearest counterexample (or deviation) look like?

Why this qualifies as a mathematical experiment

  • Finite procedure: run a bounded search / sweep with recorded parameters.

  • Observable(s): counts, gaps, residues, runtime scaling, or first counterexample witnesses.

  • Parameter space: vary bounds (and sometimes algorithmic choices).

  • Outcome: plots/tables + “witness objects” for failures.

  • Reproducibility: outputs saved to out/e020/ with a parameter snapshot.

Experiment design

  • Computation: bounded enumeration / sampling with explicit limits.

  • Outputs: figures and a short report.md summarizing what was found.

  • Artifacts written:

  • figures/fig_*.png

  • params.json

  • report.md

How to run

make run EXP=e020

or:

uv run python -m mathxlab.experiments.e020

Notes / pitfalls

  • “No counterexample found” only means “none found within the configured bounds”.

  • For probabilistic tests (when used), treat outcomes as evidence, not proof.

Extensions

  • Increase bounds and rerun (recording runtime and memory).

  • Compare alternative heuristics or algorithms on the same parameter grid.

  • Turn found deviations into new, tighter conjectures.

Published run snapshot

If this experiment is included in the docs gallery, include the published snapshot (report + params).

Reproduce:

make run EXP=e020

Parameters

  • n_max: 3000000

  • step: 2000

Notes

  • li(x) is defined by an integral of 1/log t and often tracks \(\pi(x)\) more closely than \(x/\log(x)\).

  • Here we use a coarse trapezoidal approximation (good enough for a visual experiment).

params.json (snapshot)
{
  "n_max": 3000000,
  "step": 2000
}

References

See References.