[!IMPORTANT] viva_aion IS NOT A MAZE GENERATOR. It is a cyclic cosmology engine β deterministic labyrinths, retrocausal pathfinding toward an inevitable singularity, and a Big Bounce that transforms accumulated entropy into the DNA of the next universe.
Memories with high DRE score (Distinctiveness Γ Recency Γ Emotionality) survive the bounce. Everything else returns to the seed.
π― Overview
Aion (Ξ±αΌ°ΟΞ½) is cyclic / eternal time in Greek philosophy, opposed to Chronos (linear time). VIVA experiences time cyclically:
Birth β Navigate labyrinth β Accumulate entropy
β
βΌ
Reach Core (Leviathan)
β
βΌ
Singularity
β
βΌ
entropy transforms into seed
β
βΌ
New Universe| Property | Value |
|---|---|
| Language | Pure Gleam (type-safe functional) |
| Runtime | BEAM / OTP 26+ |
| Determinism | Same seed = same universe, always |
| Tests | 53 passing |
| Algorithms | Recursive Backtracker Β· BFS Β· DRE scoring Β· seed mutation |
| Public API | viva_aion + 10 internal modules |
Inspired by:
- Loop Quantum Gravity β singularity transforms, doesn't destroy.
- "All You Zombies" (Heinlein) β we are our own ancestors.
- Block Universe β the future exerts retrocausal pull on the present.
β‘ Quick Start
gleam add viva_aionimport viva_aion
pub fn main() {
// Genesis world
let world = viva_aion.new()
// ...or from a string seed
let world = viva_aion.from_string("my_universe")
let start = viva_aion.start_position(world)
let core = viva_aion.core_position(world)
// Retrocausal pull: which way is the Core?
case viva_aion.suggest_move(world, start) {
Ok(direction) -> direction
Error(_) -> // dead end
direction
}
}π Prerequisites
| Tool | Version | Required for | | :---------- | :-------- | :--------------- | | Gleam | `>= 1.4` | Build / runtime | | Erlang/OTP | `>= 26` | BEAM target | Zero NIFs. Zero C dependencies. Pure functional.ποΈ Architecture
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Gleam application code β
β viva_aion.{new, bounce, suggest_move, ...} β
ββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββ
β viva_aion modules β
β β
β ββββββββββ ββββββββββββ βββββββββββ ββββββββββββββ β
β β seed β β rng β β tile β β position β β
β β DNA β β deterministic ops β β 2D coords β β
β β mutate β β β β Wall β β + move β β
β ββββββ¬ββββ ββββββ¬ββββββ β Path β βββββββ¬βββββββ β
β β β β Core(@) β β β
β ββββββΌββββββββββββΌβββ βββββββββββ ββββββΌββββββ β
β β generator β β grid β β
β β Recursive β β 2D spatial β
β β Backtracker β β structureβ β
β βββββββββββ¬ββββββββββ ββββββ¬ββββββ β
β β β β
β βββββββββββΌβββββββββββ ββββββββΌββββββ β
β β pathfinding β β memory β β
β β BFS Β· light cone β β records β β
β β retrocausal pull β β that β β
β ββββββββββββββββββββββ β transcend β β
β ββββββ¬ββββββββ β
β β β
β ββββββββΌββββββ β
β β dream β β
β β DRE scoringβ β
β ββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββπ Core modules
| Module | Purpose | | :---------------------- | :------------------------------------------------------ | | `viva_aion` | Top-level API (world, navigation, bounce, memory) | | `viva_aion/seed` | Universe DNA + hash-based mutation across bounces | | `viva_aion/rng` | Deterministic PRNG seeded by the universe seed | | `viva_aion/tile` | Tile types: `Void`, `Wall`, `Path`, `Core` | | `viva_aion/position` | 2D coordinates + directional movement | | `viva_aion/grid` | 2D spatial structure for the labyrinth | | `viva_aion/generator` | Recursive Backtracker maze generation | | `viva_aion/pathfinding` | BFS, light cone expansion, retrocausal pull | | `viva_aion/memory` | Memory records with access counts + importance | | `viva_aion/dream` | DRE scoring (Distinctiveness à Recency à Emotionality) | | `viva_aion/log` | Structured logging helpers |𧬠Theoretical Background
Determinism
Same seed = same universe. Always.
let world1 = viva_aion.from_string("seed")
let world2 = viva_aion.from_string("seed")
// world1 == world2 β identical labyrinthsSeed Mutation (Big Bounce)
Accumulated entropy of one life becomes the DNA of the next:
let next_seed = seed.mutate(current_seed, entropy, extra_data)Hash-based transformation:
- Same inputs β same output (deterministic).
- Small input changes β large output changes (chaotic).
Retrocausality
The Core (goal) "pulls" the present decision β implementing Active Inference by minimizing expected free energy toward the attractor.
let direction = pathfinding.retrocausal_pull(grid, current, core)DRE Scoring β Walker & Stickgold (2006)
Memory consolidation during sleep selects which experiences survive:
DRE = D Γ R Γ E (weighted)
D = Distinctiveness β how unique?
R = Recency β 0.5^(age / half_life)
E = Emotionality β intensity at creationPlus bonuses for access count, manual importance, and prior transcendence. High-DRE memories survive the Big Bounce. Low-DRE memories dissolve back into entropy.
Tile Vocabulary
| Tile | Symbol | Meaning |
|---|---|---|
| Void | | Beyond existence |
| Wall | # | Structure |
| Path | . | Passable |
| Core | @ | Singularity (Leviathan) |
π¨ Design Principles
| Principle | Description |
|---|---|
| Deterministic cosmology | Same seed = same universe; reproducible across machines |
| Retrocausal navigation | Future attractor influences present move ranking |
| Memory transcendence | Only high-DRE memories survive the Big Bounce |
| No floating clock |
Time progresses via discrete memory_tick calls |
| Visual debug first-class | visualize / visualize_at ship in the public API |
π Public API Highlights
Navigation
let moves = viva_aion.rank_moves(world, current_pos)
// => [(Up, 15), (Left, 17), (Down, 18), (Right, 20)]
let new_pos = viva_aion.try_move(world, current_pos, direction)
let cone = viva_aion.light_cone(world, pos, 5)
// All positions reachable within 5 stepsMemory + Dream (DRE)
let bank = viva_aion.new_memory_bank(1)
let #(bank, mem1) = viva_aion.remember(bank, 42, 0.8)
let #(bank, mem2) = viva_aion.remember_important(bank, 99, 0.9, 0.7)
let bank = viva_aion.memory_tick(bank)
let #(bank, _) = viva_aion.recall(bank, mem1.id)
let score = viva_aion.score_memory_default(mem1, bank)
// score.total Β· score.distinctiveness Β· score.recency Β· score.emotionalityBig Bounce β world only
let new_world = viva_aion.bounce(world, entropy: 42.0, extra: "pos:15,16")Big Bounce β with memory transcendence
let #(new_world, new_bank) =
viva_aion.bounce_with_memories(
world, bank, entropy: 42.0, extra: "extra",
max_survivors: 10,
min_threshold: 0.3,
)
let past = viva_aion.past_life_memories(new_bank)
let current = viva_aion.current_life_memories(new_bank)Visualization
let ascii = viva_aion.visualize(world)
//
// ################################
// #.......#.....#...#............#
// #.#####.#.###.#.#.#.##########.#
// #.#...#.#...#...#.#............#
// ...
// ###############@################
let ascii = viva_aion.visualize_at(world, current_pos)
// X marks the spotπΊοΈ Roadmap
| Phase | Status |
|---|---|
| Deterministic seed + RNG | β |
| Recursive Backtracker maze generation | β |
| BFS pathfinding + light cone | β |
| Retrocausal pull toward Core | β |
| Memory bank + recall | β |
| DRE scoring (Walker & Stickgold) | β |
| Big Bounce β world-only seed mutation | β |
| Big Bounce β memory transcendence | β |
| ASCII visualization | β |
| Multi-layer universes (3D labyrinths) | β³ |
| Probabilistic light cone (action policies) | β³ |
| Persistent universe save/load | β³ |
| Memory clustering for narrative dreams | β³ |
π€ Contributing
git checkout -b feature/your-feature
gleam test # 53 tests
gleam format --check src test
gleam buildSee CHANGELOG for release history.
π References
- Heinlein (1959) β "All You Zombiesβ"
- Walker & Stickgold (2006) β Sleep, memory and plasticity
- Bojowald (2005) β Loop Quantum Cosmology
- Friston (2010) β The free-energy principle: a unified brain theory?
π VIVA Ecosystem
| Package | Purpose |
|---|---|
viva_math | Mathematical foundations |
viva_emotion | PAD emotional dynamics |
viva_tensor | FP8 LLM inference on the BEAM |
viva_telemetry | Observability suite |
viva_aion | Cyclic time + cosmology (this package) |
viva_glyph | Symbolic language |