Skip to content
docs
Arxo ↗

Capability matrix

For LLMs5 sections

This page puts the twenty directions of the comparison program side by side, one property per column. Each cell records what the research reports established by reading documentation, standards, papers, and pinned sources as of September 2026, on the version named on the system’s own page. No cell is an execution result: nothing was installed, built, or run to fill this matrix, and a “Supported” cell means the property is documented, not that it was observed in a run.

Only confirmed cells are published. Where the sources studied say nothing, the cell is left marked as open. The matrix gives no ranking and has no total column. A row is a starting point; the system’s page carries the nuance, the scenario, and the evidence passport.

  • Supported — the documentation or sources show the property as a built-in form of the language, engine, or standard.
  • Needs wrapping — the property is reachable only through extra author code, external tooling, or with a stated caveat.
  • Out of scope — the property lies outside what the system is for, or outside the comparison as designed.
  • — — not established by the sources studied; open, not impossible.

A short qualifier after a label repeats the reason recorded in the source, in plain words. “Not executed here” means the feature is documented but was not run in this program.

Rows follow the groups of the section index: computing amounts, drawing conclusions, authorization and business rules, contracts, exchange formats, and interviews and language models. The Arxo row comes last. Its reasoning cells come from Arxo’s side of the same comparison contracts in the same reports; its engineering cells come from this documentation (editor, from code, MCP). The same rule applies: documented, not executed.

The first table covers how a system treats facts, conflicts, time, and normative positions.

SystemMissing factExplicit denialConflicting normsTime and editionsDeontic positions
CatalaSupported: absent or present optional valuesNeeds wrapping: false is an ordinary valueSupported: conflict error; detection, not statusNeeds wrapping: dates yes; working days, editions by handOut of scope
OpenFiscaSupported: unset input falls back to default——Supported: periods, dated formulas and parametersOut of scope
M / MlangSupported: undeclared variable reads as undefined—Supported: last assignment winsOut of scope: each edition is a yearly releaseOut of scope
PolicyEngine———Needs wrapping: dated values; text in force not modelledOut of scope
RegelRechtNeeds wrapping: null handling present; semantics not established——Needs wrapping: date addition and validity dates—
Logical EnglishSupported: unknowns and assumable factsSupported: negation as failure to prove—Needs wrapping: dates yes; working days, editions notNeeds wrapping: library pattern, not language form
PROLEGSupported: unproven fact counts against its burden sideSupported: failure negation plus explicit negation formNeeds wrapping: nested exceptions; no automatic priorities——
BlawxSupported: default negation with constructive proofSupported: classical strong negationSupported: section defeat with a guardNeeds wrapping: dates yes; calendar semantics approximateOut of scope
L4Supported: optional valuesSupported: classical negation; unless as and-notNeeds wrapping: rule plus exception written by handNeeds wrapping: dates yes; working days, editions notSupported: must, may, must-not; fulfilment and breach
OPA / RegoSupported: missing key is undefined; defaultsSupported: negation as failure with safetySupported: evaluation error on two valuesNeeds wrapping: time functions; “as of” through inputNeeds wrapping: allow and deny are ordinary rules
CedarSupported: missing attribute errors; has-guard—Out of scope: forbid always winsOut of scopeNeeds wrapping: permit and forbid, no position lifecycle
DMNNeeds wrapping: null input underspecified by the standard—Supported: named hit policiesNeeds wrapping: date and duration functions—
Drools / DRLSupported: not and exists patterns—Supported: salience, agenda and activation groupsOut of scope: event processing excluded from comparison—
Accord / CiceroNeeds wrapping: optional field ignored by logic—Out of scope: one clause, one procedureNeeds wrapping: deadlines read the wall clockNeeds wrapping: answer plus events, no position lifecycle
Symboleo———Needs wrapping: date addition, event predicatesSupported: obligations, powers, fulfilment, violation
Stipula————Supported: powers as states, calls bound to state
LegalRuleMLNeeds wrapping: negation forms mapped before a runNeeds wrapping: negation forms mapped before a runSupported: rule strengths and superiority, model levelNeeds wrapping: temporal axes mapped before a runNeeds wrapping: modalities present; reparations checked before a run
Akoma NtosoOut of scope: markup, not a rule languageOut of scope: markup, not a rule languageOut of scope: markup, not a rule languageSupported: lifecycle, temporal groups, point in timeOut of scope
docassembleNeeds wrapping: question asked again; no undecided outcome—Out of scopeNeeds wrapping: deadlines are author codeNeeds wrapping: legal logic is author Python
LLM / RAG———Needs wrapping: snapshot fixed by date and fingerprint—
ArxoSupported: “not established”, names the missing premiseSupported: explicit negation, separate from absenceSupported: dual status; declared prioritiesSupported: edition snapshot and as-of policySupported: duty and power; satisfied and violated

The second table covers open-textured terms, explanations, arithmetic, and the link back to the source text.

SystemEvaluative termsExplanation of yes and noNumbers and roundingSource provenance
Catala—Needs wrapping: trace; explanation tool early-stageSupported: exact decimal, money to the centOut of scope
OpenFisca—Supported: tracers and computation logSupported: half-to-even rounding—
M / MlangOut of scope—Supported: binary floating point; precision modesOut of scope
PolicyEngine—Needs wrapping: computation tree trace, not executed hereNeeds wrapping: single-precision floats; tolerance in contractNeeds wrapping: parameters link to law; no derivation link
RegelRecht—Needs wrapping: explanation trail declared, not executed hereNeeds wrapping: number types; rounding and units not establishedSupported: article anchors to the official publication
Logical EnglishSupported: judged and open-textured terms, second editionSupported: proof tree in the rules’ wordsNeeds wrapping: arithmetic yes; units, rounding not establishedSupported: provenance badge with a quote check
PROLEG—Supported: dispute-shaped trace——
Blawx—Supported: justification treesNeeds wrapping: numbers and dates presentOut of scope: no provenance to official text
L4—Needs wrapping: trace to graph, not executed hereNeeds wrapping: numbers yes; units, rounding not established—
OPA / Rego—Supported: explain modes and tracingNeeds wrapping: JSON numbers, no money arithmetic—
CedarNeeds wrapping: attribute declared, read by no policySupported: deciding policies and errors in the answer——
DMN—Supported: audit trail of matched and selected rulesSupported: 128-bit decimal—
Drools / DRL—Needs wrapping: listeners and loggers, no certificate——
Accord / Cicero—Needs wrapping: answer plus event, no proof graphNeeds wrapping: binary float amountsNeeds wrapping: text-to-data grammar; no hash link
Symboleo—Supported: model checker counterexamples, conformance checker——
Stipula—Needs wrapping: observable trace, not a proof graph——
LegalRuleML—Out of scope: the format defines no proofsOut of scope: the format defines no arithmeticSupported: authority, sources, references to articles
Akoma NtosoOut of scopeOut of scopeOut of scopeSupported: work-expression-manifestation levels, element addressing
docassembleNeeds wrapping: question to a person, author branchingNeeds wrapping: no built-in trace; screens and documentNeeds wrapping: author types; no units or roundingNeeds wrapping: document assembly; no link to article
LLM / RAG———Needs wrapping: retrieval gives source wording; invented quotes possible
ArxoSupported: requires-judgment request to a named bodySupported: proof graph and why-notSupported: exact arithmetic; refuses inexact divisionSupported: source anchors and content hashes

One reasoning property is not shown: edits and affected cases. Every direction has a prepared bank of edit cases, so that column describes the comparison protocol rather than the systems, and it would read the same in every row.

The first table covers how rules are tested, checked, given a semantics, and debugged.

SystemTestsStatic analysisFormal semanticsEditor and debugging
CatalaSupported: scope tests, assertions, cram testsSupported: opt-in solver-backed proof pluginSupported: core translation mechanized; backends not coveredNeeds wrapping: trace; editor not established
OpenFiscaSupported: YAML tests with a 1% margin——Supported: tracers and computation log
M / MlangSupported: fixed-format tests, cram tests, CI—Supported: Coq semantics; numbers formalized too—
PolicyEngineSupported: YAML tests with absolute marginsNeeds wrapping: releases checked against an external calculator—Needs wrapping: computation tree trace, not executed here
RegelRechtSupported: behavior scenarios beside the law——Needs wrapping: explanation trail declared, not executed here
Logical EnglishSupported: scenario expectations, run on every loadSupported: integrity constraintsNeeds wrapping: runs on Prolog; mechanization not establishedSupported: VS Code extensions, SWISH
PROLEG—Needs wrapping: nested exceptions; no priority inference—Needs wrapping: dispute trace, not executed here
BlawxSupported: tests inside the blocksNeeds wrapping: defeat guards; completeness not establishedSupported: answer-set semantics of s(CASP)Supported: block editor, scenario explorer
L4Supported: in-file asserts; failed assert exits zeroNeeds wrapping: exceptions by hand; no priority inference—Needs wrapping: trace to graph, not executed here
OPA / RegoSupported: test files with input overridesSupported: strict check, linter, formatter—Supported: linter, debugger, language server
Cedar—Supported: schema validation, symbolic policy analysisSupported: Lean proofs of engine propertiesNeeds wrapping: CLI with exit codes; editor not established
DMNSupported: community conformance suiteSupported: named hit policies—Supported: KIE DMN Editor, Camunda Modeler
Drools / DRL—Needs wrapping: ordering controls; completeness not established—Needs wrapping: listeners and debug loggers
Accord / CiceroSupported: per-template unit tests—Needs wrapping: Coq-built compiler toward a formal specificationNeeds wrapping: Template Playground; no proof graph
SymboleoNeeds wrapping: samples and checker traces; test language not establishedSupported: model checker, conformance checkerNeeds wrapping: paper semantics versus code generatorSupported: Xtext IDE, web editor, headless CLI
StipulaNeeds wrapping: example files; test runner not establishedSupported: liquidity analyzer, bisimulationNeeds wrapping: bisimulation stated, formal text not readNeeds wrapping: Java interpreter, not executed here
LegalRuleMLNeeds wrapping: no own tests; schema and mapping tableSupported: rule strengths and superiority, model level——
Akoma Ntoso—Supported: schema validation, identifier and date checksNeeds wrapping: standard and schema; markup, not inference—
docassembleNeeds wrapping: external tool, 15 to 30 minutes per runOut of scope: logic is author PythonOut of scope: platform, not an inference languageSupported: Playground
LLM / RAGOut of scope: no test languageOut of scope: answers, not an inference languageOut of scope: answers, not an inference semanticsOut of scope: no rule editor or debugger
ArxoSupported: scenario files plus a static checkSupported: static check before executionSupported: core semantics mechanized in Lean 4Supported: VS Code and Cursor extension, language server

The second table covers embedding, versions, and license.

SystemEmbeddingVersions and reproducibilityLicense
CatalaSupported: compiles to C, Python, OCaml, JavaSupported: pinned release 1.2.1Supported: Apache-2.0
OpenFiscaSupported: pip install, web API extraSupported: France package 176.0.9, core 44.7.1Supported: AGPL-3.0
M / MlangSupported: interpreter, C and Python backendsSupported: tagged releasesSupported: GPL-3.0-or-later; tax sources’ license undetermined
PolicyEngineSupported: pip and HuggingFace distributionSupported: core 3.32.11, pinned commitsSupported: AGPL-3.0
RegelRechtNeeds wrapping: harvester present; API not establishedSupported: schema v0.7.1, head of 30 September 2026Supported: EUPL-1.2; corpus license unstated
Logical EnglishSupported: SWISH, JavaScript API, DockerSupported: both editions pinned by commitSupported: Apache-2.0; second edition by README only
PROLEG——Needs wrapping: no declared engine license
BlawxSupported: REST API, s(CASP) exportNeeds wrapping: editor pinned; engine image floatsSupported: MIT; s(CASP) Apache-2.0
L4Supported: REST and MCP service export, declaredNeeds wrapping: model pinned; engine built from sourceSupported: engine Apache-2.0, model MIT
OPA / RegoSupported: server APIs, bundles, WASM, Go moduleSupported: v1.21.0Supported: Apache-2.0
CedarSupported: Rust SDK; WASM not establishedSupported: language 4.5, SDK 4.13.0Supported: Apache-2.0
DMNSupported: Java and Scala libraries, platform RESTSupported: dmn-scala 1.12.3, KIE 10.0.0Supported: Apache-2.0
Drools / DRLSupported: Java library via Maven CentralSupported: 8.44.2.FinalSupported: Apache-2.0
Accord / CiceroSupported: model compiler, server wrapper, npm packagesSupported: tag v0.4.0Supported: Apache-2.0
SymboleoNeeds wrapping: JavaScript generation; API not establishedSupported: pinned commits, CLI v1.0.1Supported: MIT
StipulaNeeds wrapping: npm install; API not establishedSupported: editions, grammars, analyzers pinnedNeeds wrapping: analyzers GPL-3.0; no root license
LegalRuleMLNeeds wrapping: XSLT between serializations; runtime not establishedSupported: OASIS Standard 1.0, August 2021Needs wrapping: OASIS standard; license text not read
Akoma NtosoNeeds wrapping: Bluebell and Indigo tooling; API not establishedSupported: version 1.0 (2018), schema 3.0Supported: OASIS standard; schema CC-BY 4.0
docassembleSupported: Docker image, PyPI, partial REST APISupported: 1.10.12, pinned tagSupported: MIT
LLM / RAGNeeds wrapping: engine reached through toolsNeeds wrapping: snapshot by date and fingerprint—
ArxoSupported: TypeScript client, MCP server, WebAssembly buildSupported: versioned packages, hashed pinned inputsSupported: Apache-2.0

These columns ask how a representation treats a model that writes rules and a person who accepts them: whether diagnostics are usable by a model, whether code is tied to the source text, and what can be accepted without running anything.

SystemDiagnostics for a modelLink between code and source textCheckable without execution
CatalaSupported: assertions and cram tests in the standard checkOut of scope: provenance not keptNeeds wrapping: static only with the opt-in proof plugin
OpenFiscaSupported: tests with a margin, computation log—Needs wrapping: no machine check against the text
M / MlangSupported: build, source parse, test self-checkOut of scopeNeeds wrapping: checked by running; private suite unavailable
PolicyEngineSupported: YAML tolerance of one centNeeds wrapping: parameter links; no derivation to fragmentSupported: dated values plus trace
RegelRechtNeeds wrapping: schema pin, evaluation, text drift controlSupported: article anchors; harvester of official XMLSupported: schema plus date and null conformance
Logical EnglishSupported: scenario expectations run on loadSupported: provenance badge with a quote checkSupported: scenarios, constraints, explanations in rule words
PROLEGNeeds wrapping: message trace, not executed here—Needs wrapping: burden read from markup, not checked
BlawxSupported: justification trees, human-readable outputOut of scope: no provenance to official textSupported: justifications and constraints as objects
L4Needs wrapping: failed assert still exits zero—Needs wrapping: evaluations explore, do not assert
OPA / RegoSupported: strict check and verbose tests—Supported: strict check and tests before execution
CedarSupported: validate and authorize with exit codes—Supported: strict validation, symbolic analysis
DMNNeeds wrapping: conformance suite and engine incidents—Supported: hit policies plus audit trail
Drools / DRLNeeds wrapping: listeners and loggers; no certificate—Needs wrapping: runtime observation only
Accord / CiceroSupported: template tests as the standard checkNeeds wrapping: text-to-data grammar; no hash linkNeeds wrapping: tests and compile; no proof graph
SymboleoSupported: headless CLI with JSON diagnostics—Supported: model checking over all paths
StipulaSupported: syntax errors with exit code; liquidity feedback—Supported: liquidity and timeout events observable
LegalRuleMLNeeds wrapping: schema validation; no own testsSupported: authority, sources, references to articlesSupported: schema, mapping table, constant checks
Akoma NtosoSupported: schema validation, identifier and date checksSupported: work-expression-manifestation levels, element addressingSupported: schema plus lifecycle structure
docassembleNeeds wrapping: no built-in traceNeeds wrapping: document assembly; no link to articleNeeds wrapping: platform and author pattern not separated
LLM / RAGOut of scope: free-text justification cannot be checkedNeeds wrapping: retrieval gives wording; invented quotes possibleOut of scope: no checkable representation
ArxoSupported: proof graph and why-notSupported: source anchors checked byte for byteSupported: static check without execution

Two machine-author properties are not shown: the review volume per norm and documentation that fits a fixed context budget. The sources do not measure the first for any system, and for the second they record the budget the program sets rather than a property of the systems.

A dash is not a “no”. It means the documentation and sources studied for that version did not settle the question, and the question stays open until a source or a run does. Three more rules keep the matrix honest:

  • Not found is not impossible. A property missing from the documentation is never read as a property the system cannot have.
  • Labels describe the studied profile. A cell belongs to the version and, where noted, the studied model; a later release or a different model may move it.
  • Language, engine, model, and tooling stay apart. “Needs wrapping” often means the language allows the property but the engine, the studied model, or the toolchain does not provide it directly. The system’s page says which.

A cell changes the same way a page grows: a new source or an executed run settles the question, and the page records the date and the version. The methodology page explains the contracts, outcome classes, and openness rules behind every cell.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.