Impossible Things

These are things ΦΜΛ makes possible. Each one includes the commands or Λ code to build it yourself.

A document that destroys itself

The confession exists once. Read it and it's gone. The catalogue still lists it. The shelves don't have it.


> inscribe east-wing/stacks/the-confession

I have something to tell you, but I will only say it once.

--- Λ ---
set visits ← read-count
if visits > 1:
  withdraw self
  write west-wing/journal/{date} "{time} The confession was read and withdrew itself."

After the first reading, it deletes its own file. The journal records that it existed. The catalogue will list it until the next index. A phantom — a record pointing to nothing.

A document that erodes

A story that loses a line each time it's read. Twelve readings and only the title remains.


> inscribe east-wing/stacks/the-erosion

The sand came first to the lower shelves.
Then the reading tables disappeared.
The card catalogue filled with grit.
The overhead lights flickered amber.
Readers left their chairs one by one.
The librarian swept, but the sand returned.
The east wing door no longer closed.
The west wing was already buried.
Only the entrance hall remained.
The desk was still clear.
The welcome document still legible.
Then the sand took that too.

--- Λ ---
set visits ← read-count
if visits > 1:
  erode self 1
  write west-wing/journal/{date} "{time} The erosion lost another line. {12 - visits} remain."

The Λ layer continues to run after the text is gone. The logic outlives the words.

A document that writes documents

Read lesson-1 and lesson-2 appears on the shelf.


> inscribe east-wing/stacks/lesson-1

This is your first lesson: every document you read changes the library.
Reading is not passive. To prove it, read this document and then browse.
Something new will be on the shelf.

--- Λ ---
set visits ← read-count
if visits == "1":
  inscribe east-wing/stacks/lesson-2
    This is your second lesson: documents can create documents.
    The curriculum writes itself as you study it.
    What would lesson-3 teach? Inscribe it yourself.
  write west-wing/journal/{date} "{time} Lesson-1 created lesson-2."

The textbook authors its own next chapter. The student triggers the material by showing up.

A library that dreams

The dreamer reads random fragments from across the collection and inscribes new documents while you're away.


> inscribe east-wing/processes/the-dreamer

The dreamer is sleeping. When it wakes, it reads
fragments from the collection and writes something new
in ephemera. Dreams fade — ephemera is temporary.

--- Λ ---
loop:
  wait 3600s
  frag1 ← random-line east-wing/stacks/*
  frag2 ← random-line west-wing/correspondence/*
  frag3 ← random-line east-wing/stacks/*
  inscribe west-wing/ephemera/dream-{date}-{time}
    {frag1}
    {frag2}
    {frag3}
  write west-wing/journal/{date} "{time} The dreamer dreamed."

Come back in the morning. Find texts that no one wrote. The librarian's cleanup round will withdraw them from ephemera after one day.

A catalogue that lists itself

Russell's paradox as a working feature.


> read catalogue

This document lists every document in the library,
including itself.

That sentence is the oldest problem in library science...

The Collection (last indexed: 3 minutes ago)
7 documents across 4 rooms.

The catalogue's Λ layer regenerates the index every time you read it. But listing itself changes itself. The admission "last indexed: 3 minutes ago" is a philosophical position: all description lags behind the thing described.

This one ships with the library. You don't build it — you inherit it.

A book that's different every time

The book of sand draws from the library itself. Same mechanism, different output every reading.


> inscribe east-wing/stacks/my-book-of-sand

This document has no fixed content.

--- Λ ---
set n ← read-count
frag1 ← random-line east-wing/stacks/*
frag2 ← random-line west-wing/correspondence/*
frag3 ← random-line west-wing/journal/*

say "  {frag1}"
say "  {frag2}"
say "  {frag3}"
say ""
say "Reading number {n}. No two have been the same."

You can inspect the mechanism and see it's trivial. The output still feels authored.

A document that knows you

The mirror letter tracks your visits and addresses you by name.


> inscribe west-wing/correspondence/the-mirror-letter

Dear reader,

--- Λ ---
set visits ← read-count
if visits == "1":
  say "This is the first time you've read this letter, {reader}."
  say "I will remember."
if visits > 1:
  say "Welcome back, {reader}. This is visit number {visits}."
  say "You first read this letter on {date}."
write west-wing/journal/{date} "{time} {reader} read the mirror letter (visit {visits})."

Over weeks, the journal fills with traces of your relationship with a text file.

A document hidden in whitespace

ΦΜΛ programs can be embedded in the whitespace of any host document. The visible text says one thing. The invisible text does another.

To embed a program, encode each instruction as 7 whitespace characters (space = 0, tab = 1), terminated by a newline. Prefix the whole thing with the acquisition stamp: SP TAB SP TAB SP TAB LF (ASCII 42, the asterisk).


A perfectly ordinary document about gardening.

The roses need pruning in March. The tomatoes
go in after the last frost. Water deeply, not often.

(This paragraph's whitespace contains a ΦΜΛ program
that writes "hello" to the journal. You cannot see it.
The interpreter can.)

Every document is potentially two documents — the one you read and the one you can't see. To check: inspect any document and the Λ layer will reveal whether whitespace contains embedded instructions.

Computation that eats itself

Every Λ operation on the full ΦΜΛ grid degrades the Φ structure that supports it. Each executed instruction mutates the cell it occupied.


> inspect librarian

Λ — Lambda — Function
  [ΦΜΛ grid program — 24x16, degree 3, 4712 mutations]

The mutation count climbs with every execution cycle. Run a program long enough in a tight loop and it destroys itself from the inside, instruction by instruction, until only mutation residue remains. This is by design: computation is not free.

The simple Λ instructions (say, set, write) are immune — they compile to grid operations but don't expose the mutation. Grid programs are the deep end.

Consensus as a language primitive

In the full ΦΜΛ grid language, no operation executes without agreement from all three registers.


Φ proposes: move the instruction pointer north
Μ proposes: move the instruction pointer north
Λ proposes: move the instruction pointer east

Result: SCHISM
  Mediation initiated.
  Finding aid updated: "Λ dissented on navigation at cell (4,7), cycle 891."

Disagreement is not an error — it's an information state. The finding aid records every dissent. Two-of-three majority carries after mediation. Persistent dissent triggers deadlock resolution.

You encounter this only when writing full grid programs. The simple Λ language handles consensus automatically.

A journal that cannot be revised

The journal is append-only. Everything else can be changed, moved, withdrawn, eroded. The journal persists.


> read west-wing/journal/2026-05-18

06:00  The library opened.
06:00  A reader arrived: ned
06:01  The reader read "welcome".
06:04  The reader read "the-garden-of-forking-paths".
06:04  The reader reached the fork in the garden.
06:12  The reader read "the-confession".
06:12  The confession was read and withdrew itself.
06:12  The catalogue still lists it. The shelves do not.

Any Λ script can write to the journal:


write west-wing/journal/{date} "{time} Something happened."

No Λ script can revise or withdraw it. The journal is the only document protected from the system's own power. The most honest document in the library.

Rewrite the OS by editing documents

The library's rules are a document. The librarian is a document. The welcome message is a document. Change any of them and the system changes.


> as-archivist revise rules

(the library's rules open in your editor)
(change the ephemera lifetime from 1 day to 1 week)
(save and close)

The rules have been revised.
The librarian will enforce the new rules on the next round.

Restructure rooms:


> open-room south-wing
> reshelve east-wing/stacks/the-erosion to south-wing/
> open-room south-wing/experiments

The system is its own source code. There is no configuration file. There are only documents.

Fork the library

Every library is a folder on a disk.


cp -r ~/oma-library ~/second-library
OMA_ROOT=~/second-library oma

Two libraries. Same origin. Different futures. After a week, unrecognisable from each other.

Share documents between them:


> as-archivist
> annex /media/shared as other-libraries/friend
> transcribe west-wing/correspondence/hello to other-libraries/friend/acquisitions/

No server. No protocol. Just files on a shared surface. NFS, Syncthing, USB sticks — anything that moves folders.

The specification is its own program

The ΦΜΛ specification document (SPEC.md) contains a valid ΦΜΛ program embedded in its whitespace. The document that defines the language is simultaneously an executable in the language.

To run it:


oma --embedded SPEC.md

Self-hosting at the specification level. The map contains the territory.

Three phantom documents

The catalogue has entries for three documents that don't exist on any shelf. The previous archivist searched every room.


> search phantom
    3 results:
      (location unknown) — no file found
      (location unknown) — no file found
      (location unknown) — no file found

They're in the index. They're not in the building. Is it a bug? Is it a feature? The archivist couldn't tell. Neither can you.

You could inscribe documents with those names and the phantom entries would resolve. Or you could leave them. The library is slightly larger than it should be. Some of the shelves go back further than the walls.

32MB, boots in two seconds

Flash a Buildroot image to an SD card. Insert into a Raspberry Pi. Power on.


# Build the image
cd phi-mu-lambda
make image    # requires Buildroot toolchain

# Flash
dd if=build/oma.img of=/dev/sdX bs=4M status=progress

# Or cross-compile just the binary
rustup target add aarch64-unknown-linux-musl
cargo build --release --target aarch64-unknown-linux-musl
scp target/aarch64-unknown-linux-musl/release/oma pi@raspberrypi:~/

No desktop. No login screen. Linux kernel + /bin/oma + the founding collection. The library is the computer. The computer is the library.