Mathis Fajeau
Interactive paper walkthrough · arXiv 2605.13740 · code atomresearch/pinductor

Pinductor

Learning POMDP world models from observations with language-model priors.

Valentin Six*, Frederik Panse*, Mathis Fajeau*, Lancelot Da Costa*, Mridul Sharma†, Alfonso Amayuelas†, Tim Z. Xiao, David Hyland, Philipp Hennig, Bernhard Schölkopf
* equal first authors · † equal second authors · MPI for Intelligent Systems, IRIIS, UC Santa Barbara, University of Tübingen, University of Oxford, ELLIS Institute Tübingen

An agent dropped into a MiniGrid room sees a 3×3 window of the world and nothing else. Pinductor asks a language model to write the room's rules as Python (initial state, transition, observation, reward), then checks each candidate program the only way a partially observed agent can: by running a particle filter under the program's own dynamics and asking whether its imagined observations explain the real ones. The score, the diagnostics it produces, and the committee disagreement among candidates are fed back to the model for repair. No hidden state is ever used for learning. The result matches POMDP Coder, which trains on privileged ground-truth states, and clears tabular, recurrent-RL and world-model baselines on five MiniGrid tasks, a partially observed Blocks World and PopGym MineSweeper.

10
offline demonstration trajectories, mixed successes and failures
K = 10
particles per candidate model, kernel bandwidth κ = 0.2
0
hidden-state labels seen during learning or evaluation
An agent that sees three cells
drag to orbit · wheel to zoom
1 · The setting

An agent that sees three cells

Whether it navigates a building, operates a robot or plays a game, an agent acting in a new environment first needs an internal model of how that environment responds to its actions. The paper studies the hardest version of that problem in a controlled setting: a MiniGrid room where the agent perceives only the 3×3 window in front of it (highlighted in blue), its compass direction, and whatever it is carrying. Not its position. Not the map. Not the location of the lava.

The room on the left is the paper's Lava task, drawn from the released demonstration file: a 10×10 grid, a column of lava with a single gap, the goal in the far corner. The column and the gap move between episodes, so nothing about the layout can be memorised.

The question the paper asks: can a language model's prior knowledge replace the state supervision that earlier program-induction methods relied on, so the agent can still write down an executable model of this world from its own partial observations?

2 · Background

The POMDP, and what stays hidden

A partially observable Markov decision process is a tuple of states, actions, observations, a transition model, an observation model, a reward and an initial-state distribution. The agent never sees the state s. It keeps a belief Q, a distribution over states, and updates it by Bayes' rule after every action and observation:

eq. 2Q'(s') ∝ O(s', a, o) · Σ_s T(s, a, s') Q(s)

That update needs T, O and ρ₀. In the paper's setting none of them is given; they must be learned from trajectories that contain observations, actions, rewards and termination flags only. Rewards and termination are outcomes of the transition, not perceptual fields: the agent receives them each step but the observation program is never asked to reproduce them.

The panel in the stage's corner prints the current observation exactly as the code does: a 3×3 integer image (2 wall, 1 empty, 11 lava, 10 goal, 12 the agent's own cell), the direction, and the carried object.

3 · Environments

Five gridworlds, one observation interface

The arXiv paper evaluates on five deterministic MiniGrid tasks that vary in what the model has to get right. Each button loads a real initial state from the released N = 10 demonstration files and replays that demonstration; the switcher also carries the three stochastic variants of Appendix D.1 and the two non-grid suites of the camera-ready version.

  • Empty: an empty room, the sanity check; every method except random solves it.
  • Corners: the goal sits in a random corner of a 10×10 room. With a 3×3 view the room is almost rotationally symmetric, so the difficulty is disambiguating where you are.
  • Lava: a terminal hazard. A model that does not encode lava as terminating produces a planner that takes the shortcut and dies. Reward is sparse, so the model must combine the description and the trajectories to learn what lava means.
  • Four Rooms: long-horizon navigation through narrow doorways toward a goal the agent cannot see; each doorway choice is a near-blind decision under the belief over goal location. (The released code uses a 15×15 layout.)
  • Unlock: two rooms separated by a locked door. Find the key, pick it up, toggle the door, traverse, reach the goal. The model must encode the carrying channel and the door-state transition from observation traces alone.

Two suites are not grids. In Blocks World six numbered blocks are dealt afresh over three columns each episode and the gripper, which does not know its own column, sees only the stack beneath it and the block in its hand; the target tower is drawn faintly on the left column, and the replayed demonstration is one of the fifteen breadth-first-optimal solutions the language model was shown. In PopGym MineSweeper a click returns the number of mines adjacent to that cell; the replays are the fifty rollouts the paper used as demonstrations, of which twenty-three end on a mine and twenty-five clear the board; the default replay is a cleared board. Switch to the true-state view to see where the mines were. These two suites matter later, when the question becomes whether the language model learns from data or recalls MiniGrid.

4 · Prior work

What earlier methods quietly assumed

WorldCoder, GIF-MCTS and most LLM program-synthesis methods assume the world is fully observable. The closest predecessor, POMDP Coder (Curtis et al., CoRL 2025), does learn POMDP programs, but after every episode it is handed the ground-truth states it could not observe at decision time, and its refinement prompts compare predicted states with recorded states.

Toggle the two. POMDP Coder learns from the whole grid plus the true pose at every step. Pinductor learns from the cells the agent actually saw, strictly less information. In robots operating in cluttered spaces or agents in imperfect-information games, neither online nor post-hoc state access exists, so a method that needs it cannot be applied at all.

Both methods otherwise share the pipeline, the language model (Qwen 3.6 Plus), the belief-space planner and the evaluation seeds. The one difference the paper isolates is where the learning signal comes from: hidden states, or particle-filtered beliefs.

5 · Method, step 1

The language model proposes the world as code

The prompt contains a natural-language environment description, the ten state-free trajectories, and a code API describing the state, action and observation types. It asks for one Python program implementing four functions: initial_func, transition_func, observation_func, reward_func. Pinductor makes a single joint call per candidate; POMDP Coder makes four per-component calls.

Below are four candidate hypotheses for Lava. They are hand-written stand-ins shaped like the model outputs reproduced in the paper's Appendix I, and they are the programs every interactive panel on this page executes. The stage shows K = 10 states sampled from each candidate's initial-state distribution, the world it imagines before seeing anything.

6 · Method, step 2

Score by filtering, not by state labels

For each candidate m, Pinductor runs a particle filter under the candidate's own dynamics along a recorded trajectory. Particles start from ρ₀ᵐ, are pushed through Tᵐ under the recorded actions, and each predicts an observation with the candidate's observation program. Because that program is usually deterministic, its prediction is softened into a kernel likelihood through an observation distance:

eq. 5, 11d_obs(o', o) = d_grid(g', g) + 1[θ' ≠ θ] + 1[c' ≠ c] d_grid = −log( ε + (1−ε) · (matching visible cells / visible cells)³ )
eq. 6, 8Oᵐ(o | s', a) ∝ exp( −d_obs(oᵐ(s', a), o) / κ ) L(Pᵐ; D) = Σ_τ Σ_t E_{s ~ Q_{t+1}ᵐ} [ log Oᵐ(o_{t+1} | s, a_t) ]

The belief Q is resampled to integer particle counts after every observation. When the total post-observation weight drops below K, fresh particles are drawn from ρ₀ᵐ, rolled through the whole action history and kept with probability proportional to their cumulative kernel likelihood (rejuvenation). The score is the filtered expected log-likelihood, up to constants the negative expected observation energy under the belief the candidate itself induces.

Filter lab

t = 0
step score
–
cumulative L
–
ESS
–
rejuvenation
–
hypothesis (lava column, gap row)countd_obsweight

Violet rows were introduced by rejuvenation this step. Ghost walls on the stage are the belief: opacity follows particle mass, violet walls are fresh draws.

Every particle, one step

predicted view matches exactly (d = 0)partial match, weight shrinksno cell matches, weight 0fresh draw from ρ₀ᵐ, rolled through the whole history

Belief over the hidden layout

Hypotheses over time

Each step happens in four phases: the particles are pushed through the candidate's transition program, weighted by the kernel on their predicted view, resampled into integer counts (at least one copy survives per surviving state, as in the code), and topped up with fresh draws from the candidate's initial-state program whenever the surviving weight falls below K. The map is the whole hidden-layout space of Lava: 6 possible columns × 8 possible gap rows. Watch the mass drain from layouts the observations rule out and pile onto the ones still consistent, and watch what a bad program does instead: C can only ever draw one layout, D matches every view only partially.

Same trajectory, four programs

Cumulative score of every candidate on the selected demonstration at the current κ and K, run to the end. This is the quantity REx ranks and repairs on.

programLmin ESSmedian dverdict
7 · Method, step 3

Execution becomes debugging feedback

The next prompt does not carry only a scalar score. It summarises where the candidate failed: execution errors, trajectory segments with large observation distance, reward and termination mismatches, and the particle filter's health. The block below is assembled live from the filter lab's current state, in the format of the refinement prompt reproduced in Appendix I.

The prompt also carries a query-by-committee signal. The true transition is unavailable, so the transition programs proposed so far act as a committee: for a belief particle s and an action a, each votes for a next state, and disagreement is the normalised vote entropy

eq. 9VE(s, a) = −(1 / log|C|) · Σ_y (V_{s,a}(y) / |C|) · log(V_{s,a}(y) / |C|)

computed on belief particles visited during filtering, for realised and counterfactual actions. Contexts with high entropy are shown to the model together with the observation and the action, so it sees where the current family of programs is unsure. The signal is diagnostic only; it never enters the selection objective.

Committee disagreement on the current belief

actionparticles where programs disagreemean VEwho moves, who stayson stage

"Show" puts one disagreeing particle on the stage: a white ring on the particle's position and one coloured ring per program at the next position that program predicts. Rings that coincide are the programs that agree.

8 · Method, step 4

Refinement as a tree, not a chain

Refinement-by-execution repeats proposal, scoring and feedback over J rounds. Each round picks one existing candidate as the parent, asks the language model for M = 5 revised programs, scores them and adds them to a persistent pool. The parent is chosen with UCB1, so high-scoring candidates are refined more often but less-explored branches keep an exploration bonus:

eq. 17UCB(p) = S̄(p) + c_ucb · sqrt( log n_parent(p) / (n_p + 1) ) c_ucb = 1

The smoothed denominator keeps the bonus finite for unexpanded nodes, so a fresh node cannot dominate on the bonus alone. Programs that crash during filtering receive −∞, stay in the pool for their diagnostics, and can never be selected. After all rounds the final program is sampled from the near-best set, every candidate within one empirical standard deviation of the best score, with a softmax at temperature T = 0.1:

eq. 18, 19N = { j : S_j ≥ S* − std({S_j'}) } Pr(m* = m_j) ∝ exp(S_j / T), j ∈ N
round 0 / 5
Scores in this animation are synthetic. The mechanics are the paper's: UCB1 parent choice, five children per round, crashed candidates kept but unselectable, near-best sampling at T = 0.1.
best score S*
–
near-best set |N|
–
sampled m*
–
9 · Method, step 5

Plan in belief space with the program you chose

The selected program is used directly by a belief-space planner, the determinized A* of POMDP Coder (PO-DA*). Nodes are beliefs; an edge applies an action and branches on the predicted observation. Each branch costs

g' = g − E[r] − λ · log p(o) + action cost, priority = g' + entropy_coeff · H(Q')

with a budget of 5,000 belief expansions. The entropy term is the one hyperparameter where the two LLM methods differ: 1.0 for Pinductor, 0 for POMDP Coder, because tuning it helped Pinductor and did nothing for the baseline. During the episode the belief is tracked with the same distance kernel used for scoring, so the object the planner consumes is the object the score evaluated.

belief entropy
–
hypotheses alive
–
expansions
–
outcome
–

Entropy of the filtered belief over the hidden layout, step by step. In the paper's Figure 4 the same curve falls to zero within an episode; the graded kernel makes the descent smoother than the baseline's exact matching.

10 · Method, step 6

Close the loop

After each evaluation episode the new trajectory is appended to the replay buffer and a fresh REx round runs online (five attempts), so the program keeps improving from the agent's own experience. The protocol behind every number in the next section: ten offline demonstrations, three evaluation episodes per run seed, ten seeds, 95% bootstrap intervals over seed-level means.

The whole loop runs on a CPU workstation; the language model is reached through OpenRouter. The cost is real: median wall-clock per Lava run is 33 minutes for Pinductor against 17 for POMDP Coder, and Pinductor's joint prompts consume roughly three times the tokens.

Median [interquartile range] minutes per run at N = 10, Appendix H.1.

What comes out is not a policy but four auditable functions. Whether they are right is measured next.

11 · Experiments

What the induced programs are worth

Every number below is transcribed from the camera-ready result files shipped with the code (results/*.csv) and from the paper's own aggregate tables. Metric: mean discounted return at γ = 0.98 over 10 seeds × 3 evaluation episodes, with the share of episodes solved. MineSweeper returns are normalised to [0, 1] and sit on a different scale from the grid tasks. Hover any mark for the exact value; every figure has a table twin.

Main comparison on MiniGrid

Pinductor (observation-only)POMDP Coder (privileged state)other armsoptimal, full observability
Reading. Pinductor matches the privileged-state baseline on every task and beats it on Four Rooms. Tabular estimation from the same ten demonstrations barely leaves zero except on Empty. The camera-ready adds the arms reviewers asked for: recurrent PPO, DreamerV3 online and demonstration-seeded, and a "direct LLM" that picks actions without any induced model. Demonstration-seeded DreamerV3 is the one learned baseline that competes, and it uses a thousand interactive episodes. Ground-truth models run the paper's own filter and planner with hand-written programs, so they are the reference a method could in principle match; the dashed optimum sees the hidden state and plans exactly.

Beyond grids: Blocks World and MineSweeper

PinductorPOMDP Coderother armsoptimal
Reading. Blocks-rand6 is the domain built to answer "does the model learn or recall?": six blocks scattered afresh every episode over three columns, 105,840 reachable states, and transition conventions deliberately left out of the description. Pinductor is the only non-privileged, interaction-free learner above zero; the privileged baseline is stronger here than on MiniGrid, which is the measured value of state supervision on a harder domain. On MineSweeper the offline data are random-policy rollouts and no method ever sees a Medium or Hard board being solved, so the induction arm gets terminal-hazard coverage that imitation-shaped methods do not.

Offline sample efficiency

PinductorPOMDP CoderTabular
Reading. Reward against the number of demonstration trajectories used for induction (Figure 5). Both LLM methods are already strong at two trajectories: the demonstrations mostly help the language model propose plausible structure, they are not enough data to identify the model from scratch. Bands are ±1.96 standard errors over 30 episodes.

Belief entropy during evaluation

PinductorPOMDP Coder
Reading. Entropy of the filtered belief over the hidden state, per episode step (Figure 4a, data from the released series). Pinductor's belief collapses onto the true state within the episode on every task; the graded kernel produces the smoother descent. POMDP Coder's exact-match reweighting stalls on Four Rooms and Unlock. Bands are 95% bootstrap intervals over seeds.

Which language model writes the program

Reading. Same buffer, budget, filter, planner and prompts; only the proposer changes (Table 1). The dependence is a threshold, not a slope: Qwen3 14B rarely produces a usable model, Qwen 3.6 Plus and Claude Opus 4.7 land in the same place. Beyond the threshold, extra capability buys little.

How much of the description the prior needs

L0 noneL1 grid sizeL2 layoutL3 full
Reading. The natural-language sweep (Figure 11; 3 seeds × 3 episodes). Lava needs the structural cue that a wall of lava exists before anything works; Corners and Unlock recover part of the way from trajectories alone. Reviewer MtjE asked for the same sweep on POMDP Coder, promised for the camera-ready.

Object names replaced by neutral labels

with semanticsnames replaced, Pinductorwith semanticsnames replaced, POMDP Coder
Reading. Replacing "lava", "key", "door" by Object_A, Object_B (Figure 12) hurts both methods and kills Lava outright: the language model uses semantics as a structured prior. POMDP Coder is more robust on Four Rooms and Unlock, where its post-hoc state labels can carry what the words no longer do. This is the paper's most honest figure about what the method relies on.

One induction call versus the full loop

single call, no refinementfull pipeline
Reading. What the prior supplies on first sight of the demonstrations, against what refinement and online repair add. The loop, not the language model, accounts for most of the performance on every grid task.

Stochastic variants

PinductorPOMDP Codertabular, random
Reading. Layout, start pose and goal randomised more aggressively (Appendix D.1, Figure 10). Performance drops for everyone, and removing state supervision does not cause a disproportionate loss.

What it costs

Reading. Per run, camera-ready table. Pinductor's joint prompts carry whole trajectories and particle diagnostics, so they are several times longer than the per-component prompts of the baseline; a replayed request to the same provider returns an exactly correct program only 36% of the time, the API variance reviewers asked about.

Does it learn, or does it recall?

Reading. Each deployed Blocks program was audited against the true simulator on all 423,360 transitions. Exact programs earn 0.257, inexact ones zero, and the same planner with hand-written models earns 0.259, so the return is a function of exactness, not of the language model's memory. A second case study, the "wrap-around" seeds: two seeds guessed that the gripper wraps around at the edge, a fact no demonstration contains; after the first failed episode every candidate the model produced was byte-exact. Stripping comments from the prompt breaks the reward function while leaving 70% of transitions exact; replacing the description by a neutral sentence leaves only 30% of programs executable.
12 · Limitations and review

Where the paper is thin, in the reviewers' words and the authors'

The conclusions section names four limitations: a hand-designed observation distance, manually collected demonstrations, no cross-environment transfer, and MiniGrid only. The NeurIPS meta-review (three reviewers, scores 4 / 3 / 2) sharpened them into seven points. Each card pairs the point with what the rebuttal added; green cards were answered with new experiments now in the code release.

Meta-review 1

Stronger non-LLM baselines

Recurrent model-free RL, DVRL, VRM, predictive-state or Bayes-adaptive estimators were missing; the tabular baseline was weak.

Added: PPO-GRU, DreamerV3 online and demonstration-seeded, a direct-LLM policy in both observability regimes, an exact optimal reference, and a tabular arm at 1,000 demonstrations. On MiniGrid demonstration-seeded DreamerV3 competes; on Blocks every RL arm is at zero.
Meta-review 2

Prior recall versus learning

MiniGrid is in every pretraining corpus. Does the belief-based signal ever correct the prior, or is the model reciting?

Added: the Blocks-rand6 domain with withheld conventions, the transition-exactness audit, the wrap-around case study where data contradicted the prior and the repair followed, and prompt-scaffold ablations. The initial-state distribution is stated verbatim in the prompt, so it certifies faithful implementation, not learning; learning claims rest on the withheld transition rules.
Meta-review 3

Isolate the effect of removing state supervision

The comparison to POMDP Coder also changes prompting (one joint call versus four), scoring, feedback and planner settings.

Partly open. The paper states each difference and matches hyperparameters and seeds; a fully controlled one-factor comparison remains a camera-ready item and a natural first experiment for any 2.0 work.
Meta-review 4

Formalise the space assumptions

What can the language model choose about state, action and observation spaces? How are programs with different state dimensionality compared in the score and in equation 9?

Clarified: the observation program picks its own shape; on a shape mismatch the distance returns infinity and the candidate receives zero likelihood. The committee applies every transition program to shared belief particles, so vote entropy compares outputs on the same inputs.
Meta-review 5

Scope the claims

The setup assumes a known symbolic scaffold, a MiniGrid-specific distance and rich descriptions; "observation-only POMDP learning" overstates it.

Accepted in framing. The honest claim: an LLM can repair symbolic POMDP programs without realised state labels given a code API and a description. The no-description and semantic ablations quantify how much of the description is load-bearing.
Meta-review 6

Compute cost and API variance

How does filtering and scoring scale with environment size, and how much variance do API calls induce?

Added: per-run LLM calls, tokens, dollars and wall-clock per suite; a distractor-count scaling sweep on MiniGrid; and a fifty-fold replay of one identical request (36% ± 13 pp exact).
Meta-review 7

Clarify the oracle

An oracle planner with the true model was requested; a ground-truth reference already appeared in Figure 3.

Split into two references: "GT models" runs hand-written programs through the paper's own filter and planner (matchable); "Optimal" sees the state and plans exactly (a bound).
Authors

Fixed parts the prior could also optimise

The observation distance, the planner and the demonstration buffer are hand-designed and fixed. The same language model prior could search over them.

Still open

Selection cannot arbitrate facts the demonstrations lack

In the wrap-around seeds the repaired candidates were exact, yet the selector sometimes kept the old program: a likelihood computed on demonstrations cannot decide a question the demonstrations never ask. This is the precise gap that active induction, direction 1 below, targets.

13 · Pinductor 2.0

Ten formalised directions, one substrate

The working document behind this section states every direction against the actual architecture: Pinductor already maintains a posterior over executable world models, not only over states, and its expensive loop is language-model proposal times per-model particle filtering. A direction earns its place by enriching the first or attacking the second. Click a node, or a button, to read its formal statement, its delta from 1.0, the falsifying experiment, the main risk and the effort. Colour is the paper each direction is slated for.

click a node · drag to orbit

Delta from 1.0
Falsifiable experiment
Main risk
Effort
14 · Sequencing

Four papers, in order

Paper A · ICLR 2027 delta or immediate follow-up

Closed-loop active induction and repair of executable world models

Directions 1 and 2, with 8 as a planner bonus, on the existing symbolic architecture. Smallest risk, answers the rigour-hungry reviewer, every experiment runs on current infrastructure. Headline metric: environment interactions until the model posterior concentrates above 0.9 on a correct program.

Paper B · efficiency

Amortised belief inference and a batched interpreter

Direction 4 with a JAX rewrite of the per-model filter. Independent of A, publishable at a systems-friendly venue; the FP8 recognition network is a legitimate contribution on its own.

Paper C · thesis centrepiece

Autotelic mapping of a model class's capabilities and vulnerabilities

Direction 9 with the library of direction 6 on a procedural task family. Reuses A's information-gain machinery; produces the developmental trajectories and the capability-vulnerability map the thesis is named after.

Paper D · the ambitious one

Structural prior plus neural latent dynamics

Direction 5, once A's active data collection exists to feed it. Direction 10's compiler experiment then falls out as the capstone ablation across A to D.

Three disciplines. Never combine more than two directions per submission. Keep the executable, verifiable story visible in every paper; it is the identity of the line of work. Verify any external analysis against the repository before building on it: the working document's notation section lists Tiger, RockSample, POPGym and ALFWorld as the benchmarks under discussion, while the released code evaluates MiniGrid, Blocks-rand6 and PopGym MineSweeper.