Every record has a stable identity
Checker-backed infrastructure for data-centered systems
When data and reasoning are the institution, correctness becomes infrastructure.
MLTTDB turns formal claims, transformations, policies, proofs, and agent-generated reasoning into managed records that can be checked before they are used.
Dependencies made explicit and reliable
Structured views for applications and humans
Accepted or rejected by proof assistants
APIs for discover, edit, verify, consume
Your data estate
Warehouses, APIs, models, rules, reports, and more.
- Databases & Warehouses
- APIs & Services
- Files & Documents
- Models & Notebooks
- Rules & Policies
- Reports & Analytics
Formal candidates
Claims, transformations, policies, proofs, programs, and agent outputs.
- Transformation
- Invariants
- Policy
- Proof
- Derivation
- Agent Output
MLTTDB
- UUID Identity
- Deterministic Order
- Typed Projections
- Source-Linked Types
- Checker Status
- Application APIs
Managed term records Durable, ordered, and ready for validation.
Checker boundary
Proof assistants decide what is correct.
Checked operational artifacts
Trusted, auditable, and ready to use.
- Verified RecordsUsed in operational systems
- Auditable ReasoningTraceable from source to acceptance
- Safe Agent OutputsAgents operate within verified boundaries
- Proof-Carrying AnalyticsStatistical claims with checkable evidence
- Policy & Rule EnforcementCorrect by construction, enforced in systems
Why now
Proof-assistant terms are becoming operational data.
AI systems, editors, and domain tools can now produce many formal candidates. The hard part is not just generating terms; it is giving those terms identity, order, editing, validation, and a route into real applications.
Proof-assistant data was edited and reviewed as files.
Rows, proofs, programs, and domain objects need checker feedback.
Identity, order, UI, APIs, and validation have to stay connected.
The database stores text; the checker decides meaning.
Paradigm
Tables are types. Rows are terms. Columns are typed projections.
MLTTDB is intentionally small: source files declare tables, the store persists ordered row terms, and proof assistants validate those terms against the declared row types.
entries :T: RowType
{ uuid, body, projectionValues, order }
A source-language type declared in Agda, Lean, or Rocq.
An opaque source-language expression stored with a UUID.
Typed column values derived from the row decomposition contract.
Operational workflow
A practical loop from source tables to checked records.
Applications can call MLTTDB directly: discover tables, insert or edit records, ask for verification, and consume records with a checker-backed status.
Read qualified names, row types, and row decompositions.
Persist records through the WebApp or Admin API.
Separate checker rejection from protocol errors.
Use accepted rows in application flows and reports.
Create schema from source
POST /admin-api/v1/databases/demo/create-from-source
- stores language and source path
- creates table definitions before records exist
Create or update records
POST /admin-api/v1/databases/demo/tables/.../records
- body
- identity-decomposition row term
- projectionValues
- projection-aware row storage
Ask the checker
POST /admin-api/v1/databases/demo/verify
- custom Agda for Agda verification
- preprocessor output for Lean and Rocq
Checker paths
One term-store contract, two validation styles.
Custom Agda gives direct row-context operations. Preprocessors give portable ordinary source artifacts for existing checker pipelines.
Agda reads MLTTDB tables directly, fetches records, and can evaluate expressions in the checked context before a selected row.
- typed row context
- row evaluation for structured editors
- finite table lookup in stored bodies
UUID identity, deterministic order, language metadata, projection values, and checker result boundaries stay consistent across both paths.
The preprocessor path materializes records as checker-facing definitions and lets the unmodified proof assistant accept or reject the generated artifact.
- ordinary source output
- clear audit artifact
- Lean and Rocq integration path
Operational surface
Use APIs and a WebApp to manage formal records without hiding the checker.
The WebApp and APIs expose databases, table definitions, UUIDs, record bodies, projection values, structured editors, row evaluation, and verification triggers.
- Validation API
GET /term-store/v1/databases/{db}/records- Admin API
- Create schemas, insert records, configure editors, and trigger verification.
- Structured editors
- Use Agda generic helpers to render record-specific editing widgets.
Working artifact
Switch between Agda, Lean, and Rocq to see the same term-store idea become checker input.
Implemented scope
The current demo includes the store, preprocessors, custom Agda support, and copied validation evidence.
SQLite term store
HTTP store, WebApp, database metadata, table definitions, ordered records, discovery, verification, row evaluation, and editor configuration.
Preprocessor paths
Agda, Lean, and Rocq preprocessors emit ordinary checker-facing source for schema, table discovery, and data validation.
Custom Agda
Agda supports direct --tdb-mode schema|tables|data|eval operation for MLTTDB source files.
Bundled evidence, not a live badge
Copied validation run 20260609T222403Z
The copied report records passing checks for the SQLite store, preprocessor paths, and custom Agda MLTTDB path.
