symbolic-ai-002 β learners that are symbolic on the inside
No gradients. No learned tensors. A few dozen discrete parameters. CPU only.
This release is the counterpart to
jacob-valdez/symbolic-ai-001-3b46de3,
which is symbolic at the interface but neural inside. Here the algorithm
itself is symbolic, and the two are compared like for like β same protocol, same
environments, same evaluation harness.
Because the artefacts are programs, not weights, the "models" in this repo
are text: models/induced_programs.json contains what was induced. The .pt
files are the neural controls, included so the comparison is reproducible.
Provenance
| source repository | full snapshot in code/ |
| source commit | 0469d0a1f3ba052b00f5e19243b1cf87d6ca41c4 (0469d0a) |
| design note | code/docs/symbolic-ai-002.md |
| neural baseline | symbolic-ai-001-3b46de3 |
| hardware | symbolic arms: CPU. Neural controls: 1Γ NVIDIA GB10 (shared) |
What was induced
A world's laws, from 21,394 transitions in a 5Γ5 gridworld, in 0.14 s of CPU β 26 discrete parameters:
LEFT : move(-1, 0) unless wall(-1, 0) within [0,size)
RIGHT : move(+1, 0) unless wall(+1, 0) within [0,size)
UP : move(0, -1) unless wall(0, -1) within [0,size)
DOWN : move(0, +1) unless wall(0, +1) within [0,size)
PICKUP : add holds(agent,key); del holds(agent,nothing), at(key, 0, 0)
GOAL : at(goal, 0, 0) β§ holds(agent,key)
within [0,size) reads the bound from the observation, so the same operator is
correct at any scale.
A policy, from 800 MiniGrid episodes in 11 s β 5 parameters, 100% success where the 13.97M transformer trained on the same episodes gets 0.70:
IF see(goal,_,_,>0) THEN forward
IF see(goal,_,<0,_) THEN left
ELSE right
A language, re-acquired every episode (lexicon_induction invents three new
words per episode; nothing carries over):
arg0 of obj/5 where arg1 = [arg1 of says/2 where arg0=q1]
"Find the object whose colour is what this word means." 1.00 on symbols, on English, and on English with synonyms never seen in training; the network gets 0.40.
Results
Generalizing a world 16Γ beyond training (success, 25 held-out episodes)
| agent | params | 5Γ5 | 8Γ8 | 12Γ12 | 20Γ20 |
|---|---|---|---|---|---|
| world_model | 26 | 1.00 | 1.00 | 1.00 | 1.00 |
| relational | 42 | 0.84 | 0.72 | 0.56 | 0.56 |
| search (given the true model) | 0 | 0.80 | 0.24 | 0.12 | 0.00 |
| symbolic-ai-001 (transformer) | 13,969,152 | 0.40 | 0.00 | 0.00 | 0.00 |
A goal nobody trained for β same model, re-aimed, no new data
| goal | achieved |
|---|---|
| induced goal (key, then goal square) | 1.00 |
| new: hold the key | 1.00 |
| new: stand on the goal square | 1.00 |
| new: stand where the key is | 1.00 |
Rule families held out of training
| agent | params | train families | held-out families |
|---|---|---|---|
| seq_synth | 0 | 1.000 | 1.000 |
| neural specialist | 13,969,152 | 0.975 | 0.000 |
The language curriculum (14 lessons)
| solved β₯0.90 | above floor | |
|---|---|---|
| qsynth | 6 / 14 | 7 / 14 |
| relational | 1 / 14 | 8 / 14 |
| neural, trained on the curriculum | 0 / 14 | 10 / 14 |
Symbolic induction is bimodal β exact when the capability is inside its program space, at the floor when it is not. The network is uniformly mediocre.
Where gradients still win
| model | fit | held-out perplexity |
|---|---|---|
| counting model (order-5, 20M tokens) | 199 s CPU | 179.4 |
| transformer (LM-only) | 22 min GPU | 51.9 |
Natural-language modelling is a real loss for the symbolic side, and a 40M-token run exhausted host memory. Reported, not buried.
Files
| path | what |
|---|---|
models/induced_programs.json |
the induced world model and policy, as text |
models/neural-curriculum-control.pt |
neural control trained on the curriculum |
models/neural-seq-control.pt |
neural control trained on the sequence families |
results/*.json |
every measurement behind the tables above |
code/ |
complete source at the commit |
Reproduce
cd code && uv pip install -e .
python -m symbolic.experiments.symbolic_suite # generalization, novel goals, families, knowledge
python -m symbolic.experiments.curriculum_suite # the 14-lesson language profile
pytest tests/ -q # 147 tests
License
MIT.