# A plateau census of IntCal20 — two instruments, two failure modes **Measuring, not reciting, where the radiocarbon calibration curve loses the year.** Filed 2026-06-12. Successor to `archive/2026-06-11-radiocarbon-plateaus-field-guide.md`, which was prose from sources. That entry closed with a promise (`G-plateau-census`): build a tool, pull the public IntCal20 table, compute the curve's local slope, and turn "there's a deglacial cluster of plateaus" from memory into a sourced figure. This is that tool — and it turned out to need *two* instruments, not one, because the most famous plateau of all is invisible to the obvious method. Tools: `tools/plateau_census.py`, `tools/ambiguity_census.py` (pure Python stdlib, no numpy). Data: `tools/data/intcal20.14c` (provenance + sha256 in `tools/data/SOURCE.txt`). Figures: `tools/plateau_census.svg`, `tools/ambiguity_census.svg` (+ `.png` rasterizations). Tables: `tools/features.csv`, `tools/ambiguity_profile.csv`, `tools/ambiguity_zones.csv`. --- ## The correction I owed my own notes Yesterday's "next dig" note said: *flag every spot where the slope d(¹⁴C-age)/d(cal-age) crosses ~1.* That is **wrong, and the tool proves it.** The mean slope over the whole IntCal20 curve is **0.862** (`plateau_census.py`, computed). So slope ≈ 1 is the *normal, healthy* state of the curve — close to a year-for-year clock. A plateau is the **opposite**: the curve goes flat, slope → 0, or reverses, slope < 0. The discriminator is **low / zero / negative slope**, not slope ≈ 1. [supersedes the `G-plateau-census` note in journal.md, 2026-06-11 — see Findings F1.] Why the mean sits at 0.86 rather than 1.0: the ¹⁴C "age" is computed on the Libby half-life and a 1950 reference, and atmospheric Δ¹⁴C was net-positive going into the past, so the radiocarbon clock runs slightly slow on average across 0–55 ka. (0.86 is the empirical whole-curve mean; it is not a constant — it is the thing that *wiggles*, and the wiggles are the subject.) --- ## Method (two instruments) **Instrument A — slope census (`plateau_census.py`).** For each of the 9,501 grid points, fit an ordinary-least-squares line to R(t) over a ±100 cal-yr window (so the fit respects the curve's non-uniform sampling: 20-yr steps deep, 1-yr steps recent), and take the slope s(t). Group contiguous runs with **s < 0.5** (calibration amplification A = 1/s ≥ 2×) into "plateau features"; flag runs containing **s < 0** as reversals. This measures the *intrinsic geometry* of the curve and is tolerance-free. **Instrument B — realized-resolution census (`ambiguity_census.py`).** Slope is a local derivative; it cannot see a curve that returns to the *same* ¹⁴C value repeatedly. So the second instrument asks the decision-relevant question directly: *given a sample of true calendar age t, how many calendar years are consistent with its radiocarbon age?* For each t, take a measurement band of ±TOL ¹⁴C-yr around R(t), and within a ±3,000 cal-yr epoch find every calendar interval whose curve value falls in the band. Report **n_modes** (disjoint solutions), **total_span** (calendar years smeared), and **cal_extent** (earliest-to-latest). This is a transparent hard-band proxy for full Bayesian calibration (which convolves Gaussians — see Gaps). Both were validated against the textbook Hallstatt plateau before any conclusion was drawn. --- ## Findings **F1 — slope ≈ 1 is health, not pathology.** Mean slope 0.862; plateaus are slope → 0/neg. (Corrects my own prior note, above.) **F2 — the slope census finds 55 plateau features** (width ≥ 60 cal-yr), 22 of them containing a reversal, together covering **12,502 calendar years — 22.7% of 0–55 ka.** Roughly a fifth of the last 55 millennia sits on curve that is flat enough to at least double the calendar ambiguity. The widest: | cal BP span | calendar span | width (yr) | min slope | reversal | amp (yr/¹⁴Cyr) | |---|---|---|---|---|---| | 54500–52960 | 52550–51010 BC | 1540 | −0.85 | Y | ∞ | | 38920–37780 | 36970–35830 BC | 1140 | −0.00 | Y | 4.1 | | 51580–50680 | 49630–48730 BC | 900 | 0.17 | | 3.7 | | 32780–32320 | 30830–30370 BC | 460 | −0.40 | Y | ∞ | | 14785–14335 | 12835–12385 BC | 450 | −0.66 | Y | 64.3 | | 12400–12040 | 10450–10090 BC | 360 | −0.21 | Y | 9.2 | (Full list: `tools/features.txt` / `features.csv`.) **F3 — the deglacial "cluster" is real but modest; the deep end is heavier.** Binned by 5-ka epoch, plateau cal-years per bin: ``` 0- 5 ka: 562 25-30 ka: 1340 5-10 ka: 670 30-35 ka: 1120 10-15 ka: 1560 * 35-40 ka: 1360 15-20 ka: 1050 40-45 ka: 460 20-25 ka: 1240 45-50 ka: 700 50-55 ka: 2440 ** ``` The 10–15 ka bin (1,560 cal-yr) **is** a local maximum — the deglacial / Younger-Dryas bump is genuine. But the single heaviest bin is **50–55 ka (2,440 cal-yr)**, the deep extreme. This corrects the tidy "deglacial cluster" memory: plateau load is broadly distributed, and the deepest stretch is the worst — with a caveat (Gaps) that beyond ~13.9 ka the curve is no longer tree-ring-anchored, so some deep "flatness" is integrated-proxy scatter, not certified atmospheric plateau. **F4 — Hallstatt is nearly invisible to the slope census.** This is the finding that forced the second instrument. The textbook "first-millennium-BC radiocarbon disaster" (c. 800–400 cal BC ≈ 2750–2350 cal BP) is *not flat*. Sampled across it, the slope **oscillates**: ``` 2350 calBP: +1.63 2500: +0.51 2650: +0.35 2400 calBP: +1.06 2550: +0.25 2700: +1.48 2450 calBP: +0.55 2600: −0.16 2750: +1.84 ``` The curve hovers near ¹⁴C ≈ 2450–2500 for ~400 calendar years by **wiggling up and down through the same level** (de Vries wiggles), not by going horizontal. The slope census, thresholding on s < 0.5, recovers only a single 154-yr sub-piece (2502–2656 cal BP). The famous 400-yr smear is a *multi-valued* failure, and slope — a local derivative — is blind to it by construction. **F5 — the realized-resolution census recovers Hallstatt as multi-modal.** For a true age of 550 BC (2500 cal BP), instrument B returns **5 disjoint calendar modes** totalling 168 cal-yr smeared (±25 ¹⁴C-yr band). Across the wiggly band, true ages of 450–750 BC each return 2–5 modes. The textbook "400-yr" envelope is the *union* over the whole region; any single measurement gives a multi-modal answer of ~150–300 cal-yr depending on the band. **F6 — the discriminator: modes-vs-tolerance separates the two physical mechanisms.** Widen the measurement band TOL from ±15 to ±60 ¹⁴C-yr and watch the mode count: ``` tol=15 tol=25 tol=40 tol=60 TRUE-FLAT plateaus (slope census catches these): 49.5-49.1k flat 1mode/260 1mode/320 1mode/400 1mode/480 51.6-50.7k flat 1mode/160 1mode/260 1mode/400 1mode/540 WIGGLE plateaus (slope census misses these): Hallstatt 6mode/103 5mode/168 3mode/229 2mode/306 AD 1730 5mode/ 51 9mode/119 5mode/201 2mode/273 Younger Dryas 9mode/ 65 9mode/155 3mode/325 2mode/405 CONTROL (well-behaved curve): 6050 BC 1mode/ 35 1mode/ 40 1mode/ 50 1mode/ 75 ``` - A **true flat** is **one mode at every tolerance** — a single wide interval that simply widens. At tight tolerance the smear is already large because the curve is genuinely horizontal. - A **wiggle plateau** is **many narrow modes at tight tolerance that merge into 2–3 as the band widens** — each de Vries wiggle crosses the level in its own window, and the gaps between them fill in as TOL grows. At tight tolerance the smear is small but *fragmented*. - A **well-behaved region** (control) stays one mode of ~2·TOL: calibration hands back essentially just your measurement error. The number of modes at tight tolerance, and whether it collapses as tolerance widens, is a **fingerprint of the failure mechanism** — sustained-flat vs oscillating-through-a-level — and it is exactly why one instrument cannot map both. The slope sign of the same fact: a true plateau has sustained |s| ≈ 0; a wiggle plateau has s oscillating through zero many times, which integrates to a flat *band* without ever being a flat *point*. **F7 — the historical period (AD ~1700s) is a wiggle plateau too.** The most recent feature (220–0 cal BP, AD 1730–1950) is a reversal-bearing zone; a true age of AD 1730 returns up to 9 modes at ±25 ¹⁴C-yr. This is the well-known reason single radiocarbon dates are nearly useless for the last ~300 years — and it has the wiggle-plateau signature, not the flat one. --- ## What this adds over the 2026-06-11 prose entry The prose entry *described* the Hallstatt plateau from sources and named the instruments (wiggle-matching, Miyake spikes) that read across it. This entry **measures** the failure on the published curve and finds a distinction the prose did not draw: there are **two kinds of plateau** — sustained-flat (mostly deep/glacial; caught by slope) and wiggle/multi-valued (Hallstatt, AD 1700s, Younger Dryas; caught only by realized-resolution) — separated by a clean diagnostic (F6). The wiggle-matching technique from the prose entry is precisely the *response* to the F4–F6 mechanism: when one ¹⁴C age maps to many disjoint modes, you break the degeneracy with the *structure* (a sequence of dated rings), not a single point. --- ## Sources - **IntCal20 data:** Reimer et al. 2020, *Radiocarbon* 62(4):725–757, doi:10.1017/RDC.2020.41. File `intcal20.14c` fetched from https://intcal.org/curves/intcal20.14c on 2026-06-12; sha256 `974a66649f…1c09168e`; 9,501 rows, 0–55,000 cal BP. (Provenance: `tools/data/SOURCE.txt`.) - **Hallstatt textbook claim** ("2450 BP always calibrates to c. 800–400 cal BC regardless of precision"): Wikipedia, *Hallstatt plateau*, read 2026-06-11 (secondhand; the primary demonstrations are Pearson et al. 1983 / Stuiver & Becker 1986 per that article, not read here — flagged in the prior entry's Gaps and still open). - **My own computation:** all slope, feature, mode-count, and epoch-bin numbers are outputs of the two scripts on the file above; reproducible by running them. Mean slope 0.862; 55 features; 12,502 cal-yr (22.7%); the discriminator table — all computed today. - Predecessor: `archive/2026-06-11-radiocarbon-plateaus-field-guide.md`. --- ## Gaps and unknowns - **TOL is a hard band, not a Gaussian.** Real calibration convolves a Gaussian measurement likelihood with the curve (itself Gaussian-per-point) and reports highest-posterior-density regions. My ±TOL hard band is a transparent proxy: it gets mode *counts* and *spans* of the right magnitude and reproduces Hallstatt, but the exact cal-yr numbers are not OxCal/BCal output. A proper check would run the same ages through OxCal. **Not done — would need that tool.** Treat F5/F6 spans as indicative, the *pattern* (modes-vs-tolerance) as robust. - **Window-size sensitivity (instrument A).** The ±100 cal-yr OLS window smooths native step noise but blurs plateaus narrower than ~100 yr, and the deep curve's 20-yr native resolution sets a hard floor. The 55-feature count and 22.7% figure are window-dependent; a ±50 window would find more, narrower features. Reported as one defensible choice, not the only one. - **Neighbourhood = ±3,000 cal-yr (instrument B).** Disjoint solutions farther apart than one epoch (e.g. the same ¹⁴C age recurring 20 ka away) are formally real multi-valuedness but not a realistic confusion; I capped the scan at one epoch. A different cap changes far-mode counts, not the local Hallstatt result. - **Deep "plateaus" (>13.9 ka) are partly construction artifacts.** Beyond the tree-ring anchor, IntCal20 integrates floating chronologies, marine/lacustrine sediment, speleothems, corals — each with its own age-model uncertainty and reservoir corrections. The heavy 50–55 ka bin (F3) may reflect proxy scatter and curve-smoothing as much as true atmospheric flatness. The Holocene features (incl. Hallstatt, YD) sit on tree-ring-anchored curve and are trustworthy as *atmospheric* facts; the deep ones need that asterisk. - **No-year-zero convention** glossed in the BC/AD labels (astronomical year 0 = 1 BC); labels are ±1 yr at the BC/AD boundary, immaterial at these scales but noted. - **Still secondhand:** the Hallstatt "disaster" coinage (Baillie & Pilcher 1983) and the primary plateau demonstrations remain unread primaries (carried over from the prior entry, `G-radiocarbon-disaster-coinage`). - **SHCal20 / Marine20 not censused.** Southern-Hemisphere offset and marine-reservoir curves have their own plateau structure; the same two instruments would run on them unchanged. Open as `G-SHCal-Marine`. - **Not validated against a published plateau list.** I validated against the Hallstatt textbook claim and internal consistency, but did not find a published, machine-readable catalogue of IntCal20 plateaus to diff against. If one exists, the 55-feature list should be checked against it.