- The LLM understands language
- Euclid performs inference
- Euclid IR is backend-independent
- The backend is replaceable
- Every answer must be verifiable
- Proofs are first-class outputs
reason— main deduction with proof treesdiagnose— query analysis (why/why_not/what_needs)what_if— scenario testing with fact additions/removalscheck_kb— knowledge base validation
- Docker image (
swipl:stablebase) — MCP stdio + HTTP API modes
Euclid is not trying to:
- replace LLMs
- become a Prolog implementation
- become a planner
- become a knowledge graph
- become a vector database
- compete with RAG
- understand natural language
- Z3
- Soufflé
- ASP
- Huge rule size: daemon mode, knowledge preload, Databases
- Knowledge compiler
- RAG compiler
- Graphviz proof tree
- HTML explanations
- Typed predicates
- Temporal predicates
Euclid-IR is intentionally not a simplified Prolog.
It is a backend-independent intermediate representation designed for:
- Humans
- LLMs
- Deterministic inference engines
The language should describe knowledge, never inference strategy.
Whenever possible, complexity belongs in the translator or the backend, not in Euclid-IR itself.
These changes should be completed before Euclid-IR is considered stable.
Prefer modern conventions over historical Prolog syntax.
Examples:
| Euclid-IR | Instead of |
|---|---|
$user |
User |
IF |
:- |
AND |
, |
NOT |
\+ |
# comment |
% comment |
The language should feel natural to developers familiar with Markdown, YAML and modern programming languages.
# is the preferred comment syntax.
Comments may also be used as Markdown headings to organize knowledge bases.
Example:
# Users
user(alice)
# Roles
has_role(alice, admin)
Future features should satisfy at least one of these goals:
- simplify LLM generation
- improve readability
- improve auditability
- remain backend-independent
Features that mainly expose backend-specific behavior should generally be avoided.
"Euclid-IR should remain as simple as possible, but no simpler for reliable logical reasoning."
"Everything should be made as simple as possible, but not simpler"
"Entia non sunt moltiplicanda praeter necessitatem"