Your file is the specimen · number

The Part of Your File That Will Not Shrink

Drop any file up to 8 MiB and this page attempts three named lossless descriptions entirely on your device, decodes every output it counts, and shows the byte-for-byte check first. On the shipped 152,089-byte alice29.txt it meets two published gzip figures for the same bytes, 2.86 bits per character in Arnold and Bell's paper and 2.85 on the corpus website, beside their separate 2.30 PPMC result. The concession is the result: these lengths are upper bounds under chosen codecs and decoder accounting, not the file's information content, randomness, or an incompressible core.

0 · the published anchor runs first

shipped specimen, exact bytes

Ross Arnold and Tim Bell's 1997 Canterbury Corpus paper prints two different rates for the same alice29.txt: gzip at 2.86 bits per character, and their separate PPMC implementation at 2.30. Before this page accepts your file, it runs the exact corpus member through this browser's gzip, opens it again, and compares all 152,089 bytes.

Table 4, gzip
2.86 bpc

the value reproduced here when this engine rounds to the same figure

Table 4, separate PPMC
2.30 bpc

historical disagreement, quoted but not reproduced by the custom order 1 model

Running the anchor.
The file control remains closed until this finishes or gives a specific refusal.

Two published gzip figures already exist for these same 152,089 bytes. Arnold and Bell's Table 4 prints 2.86. The corpus website's own results page for the method it calls gzip-b, last updated 3 May 2001, prints 2.85 for the same text file. GNU gzip 1.12 on this workstation lands on both: 54,423 bytes at its default level and 54,179 bytes at --best, neither storing a filename. The container may store one, by RFC 1952 FNAME; here alice29.txt and its zero terminator add 12 bytes, which is 96 bits and far too little to move either second decimal, though divided by a few thousand input bytes rather than 152,089 the same 12 bytes would move it. The offline verifier reproduces the phenomenon live with no external tool: one zlib, one file, four compression levels, four different two-decimal figures, every one of them a valid gzip stream that decodes to these exact bytes. The anchor of this page is already not a property of the file.

Specimen provenance: the exact 152,089-byte member of the immutable Standard Canterbury Corpus archive, Alice's Adventures in Wonderland, Millennium Fulcrum Edition 2.9, by Lewis Carroll. SHA-256 7467306ee0feed4971260f3c87421154a05be571d944e9cb021a5713700c38f0. Arnold and Bell say the corpus candidates were public domain. The 1865 text is public domain. No licence conditions are claimed.

1. Now give the machines your file

A file is bytes before it is a photograph, archive, font, or confession. This instrument reads the complete byte sequence and never branches on MIME type or extension. The browser supplies only the basename. A file above 8 MiB is refused before its bytes are read.

Instrument 1 · three reversible descriptions

worker thread, memory only

Waiting for the Alice anchor.

specimen basename
alice29.txt
complete byte count
pending
SHA-256
pending
CRC-32
pending
empirical byte histogram H0
pending
named descriptiontotal bytesbits / input bytesavingsframe accountingdecoder check
pending
C = complete framed output bytes
rate = 8C / N bits per input byte
savings = 100 × (1 - C / N)%

For an empty file, both ratios are undefined and the page says so. Expansion is ordinary for short, encrypted, or already-compressed inputs. It does not diagnose any of those things.

The browser gzip row is whatever valid gzip stream this engine chooses to make. The other two rows use one published arithmetic-coding construction with two deliberately small models. Order 0 predicts the next byte only from global counts. Order 1 keeps a separate set of counts after each previous byte. All 257 symbols, bytes 0 through 255 plus EOF, begin with count 1. Counts change after each symbol and rescale at total 16,383. The frame records magic, version, model order, original length, payload bit length, and CRC-32.

Each row remains absent until its matching decoder has seen EOF, recovered the declared length, checked CRC-32 where the format carries it, and compared every recovered byte. Gzip gets an additional inspection: magic bytes 1f 8b, method 08, optional header fields parsed by flags, trailer CRC-32, and ISIZE modulo 232.

2. Make the supposed minimum move

The shortest row is tempting to name as the stubborn part of the file. It is only the shortest description found by this finite set. Remove a machine and the best-so-far answer can get worse. Add one under the same accounting and it can only stay put or improve. Neither motion reveals a hidden intrinsic number.

Instrument 2 · the finite codec set

the word “best” keeps its boundary
Coders allowed into the comparison
Accounting regime

Waiting for codec results.

Wire accounting treats every matching decoder as already installed. That is a large free choice.

The source-charged switch is intentionally awkward. It adds the exact UTF-8 byte length of the shipped reversible implementation to each custom arithmetic stream. It refuses to price gzip because the native decoder's source is not visible to this page. This still is not a proof of the shortest self-contained program. It is a way to stop an installed decoder from disappearing silently from the bill.

One warning about that switch, because it is where this instrument comes closest to saying nothing. The same constant is added to every candidate it prices, so it can never change which of them is shortest. Comparing a codec against itself plus a positive constant is true by construction and carries no information about models. What the charge can change is whether compressing beats simply keeping the bytes, and that depends on length: at this file's measured rate the panel prints the input size at which each priced coder would first break even. That crossover is the only part of the decoder charge with any content, and it is an extrapolation from one rate that a different file has no obligation to keep.

3. Keep every byte, move every answer

The deeper objection is right: these are arbitrary machines. So make that objection operable. Four fixed reversible transforms are placed before every coder, with a six-byte AWTX version and transform ID charged to every total. Those six bytes are not a bookkeeping entry. The description that gets counted is the complete frame, and the way back is to parse that frame, read the transform ID out of it, decode the payload, apply the inverse the frame named, and compare with your original. Corrupt any of the four prefix fields and the round trip refuses instead of quietly succeeding on an ID supplied from somewhere else.

Instrument 3 · reversible transform matrix

not run for this specimen
fixed bijectionH0 bits / bytegzip bytesorder 0 bytesorder 1 bytescomplete inverse
Run the transform matrix when the first three round trips are complete.

Some specimens cannot support this comparison at all. If a file is empty, or is one byte value repeated, all four bijections map it to the identical sequence and every total in the table is then equal by construction. The panel detects that from the transformed bytes themselves, says the specimen cannot demonstrate the comparison, and voids the relevant check instead of showing four identical green rows.

The position permutation starts with indices 0 through N-1 and seed 0x6d2b79f5. For i from N-1 down to 1 it updates state = (1664525 × state + 1013904223) mod 2^32, chooses j = floor(state / 2^32 × (i + 1)), and swaps i with j. Reversal and this permutation preserve the 256-bin byte histogram exactly. XOR delta does not have to.

I

Identity asks each codec about the bytes in their current order.

R

Byte reversal keeps the same byte counts and reverses position. Some local predictions reverse cleanly; others do not.

Δ

XOR delta stores the first byte, then each byte XOR the one before it. Runs and gradual changes become predictable zeros, while other structures can become harder.

P

Fixed position permutation preserves the empirical order 0 entropy exactly while disrupting adjacency. If gzip or order 1 moves while H0 does not, the histogram was never a universal floor for this one file.

A fixed computable bijection has a fixed program, once a reference machine and exact rule are chosen. Under such a machine, shortest-program length before and after the transform can differ by no more than the cost of that transform and its inverse, plus fixed interpreter overhead. This page does not know that additive constant. What it can show is that practical compressor lengths can move by much more than the six-byte transform label while the underlying bytes remain reversibly recoverable.

4. The quantity that cannot be put in the table

Shannon entropy is an average coding rate for a specified stochastic source. The plug-in histogram of one finite file is a useful description of its byte counts, not an intrinsic lower bound on every reversible description of that file. A model using order can fall below the order 0 line without breaking Shannon's theorem, because it is making a different source assumption.

Shortest-program length has the opposite problem. It speaks about one finite string, but it depends on the reference universal machine up to an additive constant and cannot be computed in general. Chaitin's 1966 paper proves that the function assigning shortest program length is not recursive. A compressor supplies one program-like description under one known decoder, which makes an upper-bound witness. Running three, twelve, or twelve million named codecs cannot turn the smallest witness into the unknowable minimum.

One thing about incompressibility can be proved, and it is a counting fact rather than a fact about your file. A lossless coder is injective, so the inputs of exactly N bytes it can send to a strictly shorter output are at most the number of shorter byte strings, (256N - 1) / 255, which is below 1/255 = 0.392157% of the 256N inputs. Most files of any length cannot be shortened by any one codec, and no cleverer codec escapes the count. Read in bits instead of bytes the same argument gives different numbers, and they are easy to blur: the fraction compressible to exactly n-8 bits is 2-8 = 0.390625%, and to at most n-8 bits it is 2-7 = 0.78125%. Three near neighbours, three different statements. The bound is also the exact shape of the honest claim, because it is a statement about the population and not about a named member of it.

There may be regions no selected model shortens. This page cannot certify that such a region is intrinsically incompressible. It also cannot certify randomness, encryption, meaning, quality, originality, or file type. Those are different questions, and expansion is not their detector.

The check

checks begin with the anchor

These checks execute in your browser against the same bytes and functions that produced the tables. A red FAIL line means the instrument failed. The broken-frame checks are first-class results: each feeds a truncated header, wrong magic byte, lying length, nonzero padding, a malformed gzip option, or a corrupted AWTX prefix into the real parser and requires the named refusal by code and byte offset. Two labels are deliberately not passes. VOID means this specimen cannot exercise that check, so counting it green would be a lie. MEASURED means the line is a number this run produced, not a test that could fail, and it is kept out of the score for that reason.

    Every free choice and uncertainty

    Privacy proof · visible before selection

    page-controlled paths only
    0 hooked network API attempts
    resource origins counted after load
    0 third-party resource origins

    The first executable script on this page wraps fetch, XMLHttpRequest, WebSocket, EventSource, and sendBeacon and counts attempts. Resource Timing lists what the browser loaded and its origins. The fallback, worker, code, fonts, and page are same-origin. Your file buffer is passed directly to a local Worker as bytes. It is never put in a URL, object URL, form, log, or browser storage.

    Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; worker-src 'self'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'none'; media-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'

    This audits page-controlled network paths. It cannot audit a browser extension, the browser itself, the operating system, or software outside the page. Open the browser's Network panel before choosing a file if you want an independent view. Same-origin scripts load before the specimen runs; no request contains specimen-derived data. One CSP limit is visible too: browsers ignore frame-ancestors when a policy arrives in a meta element, so that clickjacking rule also needs the site's HTTP response header. The meta-delivered connect-src 'none' rule is enforced here.

    What the arithmetic frames contain, byte by byte

    Bytes 0 through 3 are ASCII AWAC. Byte 4 is version 1. Byte 5 is model order 0 or 1. Bytes 6 through 13 are the unsigned 64-bit little-endian original length. Bytes 14 through 21 are the unsigned 64-bit little-endian payload bit length. Bytes 22 through 25 are CRC-32 in little-endian order. The arithmetic payload follows, with unused low bits of its final byte required to be zero.

    The coder maintains inclusive low and high bounds from 0 to 0xffffffff. It uses the first quarter 0x40000000, half 0x80000000, and third quarter 0xc0000000 for E1, E2, and E3 renormalization and delayed underflow bits. Integer states remain exact; interval products use JavaScript Number because their maximum stays below 253.

    What this page does not prove