Six Birds Theory
I used to think “emergence” was one of those words people reach for when they don’t want to admit they’re hand-waving. Like: consciousness emerges, order emerges, meaning emerges—and then everyone nods and the conversation moves on.
The Six Birds paper tries to do the opposite. It treats emergence like an engineering problem:
If higher-level “things” appear, what are the minimal operations that make them appear, and how do we tell when we’re not fooling ourselves?
It’s a framework that’s half category-of-descriptions, half information theory, with a very CS vibe: define the interfaces, define the closure operator, check invariants, and don’t confuse your abstraction with the underlying machine.
The “six birds” are six structural moves (P1–P6) that keep showing up when you build any layered description of a system.
The mental model: abstraction is a function, and “things” are fixed points
Here’s the main move, in programmer language.
You have some messy underlying state space. Call itS. You can’t—or don’t want to—work at that level all the time, so you build an abstraction:
- a mapping from micro-states to macro-states
- a “lens” that forgets details
Think: hashing, compression, summarization, type-erasure, quantization, feature extraction.
Then you also have a completion step: a rule that takes a partial description and “finishes it” into a stable one. Mathematically it’s like a closure operator; in dev terms it’s like normalization.
Examples:
- format code until reformatting doesn’t change anything
- resolve dependencies until the lockfile stops changing
- run a parser + AST normalizer until the AST is canonical
That’s the key: an object is whatever survives normalization.
If applying the completion rule again does nothing, you’ve hit a fixed point. And those fixed points are the “things” your theory can talk about.
So emergence isn’t mystical. It’s what happens when:
- you compress, and
- you normalize, and
- the result stabilizes.
The Six Birds (what they are in CS terms)
The paper argues these six features basically come for free once you accept bounded interfaces and composable dynamics.
1) Operator rewrite (P1): “When the abstraction doesn’t commute, you have to adapt.”
You want this diagram to commute:
- update at micro-level → then abstract
vs. - abstract → then update at macro-level
If those two routes disagree, your macro-dynamics aren’t “closed” under your abstraction. In CS terms: your API contract is leaky. You either:
- refine the abstraction,
- change the macro update rule,
- or accept you can’t model it cleanly at that level.
This is the “debugging emergence” bird.
2) Constraints (P2): “Not every macro state is representable.”
Once you compress the world, you don’t get all possible summaries—only the ones that can actually come from real micro-states.
This is like:
- not every JSON schema is realizable from your database
- not every type signature corresponds to a constructible value
- not every “summary” is consistent with any underlying data
Your theory implicitly defines a feasible subset of macrostates.
3) Route mismatch / holonomy (P3): “Order matters.”
Sometimes “do A then B” isn’t the same as “do B then A.” That’s it.
In systems terms:
- caching, batching, and streaming can give different results
- different pipelines can disagree even if they look equivalent at a distance
P3 is the framework’s diagnostic for when abstraction and dynamics don’t play nicely.
4) Staging (P4): “You can build multi-level stacks of abstractions.”
You don’t just have one abstraction. You have layers.
Micro → meso → macro → meta.
That’s basically:
- compiler passes
- network stack layers
- ML representation learning
- distributed system observability (logs → traces → metrics → dashboards)
But the paper adds a constraint: your “interface budget” is bounded. You can’t refine forever without paying cost.
5) Packaging (P5): “Coarse-graining is quotienting.”
This is the classic move: multiple micro-states map to one macro label.
It’s the equivalence relation behind every abstraction:
- many bytes → one file hash
- many frames → one “scene”
- many user actions → one “session”
- many particle positions → one temperature
Objects are what you get after you accept that some distinctions don’t matter for this purpose.
6) Accounting (P6): “Track monotones—quantities that behave predictably under compression.”
Once you throw information away, you need invariants. Or at least monotones: things that can only go one way.
The paper leans heavily on information-theoretic audits here:
- KL divergence on histories (path-space) to quantify irreversibility
- data-processing style results: you can’t increase certain asymmetries by just forgetting details
Translation: if your abstraction “creates” irreversibility, you probably smuggled it in by hiding state or changing the rules midstream.
The part I actually like: it won’t let you fake the arrow of time
A lot of “emergence” talk slides from “we lost information” to “therefore the system is irreversible” like it’s obvious. The paper is stricter.
It says: if you want to claim an arrow of time, quantify it as an asymmetry between forward and time-reversed trajectories, not just between states. Then prove your transformations don’t artificially inflate it.
A key lesson: coarse-graining can hide irreversibility, but it shouldn’t manufacture it.
And it calls out a classic trap: if your system is secretly being driven by an external schedule (a hidden “clock”), and you don’t include that clock in the state, you can make things look more irreversible than they are. The fix is basically: model the missing state, don’t moralize the bug.
That’s such a CS move it hurts.
So what does “Six Birds Theory” give you?
Not a grand story. A test bench.
It gives you a way to:
- define what counts as an “object” in a description (fixed points of closure),
- detect when your macro laws aren’t well-defined (non-commuting diagrams),
- understand why closure saturates (re-running normalization won’t invent new structure),
- and separate real irreversibility from artifacts of your abstraction pipeline.
If you’ve ever built a system where the dashboard lied because the instrumentation was lossy, you already understand the spirit of this.
Emergence is partly about the world—but it’s also about your interface to the world.
Six Birds is a framework for not confusing those two.
The simplest takeaway
When you say “X emerges,” you’re implicitly claiming:
- You chose a compression (a lens).
- You chose a normalization (a closure rule).
- A stable pattern showed up as a fixed point.
- Your pipeline is consistent enough that the pattern isn’t an artifact.
- If you want novelty, you’ll need new predicates, not infinite re-normalization.
- If you want an arrow of time, you need an information-theoretic audit, not vibes.
That’s the whole thing.
And honestly? That’s already more honest than most emergence talk.


