AWM
← All games‹ tu93wa30 ›

vc33

Click buttons to move liquid between tanks; the level is won when every cursor's liquid is level with its mark.

7 levels · 10 rules · all levels replayed in Lean

Replay

The certified run that cleared every level, one action at a time. Beside each step: the rules of the model that explain it; they are also marked in the rule list below.

vc33, first frame of the certified run

Explained by

Press Play or step to load the run. Keys, while the player is on screen: ← → step, Space play / pause. A click is circled; cells that changed are outlined.

How it plays

Black dividers cut the screen into several tanks, and the white is liquid. Blue buttons sit on either side of a divider, each belonging to the tank on its side; a coloured cursor sits at the front of the liquid surface in its tank; coloured marks set into a divider show the depth the cursor of the same colour has to reach. Clicking a button moves one portion of liquid from the tank across the divider into this one; a portion equals the thickness of that divider. If the far tank holds less than a portion, or this tank would overflow, the click does nothing. The light grey segments in a divider are gauges: a gauge lights up when the liquid on both sides is at its starting depth, and clicking a lit gauge sends each of the two cursors to the other side. The level is won when the liquid in each cursor's tank is level with the mark of the same colour and that tank touches the divider that carries the mark. The total amount of liquid never changes, and the height of the walls limits how much a tank holds.

vc33, first frame of the certified run
Start
vc33, last frame of the certified run
After the winning move

Model

The final model: 9 object types and 10 rules. Each rule is a Python check against every recorded step; 7 of them are translated into Lean (the paper's per-game table). Code under a rule is the file of the same name in the agent's Lean project.

Object types

Rules

Code is shown with comments and the agent's notes removed; the files as written are in the archive under Check it yourself.

Proof

For every level, Lean starts from the level's first screen, applies the model's rules to the certified actions, and checks that every computed state agrees with the recorded frame on the components the model represents, and that the last one wins. Each theorem is closed by the Lean kernel and is a statement about the learned model.

Every level can be won

theorem L0_winnable : Winnable (World.mk L0_board L0_start) := …
theorem L1_winnable : Winnable (World.mk L1_board L1_start) := …
theorem L2_winnable : Winnable (World.mk L2_board L2_start) := …
theorem L3_winnable : Winnable (World.mk L3_board L3_start) := …
theorem L4_winnable : Winnable (World.mk L4_board L4_start) := …
theorem L5_winnable : Winnable (World.mk L5_board L5_start) := …
theorem L6_winnable : Winnable (World.mk L6_board L6_start) := …
theorem residue_ctrl_winnable : Winnable (World.mk L0_board L0_start) := …
theorem capacity_ctrl_winnable : Winnable (World.mk L0_board L0_start) := …

What cannot be won under the model

theorem cap_no_win (b : Board) (s0 : State) (hk : capKey b s0 = true) :
    ∀ s a, CapOK b s → step b s a ≠ Res.won := …
theorem unsolvable_by_capacity (b : Board) (s0 : State) (hk : capKey b s0 = true) :
    Unsolvable (World.mk b s0) := …
theorem res_no_win (b : Board) (T : Nat) (s0 : State) (hk : resKey b T s0 = true) :
    ∀ s a, ResP T s0 s → step b s a ≠ Res.won := …
theorem unsolvable_by_residue (b : Board) (T : Nat) (s0 : State) (hk : resKey b T s0 = true) :
    Unsolvable (World.mk b s0) := …
theorem residue_scene_unsolvable : Unsolvable (World.mk residueBoard L0_start) := …
theorem capacity_scene_unsolvable : Unsolvable (World.mk capacityBoard L0_start) := …

Statements only; the proofs and the full Lean project are in the archive, with the steps to re-run them, under Check it yourself.

Check it yourself

Everything on this page comes from files you can download and check. The archive holds the agent's files: the recorded run, the concept book, the concept sources, the Lean project and the sealed model file, plus the record of our kernel check.

Download vc33.zip 0.3 MB · 66 files

Re-run the proof

Before you start: our run of this check took 30 s and 1.7 GB of memory at its peak (2026-10-24).

  1. Download vc33.zip and unpack it. The model and its theorems are in archive/vc33-20260907/formal/Game.lean. Before changing it, check that its SHA-256 is
    ec86c7e7a0defa0beca57d5f261704bc1770d7ce0f7553acc3f6c0ddb793afd2
  2. Install Lean with elan, then the version named in the archive's lean-toolchain:
    elan toolchain install leanprover/lean4:v4.34.0
  3. Copy the model file to Check.lean and append these two lines to the copy:
    #print axioms consistent
    #print axioms faithful
  4. In the folder that holds Check.lean, run:
    lean +leanprover/lean4:v4.34.0 -M60000 Check.lean
  5. Lean should finish without errors and print:
    'consistent' depends on axioms: [propext]
    'faithful' depends on axioms: [propext]

What a pass establishes

consistent: for every recorded transition, as read by the agent's parser and with duplicates removed, every rule whose condition holds also has its effect hold. faithful: the certified run, recomputed step by step from the first screen of each level, matches the record and ends in a win. Axioms used: propext, all among Lean's standard ones.

What it does not establish: that the parser reads the screens correctly (that step runs in Python, outside Lean), or that a rule whose condition never occurs in the record is right. The Python file that produced the readings inside the model file is in the archive at meta/repair-20260928/lib/vc33-20260907/_lib.py.