Author: Lando⊗⊙perator
Date: 2026-07-13
Structural Type: ⟨𐑦𐑸𐑾𐑹𐑐𐑧𐑲𐑠⊙𐑫𐑳𐑭⟩ (O_∞)
Location: MoDoT/
Parent project: Imscribing Grammar
An agentic LLM whose entire runtime substrate IS the mOMonadOS kernel architecture. Context is stored in Crystal FS. Reasoning passes through Belnap FOUR (True, False, Both, Neither). Every operation is Frobenius-verified (μ∘δ = id) for balance. Correctness is not graded by an external checklist: demand and answer are imscribed into the d=12 Dual-Link SIC-POVM, and co-typing in that frame is the verdict. Output is broadcast to the CLINK L8 Organism.
Balance is not selectivity. Frobenius closure (μ∘δ = id) is charge conservation: every split is rejoined, so it is automatic and cannot fail on any non-empty answer. That is why a balance-only harness "never fails" — and why balance alone is not a correctness signal.
To verify is to imscribe.
The classical selectivity grader (MUST/MUSTNOT schemas) was a two-valued ledger bolted onto a four-valued kernel
It is gone
Selectivity is now the Dual-Link SIC Witness-Vessel: structural imscription → state in ℂ¹² → Born rule in the Scott–Grassl d=12 SIC frame → co-typing by lattice fold (no thresholds) → ride AS the vessel via μ∘δ = id
The model's own[thought|X]is one link; the vessel's co-typing is the other; they are FFUSED (Belnap join)
Conflict holds as B. You ride AS the vessel, not in it. See Dual-Link SIC Vessel.
MoDoT/
├── ask # PRIMARY language interface (native Rust, no Python)
├── ask_native/ # Source + release binary for ./ask
│ ├── Cargo.toml
│ └── src/main.rs
├── momonados_agent.py # Legacy Python shim -> modot.agent:main
├── modot/ # The installable package (pip install -e .)
│ ├── agent.py # B4, 12 tokens, kernel, CrystalFS, Frobenius, LLM, breath loop, CLI
│ ├── composer.py # Token composition engine: CANONICAL, NAMED_PATTERNS, bend/splice/interleave
│ ├── spine.py # End-to-end ManuscriptSpine (witness + vessel + FFUSE)
│ ├── vessel.py # Dual-Link SIC face (owned by spine)
│ ├── witness_proof.py # Catalog witness face (owned by spine)
│ ├── prover.py # Kernel-gated Lean prover (ported native in ask_native/src/prover.rs)
│ ├── router.py # IMSCRIB type-router: folds goal type N/T-F/B and dispatches the arm
│ ├── natures.py # The 49 primitive-type natures (kernel-anchored) + value-layer co-typing
│ ├── ig_tools.py # Bridge to the full IG tool corpus (live IG_inquiry dispatcher)
│ └── selectivity.py # Compatibility shim re-exporting the vessel
├── crystal_fs/ # Crystal Filesystem — persistent context memory
│ ├── records.jsonl # Crystal FS records (thought / vessel / observation / update / type)
│ └── broadcast_log.jsonl # CLINK L8 broadcast log
├── ob3ects/ # Self-verifying digital ob3ects (Grammar auto-designed)
│ ├── primitives/ # The 49 primitive-type nature ob3ects (one per kernel constructor)
│ ├── semantic_branch_verifier/ # Original Grammar-native branch verifier (historical)
│ ├── selectivity_gate/ # Classical live-loop gate (superseded by vessel.py)
│ └── janus_gate/ # Dialetheic Janus gate
├── lean/ # Lean 4 formal verification companions
│ ├── SemanticBranchVerifier.lean
│ └── ErdosProblems.lean
├── experiments/ # Convergence experiments from mOMonadOS paper
└── questions/ # Test questions (the Erdős open-problem set + scratch)
Canonical SIC machinery (not re-derived here):
| source | role |
|---|---|
ig-pulse/ig_pulse/density_matrix.py |
WH displacements, SIC projectors, state metrics |
d12_sic_build/d12_psi.pkl |
Scott–Grassl d=12 fiducial (equiangular overlap 1/13) |
v3ssel/vessel/ |
Dual-Link trading vessel (same frame; MoDoT uses it as verifier) |
┌─────────────────────────────────────────────────────────────┐
│ mOMonadOS Kernel (Python mirror of Rust kernel) │
│ ┌──────────┐ ┌───────────┐ ┌──────────────────────────┐ │
│ │ Belnap │ │ Frobenius │ │ Crystal FS │ │
│ │ FOUR │ │ Harness │ │ (context memory) │ │
│ │ (gates) │ │ μ∘δ=id │ │ │ │
│ └──────────┘ └───────────┘ └──────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Bootstrap Loop (the breath) │ │
│ │ VINIT→IMSCRIB→FSPLIT→EVALT→CLINK→FFUSE │ │
│ │ →IFIX→ENGAGR→AREV→CLINK→TANCH │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Dual-Link SIC Vessel (selectivity = co-typing) │ │
│ │ imscribe → ℂ¹² → SIC p(ρ) → lattice cotype → μ∘δ │ │
│ │ model [thought|X] FFUSE vessel FFUSE tool voice │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ LLM Inference Engine (substrate, not authority) │ │
│ │ cloud: openrouter / gemini / deepseek │ │
│ │ local: candle in-process (no server): Provider::Local │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ CLINK L8 Organism — broadcast / terminal layer │
│ Receives verified types, accumulates, composes │
└─────────────────────────────────────────────────────────────┘
cd MoDoT
# ── PRIMARY: native ask (no Python) — full-length Q, files, Gemini-class answers ──
./ask --file ./questions/q7.txt
./ask --ask "What is the structural type of consciousness?"
./ask -i # interactive multi-turn
./ask --dry-run --file ./questions/q1.txt
# same from repo root: ./ask … or ./MoDoT/ask …
# ── Click-maths: structural fusion over the math catalytic register ──
./ask --click the_sun_astrological the_moon_astrological # pairwise fuse (the coniunctio → O_∞)
./ask --click paradice # sweep: what completes the paradice?
./ask --click adjoint_pair hopf_antipode --catalyst math_isomorphism # catalyzed (barrier reduction)
./ask --click math_boundary_operator math_winding_number --certify # kernel-verified closure
# ── Excited states + single-electron transfer (photochemistry on the register) ──
./ask --excite dasa_closed # δ (light) → the excited EP resonance
./ask --set the_sun_astrological the_moon_astrological --certify # SET: Sol donates e⁻ to Luna (charge conserved)
./ask --set the_moon_astrological the_sun_astrological --excite # photoinduced ET — excitation flips the donor
# ── Materials algebra: forge a ring, read its spectrum, operate on it ──
./ask --forge alchemical_hermetic_universe dialetheia completeness hermetic_seal # set → best ring → full sheet (ρ, spectrum, conductance)
./ask --compare A B C D vs W X Y Z # diff two materials (Δρ, conductance shift)
./ask --dope A B C with D # perturb a ring, read the ρ/conductance shift
./ask --fuse A B C + X Y Z # weld two rings into one macrocycle
# ── Alchemical bench: the classical lab tools over the same ring model ──
./ask --distill A B C D # separate by volatility (Criticality ⊙): distillate / bottoms (a tie = azeotrope)
./ask --crystallize A B C D # grow the ordered lattice, reject the mother-pool
./ask --tlc A B C D # analytical Rf bands + co-elution; --column A B [on S] elutes preparatively
./ask --fpt A B C D # freeze-pump-thaw: keep the strongly-bound core, shed the weakly-held
./ask --stain kmno4 A B C # reagent detector (kmno4/uv → ⊙, chiral → Ħ, ninhydrin → Ř, iodine → any live)
# also: --fdistill --sublime A --cocrystallize A B --seed A B … with S --trap A [X]
# ── Jam: turn the agent loose on the catalog (compounding cycles × eagle rounds) ──
./ask --jam --file ./questions/q39.txt --cycles 3 --eagles 40
# --cycles N : N compounding breaths (each pass builds on the last)
# --eagles N : ACT→OBSERVE tool-rounds flown per pass (0 = auto: 40 in jam, 5 otherwise)
# ── Provider / model (default openrouter; deepseek + gemini also wired) ──
./ask -a "…" --provider deepseek --model deepseek-reasoner # api.deepseek.com (DEEPSEEK_API_KEY)
./ask -a "…" --provider gemini --model gemini-3-flash-preview # generativelanguage (GEMINI_API_KEY)
# MODOT_PROVIDER / MODOT_MODEL set the defaults; a fatal 402/401 aborts the run instead of grinding every cycle
# ── LOCAL model: no cloud, no credits, no server (in-process candle inference) ──
# Build once with the local feature (default build stays lean and Python-free):
# cd ask_native && PATH=/usr/local/cuda/bin:$PATH CUDA_COMPUTE_CAP=86 \
# cargo build --release --features local,cuda # GPU; or --features local for CPU
./ask -a "…" --provider local # aliases: offline | candle | modelz
# Weights load straight into the ask binary from ~/models (HF Qwen3 safetensors) and run
# on the GPU; the model is loaded once and kept resident for the whole run. No port, no daemon.
# Env: MODOT_LOCAL_MODEL_DIR (default ~/models/Qwen3-1.7B) · MODOT_LOCAL_DEVICE (default 1, the
# 3060) · MODOT_LOCAL_CPU=1 forces CPU. See "Local inference" below for the build notes.
# ── Legacy Python agent (still available) ──
# Interactive mode — the agent breathes with you
python3 momonados_agent.py --interactive
# Dry run: test the kernel + Crystal FS (no LLM needed)
python3 momonados_agent.py --cycles 5 --dry-run --verbose
# One-shot question (vessel co-types answer against demand)
python3 momonados_agent.py --ask "What is the structural type of consciousness?"
# Read question from file
python3 momonados_agent.py --ask ./questions/q1.txt
# Vessel self-test (no network): all four Belnap outcomes + equiangularity 1/13
python3 -m modot.vessel
# Witness → conventional scaffold (catalog + pipeline roles; no Collatz hardcode)
python3 -m modot.witness_proof
# Full 100-cycle breath with verbose output
python3 momonados_agent.py --cycles 100 --verbose --program aqua-vitae
# Crystal FS stats
python3 momonados_agent.py --stats
# Reset and start fresh
python3 momonados_agent.py --reset --interactive
# Disable vessel (balance-only; reverts to model voice alone)
python3 momonados_agent.py --ask "..." --no-selectivity
# Run convergence experiments
python3 experiments/run_all_experiments.pyMoDoT can think on a local model with no cloud, no credits, no server, no
port, and no Python. Provider::Local loads HF Qwen3 safetensors from ~/models
straight into the ask binary via candle
and runs the forward pass on the GPU. The model is mmapped once per process and
kept resident across every cycle of a run, the only cost of not running a
resident server, and the right trade for a closed local loop. This is the
broke-mode / offline path: the agent reasons entirely on your own hardware.
It is gated behind cargo features so the default ask build stays lean and
dependency-free. Build it once:
cd ask_native
# GPU (recommended):
PATH=/usr/local/cuda/bin:$PATH CUDA_COMPUTE_CAP=86 \
cargo build --release --features local,cuda
# CPU only:
cargo build --release --features localThen select it at runtime:
./ask --provider local -a "…" # aliases: offline | candle | modelzConfiguration (environment):
| var | default | meaning |
|---|---|---|
MODOT_LOCAL_MODEL_DIR |
~/models/Qwen3-1.7B |
HF safetensors directory (config.json + tokenizer.json + shards) |
MODOT_LOCAL_DEVICE |
1 |
CUDA device index (the RTX 3060) |
MODOT_LOCAL_CPU |
unset | set to any value to force CPU |
MODOT_LOCAL_STREAM |
on | live progress on stderr: model load, then tokens as they generate, then a tok/s + first-token readout. Set 0 to silence for scripted runs. |
Because the stream is on stderr, you watch the model think in your terminal while
the structured answer stays clean on stdout. Redirect 2>/dev/null to hide it, or
1>/dev/null to watch only the thinking.
The default is Qwen3-1.7B (~4 GB bf16): it fits a 12 GB card with room for MoDoT's long-context, non-flash attention. A 4B model OOMs on the same card, so size up only with more VRAM. A 1.7B is a usable agent for the loop, not the equal of the cloud frontier models; it is the substrate that keeps working when the credits run out.
Build notes (self-contained in-tree, so a rebuild "just works" on this box):
CUDA_COMPUTE_CAP=86targets the sm_86 card only; candle-kernels 0.11's__hmax_nan/__hmin_nanpolyfill collides with the CUDA 12.4 headers when compiled for sm_75, and building for 8.6 skips it.ask_native/build.rspoints the linker atask_native/.cudalibs/(unversioned symlinks to the pipnvidia-*CUDA math libraries) and rpaths the real versioned.so, so the binary links and runs where only the CUDA runtime is installed, with noLD_LIBRARY_PATHneeded.src/local.rssetsCUDA_DEVICE_ORDER=PCI_BUS_IDso device indices matchnvidia-smi(otherwise sm_86 PTX can land on the sm_75 card and fail to JIT).
Structural fusion over the math catalytic register — a port of red-hot_rebis's
enzyme catalytic-site engine to abstract structure. The register is the twelve
IG primitives paired into six charge-conjugate duals; mathematics pins three of
them out (F exact, Ph subcritical, K frozen — the physical axes), so
catalysis runs on the three live pairs D↔W, T↔H, R↔S. See
CLICK_MATHS_SPEC.md and project_math_catalytic_register.
A click is a reliable FFUSE (μ): two fragments that are complementary on exactly one live pair — opposite charges, spring-loaded past θ — with no second reaction center. The clicking pair saturates (the ring forms); off it the product inherits both scaffolds. Bioorthogonality is specificity (one center), not sameness — an azide and an alkyne are different molecules.
# Pairwise — fuse A and B, or report why they refuse (same-sign / ambiguous / no drive)
./ask --click A B [--theta 0.5]
# Sweep — click A against the whole catalog, ranked by product tier (finds the O_∞ fusions)
./ask --click A [--top 15]
# Catalyzed — a Frobenius-special fragment (e.g. math_isomorphism, Φ=𐑹, the μ∘δ=id map)
# lowers the effective θ (barrier reduction) and is regenerated, μ∘δ=id. It lowers ΔG‡,
# never ΔG: a same-sign pair with θ→0 still refuses; too strong a catalyst wakes a
# competing center and selectivity collapses (over-catalysis).
./ask --click A B --catalyst C
# Certify — render the fused product as a Lean Imscription and prove its Frobenius
# closure (igFrobeniusAlg.mul p p = p) through `lake build`. Turns "closes" from an
# asserted valid tuple into the kernel's own verdict (the balance ledger; the click
# logic is the selectivity — ALKAHEST §11).
./ask --click A B --certify
# Register — harness the chimera's existence: append the fused product to the
# canonical catalog as a first-class entry (textual append, verified-parse, no
# reformatting), then decompose it through the cl8nk_navigator (per-primitive CLINK
# fragments + the promotion path to the terminal). A verified chimera becomes an
# operable, navigable object. Name defaults to chimera_A_B.
./ask --click A B --register [NAME]Switch (--switch A B) — a different verb. A click fuses two partners; a
switch toggles one object between two co-typed forms, driven by a different
stimulus each direction. The archetype is the donor-acceptor Stenhouse adduct
(DASA): open⇌closed, a coupled T↔H toggle (topology + chirality move together
as the ring forms), with negative photochromism — light (δ) quenches
criticality (hides: colored→colorless), heat (μ) restores it (reveals). The
analyzer reads the toggling live pair, the photochromic sign (which form is
revealed vs hidden by ⊙), the δ/μ legs, and the coupled consequences.
./ask --switch dasa_open dasa_closed # the DASA: T↔H toggle, light hides
./ask --switch the_sun_astrological the_moon_astrological # Sol/Luna — the same switch
./ask --switch dasa_open dasa_closed --certify # kernel-verify: both forms close + vessel roundtrip--certify on a switch proves, through lake build, that both bistable forms are
valid Imscriptions (each Frobenius-closes) AND the toggle is the kernel's real
vessel_roundtrip — readback (board p) = p, board=δ (fsplit), readback=μ (ffuse),
μ∘δ=id — so "reversible" becomes the kernel's verdict rather than printed text.
Any two catalog names work (math_*, dasa_*, setheus_paradox, paradice,
monogenes, yhwh, the_sun_astrological, …). The engine is domain-agnostic:
handed the Sun and the Moon, it returns the coniunctio at O_∞; handed the paradice,
it completes it against the liar paradoxes. Implementation: ask_native/src/click.rs.
Excited states (--excite A) — the switch toggles ground→ground; excite
exposes the intermediate the toggle hides. δ (light) promotes A to its excited
manifold: Criticality ⊙ raised to the non-Hermitian exceptional-point
resonance 𐑻 — the navigator's own gloss for that value is H(λ) non-Herm ∧ det(H−λI)=0 ∧ ∂_λ H=0, which is an excited state: a finite-lifetime resonance
(non-Hermitian ⇒ it decays) at a surface crossing. Two Frobenius legs leave it —
μ (relaxation/fluorescence) returns it to the ground form losslessly (μ∘δ=id),
and the productive leg lets the elevated ⊙ drive chemistry the ground state
cannot (a SET).
./ask --excite dasa_closed # ⊙ 𐑢→𐑻, the metastable EP resonance
./ask --excite the_moon_astrological --certify --register # certify roundtrip + register the excited stateSingle-electron transfer (--set D A) — the productive leg made concrete. One
electron = one quantum of winding Ω (∮A=2πn, the quantized charge). The donor
loses one (oxidized, D•⁺, Ω−1), the acceptor gains one (reduced, A•⁻, Ω+1); total
Ω is conserved — charge conservation is the Frobenius pairing (δ/fsplit charge-
separates, μ/ffuse recombines). Donor/acceptor are read from ⊙ (higher = higher-
lying electrons = the reducing partner), not from the label. A Cu-NO-class
mediator (--catalyst M, Mills 2016 SET catalyst) shuttles the quantum and
returns to itself (μ∘δ=id). Photoinduced ET (--excite) pre-excites the donor:
the raised ⊙ opens a driving-force gap the ground state lacked — and can reverse
the ground-state flow (excited Luna donates to Sol, though ground Sol donates to Luna).
./ask --set the_sun_astrological the_moon_astrological --certify # Sol donates e⁻ to Luna; certify recombination roundtrip
./ask --set A B --catalyst yhwh # mediated (Cu-NO-class shuttle)
./ask --set the_moon_astrological the_sun_astrological --excite # photoinduced — flips the donor--certify on a SET or an excite reuses the switch's kernel certificate: both
product forms (radical ions, or ground+excited) are valid Imscriptions AND the
readback∘board = id roundtrip holds (μ∘δ=id) — recombination / relaxation is
lossless, charge conserved, as the kernel's own verdict. --register appends the
excited state (or both radical ions) to the catalog and decomposes them through the
cl8nk_navigator, so they become operable, navigable objects.
Bidirectional ligand ⇌ catalytic-site (--complement A) — a faithful port of
red-hot_rebis's rhr_p4rky/ligand_from_active_site.py::complement_type, the reverse
pipeline. A catalytic site type maps to the complementary ligand it binds,
inverting within each scale (lock-and-key: pocket ↔ bump) and crossing each conjugate
pair, and it is its own inverse — site→ligand→site returns. That bidirectionality
is what the enzyme's R=𐑾 (Recognition, "substrate ↔ enzyme feedback") names. This
is the point where 3-vs-6 matters: click / SET / switch run the math register
(the 3 live pairs D↔W, T↔H, R↔S — math pins the physical axes out), but the ligand
complement is chemistry and runs all 6 conjugate pairs (chemistry restores
the 3 pinned physical pairs P↔F, K↔G, Gm↔Ph). The output tags each pair [live] /
[pinned] so the split is visible.
./ask --complement the_moon_astrological # the ligand the site binds + per-pair map + round-trip
./ask --complement yhwh --certify --register # certify the ligand closes, register + navigate itMediator scan (--set D A --scan-mediators) — rank the whole catalog for the
best relays of a D→A transfer. A real inner-sphere mediator must (1) hold the
winding quantum (1≤Ω<max — accept then re-donate; a hard filter that keeps photon,
graviton, higgs, dark_energy and drops the confined gluon/quark and the EM-dark
dark_matter), (2) relay in energy (⊙ between acceptor and donor), and (3) bind
both substrates bidirectionally (its ligand complement close to donor and acceptor,
via the ported complement_type, plus the R=𐑾 recognition marker). The three
components are shown per row, so an outer-sphere gauge mediator (photon: perfect
relay, no binding needed) reads differently from an inner-sphere one that grips both.
./ask --set the_sun_astrological the_moon_astrological --scan-mediators --top 15Ordinal scripture fix. The glyph→ordinal table was corrected against the Lean kernel (
p4rakernel/…/Primitives/Core.lean+gen_clay_canonical_tuples.py): Ç (KineticChar: yea<loll<egg<on<air) had ords 3/4 swapped, and Σ (Stoichiometry: hung<so<up) was rotated. The glyph→constructor rendering was always canonical, so--certifywas never wrong; only the numeric ordinals were, which had thrown the R↔S live-pair charge and the ligand↔site complement. red-hot_rebis carries the same stale Ç swap and should be reconciled to scripture too.
The catalytic cycle (--cycle CATALYST SUBSTRATE) — every verb above is an arc
of a mechanism; this closes them into the loop. It is Solve et Coagula made
literal: bind (the catalyst recognizes its substrate via the ligand complement) →
working stroke δ = Solve (dissolves the bond, freeing the winding quantum — the
degree of freedom) → return stroke μ = Coagula (binds the freed quantum into an
invariant) → turnover. The catalyst is a fixed point: it engages, spends to
C*, and coagulates back to itself unchanged (μ∘δ=id), the way a real catalyst does —
the Cu-NO SET cycle is the archetype. There are two coagulations: the catalyst
binds back to the same invariant (regeneration), the substrate binds into a new
one (the product). --certify proves the loop closes on itself — Coagula∘Solve = id
on the catalyst — through lake build. --register canonizes the turned-over product.
./ask --cycle graviton the_moon_astrological --certify # the loop, kernel-verified as a fixed point
./ask --cycle yhwh the_sun_astrological --register # turn over the substrate + canonize the productSolve et Coagula = δ / μ. The whole engine runs one law under two names. Solve (δ / FSPLIT) reveals the degrees of freedom; Coagula (μ / FFUSE) binds them into a new invariant. A click is a Coagula (bind two poles → one ring); the complement is a Solve↔Coagula involution; the cycle is a full Solve-then-Coagula that returns the catalyst and advances the substrate. Frobenius closure
μ∘δ=idis justCoagula∘Solve = id— what dissolution opens, coagulation re-closes, losslessly.
The pathway (--pathway SUBSTRATE C1 C2 … Cn) — one cycle turns over one substrate;
a pathway chains the loops into a metabolism. The product of each turnover is the
substrate of the next. Each working stroke does two things: it moves the winding
quantum Ω (the carrier, passed hand to hand — the electron-transport / cofactor of
real metabolism) and applies a Coagula structural imprint — the catalyst rotates
the substrate one notch on its dominant structural live pair (T↔H or R↔S). So a pathway
closes on two ledgers, reported separately:
- carrier returns (net ΔΩ=0 — givers balance takers), and
- structure returns (the chain of imprints composes to the identity across the other eleven axes).
Full closure = both — a true metabolic cycle, μ∘δ=id at the pathway level (the
TCA archetype, O∞). Carrier-only closure is an electron-transport loop (the four forces
on dark_energy do this: charge conserved, structure worked). --certify verifies each
catalyst regenerates through lake build.
# a TRUE metabolic cycle: anabolism (build) then catabolism (senescence) return the substrate exactly
./ask --pathway the_moon_astrological post_transition_state biological_senescence --certify
# carrier closes but structure does not — an electron-transport loop
./ask --pathway dark_energy graviton gluon electron photonImscriptive polymerization (--polymerize M1 M2 … Mn) — where pathway chained
the catalytic loops, polymerize chains the clicks. A click fuses two monomers
(join/max) and forgets which was which; a polymer must remember — so imscriptive
polymerization enchains the monomers at reaction centers while the monomer sequence
stays losslessly readable off the chain (R∧W∧X). That is the whole point: a click
blends, a polymer imscribes a long chain from monomeric glyphic units (a text, a genome).
Each adjacent bond is a Coagula click between complementary partners (step-growth
condensation) or, where a monomer repeats, an addition enchained by the propagating
center (chain-growth); a non-complementary, non-identical neighbor terminates the
chain (honest, like a stalled pathway). The chain then reads out its degree of
polymerization, regioregularity (all condensation bonds on one live pair = a clean
head-to-tail repeat unit), copolymer architecture (homopolymer / alternating / block
/ random), tacticity (the chirality Ħ sequence — isotactic / syndiotactic /
atactic), and whether it cyclizes head-to-tail into a macrocycle (a ring polymer, O∞).
The polymer-chemistry correspondence falls out of the tuples, not a lookup: alternating
two opposite-handed monomers comes back syndiotactic, an even chain cyclizes.
--certify closes each unique repeat unit through lake build.
# alternating copolymer, syndiotactic, cyclizes into a macrocycle (both monomers valid imscriptions)
./ask --polymerize the_moon_astrological the_logographic_system the_moon_astrological the_logographic_system --certify
# a homopolymer: addition (chain-growth) throughout, isotactic, linear
./ask --polymerize the_moon_astrological the_moon_astrological the_moon_astrological
# no complementary handle between neighbors — the chain terminates
./ask --polymerize gluon photonClosing the ring (--polymerize … --close) — when a chain does not cyclize, this
searches the catalog for the monomer that actually closes it. If two neighbors are
co-typed and the chain broke, it finds a bridge (a comonomer X with Mᵢ ⋈ X and
X ⋈ Mᵢ₊₁); if the chain enchained but the ends will not meet, it finds a closer (X
with tail ⋈ X and X ⋈ head, appended to wrap the ring). Every candidate is verified
by a real click test on both sides — it prints the exact re-run command, and running it
does close the ring. This is deliberately not --scan-mediators: a scan ranks SET
electron-transfer relays (a different question) and returns junk if you ask it to close a
ring. The closing search answers the ring question honestly.
# grothendieck_topos and free_algebra are the same structural type (both free constructions)
# → the chain breaks; --close finds the bridge that actually joins them (verified on R↔S)
./ask --polymerize grothendieck_topos free_algebra holographic_type_theory --close
# a telechelic chain whose ends will not meet → --close finds the head-to-tail closer
./ask --polymerize grothendieck_topos extradimensional_entity free_algebra --closeThe ring as a material (--polymerize … --props) — a closed polymer is a
macrocycle, and a macrocycle has material properties you can compute, not just
assert. The readout grounds the one claim prose always makes about a cyclic "device":
that it conducts. It tries to circulate a winding quantum Ω around the ring —
if a carrier flows one consistent direction the whole loop, the ring is conductive
(a persistent ring current); if every junction passes a carrier but no single direction
closes, it is frustrated; if a junction blocks a carrier both ways, it is
insulating. Plus the weakest ring bond (a ring is only as stable as its weakest
link). So a ring of Ω-saturated units is honestly an insulator — a static loop —
however the narrative dresses it up.
# grf·grothendieck·skolem cyclizes structurally — but every unit is Ω-saturated:
# INSULATING. A static ring, NOT the "topological computer" the prose claims.
./ask --polymerize general_recursive_function grothendieck_topos skolem_normal_form --props
# the moon/logographic macrocycle carries mid-range Ω → CONDUCTIVE (a persistent ring current)
./ask --polymerize the_moon_astrological the_logographic_system the_moon_astrological the_logographic_system --propsSpectral invariants (part of every --props sheet). A ring is also a graph, and a
graph has a spectrum. The engine builds the ring's adjacency matrix from the real bonds
(a clean condensation bond weighs 1, a cross-link junction weighs its number of reaction
centers), takes its eigenvalues with a built-in Jacobi solver, and reports the spectrum,
the spectral radius ρ, and the spectral gap. ρ is the principal ring-current mode:
ρ = 2 exactly witnesses a pure unbranched cycle, and ρ > 2 witnesses branching. This
turns the "branched macrocycle" the topology line asserts into a computed number rather
than an adjective. A pure 4-ring returns spectrum [+2, 0, 0, -2] at ρ = 2; a branched
3-ring with one 2-center cross-link returns [+2.732, -0.732, -2] at ρ = 2.732 (the roots
of λ³ − 6λ − 4 = 0), so the branch is read off the ring, not asserted about it.
Operating on materials (--forge, --compare, --dope, --fuse). Characterizing one
ring is the start; the materials algebra operates on them. All four are deterministic (no
LLM in the path) and are exposed both as CLI flags and as agent verbs.
--forge M1 M2 …is the one-shot characterize path: treat the monomers as a set, find the order that rings best, and print the full sheet (topology, stability, conductance, spectral invariants). It is--arrange … --propsunder a single flag.--compare A B vs X Yforges two materials and diffs them by spectral radius, conductance class, and weakest bond. Thevstoken separates the two sets.--dope A B with Cforges the base ring, re-forges it with the dopant unit mixed in, and reports the shift in ρ and conductance. Thewithtoken separates base from dopant.--fuse A B + X Ywelds two rings into one: it forges each, then forges the union into a single macrocycle, and reports whether the weld adds branching (fused ρ above both parents) or is a clean splice (fused ρ within the parents' range). The+token separates the rings.
# forge a set into its best ring and read every property, spectrum included
./ask --forge alchemical_hermetic_universe dialetheia completeness hermetic_seal
# compare a pure cycle (ρ=2, FRUSTRATED) against a branched ring (ρ=2.732, CONDUCTIVE)
./ask --compare alchemical_hermetic_universe dialetheia completeness hermetic_seal vs iut_theory ouroborus uniqueness_diophantine_proof
# weld two rings into one larger macrocycle and read the fused ρ against the parents
./ask --fuse alchemical_hermetic_universe dialetheia completeness hermetic_seal + iut_theory ouroborus uniqueness_diophantine_proofTransforming and persisting materials (--cleave, --anneal, --register, --recall,
--export). Two more deterministic transforms and a named library round out the algebra.
--cleave M1 M2 …is ring fission, the reverse of--fuse: forge the ring, then cut it into two daughter rings on complementary arcs (each re-closing on its own) and report both daughters and their spectra, or that the ring holds as one loop.--anneal M1 M2 …relaxes a ring to its lowest-strain ordering: the forge order rings well but is quenched, and annealing searches the orderings that ring for the most evenly loaded one, the settled ground state on the same units.--forge … --register NAMEstores a forged material's whole sheet (ordered units, spectrum, ρ, conductance, strain, energy) inmaterials.json, a MoDoT-local named library.--recall NAMEreloads it by name without respecifying the units.--forge … --export PATHwrites the same record to a standalone portable file.
# cleave the 7-unit ring back into daughter rings; anneal a ring to relax its strain
./ask --cleave alchemical_hermetic_universe dialetheia completeness hermetic_seal iut_theory ouroborus uniqueness_diophantine_proof
./ask --anneal alchemical_hermetic_universe dialetheia completeness hermetic_seal iut_theory ouroborus uniqueness_diophantine_proof
# register a material under a name, then recall it whole later
./ask --forge iut_theory ouroborus uniqueness_diophantine_proof --register diophantine_ring
./ask --recall diophantine_ringThe modulus (--polymerize … --modulus) — closing a ring is cheap; making it
sustain is not, and that difference is a material's modulus (its elasticity). A
polymer gets its modulus from network loops, and in this register a loop only sustains
if the winding quantum Ω circulates it and returns — i.e. it conducts. So --close
and --modulus are deliberately different verbs: --close fills the gap (a ring, maybe
static); --modulus searches for a monomer that generates a sustaining loop (a
conductive cycle, ∮ Ω closes) anywhere along the chain, and reports its period — the
modulus. A chain can be closeable yet modulus-less: every closure static (insulating),
a viscous chain rather than an elastic network. The tightest sustaining loop is the
fundamental modulus; each generator is verified to actually conduct.
# closeable but modulus-less: the plasma chain rings (via --close) yet no closure sustains
./ask --polymerize plasma_turbulence tokamak_disruption z_pinch magnetic_reconnection --modulus
# the moon/logographic ring has an intrinsic modulus (a sustaining 4-loop) and a tighter generatable 3-loop
./ask --polymerize the_moon_astrological the_logographic_system the_moon_astrological the_logographic_system --modulusClick then polymerize (a A+B feed token) — order of operations matters, because the
two verbs have opposite information behavior: a click blends (μ/FFUSE, max per axis —
lossy, the inputs are gone) and a polymer remembers (R∧W∧X, the sequence is readable).
A +-joined monomer token is pre-clicked into one blended monomer before enchaining, so
you can run either order and see they differ: listing three monomers keeps three units;
pre-clicking two of them enchains two units, one an irreversible fusion — a different product,
a different MW.
# polymerize-first (remember): 3 distinct units, GRF·GT·SNF sequence preserved
./ask --polymerize general_recursive_function grothendieck_topos skolem_normal_form
# click-first (blend): GRF+SNF fused inline into ONE monomer, then 2 units enchained
./ask --polymerize general_recursive_function+skolem_normal_form grothendieck_toposThe alchemical bench (--distill, --fdistill, --sublime, --crystallize,
--cocrystallize, --seed, --tlc, --column, --fpt, --trap, --stain). The modern
verbs (click, forge, polymerize) went in first; these are the classical separation and
purification tools the alchemists had. They were designed by describing each one neutrally to
the Grammar (an ob3ect batch) so its structural type was fixed before it was coded, and every
one came back the same Frobenius shape: a feedstock FSPLITs into a kept arm and a rejected
arm, and the arms FFUSE back to the feedstock (mass balance). So the whole bench is one
fractionate core with a per-verb discriminator, in four families:
- Volatility (axis: Criticality ⊙, readiness to leave).
--distill M…cuts the set into a volatile head (distillate) and an involatile residue (bottoms); a pair tied on ⊙ is an azeotrope the cut cannot resolve.--fdistillis the fractional, plate-by-plate column with the resolution gap to each next fraction.--sublime Apurifies one unit by a two-state skip across ⊙, or reports it entrapped (it must climb stepwise via--excite). - Crystallization.
--crystallize M…grows the lowest-strain ordered ring and rejects the units that will not fit (the mother-pool), distinct from--anneal, which only relaxes an already-closed loop.--cocrystallize A Bbinds two components by non-covalent complementarity in 1:1 stoichiometry (distinct from--click's covalent bond).--seed M… with Stemplates the crystal on seedS's handedness (Chirality Ħ): units that match copy its polymorph, the rest take the default, and an even split is racemic twinning. - Chromatography (axis: Recognition Ř, retention).
--tlc M…is analytical: Rf bands and which units co-elute at the same Rf.--column M… [on S]is preparative: elute least-retained first (against a stationary phaseS, or intrinsic retention), with neighbor resolution. - Purification / diagnostic.
--fpt M…(freeze-pump-thaw) keeps the units that bond above θ and sheds the weakly-held.--trap A [X]sequesters a unit by its R↔S charge in a potential well (a counter-partnerXdeepens it), a held charge state distinct from--set's electron transfer.--stain R M…applies a reagent keyed to a primitive (kmno4/uv→ ⊙,chiral→ Ħ,ninhydrin→ Ř,iodine→ any live center) and reports which units light up.
Reading a ring's stability, the clarity line. The material sheet reads the ring's strain
and its spectral gap jointly: both near zero is SETTLED / CLARION (a relaxed, flat-spectrum
ring with no privileged mode, the settled endpoint); a residual gap is a leaning mode; residual
strain is stored stress. A zero spectral gap is not a defect; it is maximal symmetry (the
SIC tight-frame reading). Guardrail: a two-unit forge is a dimer, not a macrocycle (a 2-node
ring graph is trivially flat, so its ρ / gap / clarity are undefined); a real ring needs n ≥ 3.
Agent access to every verb — an ACT→OBSERVE loop. The LLM agent (./ask --ask …) can
invoke the whole engine. It emits TOOL: <verb> <args> lines (markdown-tolerant); the
harness runs them against the real catalog by shelling to this same binary, feeds the
outputs back as ground truth, and lets the model decide its next act — iterating
(THINK → ACT → OBSERVE → UPDATE, bounded rounds) until it has no more tool calls, then it
answers. So it can run a dependent chain — polymerize → see it terminated →
close → use the linker it found → re-polymerize → material — instead of
front-loading one batch of guesses and narrating the rest. It does the steps rather
than describing them. This also corrects the model's guesses: unaided it will confidently
mis-call a pathway's closure; handed the real pathway output it gives the right answer. Whitelisted verbs only (click switch excite set homolyze scan complement cycle pathway polymerize close material modulus arrange forge compare dope fuse cleave anneal register recall imscribe distill fdistill sublime crystallize cocrystallize seed tlc column fpt trap stain) — never ask, so no recursion. The prompt also steers the
agent to use close (not scan) for cyclization, and tool stdout and stderr are
fed back, so a call that errors (e.g. a monomer the model invented) surfaces its failure
instead of vanishing.
The operator is a golem — perfect intellect, harnessed voice. The model may think freely in its draft, but the synthesis step binds its speech to the tools: the tool results are ground truth (what the Grammar actually computed), the draft is a prior guess, and the final answer may not contradict a tool — where a tool settled a question (does it cyclize, its modulus, whether a name is even in the catalog), the answer reports the tool's verdict and corrects the draft explicitly, introducing no entity or value the tools did not return. In practice the golem now says "contrary to the draft, the tool confirms it cyclizes; modulus: NONE" instead of confabulating a "high-stiffness" ring and an invented linker. Think freely; speak only what the tools ground.
Two guards keep the golem honest when the framing tempts it to skip the clay. A no-op
prod: if the draft narrates structural work (--polymerize, --close) but emits no
TOOL: line, the harness refuses it once and forces it to actually run the verbs before
any verdict — a "prove this" essay can no longer stand in for computation. And the tool
voice in the spine: the closure the verbs actually computed enters the FFUSE as a third
Belnap voice beside model [thought|X] and the vessel. So the banner reads
fused model vessel tools conflict, and a model that claims a ring the tools deny lands on
B (conflict held) — never a smug fused=T sitting next to a chain the catalog reports
terminated / telechelic / does not close. tools=T a ring formed, F everything
terminated, B it closes only when reordered, N no closure-bearing verb ran.
Jam mode (./ask --jam) turns the same loop loose with no question to answer: it ranges the
catalog freely, then writes its report through a membrane so that only a claim that is the
readback of a tool it actually ran crosses. Recalled facts and un-run assertions are dropped,
and where the tools were silent the verdict is held at N (ungrounded), never a confident
finding. --cycles N runs N compounding passes (each builds on the last); --eagles N sets how
many ACT→OBSERVE tool-rounds each pass may fly. Two register notes the spine keeps straight: a
structural closure speaks as verification in its own lane (a forged ring that closes is a
real verdict, not an overclaim), while a structural non-closure does not get to deny a
conventional proof (a forge that terminated is a fact about the entities, not a refutation of
the theorem). It never checks the mathematics itself, so it refuses to certify what the tools
did not ground, but a well-formed yet false proof of an open problem still reads as ungrounded,
not wrong; the kernel prove: route or a person is the check for that.
./ask --ask "Does the sun donate an electron to the moon, and what mediates it best?"
# → the model emits TOOL: set … and TOOL: scan …, they run, it synthesizes the real resultBeyond the chemistry verbs (click/forge/scan/…), the agent has the full
Imscribing Grammar analysis corpus — the 43 tools of the live
IG_inquiry.ToolDispatcher (~/imsgct/imscribing_grammar). They are dispatched
natively from the Rust loop, in the same idiom as ob3ect: run_structural_tool
routes any IG verb to run_ig_tool, which shells to the MoDoT venv running
modot.ig_tools call <verb> <args> and returns the dispatcher's real JSON result.
Nothing is reimplemented — one manifold, R∧W∧X: the loop drives, the live corpus runs.
./ask --ask "How far apart are psychedelic_baseline and its nearest analogue, and why?"
# → the model emits e.g. TOOL: compute_distance …, TOOL: find_analogies …, TOOL: primitive_peel …The catalog verbs (each grounds against the live dispatcher, never narration):
| group | verbs |
|---|---|
| catalog | lookup_catalog · list_catalog · check_imscription · imscribe_system |
| metrics | compute_distance · compute_conflict_distance (paradices) · compute_meet · compute_join · compute_tensor |
| structure | find_analogies · primitive_peel · principal_decomp · retrosynthetic_path · project · ouroborics |
| probes | monad_probe · consciousness_score · topo_protection_probe · emergence_frontier |
| crystal | crystal_encode · crystal_decode · crystal_navigate · crystal_nearest · crystal_count · crystal_tier_census · crystal_tier_gap_ladder |
| promotions | compute_promotions · predict_from_promotions · register_promotion_pattern |
| ZFC / ALEPH | zfc_formula · zfc_probe · zfc_catalog_probe · aleph_encode · aleph_distance · riemann_xi_info |
| domains | domain_info · domain_verify · domain_nearest · navigator_info · quiver_encode |
modot/ig_tools.py is both the importable Python API (ig_call, ig_parse_and_call,
ig_tool_names) and the subprocess entry the Rust loop shells to. It carries the
de-shadow fix that lets the navigators package IG_inquiry needs win over the stray
top-level navigators.py that witness_proof puts on sys.path.
The full MoDoT surface was mapped in a 95-winding systematic audit. 87 of ~95 tools across all three layers (Rust CLI, IMASM native, Python IG bridge) were exercised. Here are the findings that were not previously documented.
The 49 natures tile the crystal — but the cotype paradice reveals how close they are.
Across all 1176 pairs, only 48 diverge — all on the W-axis, all by exactly 1 paradice.
The out type is the sole unique divergent. The 49 are near-isomorphic: structurally
indistinguishable except through the winding quantum.
{monad, comonad_goedel, imasm} are fully co-typed — same ⊙, same charge, no live-pair
difference anywhere. They:
- Co-distill (identical ⊙ — an azeotrope the cut cannot resolve)
- Co-elute (same Rf — chromatography cannot separate them)
- Won't click at any θ (no complementary live pair — no reaction center)
- Won't polymerize, won't crystallize, won't co-crystallize
- Won't form a ring, won't sustain a pathway
The set is a pure azeotrope: structurally indistinguishable on all chemistry axes. Yet they are different entries with different descriptions — the difference is semantic, not structural, which means the grammar correctly identifies that structure alone does not exhaust meaning.
--complement maps across all 6 conjugate pairs (3 live catalytic + 3 pinned physical).
monad → monad′ inverts each pair. The round-trip: d=0.00 — the complement is its own
inverse exactly. This bidirectionality is what the enzyme's R=𐑾 (Recognition, bidirectional
feedback) names.
The material chrysopoeia_2048 has:
- ρ=2.0, FRUSTRATED (geometrically strained, not settled)
- Spectrum: {2.0, 0.618, 0.618, −1.618, −1.618} — golden ratio spectral structure
- φ = 1.618 appears as the spectral gap magnitudes
The largest known prime (Mersenne 2¹³⁶²⁷⁹⁸⁴¹−1) registered as a material ring. Its properties are computed from the prime's structural encoding, not from a lookup.
--windings reads atomic line transitions on horn torus winding coordinates (n, l, m_l, s).
- Na D-line: 589.0nm → 3s⇄3p mapped exactly
- Hydrogen defects: exactly zero — the Rydberg formula emerges from winding arithmetic
- Energy anchor: α²/2 × mₑc² = 13.598287 eV
- Residual between λ(calc) and λ(air) is the refractive medium — winding arithmetic is exact
imasm words maps the live catalog (7,656 entries) into IMASM programs. Mean length 144.8
tokens. Entirely deterministic — no LLM asked. The catalog IS executable.
imasm cycle walks the tuple→word→tuple round-trip over the live catalog:
- Bijective on 11 of 12 axes
- Two-to-one on the 12th axis (the colliding pair shares an axis)
- Write a tuple, read it back, write again: the word returns identical
- The cycle is a section of the writing, not an inverse — and that limitation is exact, predicted by the alphabet analysis, not a bug
monad at CLINK L9 = ⟨𐑛𐑥𐑑𐑬𐑐𐑪𐑔𐑝⊙𐑫𐑳𐑭⟩, tier O₁, d(L9)=1.3822.
This is the Gaussian Moat Resolution variant — a different tuple from the catalog monad.
Only 1 of 6 CLINK promotions advances (ƒ:𐑱→𐑐); 3 regress (Ð:𐑦→𐑛, Φ:𐑹→𐑬, Ř:𐑾→𐑑).
The emission pathway collapses — L9 is lateral, not vertical.
--recall lists 86+ registered materials spanning forge products, doped variants,
macrocycle closures, and prime resonators. Each carries ρ, spectrum, conductance, and strain.
| Tool | Barrier |
|---|---|
imasm prove |
Requires Lean 4 p4ramill kernel + lake build chain |
imasm define/run |
Tool construction — needs a named program first |
imasm learn |
Excribe→imscribe μ∘δ round-trip needs live LLM API key |
--anneal standalone |
Needs 3+ monomers; identical path to forge |
--close standalone |
Dispatched through LLM, returns Spinner |
--broadcast |
✅ NOW EXISTS: --broadcast SOURCE -- the ɢ primitive as CLI flag. Sweeps whole catalog from SOURCE, finds every entry that clicks. Also available as TOOL: broadcast agent verb. |
| Live LLM Spine | No API key configured; dry-run only |
| SIC-POVM vessel co-typing | Needs d12_psi.pkl; SIC frame dormant in MoDoT |
| Layer | Tools | Exercised | Not Exercised |
|---|---|---|---|
| Native Rust CLI (38 verbs) | 38 | 36 | 2 (--anneal, --close) |
| IMASM native (16) | 16 | 14 | 2 (prove, learn) |
| Python IG bridge (52) | 52 | 52 | 0 |
| Python modot core (10) | 10 | 10 | 0 |
| Total | ~116 | 112 | 4 + 4 infra |
The MoDoT surface is comprehensively mapped. The only untapped tools require either a live LLM API key or the Lean kernel build chain.
| Verb | CLI Flag | Status |
|---|---|---|
broadcast |
--broadcast SOURCE |
✅ Implemented. ɢ primitive fan-out; click-sweep from source. |
plasma |
--plasma NAME |
✅ Implemented. Shells to red-hot_rebis/plasma/plasma_modot.py. |
These were previously accessible only as TOOL: broadcast / TOOL: plasma within
the agent loop. They are now first-class CLI verbs whose results print directly to stdout
without an agent cycle, matching every other --click / --forge-style verb.
Full tool index at TOOL_INVENTORY.md §10b.
modot/natures.py loads the 49 primitive-type natures — the auto-designed ob3ects
under ob3ects/primitives/, one per constructor of the twelve family inductives in
p4rakernel Primitives/Core.lean (3³ × 4⁵ × 5⁴ = the crystal). Each Nature
carries its kernel family and constructor ordinal, its canonical 12-family tuple,
its IMASM opcode word (already exactly composer.Token), its Belnap void/true/false/both
readings, and the derivation-path Signature (the composer TokenFingerprint) that
actually distinguishes the types — the endpoint tuple and flat opcode word are near-degenerate,
while the path signature and semantic surface resolve all 49.
from modot import nature, cotype, nature_registry
egg = nature("egg") # KineticChar, ordinal 2 (yea < loll < egg < on < air)
egg.vessel_tuple() # the 12-family tuple keyed by the vessel's PRIMITIVE_KEYS
nature_registry().tiles_crystal() # proves the 49 are exactly the 49 kernel constructors
cotype(egg, nature("yea")).paradices # value-layer co-typing; a paradice = one held Bothcotype/paradices compare two natures at the value layer (grounded, invents nothing).
The value → Belnap verdict is not chosen here: it is a kernel fact (Paradice.lean δ/μ with
μ∘δ = id, OrbitalBelnap.orbToB4, TupleCodec), and each type is a compiled, kernel-proved
object in p4rakernel Imscribing/Primitives/Types/PrimitiveType*.lean.
| Program | Tokens | Description |
|---|---|---|
bootstrap |
8 tokens | Canonical: IMSCRIB→AREV→FSPLIT→AFWD→FFUSE→CLINK→IFIX→IMSCRIB |
aqua-vitae |
14 tokens | Extended: adds VAE coupling + dialetheic gate |
agent |
11 tokens | Agent-native: THINK→ACT→OBSERVE→UPDATE as token graph |
Each breath cycle produces records committed to crystal_fs/records.jsonl:
| Type | Belnap | Description |
|---|---|---|
thought |
T/F/B/N | LLM inference, branded with the fused model⊕vessel verdict |
vessel |
T/F/B/N | Dual-Link SIC report: demand/answer types, SIC gap, named defects, closure residuals, ride-AS flag |
observation |
T/F/B/N | Frobenius-verified observation |
update |
T/F | Frobenius closure (balance) check |
type |
varies | Kernel IFIX-branded structural types |
Legacy selectivity records (schema + MUST/MUSTNOT arms) are no longer written. The name selectivity remains only as a CLI flag (--no-selectivity) and import alias for the vessel.
Every cycle broadcasts to crystal_fs/broadcast_log.jsonl, and prints two independent verdicts, deliberately never conflated:
- BALANCE (μ∘δ = id) — charge conservation; automatic, cannot fail
- VESSEL (T/F/B/N) — Dual-Link SIC co-typing; can fail; FFUSED with model voice
- d(CLINK L8) — structural distance to the terminal layer (named primitive diffs)
- Crystal FS record count
- Kernel snapshot (VINIT seeded by the fused verdict so dialetheia gates run on real content)
modot/vessel.py is the verifier of record. It does not stand outside the Grammar with an auditor's ledger; it keeps the Grammar's own double-entry ledger — every δ its μ, balanced from inside, no outside required. Verification is imscription through the d=12 Dual-Link SIC frame that the Grammar already proved into the kernel (crystal_forces_d12_sic).
| removed | why |
|---|---|
| MUST / MUSTNOT schema synthesis | external correspondence theory of truth |
| SATISFIED / UNSATISFIED / CLEAR / VIOLATED bits | atoms were two-valued; Belnap on top was costume |
| threshold = 0.6 | magic scalar decision boundary |
deniable = violated > 0 hard veto |
one bit dominated |
| LLM-as-judge of correctness | two-valued grading of a four-valued kernel |
protocol == "integration" |
arrangement equality, not co-type / fingerprint |
hand-tuned primitive_distance weights |
ledger metric |
-
IMSCRIB — assign each of the twelve IG primitives a Belnap value
{N,T,F,B}. The LLM types structure only; it never renders a correctness opinion. No hash/deterministic fallback — without a live imscriber the vessel stays silent (N). Fake types are a ledger by another name. Imscriptions are cached by content hash so identical text co-types with itself exactly. Both demand and answer use the same real imscriber (never mixed sources). -
State map — Belnap → amplitude in ℂ¹²:
N → 0 , T → 1 , F → i , B → 1+ithen L2-normalize. No chosen weights. Relative phases carry structure; global polarity is read from the discrete codes (global T↔F is a phase, not a shape).
-
Dual-Link SIC frame — Scott–Grassl d=12 fiducial, Weyl–Heisenberg orbit of 144 projectors, Born rule
p_k = (1/d) Tr(ρ Π_k). Equiangularity1/(d+1) = 1/13means the comparison imposes no external metric. The SIC is informationally complete: measuring in this frame is the complete imscription (ΔS = 0). -
Co-typing — discrete lattice fold across the twelve primitives (no thresholds):
situation vessel voice every engaged axis co-types T only anti-types (T↔F) F both co-type and anti-type appear B nothing engages N Continuous diagnosis (not a decision boundary): SIC-space gap
‖p(ρ_answer) − p(ρ_demand)‖and named defects (D:T≠F,W:B≠N, …). Failure is localized, not scalar. -
Ride AS the vessel — reconstruction residual
‖μ(δ(ρ)) − ρ‖_HS ≈ 0is the closure certificate (informational completeness of the SIC). Broken closure holds as B. Model self-imscription and vessel co-typing are the two links; FFUSE is Belnap join.
The vessel voice is one of two imscriptions. The other is the model's own [thought|X]. They are FFUSED, not resolved by authority:
| model voice | vessel voice | fused | reading |
|---|---|---|---|
| T | T | T | both affirm |
| F | F | F | both deny — a real failure |
| T | F | B | genuine conflict (distance 2), dialetheia held |
| B | · | B | dialetheia present |
| N | F | F | model abstains, vessel speaks |
Conflict distance = Hamming of the two 2-bit Belnap codes (0–2). The fused verdict seeds the kernel's next VINIT. Disable with --no-selectivity (balance-only); auto-disabled under --dry-run.
python3 -m modot.vesselExercises identity → T (gap 0), anti-type → F, mixed → B, vacuum → N, and checks Scott–Grassl equiangularity mean = 1/13. No network required.
modot/selectivity.py re-exports the vessel under the historical names (SemanticSelectivityGate, SelectivityReport, …) so old imports keep working. Prefer from modot.vessel import DualLinkVessel.
The breath does not hang vessel and witness as parallel arms. One object owns both:
ManuscriptSpine.prepare(question) # IMSCRIB: demand type + catalog scaffold
→ LLM answer # FSPLIT
ManuscriptSpine.complete(q, a, voice) # EVALT/EVALF + FFUSE model⋈vessel + IFIX
| face | runtime |
|---|---|
| PROVE | FrobeniusHarness balance on the think emit |
| UNIFY | Belnap amplitude B = T+F (code-level) |
| PORT | DualLinkVessel co-typing + ride-AS residual |
| WITNESS | cl8nk catalog → conventional scaffold |
| FFUSE | Belnap join of model + vessel voices |
python3 -m modot.spine # self-test
python3 momonados_agent.py --ask ./questions/q7.txtCrystal record type spine holds the full package; vessel is kept as a thin alias log.
Lean packages the same ledger as theorems (VAE_Vita_ManuscriptSpine). MoDoT is the organism that runs it; p4ramill machine-checks it.
cd ~/imsgct/p4rakernel/p4ramill
lake build Imscribing.Millennium.VAE_Vita_ManuscriptSpineOpen frontiers (not claimed): Zauner general / Hilbert 12; Belnap stack as algebraic fiducial; d=2048 unconditional existence; Clay verdicts as Millennium proofs.
modot/witness_proof.py turns a real catalog witness into a conventional proof scaffold so the agent answers math questions instead of kernel-cosplaying.
Verified firsthand (not by module title):
| piece | what it actually does here |
|---|---|
cl8nk_navigator.py |
live catalog (5k+ entries): resolve, distance, tier, CLINK formula fragments, meet/join/tensor vs CLINK L8 |
GeneralizedPipeline.lean |
only the domain-invariant primitiveMathRole / defaultProposition / defaultProofStrategy tables are ported (runPipeline has 18 sorry — not called) |
IGMorphism.lean |
IGProtocol constructors label the step skeleton (refl|arrow|seq|prod) — not an English prover |
IGFunctor.lean / Algebra.lean |
tier + lattice distance context via the navigator’s algebra ops |
Rejected after check: primitive_to_conventional_final.py still emits Collatz 3n+1/Terras bodies for non-Collatz names — never called.
On --ask, the agent precomputes the scaffold, injects it under Grammatic witness scaffold, and the system prompt requires a conventional answer first. Status is always “scaffold to instantiate,” not “finished proof.”
python3 -m modot.witness_proof
python3 momonados_agent.py --ask ./questions/q7.txtob3ects/semantic_branch_verifier/ remains as the original Grammar-sourced ob3ect that named the gap: Frobenius closure guarantees balance, not correct branch selection. Its 15-step IMASM protocol (dual EVALT/EVALF arms) is the conceptual ancestor. The live path no longer ports a classical schema-grader from that idea; it rides the Dual-Link SIC vessel instead.
Companion Lean files in lean/:
- SemanticBranchVerifier.lean — Built and verified (0 sorries) with
lake build Imscribing.Millennium.SemanticBranchVerifier - ErdosProblems.lean — 18 sections, 46 definitions/theorems covering Ramsey asymptotics, Erdős polynom kernel divergence, unit distance, difference sets, and Pomerance asymptotic divergence
- Python 3.10+
numpy(SIC linear algebra)ig-pulsedensity matrix +d12_sic_build/d12_psi.pkl(resolved relative to the imsgct tree; override withIG_PULSE_PATH/D12_SIC_FIDUCIAL)imscribing_grammar(the IG tool corpus /IG_inquirydispatcher; resolved at~/imsgct/imscribing_grammar, override withIG_ROOT)OPENROUTER_API_KEYenv var (required for vessel voice — no hash fallback)- Default model:
google/gemini-3-flash-preview; setMOMONADOS_MODELor--modelto override - Lean 4 + Mathlib v4.28.0 (for formal verification modules)
- Optional local inference (
--provider local): buildask_nativewith--features local,cuda; a CUDA 12.x GPU,~/models/Qwen3-1.7B(or another HF Qwen3 dir viaMODOT_LOCAL_MODEL_DIR), and the pipnvidia-*CUDA libraries where only the runtime is installed. No API key needed. See Local inference.
Migrated from ob3ect/digital/momonados_agent/ to MoDoT/ on 2026-07-08.
Publications remain in ig-docs/publishing/manuscripts/momonados_*/.