Abstract
Computers constantly change representation. A file is compressed, a program is compiled, a term is reduced, a graph is serialized, a trace is stored in a different layout. Most of the visible structure changes. The practical question is: what, exactly, is allowed to change without changing the thing itself?
This page gives one answer: an encoding may choose a state space, a wiring or adjacency, and a rewrite rule. Once those are fixed, an invariant is forced. Two representations count as the same only when they preserve that invariant, even if their bytes, labels, syntax, or local reduction paths look completely different.
The examples below are meant to be rerun, not merely read. Each one shows the same idea in a different setting: identity separated from labels, structure separated from presentation, and computation understood as a change of representation that preserves an underlying object.
Introduction
Start with something mundane. Renaming a file changes a path but not its bytes. Recompressing it changes every byte but preserves the decoded content. Reformatting source code changes spacing but not execution. Compiling a program changes nearly everything you can inspect locally, yet the compiled result is still expected to preserve what the program does.
These are all versions of the same question: when two representations differ, what makes them representations of the same thing rather than different things? The usual answer is informal — “they behave the same,” or “they decode the same,” or “they reduce to the same result.” This page makes that answer concrete by treating each encoding as a choice of state, adjacency, and rewrite, and then asking what remains invariant across those choices.
From that point of view, identity is not a filename, a glyph, a syntax tree, a memory address, or a byte pattern. Those are all representations. The invariant layer is whatever survives when those representations are translated, normalized, or recombined.
The sections below move from familiar computing examples to more structural ones. You can flip bits, compare encodings, inspect graphs, follow reductions, and watch different representations converge. The goal is not to ask for belief. The goal is to make the invariant visible.
The short version
An encoding can change names, layout, topology, and rewrite strategy. What makes two encodings the same is the invariant that survives those changes. Pick a way to store something, and three choices are yours: what states look like, how they connect, and what rule moves you between them. A fourth thing comes out the other side unchosen — the same every time, no matter how the first three were picked. This page hands you nine different encoders and lets you find that fourth thing yourself, on your own input, in your browser.
Computers are always translating. Files are renamed, compressed, parsed, serialized, compiled, reduced, and shipped across different storage and execution formats. The visible form changes constantly. The useful question is what stays the same through those changes.
One answer shows up again and again: an encoding may choose a state space, a topology, and a rewrite rule. Once those are fixed, an invariant is no longer a matter of taste. Two encodings represent the same thing exactly when that invariant survives the translation between them.
The sections below make that claim concrete with small computations. Some use text, some graphs, some reduction paths, some machine-level structure. None of them require accepting a theory in advance. Each one is a check you can run and inspect for yourself.