Home
Your inverse solver returned a parameter. Twindex proves whether the data could have determined it.

Live demo: could anyone have known R₀ in 1978? Real outbreak
data, certified twins, and a "check this proof" button that runs the exact
checker in your browser.
Does your PINN have a twin? Train a small PINN, then let Twindex prove that a very different parameter fits the same data. Runs in seconds.
Twindex produces exact, replayable proofs that noisy measurements cannot tell two parameter sets apart, for ODE models and for PDEs in one and two dimensions and in time.
It searches for twins: two different parameter vectors whose true solutions both fit the same noisy data. Each finding is written as a certificate that a small exact checker replays using only the Python standard library and rational arithmetic. A VALID pair certificate proves that no estimator (least squares, Bayesian inference, a physics-informed neural network, anything) can recover the parameter from those data with worst-case error below half the certified gap.
$ pip install twindex
$ twindex example theta500_pair > pair.json
$ twindex check pair.json
pair.json: VALID: both witnesses are data-compatible; D_Q(y) >= 1000, so every estimator of theta_0 has worst-case error >= 500 on these data
What it covers¶
| problem | example applications | evidence |
|---|---|---|
| polynomial ODE systems | epidemics (SIR/SEIR), pharmacokinetics, chemical kinetics, ecology, neuron models | exact certificates (ODE systems) |
| 1-D boundary value problems | coefficient inverse problems, sensor design | exact certificates, including two-sided bounds |
| 2-D elliptic, heat equation | steady and time-dependent diffusion–reaction | exact certificates (2-D, heat) |
| any Python simulator | FEM, finite differences, surrogates | numerical audit, labelled as such (any model) |
Early-epidemic data cannot determine R₀. From eight infection counts with noise \(10^{-3}\), Twindex proves that SIR parameters with \(R_0 = 2.5\) and \(R_0 \approx 1.72\) both fit every measurement.

Why trust it?¶
- No floating point in the checker. Every number is an exact
Fraction; floats are rejected at every entry point, including JSON decoding. - A small trusted core. About 4,400 lines of standard-library Python. The solver and search may use floats freely, because they only propose certificates.
- Every step is proved. Barrier theorems (PDEs) and a tube theorem (ODEs) turn a rigorously bounded residual into a pointwise error bound on the true solution, with no convergence assumptions. See Theory.
- Three honest verdicts. VALID (proved), INVALID (malformed or disproved), INCONCLUSIVE (not decided). A failed sufficient condition is never reported as a disproof.
Where to go next¶
- Getting started: install, check certificates, run a search.
- Tutorial: certify your own twins in five minutes.
- ODE systems: your ODE model and data in one command.
- Evidence reports: shareable Markdown and figures.
- Audit your data: your measurements, your model, a certified answer.
- Examples: the bundled certificates and what each one proves.
- Theory: complete proofs.
- Certificate format and design: the JSON schema and verdict rules.
- API reference.