# Three investigations — summary

Three hypotheses were developed with full mathematical and computational treatment. All three are *model computations*: no physical experiment was performed, no apparatus was built, and no measured data are reported as new. Where a result is an identity or a property of the analysis rather than a claim about nature, it is labelled as such in the writeups below and in `refined/`.

Every number quoted here is regenerated by the scripts in this directory from the stated equations, with fixed random seeds where randomness is involved.

| | Investigation | Type | Key result | Script |
|---|---|---|---|---|
| I1 | Finite-window decay exponents | mathematical + Monte Carlo | α_fit = α·⟨logistic⟩; exact factor 2 at the crossover; offset recoverable from curvature | `I1_offset_window_bias.py` |
| I2 | Spot-size bias in in-plane thermal conductivity | analytic + numerical | κ_app/κ = 1/[e^λE₁(λ)]; κ_app → Gs²/(2d) independent of the material | `I2_boundary_bias.py` |
| I3 | Kramers–Kronig blindness to amplitude | harmonic balance + Bessel identity | R_ct falls to 0.64 at 100 mV while the spectrum remains a Debye to 1e-7 | `I3_kk_blindspot.py` |

---

## I1 — The exponent you report is a property of your window

**Question.** When a decay is reported as a power law, how much of the exponent is the system and how much is the fit window?

**Model.** y(t) = At^(−α) + c, with c an unsubtracted offset. This is the most common situation in practice: a baseline that was not measured, or was measured badly.

**Exact result.** With x = ln t and B = c/A, the local log–log slope is

  s(x) = −α / (1 + B e^{αx}),

a logistic in ln t of width 1/α, centred at the crossover t_c = (A/c)^{1/α}. A straight-line fit returns the least-squares average of that logistic. In particular, a window centred on the crossover returns *exactly* α/2 — an identity, not an empirical finding.

**Numerics.** A 2D map of α_fit/α over window width R ∈ [0.5, 6] decades and window placement log₁₀(t_c/t_mid) ∈ [−4, 4] (figure `figs/i1_biasmap.png`, panel A) shows that the bias spans 0.02 to 1.6. Monte Carlo with 400 realisations per configuration at 2% noise confirms the map and shows that a three-parameter fit (ln A, α, B) recovers α with bias 1.000 ± 0.011 even where the two-parameter fit is 0.50.

**Identifiability.** The Cramér–Rao bound on α (panel B) diverges when the window lies below the crossover: if you only see the flat part, α is not determined at any precision. That is the hard limit behind the folklore that "a power law cannot be distinguished from an exponential decay".

**What is new here.** The logistic slope law is an identity. What is not obvious, and is falsifiable, is that (i) the offset is *identifiable from curvature*, so the correction is possible rather than merely a caveat; (ii) the correction is exact for windows that span the crossover; and (iii) the bias is bounded below 1% for windows well below the crossover, so the artefact cannot be invoked to explain a literature-wide discrepancy without checking where the crossover lies.

**What would refute it.** Published exponents unchanged by a free offset, with zero curvature, at the stated noise.

![I1](figs/i1_biasmap.png)

![I1b](figs/i1_logistic.png)

**Files.** `I1_offset_window_bias.py`, `data/i1_bias_maps.npz`, `data/i1_mc.csv`, `data/i1_summary.json`, `figs/i1_biasmap.png`, `figs/i1_logistic.png`.

---

## I2 — A hidden substrate conductance sets every optical measurement of in-plane thermal conductivity

**Question.** Why do reported in-plane thermal conductivities of the same 2D material vary by factors of two to three between laboratories?

**Model.** A thin sheet of thickness d and conductivity κ on a substrate with interface conductance G, heated by a Gaussian spot of 1/e² radius s with absorbed power P. Steady state:

  κd∇²T − GT = −q(r),  q(r) = (P/2πs²)e^(−r²/2s²).

A Hankel transform gives, at the beam centre,

  ΔT = (P/4πκd)·e^λE₁(λ),  λ = Gs²/(2κd).

**Exact result.** The standard analysis assumes λ → 0 and therefore reports

  κ_app = κ / [e^λE₁(λ)].

This crosses unity at λ = 1, so the bias changes sign within a typical experimental campaign (the crossover spot radius is s* = √(2κd/G) = 0.58 µm for κ = 50 W m⁻¹K⁻¹, d = 100 nm, G = 3×10⁷ W m⁻²K⁻¹).

**Validation.** The closed form agrees with direct numerical Hankel quadrature to 2×10⁻¹³ across λ from 10⁻³ to 10.

**The sharp limit.** For λ ≫ 1, κ_app → Gs²/(2d): the reported conductivity stops depending on the material and becomes a function of the substrate conductance and the beam size. Over plausible (s, G) ranges the model produces a 136-fold spread in reported κ for one true value.

**Identifiability.** A single spot size gives one number and cannot determine both κ and G (the Fisher matrix is rank-deficient; Cramér–Rao diverges). Two spot sizes in a 1:3 ratio give σ(κ)/κ = 0.037 at 1% noise; three spanning 1:10 give 0.022. More laser powers do not help.

**Testable prediction.** Reanalysed κ values from a published compilation should collapse onto a single true κ when plotted against λ computed from each study's spot radius and substrate conductance, and should scale as s² at large s. A slope of 2 on log κ_app vs log s is the falsifiable signature.

**Limits.** The model is isotropic, steady-state, optically thin, and treats the substrate as a single conductance. Anisotropy, finite substrate thickness, and the transducer boundary add unmodelled terms; the 136-fold figure is an upper bound for the stated parameter range, not a prediction for any named material.

![I2](figs/i2_bias.png)

![I2b](figs/i2_spread.png)

**Files.** `I2_boundary_bias.py`, `data/i2_R_of_lambda.csv`, `data/i2_collapse.csv`, `data/i2_summary.json`, `figs/i2_bias.png`, `figs/i2_spread.png`.

---

## I3 — A Kramers–Kronig-consistent spectrum is not evidence of linearity

**Question.** Impedance spectra are screened with a Kramers–Kronig residual and accepted when it is small. Does passing that test mean the spectrum is linear?

**Model.** A Butler–Volmer interface with transfer coefficients α_a = α_c = 0.5, exchange current i₀ = 1 µA, double-layer capacitance 20 µF, series resistance 10 Ω. Drive V = V_dc + A sin ωt and solve the *full* harmonic balance: η(t) is expanded in 10 harmonics, the current is the exact Fourier transform of the memoryless Butler–Volmer law plus a linear capacitive term, and the series impedance acts harmonic by harmonic. No describing-function approximation and no time stepping.

**Exact identity.** For R_s = 0 the describing function is *exactly* Z₁(ω) = 1/(G_nl(A) + jωC_dl) — a Debye element — with G_nl(A) = (2i₀/b)·2I₁(A/b)/(A/b). A Debye satisfies Kramers–Kronig identically. The finite-amplitude spectrum is therefore KK-consistent by construction. Harmonic balance reproduces the Bessel identity to 10⁻¹⁷.

**The falsifiable part.** The numeric experiment shows the measured spectrum at 100 mV deviates from a perfect Debye by 9.6×10⁻⁸ relative — i.e. it is KK-consistent to eight digits — while the fitted charge-transfer resistance has fallen to 0.644 of its low-amplitude value. The classical Lin–KK residual does not track the bias at all (0.170 at 2 mV, 0.048 at 100 mV): it moves the wrong way.

**Quantitative.** R_ct/R_ct,true = 1.000 (2 mV), 0.996 (10 mV), 0.891 (50 mV), 0.644 (100 mV) for b = 51.4 mV. The third-harmonic ratio I₃/I₁ measures x = A/b to 0.2% at low frequency and converts directly into the correction. An amplitude-extrapolation protocol (four amplitudes, 0.5% noise) recovers the low-amplitude Re(Z₁) as 25 706 ± 79 against a true 25 701.

**Refutation.** R_ct amplitude-independent to 1% across 2–100 mV on a known Butler–Volmer system; or an I₃/I₁ that does not track the bias.

**Limits.** The mapping assumes a symmetric barrier and no mass transport. With α_a ≠ α_c a DC bias generates a second harmonic the symmetric model does not predict; with a Warburg element the harmonic current is loaded differently and the naive correction will over- or under-shoot. These are stated as open, not solved.

![I3](figs/i3_kk.png)

**Files.** `I3_kk_blindspot.py`, `data/i3_summary.json`, `figs/i3_kk.png`.

---

## Reproducing all three

```bash
cd blindspot-2026-11-01
export MPLCONFIGDIR=$PWD/../.mplconfig
../.venv-research/bin/python investigations/I1_offset_window_bias.py
../.venv-research/bin/python investigations/I2_boundary_bias.py
../.venv-research/bin/python investigations/I3_kk_blindspot.py
../.venv-research/bin/python investigations/R1_refinement_numbers.py
```

Dependencies: Python 3.14, numpy, scipy, matplotlib. No network access is required. The Monte Carlo seeds are fixed in the scripts (`20261101`, `7`, `11`), so the quoted means and standard deviations reproduce exactly.
