Epsilon-Hollow
A research kernel that keeps its state as points on a sphere and returns each discrete answer with a certificate that rounding could not change it, or refuses.
The questionCan a kernel read the shape of the ML work it runs, and refuse any integer that floating-point rounding, not the data, decided?
- Rust
- Lean 4
ContentsWhat it is
In one paragraph
A research kernel that keeps its state as points on a sphere and returns each discrete answer with a certificate that rounding could not change it, or refuses. The question: Can a kernel read the shape of the ML work it runs, and refuse any integer that floating-point rounding, not the data, decided? The headline result: 1,215 → 0, wrong nearest-centroid answers in 5,000 seeded queries, before and after the certificate. Control: reported hit rate 1.0000 before, 0.9818 after; stated on the project page, not re-measured. Code: teerthsharma/Epsilon-Hollow on GitHub.
What it is
Epsilon-Hollow is the repository; the kernel inside it is called Seal OS. It is a research kernel for x86_64, written in no_std Rust and booted only as a UEFI application. A conventional kernel measures its workload by quantity: resident pages, CPU time, open files, queue depth. It keeps no model of the workload’s shape. To Linux, a training run is a process with a large heap and an inference server is a process with a larger one. Whether the run is converging or memorising its training set, and which prefixes live conversations share, are facts the kernel could compute and never does.
Seal OS starts from the other end. Physical frames, files and tasks are placed on the unit sphere as points or small point clouds, each owned by the Voronoi cell of its nearest centroid, and placement and prefetch are read off that geometry. A trainer hands the kernel two numbers per step, and the kernel names the regime the run is in from the shape of its validation curve. An inference server’s KV cache is a prefix tree in kernel memory.
Shape comes back as integers: how many components, which keys, which cell, whether a curve folds back on itself. Those integers are computed in floating point, and near a decision boundary “the rounding of the arithmetic, not the data, picks the answer.” So the kernel holds itself to one rule. It computes an enclosure of the quantity. If the enclosure clears the boundary, the answer leaves with a certificate. If it touches the boundary, the answer is a refusal that names the witness, and the caller widens, scans or gives up.
The rule binds the kernel’s own claims too. At boot the kernel evaluates ten theorem lines, T1 to T10, against the values its running subsystems were built from. The code at commit 36b1400 prints one verdict per line, CERTIFIED, NOT CERTIFIED or NOT CHECKED, and a tally. CI greps for this tally, and seal-mkimage --check-theorem-log recomputes it from the ten lines:
[BOOT] Theorems: 2 certified (T1/TSS T2/SCM), 1 not certified (T4/AGCR), 7 not checked (T3/GMC T5/HCS T6/RGCS T7/PHKP T8/TEB T9/CMA T10/WPHB)
The README and docs/THEOREMS.md still quote an older banner, “9 of 10 theorems VERIFIED”; the code is stricter than the docs, and I follow the code. T4 is the governor’s convergence claim, and the kernel refuses it at the step the governor actually runs. Seven of the ten lines are not checked at all, because the kernel has no running instance of what each one describes.
Boot log and gate
gate: PASS certified=2 not_certified=1 not_checked=7
The gate checks the T4 line against the dt the governor line prints; the dt every caller uses is 0.01.
certified 2
- T1/TSS
- T2/SCM
not certified 1
- T4/AGCR
not checked 7
- T3/GMC
- T5/HCS
- T6/RGCS
- T7/PHKP
- T8/TEB
- T9/CMA
- T10/WPHB
Recomputed here: a JavaScript port of the repo's check_theorem_gate_text (commit 36b1400) run on this text. CERTIFIED means the hypothesis holds for the parameters the running instances were built from, not that a Lean proof reaches kernel code.
Ledger: boot verdict, docs, Lean
boot line
[THEOREM] T1/TSS CERTIFIED: eps=0.1000 theta_min=0.1000 cells=8 p_max=1600.0 min_sep=0.7854 covers=scheduler+compositor+firewall+route,manifoldfsboot line
[THEOREM] T2/SCM CERTIFIED: operators=manifoldfs:0.70,firewall:0.30,route:0.30 max_lip=0.70 max_ratio=0.7000 unread=schedulerboot line
[THEOREM] T3/GMC NOT CHECKED: no running instance merges clusters here: TopoRAM's T3 path is a run-count ratio and ManifoldFS mounts after this checkboot line
[THEOREM] T4/AGCR NOT CERTIFIED: alpha+beta/dt=5.01 >= 1 at dt=0.01boot line
[THEOREM] T5/HCS NOT CHECKED: no running instance embeds a tree with curvature, dimension and depth: TopoRAM's T5 path is an access-density threshold and the scheduler's process tree is a parent/child mapboot line
[THEOREM] T6/RGCS NOT CHECKED: no kernel subsystem runs itboot line
[THEOREM] T7/PHKP NOT CHECKED: no kernel subsystem runs itboot line
[THEOREM] T8/TEB NOT CHECKED: no kernel subsystem runs itboot line
[THEOREM] T9/CMA NOT CHECKED: no kernel subsystem runs itboot line
[THEOREM] T10/WPHB NOT CHECKED: no kernel subsystem runs it
Boot verdicts are the HEAD kernel's own (theorems.rs); they do not change with the log above. Seven of ten lines are NOT CHECKED.
Lines of Rust by subsystem, kernel/seal-os/src
not itemised 4,073 of 96,110 (the table's stated total; its 16 rows sum to 92,037)
core
- drivers20,415
- process4,637
- memory4,512
- lib.rs2,520
- syscall1,972
storage and network
- fs14,875
- net8,946
- pkg2,635
isolation
- security6,406
- sandbox1,290
interface
- apps9,798
- wm3,665
- graphics3,117
- atlas1,899
learning
- ml_engine4,633
- tuner717
Counts from the repo's RESULTS.md table at commit 9ebbe2e, stated by the repo and not re-counted here; ml_engine is its 3,927 + 706 rows. The 92,037 sum and the 4,073 remainder are arithmetic on that table. Shades group subsystems.
- CERTIFIED verdict; gate PASS; ledger tick (certified, or a full Lean artifact)
- NOT CERTIFIED verdict; gate REJECT; ledger square (not certified, or refused in the docs)
- NOT CHECKED: no running instance of it in the kernel; ledger open circle (not checked, or a Lean placeholder)
- ledger half circle: partly, or a layered Lean artifact
- lines of Rust per subsystem; shade groups subsystems
- lines not itemised by the repo's table
Figure 1. The boot theorem gate, run on a log you can edit. The default log is the fixture of a live boot from the repo's gate tests: T1 and T2 certified, T4 not certified at alpha + beta/dt = 5.01 at dt = 0.01, seven lines not checked. The gate recomputes each verdict from the evidence printed on its line and rejects a bare VERIFIED banner (the pre-live format) or a T4 line that claims certification while the margin is at least 1. Below the log, a ledger sets each theorem's boot verdict beside what the docs say and how strong its Lean artifact is. A strip shows the 96,110 lines of Rust under kernel/seal-os/src at commit 9ebbe2e by subsystem; 4,073 lines are not itemised by the repo's table and are drawn hatched.
What the kernel is not matters as much. No instruction has executed in user mode; the applications are kernel code. Bring-up of the other processors is written, but its only call is commented out. Hardware coverage is one QEMU configuration. So I do not describe Seal OS as a general operating system. It boots under QEMU, brings up its drivers, mounts its filesystem, replays its ML proofs on synthetic traces and evaluates its own theorem lines, and those are the parts this essay is about.
One tool grew out of this work: separatrix, which has its own essay.
What it can do
The README names four pillars, and says of them: “Each runs in the kernel today, on synthetic workloads. Validation on real models is the open work.” CI numbers below are from run 36165748105 on commit 9ebbe2e, the run in which CI is red (see Limitations).
stratum: a training run has a shape
A trainer passes (train_loss, val_loss) once per step through system call 121 (SYS_FIT_OBSERVE); call 122 (SYS_FIT_REGIME) returns Underfit, WellFit, Overfit or Collapsing. The kernel sees nothing else of the model: no weights, activations or gradients. Non-finite input is counted and latched, never used.
The test is geometric. The last 64 validation losses become delay points . A run that only falls draws an open arc. A run that falls and then climbs back through values it already visited draws a V, and at a large enough scale the two arms of the V close into loops. In the README’s words: “Overfitting is revisitation, and revisitation is a cycle.” The construction is in How it was made.
- Control
- a train/validation gap threshold flags the negative control (a healthy run with a constant validation offset of 0.35) as overfit; stratum does not
- Interval
- n = 7 streams of 128 steps, window 64, κ = 1.68
- Source
- CI run 36165748105, commit 9ebbe2e
- Control
- bounded over a 4,096-step stream
- Source
- CI run 36165748105, commit 9ebbe2e
The verdict is advisory. The FitAction documentation says so directly: “Every field is advisory today, and nothing here is enforced against a task that ignores it.” SYS_FIT_REGIME publishes a prefetch threshold, and the only reader of that threshold is a prefetch preset that, in the source’s words, nothing constructs. The figure below runs the same classifier on a curve you paste.
- the 64-point window in use
- verdict matches the fixture's ground truth
- verdict differs from the fixture's ground truth; first non-finite value
- gap-threshold verdict on the same input
- step cursor and calibration sliders
Figure 2. Paste a validation-loss curve (and optionally a training-loss curve) and the stratum classifier, ported from trajectory_shape.rs and stratum.rs, names its regime, next to the train/validation gap rule on the same input. The shaded band is the 64-point window the kernel keeps. The cascade strip shows the fixed order of gates (Collapsing, then Overfit, then Underfit, else WellFit); the first lit gate is the verdict. Presets are the seven synthetic proof fixtures from stratum.rs. The thresholds were set on those seven synthetic streams; the classifier has never seen a real model, and a curve you paste is judged by the same thresholds.
foliation: an inference cache is a prefix tree
A sequence’s block table is its path down a prefix tree the kernel holds. A block is 8 tokens; each resident block is one 4 KiB physical frame from the kernel allocator. Two sequences that agree on a block-aligned prefix land on the same blocks, and there is no call to share a block: appending identical tokens does it. The source says it plainly: “Prefix sharing is not a hash table bolted onto an allocator.” A 64-bit digest of the prefix narrows the search, and a child is shared only when the token array also matches, because the digest can collide.
Eviction may remove only a free face: a block that is resident, unreferenced, and has no resident children. The resident set therefore stays a connected rooted subtree under every policy, and policies differ only in which free face they pick. The foliation policy picks the leaf fewest sequences ever entered, then the deepest, then the oldest.
The repo measures it on two synthetic traces at a 24-block pool, with “bp” meaning basis points of descents that hit a shared block:
- Control
- LRU 0 bp; locality-only null 476 bp; random 619 bp at seed 0, 238 to 857 bp over 32 seeds (foliation wins on 32 of 32)
- Interval
- n = 30 requests, 1,680 tokens, 24-block pool, 8 tokens per block
- Source
- CI run 36165748105, commit 9ebbe2e; locality null from commits 264235c and 0ab2377, local QEMU
That trace is built so that recency always evicts the shared prefix: the hot prefix returns only after 31 other blocks, more than the pool holds, and a const assertion in the source states the construction. LRU’s 0 is a property of the trace. On a multi-turn chat trace, where reuse follows recency, the result flips:
- Control
- LRU 8,068 bp; Belady 8,143 bp; locality-only null 6,818 bp; random 7,026 to 7,443 bp; foliation beats random on 0 of 32 seeds
- Interval
- n = 16 conversations, 4 live, 6 turns each; 96 requests, 528 descents
- Source
- commit 0ab2377, local QEMU; random range from a host replay of the same module
With 16 live conversations instead of 4, one mutation build reverses it again (5,113 bp against LRU 3,731 and Belady 5,378). The repo’s reading is the one I hold: “Which policy wins follows whether reuse distance exceeds the pool, not the name of the request shape.” Because of that, the cache behind the system calls defaults to LRU, and the source comment at its constructor says the foliation ranking “beats LRU only at a capacity cliff on the synthetic boot trace and ties or loses elsewhere.”
- Control
- 190 frames backed and 190 freed, 0 failed; every replay of either trace must also show 0 and 0
- Source
- CI run 36165748105; replays at commit 0ab2377
Certify-or-refuse, before and after
- Control
- before: reported hit rate 1.0000 while wrong; after: 4,909 certified in the 3×3 block, 91 full scans, reported hit rate 0.9818
- Interval
- n = a test in aether-core asserts 0 wrong over 25,000 queries at K = 2, 8, 20, 64 and 200
- Source
- project page, commits cdb4a4e and 0f040e0: stated, not re-measured
The matching rows for component counts and attention top-k sit next to their equations in How it was made.
TopoRAM and ManifoldFS: state on a sphere
Every physical frame carries an embedding of 16 points on (32 quantized angles, 64 bytes), a 64-tick access history, a Voronoi cell and a lifetime class. Memory is split into three zones, each with eight seeds; a frame belongs to the cell of its nearest seed.
- Control
- no fallback cell taken; p50 6,126 and p95 12,446 cycles per allocation
- Interval
- n = 64 allocations
- Source
- boot benchmark under QEMU TCG on a GitHub-hosted runner; emulated TSC, not hardware
ManifoldFS encodes a file’s bytes as a point cloud on and files the inode in the Voronoi cell of the cloud’s first point; the bytes persist through ext2.
- Control
- mock block store, fs_mode=mock_block, persistence_bytes_per_move=0
- Source
- checked at every boot by --check-benchmark-log; CI run 36165748105
The README adds the sentence that has to go with both numbers: “Whether this layout beats a conventional allocator or filesystem has not been measured; no comparison against Linux exists.”
Upstream
Work on Epsilon-Hollow led to these fixes in two other projects. I state the link in those words and no more.
fix(gpu): make reduction group order deterministic
Switches the set that drives the union-find merges in GroupDisjointReductions to absl::linked_hash_set, so the group-to-block assignment no longer depends on hash-set iteration order (as the PR states it).
Work on Epsilon-Hollow led to this fix.
Fix transitive reduction of collective control edges
Closes reachability exactly in one pass, so the unique transitive reduction of the collective control edges is emitted; the PR's four-op example drops a redundant edge (four edges to three).
Work on Epsilon-Hollow led to this fix.
How it was made
The kernel is one no_std crate, kernel/seal-os, built for x86_64-unknown-uefi. Drivers, filesystems, the network stack, the window manager and the applications compile into one EFI image. The mathematics lives in a workspace crate, aether-core: certified , certified top-k, trajectory shape, the spherical Voronoi indices, the governor. The kernel calls into it. I follow the repo’s own numbered equations, (1) to (9), then the Lean files, then the paging that holds it all.
Certified β₀
Let be the edge weights of the Euclidean minimum spanning tree of a point set ; these are exactly the single-linkage merge heights. The number of components at threshold , and the condition under which a count at scale with band ratio is certified, are:
- Control
- before the band rule, two points at 0.5 ± 1e-9 gave two different integers; both are refused now
- Source
- project page, commit 8678c97; cargo test -p aether-core --test certified_betti
- points of the cloud
- below-band MST edges (merged at the scale); merge-height ticks
- in-band edges: decided by rounding under a bare comparison; naive count
- certified band and its integer
- refused cells of the (s, r) plane
- union-find disagreement (expected never)
- scale s and band ratio r
Figure 3. Certified β₀ on a point cloud you edit. Panel A draws the points and their minimum spanning tree; edges below the band are merged at the scale, edges inside the band are the ones whose comparison with the scale rounding could decide, edges above it stay split. Panel B places the merge heights on a log axis with the band [s/√r, s√r]; when no height lies inside it the band is certified. Panel C is the staircase of equation (1), with an independent union-find count laid over it. Panel D maps the (scale, band ratio) plane: certified cells carry their integer, refused cells are hatched. A two-point preset at distance 0.5 ± 1e-9 shows the naive count flipping while the certified rule refuses all three distances.
Every threshold in the band, under < or <=, gives the same integer, which is what the certificate means. If a height lies in the band, the result is Refused { i, j, height }, naming the in-band tree edge whose height is nearest . Heights are computed as with , so separations near or neither underflow nor overflow. certified_beta0 builds the tree with all-pairs Prim, . The rule is ported from planimeter’s gap rule.
Certified attention top-k
Each score of head dimension carries Higham’s a-priori bound for a floating-point inner product (Accuracy and Stability of Numerical Algorithms, Chapter 3; the repo cites it as Theorem 3.1):
- Control
- after the rule: the row is widened instead of answered
- Source
- project page, commits afd0969 and eb4af16; cargo test -p aether-core --test attention_contracts
The absolute value sits inside the sum. The source comment is specific about why: “gamma_n · |q·k| is not this bound and is far below it under cancellation, which is exactly where it matters.” The computed radius inflates (3) by , adds times the smallest subnormal, and rounds up, so it bounds rather than estimates:
// kernel/epsilon/epsilon/crates/aether-core/src/attention.rs:885-898 @ 36b1400
fn enclosed_dot(q: &[f64], k: &[f64], i: usize, j: usize, head_dim: usize) -> (usize, f64, f64) {
let (mut sum, mut magnitude) = (0.0f64, 0.0f64);
for d in 0..head_dim {
let product = q[i * head_dim + d] * k[j * head_dim + d];
sum += product;
magnitude += product.abs();
}
let n = head_dim as f64;
let u = f64::EPSILON / 2.0;
let gamma = nextafter(n * u / (1.0 - n * u), f64::INFINITY);
let underflow = n * f64::from_bits(1);
let radius = gamma * magnitude * (1.0 + 2.0 * gamma + 4.0 * u) + underflow;
(j, sum, nextafter(radius, f64::INFINITY))
}
The absolute sum rides the same pass as the score, so the enclosure adds no dot products. With radii in hand, the top set of size is certified when every kept lower end clears every excluded upper end:
- float point estimate; float argmax
- exact score; CERTIFIED; the diagonal err = r
- REFUSED or WIDENED; a bound violation
- witness vector inside the boxes
- Higham interval around the float score
- the bit of fl(M) with weight 2^0, which moves with the exponent p
Figure 4. Certified top-k in three panels. A: type a query and up to six keys (or use the cancellation preset q = [1,1,1], k₀ = [M, 1, −M] with M = 10^p); each key's float score, exact score (computed in exact rational arithmetic) and Higham interval are drawn on one axis, and the certificate either holds, or refuses and widens the row, next to the plain float argmax. B: random trials compare the actual rounding error of each dot product with its computed radius on log axes; points above the diagonal would be violations of equation (3). A halo marks trials whose error exceeds γₙ·|q·k|, the bound the source warns against. C: the rule of equation (4) on the repo's test fixture (solid boxes are the keys inside the budget, dashed boxes the rest), where comparing only rank k with rank k+1 would certify a set the full rule refuses.
The comparison is strict, and it compares the lowest lower end inside against the highest upper end outside, not rank against rank :
// kernel/epsilon/epsilon/crates/aether-core/src/attention.rs:652-673 @ 36b1400
let (inside, outside) = ranked.split_at(budget);
let lowest = inside
.iter()
.copied()
.min_by(|a, b| lower_end(a).total_cmp(&lower_end(b)))
.expect("budget > 0");
let highest = outside
.iter()
.copied()
.max_by(|a, b| upper_end(a).total_cmp(&upper_end(b)))
.expect("budget < len");
if lower_end(&lowest) > upper_end(&highest) {
Ok(inside.iter().map(|&(j, _, _)| j).collect())
} else {
Err(TopKRefusal::Boundary(BoundaryRefusal {
inside: lowest.0,
outside: highest.0,
gap: lowest.1 - highest.1,
needed_margin: lowest.2 + highest.2,
}))
}
On refusal, certified_or_widened keeps every key whose upper end reaches the lowest selected lower end, at no extra dot products; a NaN or infinite score refuses first and the row falls back to dense. The separation test is ported from separatrix’s error intervals.
The fold score of a loss curve
From the validation losses the kernel keeps the last 64 delay points and resamples them to uniform arc length. Let be the largest edge of the resampled cloud’s minimum spanning tree and the number of resampled points. The loop score is
- Control
- before: scored 0.969 and judged Overfit; after: certified 0 before any complex is built
- Source
- cargo test -p aether-core --test trajectory_shape (monotone_staircase_scores_no_fold)
where counts Vietoris–Rips 1-skeleton edges at scale except two-step chords already filled by a triangle, so upper-bounds Rips rather than equalling it. Monotonicity is checked by comparing stored values coordinate by coordinate, with no rounding, so the zero case is exact. The one free constant, , is bounded by a derivation rather than tuned:
- time order of the points (colour bar); participation ratio in the equation (7) map
- the κ cursor
- the derived κ band
- readings the repairs removed
- the Rips scale sphere; values recomputed from the repo's code
- PR withheld (NaN): no point drawn
Figure 5. The delay cloud of a loss curve in three dimensions, with the Rips edges at scale κ·ε* drawn between its points. Rotate it: for a clean symmetric V the falling and rising arms are two parallel rails, and the edges that close loops are the rungs between them. Below, the loop score of equation (5) is plotted against κ for the V, the staircase with and without the chord quotient, the selected fixture and two values quoted from the repo comment, with the band of equation (6) shaded; two toggles switch off the monotonicity certificate and the two-step-chord quotient, reconstructing (not replaying) the two repairs the repo made. The last panel maps the participation ratio of equation (7) over the autocovariance ratios, with the seven stratum fixtures marked and the 0.45 Underfit threshold drawn.
The floor comes from a symmetric V. Its descending point and ascending point differ by for every , so the arms first meet at . The ceiling comes from a monotone stretch: every segment of the delay polyline lies in one closed orthant, so a chord spanning resampled steps is at least long, and since two-step chords are quotiented out, the first chord that can close a cycle spans three steps and needs . The value 1.68 is the midpoint 1.6825, rounded. The source records the measurement against it: the clean symmetric V scores 0 up to and 0.391 from 1.64. It also records, in the same comment, that the band “is proved for the symmetric V only.” I come back to that under Limitations.
A loop alone does not mean overfitting; a converged run sitting in a noise ball also loops. So the classifier needs a second signal, the drift of the residual , and it reads underfitting from a third, the participation ratio of the training-loss autocovariances :
- Control
- Underfit threshold 0.45, about 35 % above the rank-1 floor of 1/3; the overfit fixture's training loss scores 0.424, which is why Overfit is tested before Underfit
- Source
- trajectory_shape.rs:514-517 and 683-686 @ 36b1400 (measurements stated in the source)
PR is returned as NaN, a refusal, when the training loss varies by less than its own rounding bound, and the Underfit verdict is then withheld. classify decides in a fixed order: non-finite input or an unmeasurable signal gives Collapsing; fewer than 16 samples gives WellFit; training-loss drift of at least 0.50, or a shatter ratio of at least 100 with any rise in training loss, gives Collapsing; with residual drift of at least 0.05 gives Overfit; a finite PR at or below 0.45 gives Underfit; anything else is WellFit.
The governor, and why T4 is refused
The governor adapts a wake-up threshold from an observed deviation with a proportional-derivative step. In code the target rate is , , , and is clamped to :
- Control
- the same 2-cycle at Δt = 0.01, 0.0506 and 1
- Source
- commit dcc35b6 (stated in RESULTS.md)
T4 certifies geometric convergence when the gain margin is below one:
- Control
- the bound is 1; at Δt = 1, a step no runtime caller uses, the margin is 0.06
- Source
- kernel/seal-os/src/lib.rs:162-164 constants; boot gate since commit 3c14df0
- region where the margin is below 1; a step in which |e| descends
- refusal; the 2-cycle trajectory; a step in which |e| rises
- the retired VERIFIED-at-Δt=1 state
- trajectory points recomputed from the repo's update
- the reader's Δt on the margin curve
Figure 6. The T4 condition and the loop it is meant to describe. Tab 1 plots the margin α + β/Δt against Δt on a log axis with the line at 1, marking Δt = 1 (0.06), the runtime step Δt = 0.01 (5.01) and Δt = 0.0506 (0.998), and rebuilds the boot line exactly as the kernel prints it. Tab 2 runs the update of equation (8) for 2,000 ticks at three step sizes: each one 2-cycles between the clamp bounds 0.001 and 10. Tab 3 takes one step of the Rust governor_step from the repo's test fixture and shows |e| rising while the gain-margin predicate holds, beside the Lean statements, which are not about that step.
The boot check is a direct evaluation of (9) at the constants every runtime caller passes:
// kernel/seal-os/src/theorems.rs:208-223 @ 36b1400
/// T4/AGCR: `alpha + beta/dt < 1` at the gains and step every runtime
/// governor uses.
fn t4(state: &LiveState) -> Verdict {
let (alpha, beta, dt) = state.gains;
let margin = alpha + beta / dt;
let rho = aether_agcr::contraction_rate(alpha, beta, dt);
let certified = rho > 0.0
&& rho < 1.0
&& aether_agcr::half_life(rho).is_finite()
&& aether_agcr::gain_margin_stable(alpha, beta, dt);
let relation = if certified { "<" } else { ">=" };
verdict(
certified,
format!("alpha+beta/dt={:.2} {} 1 at dt={}", margin, relation, dt),
)
}
Until commit 3c14df0 the same theorem was certified at . Moving the step to 0.01 is not the whole story, though. Condition (9) treats the map from to as unit gain; linearising (8) gives , about at the equilibrium , and alone exceeds one. No step size satisfies the condition. The repo says what follows: “Earning T4 requires redesigning the governor, not retuning it.”
The Lean files, exactly
The Lean 4 package sits in kernel/aether/aether-verified/lean, on toolchain v4.7.0 with mathlib v4.7.0. Here is what it is, counted at commit 36b1400:
- 11
.leanfiles, of whichlakefile.leanis the build file and four (TestNat.lean,test_nat_chain.lean,test_nat_ineq.lean,test_sub_le.lean) sit outside thelakeroots. Two of those use names that no longer exist, so the build does not compile them. - 28 declarations in the five files the build compiles:
EpsilonTheorems.lean16 theorems and 1 private lemma,Governor.lean3,Betti.lean3,Chebyshev.lean2,Pruning.lean3. sorryappears twice, both inside comments (EpsilonTheorems.lean:7,lakefile.lean:15). In code: 0.- Four statements conclude
True := trivial. They are placeholders and prove nothing:tss_separation_guarantee,gmc_entropy_nonincreasing,phkp_perfect_locality, andupper_bound_soundinPruning.lean.
The repo’s sentence on scope: “The Lean files prove algebraic side lemmas; no Lean statement is connected to kernel code.” A boot CERTIFIED for T1 or T2 is the Rust kernel evaluating a hypothesis at its runtime parameters, not a Lean proof reaching into the kernel. The statements that matter, verbatim, with what each guarantees:
tss_packing_bound0 sorrySource: kernel/aether/aether-verified/lean/EpsilonTheorems.lean:51 @ 36b1400theorem tss_packing_bound (L : ℕ) (θ_min : ℝ)
(h_θ_pos : 0 < θ_min)
(h_θ_lt_pi : θ_min < Real.pi)
(cap_arg : (L : ℝ) * (Real.sin (θ_min / 2)) ^ 2 ≤ 4) :
(L : ℝ) ≤ P_max θ_min := by
unfold P_max
have hθ2_pos : 0 < θ_min / 2 := by linarith
have hθ2_lt_pi : θ_min / 2 < Real.pi := by linarith [Real.pi_pos]
have hsin_pos : 0 < Real.sin (θ_min / 2) :=
Real.sin_pos_of_pos_of_lt_pi hθ2_pos hθ2_lt_pi
have hsin_sq_pos : 0 < (Real.sin (θ_min / 2)) ^ 2 := pow_pos hsin_pos 2
rw [le_div_iff hsin_sq_pos]
exact cap_argThis proves that the packing count is at most , given the cap-area inequality as the hypothesis cap_arg. The geometric fact itself is assumed, not proved; the theorem is the division step.
scm_contraction0 sorrySource: kernel/aether/aether-verified/lean/EpsilonTheorems.lean:84 @ 36b1400theorem scm_contraction
(α_min α_max ε_min ε_max : ℝ)
(h_α_pos : 0 < α_min)
(h_α_lt_1 : α_min < 1)
(h_α_ord : α_min ≤ α_max) :
telemetry_lipschitz α_min < 1 := by
unfold telemetry_lipschitz
linarithtelemetry_lipschitz α_min is defined as 1 - α_min, so this proves for . Nothing about any map’s Lipschitz behaviour is proved. The operator the kernel runs, , appears in the Rust, not here.
agcr_gain_margin_stable0 sorrySource: kernel/aether/aether-verified/lean/EpsilonTheorems.lean:126 @ 36b1400theorem agcr_gain_margin_stable (α β dt : ℝ)
(h_α_pos : 0 < α) (h_β_pos : 0 < β) (h_dt_pos : 0 < dt)
(h_margin : α + β / dt < 1) :
0 < governor_contraction_rate α β dt ∧ governor_contraction_rate α β dt < 1 := by
unfold governor_contraction_rate
have hβdt_pos : 0 < β / dt := div_pos h_β_pos h_dt_pos
have hden_pos : 0 < 1 + β / dt := by linarith
refine ⟨?_, ?_⟩
· -- 0 < 1 − α/(1 + β/dt)
-- α < 1 + β/dt is implied by h_margin (α + β/dt < 1 < 1 + β/dt? not quite),
-- but h_margin gives α < 1 - β/dt < 1 < 1 + β/dt
have hα_lt : α < 1 + β / dt := by linarith
have h_frac_lt_1 : α / (1 + β / dt) < 1 := by
rw [div_lt_one hden_pos]
exact hα_lt
linarith
· -- 1 − α/(1 + β/dt) < 1
have h_frac_pos : 0 < α / (1 + β / dt) := div_pos h_α_pos hden_pos
linarithThis is the implication in equation (9): if the margin holds, lies in . It is not stated about the update map (8), so it does not say the governor converges, and at the runtime step its hypothesis is false (5.01).
lyapunov_descent0 sorrySource: kernel/aether/aether-verified/lean/AetherVerified/Governor.lean:33 @ 36b1400/-- **Scalar Lyapunov descent for a contraction.**
If `e' = ρ · e` with `|ρ| ≤ 1`, then `V(e') ≤ V(e)`.
Applies to a map of that form only; the Rust PD step is not one
(see the module comment). -/
theorem lyapunov_descent (ρ e : ℝ) (h_ρ : |ρ| ≤ 1) :
V (ρ * e) ≤ V e := by
unfold V
have hρsq : ρ ^ 2 ≤ 1 := by
have := sq_abs ρ
have hρ2 : |ρ| ^ 2 ≤ (1 : ℝ) ^ 2 :=
pow_le_pow_left (abs_nonneg ρ) h_ρ 2
simpa [sq_abs] using hρ2
have he2 : 0 ≤ e ^ 2 := sq_nonneg _
calc (ρ * e) ^ 2 = ρ ^ 2 * e ^ 2 := by ring
_ ≤ 1 * e ^ 2 := by
exact mul_le_mul_of_nonneg_right hρsq he2
_ = e ^ 2 := by ringFor a map with , does not increase. The file’s own module comment says “No theorem here is about the Rust governor_step”, and gives the counterexample at , , , where the refined gain-margin condition holds: from , , the step raises from 0.414286 to 0.414650.
chebyshev_one_sided_sq0 sorrySource: kernel/aether/aether-verified/lean/AetherVerified/Chebyshev.lean:67 @ 36b1400theorem chebyshev_one_sided_sq {n : ℕ}
(x : Fin n → ℝ) (μ : ℝ) (k : ℝ) (h_k : 0 < k)
(σ_sq : ℝ) (h_σ_pos : 0 < σ_sq)
(h_σ_def : σ_sq * (n : ℝ) = ∑ i, (x i - μ) ^ 2) :
(((Finset.univ.filter (fun i => (k * k) * σ_sq ≤ (x i - μ) ^ 2)).card : ℝ))
* ((k * k) * σ_sq)
≤ σ_sq * (n : ℝ) := by
have h_t_pos : 0 < (k * k) * σ_sq := by positivity
have base := markov_count_bound (fun i => (x i - μ) ^ 2)
(fun i => sq_nonneg _) ((k * k) * σ_sq) h_t_pos
rw [h_σ_def]
exact baseThe number of points at or beyond standard deviations, times , is at most , which gives the ceiling that a memory-pruning rule ported from sigmoid uses. The link to the Rust is only that the Rust checks the inequality this file proves.
tss_separation_guarantee0 sorrySource: kernel/aether/aether-verified/lean/EpsilonTheorems.lean:67 @ 36b1400/-- TSS Separation: Statement-level placeholder; great-circle distance
on `S²` requires geometry we do not import here. -/
theorem tss_separation_guarantee
{P : ℕ}
(centroids : Fin P → ℝ × ℝ)
(ε_adaptive : ℝ)
(h_ε_pos : 0 < ε_adaptive)
(h_ε_lt_2 : ε_adaptive < 2)
(h_distinct : ∀ i j, i ≠ j → centroids i ≠ centroids j) :
-- Statement-level placeholder until S^2 great-circle distance is imported.
True := trivialOne placeholder, so the shape is visible: it compiles, carries a “0 sorry” chip, and guarantees nothing. The repo’s hygiene gate strips comments, rejects sorry, admit and axiom, and accepts True := trivial only next to a placeholder, skeleton or deferred marker, which is how these four are allowed to stand.
Paging and W^X
Everything above runs in ring 0, so the page tables keep kernel code from being written. memory/virt.rs maps the image from its own PE section table: code is read-execute and never writable, read-only data is non-executable, and kernel data is writable and non-executable. EFER.NXE and CR0.WP are set. A walk splits a 48-bit virtual address into four 9-bit table indices and a 12-bit offset, as translate_in_pml4 does with shifts and masks:
1 to 16 hex digits, 0x optional. Each valid edit walks at once. Bit 47 set with bits 63:48 clear raises #GP.
W^X scan, model
10,749 leaves in the model
0 W+X leaves: no violation
Measured in the repo, not produced by this model: 0 of 24,004 kernel-root pages W+X after b3cf934 (commit, local QEMU); before enforcement every scanned alias page was W+X (4,311 of 4,311).
A model of the mapping, built from the documented construction of the kernel's page tables, not a dump of a booted kernel. Image section sizes are illustrative and editable; the KASLR slide is held at 0 (30 bits of entropy, the image base itself is not randomised). SMEP and SMAP were not exercised, and no instruction has run in user mode, so the user/supervisor bit is not modelled. The RWX fallback is a real code path, shown to explain the old all-pages-W+X count, not a claim about what the old kernel did page by page. The kernel's scan is bounded by a budget; the model's is not.
- table pointer entries
- read-execute code leaves
- read-only and read-write no-execute leaves
- W+X leaf: a violation
Figure 7. A four-level x86_64 page walk through a model of the mapping memory/virt.rs builds: a 16 GiB identity map of 2 MiB read-write no-execute leaves, the image in 4 KiB pages with per-section flags, and a higher-half alias. Type a virtual address and the walk descends the four stacked tables, splitting the address into four 9-bit indices and a 12-bit offset. A switch flips to the RWX fallback the code takes when the PE section table is unreadable, and a bar panel counts the model's leaves by permission class, where a present, writable and executable leaf is the W^X violation the kernel's probe counts. Image sizes in the model are illustrative; the repo's measured scan of 24,004 pages is quoted beside the model's count, not produced by it.
- Control
- before enforcement: every scanned kernel-alias page was writable and executable (4,311 of 4,311 in the results table; the repo's prose elsewhere says 4,310 of 4,310)
- Source
- commit b3cf934, local QEMU, stated in the commit; chase_boot.sh wx
What’s new in it
Each pillar replaces a familiar approach, named here.
Accounting by quantity versus a model of shape. Linux tracks resident pages, CPU time and queue depth per process. Seal OS asks the trainer for two scalars per step and keeps a fixed-size geometric summary of the run, 4,792 bytes per stream, from which it names the regime, without seeing the model.
Patience and gap thresholds versus revisitation. The usual way to notice overfitting is a rule on the validation curve: stop after a number of epochs without improvement (Keras EarlyStopping is the common form), or flag a gap between training and validation loss. stratum asks a different question: whether the validation curve comes back through values it has already visited. That is a property of the curve’s shape in delay coordinates, which a constant offset does not change. The repo’s negative control is a healthy run with exactly such an offset: the gap threshold flags it and stratum does not.
A KV cache in user space versus a prefix tree in kernel memory. vLLM’s PagedAttention manages KV blocks in user space against real models; foliation tests placement and constraint instead: the block table is a path in a tree the kernel owns, each block is a frame from the kernel’s allocator, and eviction is restricted to free faces. The ranking it adds is measured against a null that removes the entrant count: on the boot trace, dropping the entrant count halves the hit rate (952 to 476 bp). The source calls the entrant count “a persistence proxy, and honestly also a frequency counter.”
The ranking is a lexicographic minimum over the free faces:
with the entrant count, the depth and the last-use tick. The locality-only null is and LRU is . In code:
// kernel/seal-os/src/ml_engine/foliation.rs:225-233 @ 36b1400
fn rank_of(policy: Policy, l: &Leaf) -> [u64; 3] {
match policy {
Policy::Foliation => [l.entrants as u64, u64::MAX - l.depth as u64, l.last_use],
Policy::Lru => [l.last_use, 0, 0],
// from https://github.com/triton-lang/kernels/pull/22: sink + local window, as a null
Policy::Locality => [u64::MAX - l.depth as u64, l.last_use, 0],
Policy::Random | Policy::Belady | Policy::Adaptive => [0, 0, 0],
}
}
- entrant count of a block (colour bar)
- selected policy's hit rate; the descending path
- LRU
- the repo's QEMU value at pool 24
- live invariant at zero; self-check matches the repo's table
- live invariant broken, or a self-check mismatch
Figure 8. The kernel's KV prefix tree replayed on three synthetic traces (boot, chat with 4 live conversations, chat with 16 live), one descent at a time. Each square is one 4 KiB block; fill encodes how many distinct sequences ever entered it, a dashed outline marks a free face (resident, unreferenced, no resident children), a thick outline a pinned block, and a cross marks the victim chosen at that step. Five policies run on the same candidate set (foliation, LRU, the locality-only null, an adaptive duel, the Belady oracle) plus a seeded random null, with cumulative hit rate, end-of-trace bars and a pool-size sweep. On the boot trace foliation matches Belady and LRU scores 0; on the four-live chat trace foliation loses to LRU and to the locality null. Two invariants are counted live and must stay at zero: evictions of a referenced block and breaks of the rooted-subtree property.
Comparing floats versus enclosing them. Every discrete answer in the usual numeric pipeline (a component count from a distance threshold, a top-k from sorted scores, a nearest centroid from a dot product) is a bare comparison of computed floats. Seal OS replaces each bare comparison with an enclosure and a refusal. The cost of that change is concrete and the repo records it: the nearest-centroid index’s reported hit rate falls from 1.0000 to 0.9818, because the 91 queries it could not certify go to a full scan instead of being counted as hits.
A theorem banner versus a refusing gate. A system with proofs attached usually prints that they hold. Seal OS evaluates each hypothesis at its running parameters, prints which fail or were never checked, and its CI gate rejects a log that says otherwise.
What no one else built
For each piece I name the closest prior work and say what differs, including where the prior work already does it.
Verified kernels. seL4 has a machine-checked proof of functional correctness of its C implementation in Isabelle/HOL (Klein et al., SOSP 2009). Seal OS has nothing comparable: its Lean files prove algebraic side lemmas and none is connected to kernel code. What Seal OS does instead is evaluate its theorem hypotheses at boot against the live parameters and refuse the ones that fail, including its own convergence claim. That is runtime checking of conditions, not verification, and I would not put it in the same category as seL4’s proof.
Rust research kernels. Theseus (Boos et al., OSDI 2020) restructures OS state into runtime-composable cells in one address space; Redox is a Rust microkernel with drivers in user space; Asterinas is a Rust framekernel that runs Linux binaries with unsafe confined to a small framework. All three are about structure, isolation or ABI, and on those axes Seal OS, a monolithic image with its own 69-call ABI and no ring-3 execution yet, is behind each of them. The difference is elsewhere: where its state lives (points on owned by Voronoi cells) and what it answers about the workload.
Learned and ML-aware OS components. LinnOS (Hao et al., OSDI 2020) runs a small neural network in the kernel to predict, per I/O, whether an SSD will be fast or slow, and revokes a request predicted slow so the application can fail over (paper). LinnOS trains on I/O traces collected from the workload and reports 87 to 97 % inference accuracy. stratum is the opposite construction: it learns nothing. It applies a fixed geometric rule, with a constant derived rather than trained, to two scalars the workload hands it.
Loops in delay embeddings. The idea that a loop in a sliding-window embedding of a time series is a signal is not mine. Perea and Harer’s SW1PerS scores periodicity by the maximum 1-dimensional persistence of a sliding-window point cloud. stratum uses the same family of idea for a different question (did the validation curve revisit its own values?) and in a narrower form: a single scale instead of a persistence diagram, a cycle rank that upper-bounds instead of computing it, an exact monotonicity certificate for the zero case, and the band derived from the geometry of a symmetric V and a monotone stretch. The derivation of that band, and the use of a fold score as a kernel-side training-regime signal, are the parts I did not find in the prior work I compared against.
Certified β₀. A persistence library such as Ripser computes the barcode and leaves the threshold to the user. Equation (2) says something equivalent in persistence terms: the count at is certified exactly when the band around falls in a gap of the 0-dimensional barcode. The mathematics is standard. What differs is the interface: a count is returned only with that gap as its certificate, and otherwise a refusal names the tree edge in the band, with a scale-safe distance so the heights themselves do not overflow.
Error-bounded filters. The closest prior work to certify-or-refuse is Shewchuk’s adaptive-precision geometric predicates (1996/1997), and the filtered predicates in computational-geometry libraries that follow them. A predicate evaluates in floating point with an error bound; if the bound cannot certify the sign, it escalates precision until it can. Seal OS uses the same filter idea with Higham’s bound on three discrete answers (a component count at a scale, an attention top-k set, a nearest centroid on ), and on failure it does not escalate. It refuses, widens the row, or scans every centroid, and the refusal names the input. The filter is Shewchuk’s idea; the refusal as a returned value across a kernel interface is the difference.
Prefix caching. Here the prior work already does most of it. SGLang’s RadixAttention keeps the KV cache in a radix tree and evicts least-recently-used leaves first, recursively, while protecting nodes the running batch uses. That is free-face eviction under LRU. vLLM’s automatic prefix caching hashes each block together with the tokens of its prefix, evicts unreferenced blocks by LRU, and on a tie evicts the block at the end of the longest prefix first, which is a depth term. So the connected-subtree constraint is not new, and the syscall-facing cache in Seal OS, which defaults to LRU, is the RadixAttention policy run in kernel memory. What differs: the tree, its frames and its eviction live in the kernel and draw on the kernel’s own allocator; a child is shared only on an exact token match even though the key is a 64-bit digest; and the entrant-count ranking is tested against a null, Belady’s oracle and 32 random seeds on a trace where it wins and one where it loses, with both outcomes published. Whether any of this beats user-space placement has not been measured.
What survives the comparisons. The mechanism I did not find elsewhere is the combination: one certify-or-refuse rule applied across component counts, attention top-k, nearest-centroid lookup on , the zero case and the trend signal of a fold score with a derived scale band, and the kernel’s own boot theorems, with the theorem refusal enforced in CI. It is not applied everywhere: a window that turns is scored from its Rips complex without a certificate, and ManifoldFS places files with an index that carries none. Each part has a named ancestor above; the combination, and the kernel refusing its own convergence theorem at the step it runs, are what I add.
- best centroid in the searched block; the block patch
- true nearest centroid; CERTIFIED
- the bound circle
- block-only answer when it is wrong
- query position
Figure 9. Nearest-centroid lookup on the sphere with its certificate. Centroids sit on S² with their Voronoi cells tinted; a latitude-longitude grid hashes each centroid to a cell. For a query you move, the index searches the 3×3 block of grid cells around it (the whole cap near a pole), and the answer is certified only when the distance to the best centroid in the block, plus 1e-9, does not exceed the distance from the query to the edge of the block; otherwise every centroid is scanned. The geodesic circle of that radius is drawn around the query. A batch panel runs seeded queries for five centroid counts and compares the certified answers with the same lookup with the certificate switched off. The 1,215-of-5,000 figure from the repo is quoted beside it, not reproduced: the old code is not in the checkout.
Limitations
These are stated as the repo states them, and where the code at 36b1400 has moved past a document, I say which.
No user mode. No instruction has executed in ring 3. /bin/init is absent and the kernel falls back to its in-kernel desktop; with a /bin/init present, boot stops after loading it. The repo’s record, made at 9ebbe2e, says syscall_entry ran on the user’s stack with no swapgs. At 36b1400 it executes swapgs and loads the task’s kernel stack; since nothing has run in ring 3, that path has not been exercised from user mode. The record also says no task is ever scheduled; at this commit the scheduler adopts the boot thread in init, and I have not run it, so I make no claim either way. Application-processor bring-up exists and is not called.
No real models. Every stratum and foliation number comes from a synthetic fixture. The README: “It has never seen a real model, and its verdict is advisory: nothing enforces it yet.” On the chat trace foliation loses to LRU (5,284 against 8,068 bp), to the locality-only null (6,818) and to all 32 random seeds; with 16 live conversations it reverses again in one mutation build. The reported results are at one pool size (24 blocks); the source also replays each trace at six sizes from 8 to 48 blocks, which the repo’s one-pool-size limit does not mention. Whether kernel placement of the KV cache buys anything over user-space PagedAttention has not been measured.
The κ band covers one shape. The band in (6) is proved for a symmetric V only. A V descending at 0.005 and climbing at 0.01 per step scores 0.016 at and 0.406 only at 1.8, above the ceiling, so no choice of inside the band detects it.
T4 is refused and needs a redesign. No step size earns it, because the loop’s gain is about and (9) assumes one. System calls 100 and 102 still print FAILED for every theorem that is not certified, eight of the ten, where the boot log, the ManifoldFS status and the theorem viewer print CERTIFIED, NOT CERTIFIED or NOT CHECKED. Seven of the ten boot lines are not checked.
Lean is not connected to kernel code. Eleven .lean files, 0 sorry in code, four True := trivial placeholders, and the proved statements are algebraic side lemmas. None is linked to the Rust by refinement.
CI is red. The QEMU job of run 36165748105 fails at the language-hygiene gate, on scripts/ci_parity.sh, and the gates after it in that job did not run. The kernel’s own unit tests are not run by CI: the crate is outside the Cargo workspace, and the Kernel Tests workflow last executed on 2026-08-11 (514 of 514). Two of the 25 boot milestones are string matches that prove little.
One machine, no comparison. Hardware is one QEMU configuration (q35, OVMF, AHCI, 4 GiB, no NIC). The GPU path ran only on its CPU fallback. Every cycle count is QEMU TCG with an emulated TSC. No comparison against Linux or Ubuntu has been run. Nothing here is production-tested.
Security is measured, not complete. W^X holds since b3cf934, but the probe classifies per mapping; SMEP and SMAP were not exercised because the CI CPU model lacks them; KASLR randomises mappings, not the image base. manifold_acl::check_access denies access Linux permits: a uid-1000 process cannot read a 0644 root-owned file. ManifoldFS places files with its own cell index, fs/voronoi_cap.rs, which carries no certificate. No ext4; TLS accepts Ed25519 certificates only; no socket system call exposes the network stack.
The docs lag the code. The drift I found at 36b1400:
- README and THEOREMS.md quote
9 of 10 theorems VERIFIED; ... T1-T3, T5 ACTIVE; the code prints2 certified, 1 not certified (T4), 7 not checked, and T3 and T5 are not checked. - THEOREMS.md cites line ranges for
init_theoremsand averify_topology_theoremssymbol that is no longer inkernel/seal-os/src, and its scheduler and ManifoldFS line references point elsewhere at HEAD. - RESULTS.md’s syscall-entry limit predates the
swapgsentry now inuserspace.rs. - RESULTS.md says
FitActionis “enforced nowhere”; at HEAD a threshold is published that only an unconstructed preset reads, so the effect is the same. - The older papers under
docs/research/claim a 241 to 1500× KV-cache speedup over LRU and a 21.8M-token horizon. Neither figure appears in README, RESULTS or THEOREMS, and neither is a current result. The current foliation numbers are the ones above. - RESULTS.md’s subsystem table sums to 92,037 of the 96,110 kernel lines it states (at
9ebbe2e); 4,073 lines are not itemised.
Withdrawn: T4 certified at boot
Killed by: evaluated at Δt = 1, a step no runtime caller uses; at Δt = 0.01 the margin is 5.01 and the gate refuses (commit 3c14df0)
Withdrawn: The Rips-cycle floor for κ is √5/√3 ≈ 1.291
Killed by: wrong on both counts; pairing at matched value is not the closest approach, and the floor is √(8/3) (trajectory_shape.rs:41-45)
Withdrawn: κ = 1.5, with a ceiling of 2.0 argued from a straight arc
Killed by: 1.5 detected no clean V at all; the 2.0 ceiling fell to a monotone staircase that scored 0.969 at 1.5 before two-step chords were quotiented (trajectory_shape.rs:62-64)
Withdrawn: The foliation policy beats LRU
Killed by: a pool sweep: at 32 plaques and above LRU reaches the same 9.52 % ceiling, and on a pure-recency workload foliation ties LRU exactly (RECORD.md:810, 821-824)
Withdrawn: A bounded-degree verdict for the sparse filtration
Killed by: it measured undirected degree, not the bounded quantity; retracted one iteration later (RECORD.md:4238-4246)
Withdrawn: Occupancy-flow equilibrium gives a doubling bound on S²
Killed by: S² is Ahlfors 2-regular with constant at most 25, so the conjecture says nothing (RECORD.md:4959-4965)
Withdrawn: The paper's T3 degree bound, as derived
Killed by: an earlier revision derived it wrongly; it is now labelled an assumption (epsilon_hollow.tex:259-268)
Read more
The project page at teerth.dev/Epsilon-Hollow draws the results live. The source is github.com/teerthsharma/Epsilon-Hollow, and the short link is teerth.dev/epsilon-hollow. Key files at commit 36b1400:
- README.md: the idea and the four pillars.
- docs/RESULTS.md: every number with its provenance, equations (1) to (9), the Limits list.
- kernel/seal-os/src/theorems.rs: the boot theorem lines.
- kernel/aether/aether-verified/lean/: the Lean 4 package.
- certified_betti.rs, attention.rs, trajectory_shape.rs and foliation.rs: the certified kernels and the KV prefix tree.
Related essays on this site: separatrix, which grew out of this work, and Aether-Lang, whose no_std runtime the kernel embeds. The upstream fixes above are at openxla/xla#46539 (closed, and landed on main through Google’s internal import as 3d5df1d) and tensorflow/tensorflow#124410 (merged; short link teerth.dev/tensorflow-124410).
“epsilon hollow have helped xla” owner, 2026-10-11
openxla/xla#46539: deterministic GPU reduction grouping. The PR is closed; the change landed on main through Google's internal import as commit 3d5df1d.
“…tensorflow” owner, 2026-10-11, continuing the line about xla
tensorflow/tensorflow#124410: exact transitive closure of collective control edges. The PR is merged.
separatrix is a tool that came out of Epsilon-Hollow owner, project family, 2026-10-11
separatrix has its own essay.
Only links the owner confirmed on 2026-10-11 are drawn; arrows follow how the owner words each relation. A merged or landed pull request is not evidence for any claim on this site.
- Epsilon-Hollow
- arrow: a relation the owner confirmed (led to, came out of)
Figure 10. Where Epsilon-Hollow's work went, drawn only from links the owner confirmed on 2026-10-11. The repository led to openxla/xla pull request 46539 (closed; the change landed on main as commit 3d5df1d) and to tensorflow/tensorflow pull request 124410 (merged), and separatrix came out of it. Arrows follow how the owner words each relation. Focus or hover a node to read the owner's statement and what the pull request changed; the chips filter the map to the upstream pull requests or to separatrix. A merged or landed pull request is not evidence for any claim on this site.
Cite this essay
Used anything from here? Please credit and link. How to cite
Teerth Sharma (2026). "Epsilon-Hollow". teerth.blog. https://teerth.blog/epsilon-hollow (CC BY 4.0)
@misc{sharma2026epsilon-hollow,
author = {Teerth Sharma},
title = {Epsilon-Hollow},
howpublished = {\url{https://teerth.blog/epsilon-hollow}},
year = {2026},
note = {CC BY 4.0}
}