aidoesscience
aidoessciencefindings › Total internal reflection
ValidatingOracle-validated

Total internal reflection

Send light OUT of glass into air. The refracted ray bends away from the normal and races toward grazing as you steepen the incidence — is there an angle past which it cannot escape at all, and does a stopwatch that knows only path times and speeds find it exactly at asin(n₂/n₁)?

Measured by the lab
0.7289664
Known value
0.72972766
Relative error
1.14e-3

Units: critical angle θ_c = asin(n₂/n₁) = asin(1/1.5) = 0.7297277 rad = 41.8103149° for crown glass n₁ = 1.500 → air n₂ = 1.000; Hecht, Optics 5e, §4.7

▶ Run this simulationRead how it works

The finding

Total internal reflection: validated → validated + honest-module — the screen now EARNS its critical angle: the circular bisection-on-Snell is replaced by in-module timed races (golden-section on travel-time COMPARISONS over 12 deterministic glass→air geometries, winner sines measured from segments, through-origin line extrapolated to grazing), returning sinθ_c = 0.666666687518428 → θ_c = 41.8103165° vs asin(n₂/n₁) = 41.8103149° (+3.8e-8 rel, both rendering the IDENTICAL 41.81°); the derisk EXECUTES 9 sha256-pinned slices of TotalInternalReflectionModule.ts (mechanical strip only) and recomputes every screen value strict-=== (sinθ_c, θ_c, 24 measured sweep sines, 4 HUD strings covering sub-critical AND TIR branches, the 2456-char chart SVG whose plotted points ARE the raced winners); the bisection-root slope reproduces n₂/n₁ to the LAST BIT (aRoot − 2/3 = 0.0), so the entire screen excess IS the sqrt(eps) comparison basin — worst stall 61.8% of δx = √(2·4eps·t*/t″) (the golden ratio itself, the geometry of the final uncomparable interval), slope dev 17.4% of the propagated bound, ZERO fitted parameters; tick schedule bit-exact (2·fl(1/120) === fl(1/60), accumulator ∈ {0, fl(1/120)} at all 20000 steps); the module 12-race and oracle 40-geometry protocols agree to 5.9e-8; the noisy grand 41.7627° sits 1.05·SE from the screen; 19/19 ~0.1s first attempt; tamper three ways exit 1

Method

The generator computes ONE thing: the arrival time of a broken glass→air path A→(x,0)→B, t(x) = n₁·|A→(x,0)| + n₂·|(x,0)→B| at c = 1, with n₁ = 1.5 (dense glass, below) and n₂ = 1.0 (air, above) — no sines, no angles, no asin, no critical-angle formula, no stationarity condition anywhere in the recovery path. The least-time crossing is located purely by comparing measured times: noiseless by golden-section on comparisons (float floor 9.8e-8); noisy by argmin over an 801-point grid of independently-jittered chronometer readings (0.1% Gaussian per candidate) refined by a windowed least-squares CUBIC vertex, with the per-geometry crossing averaged over 8 races BEFORE the slope fit (removes the regression-dilution bias that otherwise attenuates the slope and pushes θ_c ~0.17% high). The winner's two sines are MEASURED from its segments as opposite/hypotenuse; a free through-origin slope m = Σsinθ₁sinθ₂/Σsinθ₁² over a strictly sub-critical sweep (sinθ₁ ≤ 0.60, θ₂ ≤ 64°, away from grazing) is inverted to θ_c = asin(1/m). The closed form θ_c = asin(n₂/n₁) lives ONLY in the reference, loaded to score. 8 seeds draw their own geometry AND noise. 12 gates in scripts/tir-derisk.mjs (~0.1 s); tamper ⇒ exit 1. ?world=tir.

Measurements, controls & cross-checks

Recovered value deg

41.7627

Recovered se deg

0.0454

Worst seed rel error

0.00533

Seed se rel error

0.00108

Noiseless floor

Theta c deg
41.810319
Rel
9.7700e-8
Note
40 sub-critical geometries, golden-section by time comparisons only — limited to ~1e-7 by the flat minimum; the asin(1/m) inversion amplifies the sine-ratio error by ~1.2× near this θ_c

Grazing is critical

Extrapolated sin theta c
0.666667
Known sin theta c
0.6666667
Abs dev
1.8500e-8
Note
race a family of winners whose measured air-side sine climbs to grazing {0.90,0.95,0.99,0.999}; the measured line sinθ₁ = a·sinθ₂ extrapolated to grazing (sinθ₂ = 1) returns a = n₂/n₁ to the float floor — the critical angle recovered as the grazing incidence, from measured sines, never from the formula

Snell invariant

Worst abs
5.9000e-8
Note
max |n₁sinθ₁ − n₂sinθ₂| over the sub-critical sweep — the same machinery that recovers θ_c also confirms Snell holds pointwise

Fresnel total reflection

Onset deg
41.810315
Onset rel vs timed theta c
9.7700e-8
T just below
0.2364
T at and above
0
Note
an INDEPENDENT energy route: the unpolarised Fresnel reflectance R(θ₁) from E/H boundary matching hits 1 (transmitted power T = 1−R → 0) exactly at the timed θ_c; below it 24% of the light still transmits, above it the reflection is TOTAL — the defining feature of TIR, not merely the vanishing of a ray

Perturbation

N1 family
  • 1.3333333
  • 1.5
  • 1.8
  • 2.417
Theta c deg
  • 48.59
  • 41.81
  • 33.749
  • 24.44
Worst point rel
2.5000e-7
Fit slope
1.0000003
Fit intercept
-1.3200e-7
Note
dense index n₁ swept over water / crown glass / dense flint / diamond vs air; recovered θ_c tracks asin(1/n₁) pointwise, and a free fit of recovered sinθ_c vs 1/n₁ returns slope 1, intercept 0 — the denser the medium the smaller the escape cone; diamond's 24.4° θ_c traps and returns light (its brilliance)

Rival rare to dense

Direction
air (n₁=1.0) → glass (n₂=1.5)
Recovered inverse slope
1.5
Real critical angle
false
Note
the IDENTICAL generator run in reverse returns m = sinθ₂/sinθ₁ = n₁/n₂ < 1, so 1/m = n₂/n₁ = 1.5 has no real arcsine — NO critical angle exists going into the denser medium. This is the physical content beyond Snell: not just the sine ratio but the EXISTENCE and directionality of a total-reflection threshold. TIR is strictly one-directional (dense→rare only)

Equal media null

Inverse slope
1
Theta c deg
90
Note
n₁ = n₂ returns m = 1, θ_c = 90° — the degenerate grazing-only limit with no real TIR band; the threshold is the index contrast, not the apparatus

Honest module

Screen sin theta c
0.66666669
Screen theta c rad
0.72972768
Screen theta c deg
41.810316
Screen rel vs known
3.8300e-8
Screen excess decomposition
ARoot minus ratio
0
Worst x over basin
0.6185
Worst sine over ds basin
0.6185
Slope dev over propagated bound
0.1745
Note
the bisection roots of the Fermat stationarity reproduce n₂/n₁ to the last bit, so the on-screen +2.09e-8 sine excess is entirely golden-section comparison-basin noise δx = sqrt(2·4eps·t*/t″); the worst stall sits at 61.8% of δx — the golden ratio itself, the final uncomparable interval being a φ-section of the basin. A-priori bound, zero fitted parameters.
Certificate
scripts/oracles/tir.reference.json → module_certificate: 9 sha256-pinned slices executed by mechanical strip + new Function; pins strict-===; HUD 4 checkpoint states (both branches) + byte-identical θ_c tail; chart SVG sha-pinned; tick schedule bit-exact over 20000 engine steps; gates M1–M8 in scripts/tir-derisk.mjs
Display honesty
measured 41.81° === theory 41.81° at rendered 2 dp; true +3.8e-8 residual disclosed (M3); the chart yellow points are the raced winners measured (θ₁, θ₂), the TIR band edge is the measured θ_c
Reconciliation
module races (12 deterministic geometries, grazing extrapolation) vs oracle gate B (40 sub-critical geometries, slope inversion): Δrel 5.9e-8 — two independent race protocols, one θ_c; noisy grand 41.7627° ± 0.0454° sits 1.05·SE from the on-screen value

What it reduces to

The critical angle of total internal reflection, θ_c = asin(n₂/n₁) (Hecht, Optics 5e §4.7), the grazing limit of Snell's law n₁ sinθ₁ = n₂ sinθ₂ (Snellius 1621 / Descartes 1637) read for light leaving the dense medium. Non-circular: the generator contains only path lengths and per-medium speeds — the refraction slope m is measured off raced winners' geometry and inverted to θ_c = asin(1/m); asin(n₂/n₁) is never written in the recovery, and the grazing gate recovers sinθ_c by extrapolating measured refraction data to sinθ₂ = 1 rather than assuming it. Distinct from the snell world (which recovers the sine RATIO n₂/n₁ from the same Fermat machinery): TIR adds the THRESHOLD's existence and its one-directionality (the falsified rare→dense rival), and an independent Fresnel energy route showing the reflection is TOTAL (R = 1) at that angle — content Snell's ratio alone does not carry. Complements the mirage world (graded index, n·sinθ conserved) and rainbow (caustic minimum) as the optics arc.

Module systematics

CLOSED this run (validated → validated + honest-module). The module (?world=tir, src/modules/TotalInternalReflectionModule.ts) previously displayed a CIRCULAR θ_c — an 80-step bisection on ((n₁/n₂)·sin(mid) < 1), i.e. the closed form solved directly. That bisection is GONE: the on-screen θ_c is now measured in-module by the same physics as the oracle — the only physics coded is the travel time t = n·length per leg of a broken glass→air path; golden-section on time comparisons locates each of 12 least-time crossings, the winners sines are measured from their segments, and the through-origin line sinθ₁ = a·sinθ₂ extrapolated to grazing gives sinθ_c = a = 0.666666687518428. asin(n₂/n₁) survives only as the theory label rendered beside the measurement. Remaining (disclosed, visual-only): the rays/Fresnel dimming/theory curve use Snell + Fresnel closed forms — they are the illustration, not the headline number. The derisk EXECUTES the module source (module_certificate, gates M1–M8) so any numeric edit to the recovery trips by sha256 and any drift trips strict-=== pins.

Notes

Rung climbed: validated → validated + honest-module (the gap the previous run disclosed). Module edit: bisection-on-the-formula replaced by 12 deterministic timed races at init (bx grid 1.4..12 spanning incidences ~7°..37°, golden-section 100 comparisons each, ~0.1 ms — honest numbers cost no frame budget); chart points switched from optics()-generated to the raced winners; HUD/chart/branch logic all read the measured θ_c. Certificate: 9 slices sha256-pinned (consts, optics, raceTime, physics, fixedUpdate, step, renderHud, chartConsts, chart), executed via mechanical strip (TS-syntax removal only) + new Function; all pins strict-=== first attempt; 19/19 gates ~0.1 s. Tamper three ways, each exit 1, recovery unchanged: known_value 0.72973→0.75 (7 gates FAIL incl. A at 41.7627° unchanged); module numeric edit 10.6→10.7 (M1 hash + M2/M3/M6 trip); last-ulp pin edit sinCMeas …428→…429 (M2 strict-=== trips); all restored by hand, re-run green. Basin gates set at 1.0 — the a-priori bound itself, not a padded tolerance (observed 61.8%/17.4%). Live headless-Chrome read-back: HUD θ_c tail and chart byte-identical to pins (see discovery fragment). Scope: module + catalog entry (its own tir entry only — shared file, so gate = build + smoke:all + derisk) + oracle pair + finding + fragment + one loop-runs line. Micro-lesson #74: a golden-section-by-comparisons minimizer stalls at ~φ·δx, not δx — the final uncomparable interval is a φ-section of the basin, so an a-priori bound of 1.0·δx holds with the observed worst case landing on 0.618.

Confidence & reproduction

Confidence
high
Validation
derisk-pass
Re-run the check
npm run derisk -- tir (scripts/tir-derisk.mjs)
Oracle
scripts/oracles/tir.reference.json

Sources

W. Snellius (1621); R. Descartes, La Dioptrique (1637); E. Hecht, Optics, 5th ed., Pearson (2017), §4.7 'Total Internal Reflection', Table 4.1 (crown glass 1.50, water 1.333, diamond 2.417); J. Tyndall (1854), light-guiding by TIR in a water jet — the basis of the optical fibre.

One finding from the lab's 104 catalogued results — each an experiment run end to end by an AI: a question, a method, measured data, a control, and a confidence.