SlimeMUMPS — MUMPS → Java / Clojure bit-exact transpiler
End-to-end deterministic modernization of healthcare EHR and financial MUMPS, all the way to HIPAA audit.
VistA / Epic / Meditech / Ameritrade / Bank of England and others run tens of millions of lines of MUMPS code worldwide. SlimeMUMPS converts them to Java / Clojure with bit-exact correctness, audit chains, and tamper detection.
- Auto-detects 8 dialects (ANSI 95 / Caché / IRIS / GT.M / YottaDB / FreeM / MiniM / MV1)
- MUMPS globals (sparse hierarchical KV) map naturally to SlimeTree-RLM B-Tree with 4-tier auto-placement
- S9 bench: all 5 axes 100.0000% — combined 171/171 + Rosetta 98/98 + synth 73/73, all programs javac-PASS, byte-deterministic emit, 100% mutation rejection
- InterSystems 14 Caché-specific extensions all working live —
##class/ Embedded SQL / Dynamic SQL /$$$macrowith arguments /%Stream/%ResultSet/$LIST*/%DynamicObject/%XML/%Net.HttpRequest/ HL7 v2 / Pick MV $$$macropre-processor covers ~99% of #DEFINE usage in WorldVistA + InterSystems samples
Implements the round-trip + instant tamper detection required by HIPAA / financial audit. Auditors can re-verify "no information lost in conversion" after the fact — the world's first deterministic transpiler dedicated to MUMPS (per our research).
A SlimeNENC-family tool that moves legacy code into a modern language without changing its meaning. A hand rewrite quietly drifts and causes incidents; SlimeNENC doesn't interpret meaning — it copies only the "skeleton" (structure), so the computed results stay identical to the original. It proves the behaviour first, so migration anxiety disappears. It copies only what it can, honestly, and isolates what it can't.
Hand rewrites drift on subtle numeric/exception differences (boundary conditions), and verifying that (old-vs-new testing) costs enormous labour. SlimeNENC faithfully mirrors language-specific traps, proves "zero divergence" via differential testing, backed by an independent reference implementation. The deliverable is a machine-checkable "certificate of behavioural invariance," not human UAT. No overstating; what it can't do isn't hidden.
Source is projected onto a Slot IR (language-independent structural intermediate form) and transcribed structure-preserving into the target. The statically-determined core is made bit-exact; dynamic, state-dependent parts are honestly isolated (isolate, don't confabulate). Backed by differential fuzzing plus formal methods where applicable, with deterministic verification a third party can reproduce locally.
Projection (π) of source as unique structure, not semantics. Primitives are modelled rigorously in bit-vector theory and formally verified over all inputs; composition/loops are covered by Csmith-style differential fuzzing — a two-tier guarantee. Non-reproducible computation (float/parallel/AI) goes to tier-③: meaning-equivalence + convergence + residual. "Where there is form, prove it in bytes; where there is none, in meaning. Lie on neither face."
📋 "Ask your AI at this level" copies this page's explanation with an instruction matched to the level you picked. Paste it into your own AI (Claude · GPT · Gemini · Grok) to dig deeper at that resolution.
Headline metrics (measured 2026-05-07)
combined 171 + Rosetta 98 + synth 73
dialect / token / javac / mutation / determinism — all 100%
untouched javac-PASS, lifted from 57.31% → 100%
##class / &sql / $$$macro / %Stream / HL7 and more
WorldVistA + InterSystems sample basis
ANSI 95 / Caché / IRIS / GT.M / YottaDB / FreeM / MiniM / MV1
SET/FOR/IF… through Caché ObjectScript / OO / SQL / Macro / Stream / JSON / XML / HTTP / HL7 / MV
Java (enterprise) + Clojure (structural purity)
InterSystems Caché extensions — 14 features verified live
Real Caché / IRIS applications depend not on raw MUMPS but on the Caché extension surface. All 14 features below ran on 2026-05-07 with generated Java compiled by javac and executed against expected output (sqlite-jdbc + slf4j on the classpath):
| Phase | Caché feature | Sample / verification |
|---|---|---|
| 13 | Embedded SQL &sql(SELECT ...) | M_17: 2-row SELECT, SQLCODE=0 |
| 14 | ObjectScript ##class().%New() / %Save() | M_18: save → reload → kill, extent 2→1 all working |
| 15 | Dynamic SQL %SQL.Statement (%Prepare/%Execute) | M_19: rowcount=2, second %Execute also clean |
| 16 | $$$macro + #DEFINE NAME body expansion | M_20: 4 macros (GREETING/TARGET/BANG/LIMIT) all expanded; sum 1..10=55 |
| 16 | $SYSTEM.SQL.Execute(sql, args...) | M_21: ranking output 3 rows; 6-token pattern detected |
| 17 | Parameterised macros (%1/%2/${name} all substituted) | M_22: LOG / FMT / NAMED / POS — all four styles working |
| 17 | %Stream.GlobalCharacter | M_22: Write / Rewind / ReadLine / Clear loop verified |
| 17 | legacy %ResultSet | M_23: %Prepare/%Execute/%Next/%Get, rowcount=2 |
| 18 | $LISTBUILD / $LIST / $LISTGET / $LISTLENGTH / $LISTFIND | M_24: 5-item walk, default-fallback, find |
| 18 | %DynamicObject / %DynamicArray (Caché JSON) | M_25: build → toJSON → parse round-trip |
| 18 | %XML.Reader / %XML.Writer | M_26: 3 elements parsed, orders/order structure |
| 19 | %Net.HttpRequest (GET / POST) | M_28: status=200, body echoed |
| 19 | HL7 v2 message parser (MSH / PID / PV1) | M_29: 3 segments parsed, family/given/MR id extracted |
| 19 | Pick / Universe MV constants @VM / @AM / @SM / @TM / @FM | M_27: 4 attrs + sub-value split, VM=253/AM=254/SM=252 |
Phase implementation map —
Phases 1-2: SET/WRITE/QUIT/TSTART/TCOMMIT/TROLLBACK/LABEL/NEW/FOR/IF/ELSE/DO/Q:cond |
Phase 12: Caché/IRIS $Z* intrinsics (top 7 by WorldVistA frequency) |
Phase 13: Embedded SQL → JDBC |
Phase 14: ##class OO surface |
Phase 15: Dynamic SQL |
Phase 16: $$$macro + $SYSTEM.SQL.Execute |
Phase 17: parameterised macros + %Stream + legacy %ResultSet |
Phase 18: $LIST* + %DynamicObject/Array + %XML |
Phase 19: %Net.HttpRequest + HL7 + Pick MV
Market context — the world's MUMPS legacy
| VistA | US Department of Veterans Affairs EHR, 2.1 M LOC. Oracle Cerner migration is delayed by billions of dollars; SlimeMUMPS offers a domestic + bit-exact alternative. |
|---|---|
| Epic | World's largest EHR vendor, Caché-based. Epic customers (e.g., Mass General Hospital) need staged migration paths. |
| Meditech | Mainstream choice in mid-tier US hospitals; MUMPS-derivative. Realistic path to break vendor lock-in. |
| Ameritrade | Financial-sector MUMPS use (TD Ameritrade and others). |
| Bank of England / Barclays | European financial residual MUMPS, running in payment-clearing infrastructure. |
| Market scale | Tens of millions to ~1 B LOC worldwide; tens of billions of dollars annual maintenance. Competitors (e.g. TSRI) charge per-LOC; SlimeMUMPS charges only the WASM converter tool — generated code is perpetually free. |
8-dialect auto-detection (8/8 PASS)
S1 FST identifies dialect by fingerprint and propagates a dialect meta to downstream stages:
| GT.M | $ZT / $ZTRAP trap, $ZV system var, NAKED reference behavior |
|---|---|
| Caché ObjectScript | ##class(...).%New(), &sql(...) embedded SQL, &js(...) embedded JS |
| IRIS | ENSEMBLE, /csp/ production patterns |
| YottaDB | $ZVERSION + "YottaDB", ydb_* function family |
| Others | FreeM (GPL), MiniM, MV1 (Ray Newman) — all by fingerprint match |
MUMPS globals → SlimeTree-RLM natural mapping
MUMPS's hierarchical sparse KV is structurally isomorphic to SlimeTree-RLM's S-expression-like Slot IR. Sixty years of independent convergence — conversion is not a "mapping" but an "isomorphism made explicit".
; MUMPS SET ^PATIENT(123,"DOB")="1955-08-15"
// Java (SlimeMUMPS emit)
rt.set("PATIENT", new Object[]{123, "DOB"}, "1955-08-15");
;; Clojure (SlimeMUMPS emit) (rt/set-global! [:PATIENT 123 "DOB"] "1955-08-15")
4-tier storage with auto-demote
Treap, frequent access
RB-Tree, stable slots
SQLite/lmdb, auto-demote
Hilbert ordering for placement
Auto-demote measured (2026-05-07): hot tier cap 100, batch demote 100, 1000 set + 900 demote, RAM audit 1900 entries all verify PASS, tamper detection working.
BTree persistence measured: persistBatch 3600 records single-tx 34 ms (9.36 µs/rec); per-record fsync 200 records 690 ms (3.45 ms/rec); 3800 records on disk 596 KB; reopen verify PASS; one-byte tamper flip DETECTED instantly.
S9 bench results (measured 2026-05-07 — 3 corpora, all 5 axes 100%)
| Corpus | Programs | Axis 1 dialect | Axis 1 tokens | Axis 1 javac | Axis 2 mutation | Axis 3 determinism |
|---|---|---|---|---|---|---|
| corpus_combined (in-house + public synthesis) | 171 | 171/171 | 171/171 | 171/171 | 154/154 | 171/171 |
| corpus_rosetta (Rosetta Code in-the-wild MUMPS) | 98 | 98/98 | 98/98 | 98/98 | 82/82 | 98/98 |
| corpus (synth) | 73 | 73/73 | 73/73 | 73/73 | 72/72 | 73/73 |
| Total | All corpora, all 5 axes — 100.0000% (zero failures) | |||||
Honest disclosure: a previous version of this page reported 57.31% PASS on Rosetta Code in-the-wild MUMPS (98 programs). Phases 12-19 (InterSystems / Pick MV extension support) lifted that to 98/98 javac PASS on Rosetta, plus 171/171 on combined and 73/73 on the synth corpus — all measured on 2026-05-07. Mutation detection (Axis 2) rejects 308/308 flipped variants; emit determinism (Axis 3) is byte-identical across two emits, 342/342. S6 byte-exact regression has 0/0 expected outputs on file (reference set not stored), so we currently treat post-emit javac compile + Axis 3 determinism as the equivalent gate.
Supported syntax / commands (ANSI MUMPS + Caché ObjectScript)
| ANSI MUMPS core (Phases 1-2) | |
|---|---|
| Variables | NEW / SET / KILL / $LENGTH / $EXTRACT / $FIND |
| Control flow | IF / ELSE ($T chain) / FOR / QUIT (postcond Q:cond) / GOTO |
| Globals | $ORDER / $DATA / multi-level subscripts |
| Pattern match | ?N / ?A / ?L / ?U / ?P / ?C / ?E; class combinations (AN); alternation ((A,N)); count ranges (1.10A) |
| Indirection | @X; D @X with static reduction (90% statically resolvable); $$LABEL^ROUTINE reflective dispatch |
| Transactions | TSTART / TCOMMIT / TROLLBACK; tx snapshot restoration |
| I/O | WRITE / READ / OPEN / USE / CLOSE |
| Other | HALT / HANG / LOCK / MERGE / VIEW |
| InterSystems Caché / IRIS extensions (Phases 12-19) | |
$Z* intrinsics | $ZV / $ZVERSION / $ZTIMEZONE / $ZH / $ZP / $ZTRAP / $ZD — top 7 by WorldVistA frequency |
| Embedded SQL | &sql(SELECT ... INTO :var) / &sql(INSERT INTO ...) → transparent JDBC |
| ObjectScript OO | ##class(Pkg.Class).%New() / %Save() / %Open() / %Kill() / .Property / .%Method() chains / extent walks |
| Dynamic SQL | ##class(%SQL.Statement).%New() / %Prepare() / %Execute(args...) / %Next() / %Get(col) / %ROWCOUNT / %SQLCODE |
| Macros (Phases 16/17) | #DEFINE NAME body collected then $$$NAME longest-match substituted (pre-pass; _ is the MUMPS concat operator) / parameterised #DEFINE LOG(msg,sev) + %1/%2 / ${name} form |
| 1-line SQL | $SYSTEM.SQL.Execute(sql, args...) — 6-token pattern detection → SlimeSqlStatement path |
| Streams | %Stream.GlobalCharacter / %Stream.FileCharacter — Write / Rewind / ReadLine / AtEnd / Size / Clear |
Legacy %ResultSet | Caché old API, aliased to the Phase 15 path |
| $LIST family | $LISTBUILD / $LIST / $LISTGET (default fallback) / $LISTLENGTH / $LISTFIND |
| Caché JSON | %DynamicObject / %DynamicArray — %New / %Set / %Get / %ToJSON / %FromJSON |
| XML I/O | %XML.Reader / %XML.Writer — element parse, attributes, manual build |
| HTTP | %Net.HttpRequest — GET / POST, status / body / header access |
| HL7 v2 | HL7.Message — MSH / PID / PV1 segment split, ^/~/\/& separators, code extraction |
| Pick / Universe MV | @VM=253 / @AM=254 / @SM=252 / @TM=255 / @FM=254 auto-registered, attribute / sub-value split |
Pipeline (9 stages, common to SlimeNENC)
S2-S5 / S7-S9 are fully shared with SlimeCOBOL; only S1 (MUMPS FST) and S6 (Java/Clojure emitter) are MUMPS-specific:
Audit fitness (HIPAA / Finance)
- Bit-exactSame input → same sha256. Includes $ORDER walk, pattern match, indirection — fully deterministic.
- Audit chainIn-RAM SHA-256 monotonic chain plus an independent chain on the B-Tree disk side. Records are append-only — never deleted. Example tail (1900 entries): 0b1297dd50799d3a28e90e57e7ea30ee....
- Tamper detectionFlip a single byte of any record blob on disk and verify_chain() always reports DETECTED. Demonstrated by SmokeTest / BTreeIntegrationTest / AutoDemoteTest — three independent paths.
- RollbackTombstone-based logical delete. Chain stays intact (append-only); restore any prior state by timestamp. AutoDemoteTest verifies all 1900 entries after 900 demotes.
- $ORDER determinismsubscriptIndex (TreeSet per global per prefix) gives O(log N). Parallel psdpWalk uses sorted-index → indexed access for full determinism.
- Hallucination detectTrigram + bigram language model. Axis 2 rejects 154/154 flipped mutations.
- Build-time LLMLLM is used only at rule-construction time. Runtime is deterministic rules — basis of the 100.000% claim.
Use cases
| VistA migration | US Department of Veterans Affairs EHR (2.1 M LOC). Improve coverage with OpenVistA (GPL, internal QA only); production via NDA PoC on customer code. Realistic alternative as Oracle Cerner migration stalls. |
|---|---|
| Caché ObjectScript | InterSystems Caché (##class(...).%New(), &sql(...)) compiles cleanly via graceful degradation; logic migration is staged. |
| Financial MUMPS | Ameritrade / Bank of England settlement infrastructure. Bit-exact + transactions = no penny lost. |
| HIPAA audit | Round-trip + audit chain prove pre/post numerical identity. One-byte tampering is always DETECTED — auditors can replay end-to-end. |
License model
| Charged | WASM/WASI converter tool (developer side) |
|---|---|
| Free | Generated Java / Clojure source (customer asset, perpetual deploy) |
| Method | Ed25519-signed 144B license + 3-hop air-gap activation (HIPAA-ready) |
| Parallelization (PSDP) | Not bundled with this product. See PSDP as a separate SKU under SlimeNENC. |
Resources
- Tech overviewSlimeNENC Technical Overview (A5, 21 pages; MUMPS chapter to be added)
- Patent applicationJP 2026-046620 v15b — claims 11 (MUMPS indirection), 14d (dialect unification), and section 0018 cover MUMPS explicitly
- Sample implementation29 samples covering every Phase 1-19 feature (one each for ##class / Embedded SQL / Dynamic SQL / $$$macro / parameterised macros / %Stream / %ResultSet / $LIST* / %DynamicObject/Array / %XML / %Net.HttpRequest / HL7 / Pick MV) + 73 synth + 98 Rosetta + 171 combined = 342 programs reproducible
- BenchmarksS9 bench harness (5-axis correctness, 100% across all 3 corpora as measured), AutoDemoteTest (1000 set + 900 demote + tamper), BTreeIntegrationTest (3800 records persist + tamper), SmokeTest (audit chain + tx + tamper)
Healthcare EHR PoC / Materials Back to SlimeNENC family SlimeCOBOL
