"Logic determines Validity. Numbers determine Availability."
Episteme is a research-grade epistemic reasoning system designed to solve the "Hallucination Problem" in symbolic AI. It layers a quantitative belief lifecycle (confidence, decay) on top of a rigorous non-monotonic logic engine.
Unlike neuro-symbolic hybrids that blend logic and probability into a single vector space, Episteme maintains a strict Architectural Separation of Concerns:
- Symbolic Core (Buddhi): Determines what is true based on structural entailment.
- Quantitative Shell (Chitta): Determines what is accessible based on evidence and time.
Episteme follows the MARC (Modular Architecture for Reasoning and Cognition) paradigm, inspired by Sanskrit epistemology.
graph TD
User[User / World] -->|Natural Language| Manas[Manas: Acquisition]
Manas -->|Belief Proposal| Ahankara[Ahankara: Controller]
Ahankara -->|Store| Chitta[Chitta: Persistent Graph]
Ahankara -->|Query| Buddhi[Buddhi: Logic Engine]
Chitta -->|Graph State| Buddhi
Buddhi -->|Verdict| Ahankara
Ahankara -->|Response| User
State: Stateless Parsing
Manas ("The Mind") is responsible for converting raw, unstructured language into structured, normalized belief proposals. It does not reason; it only perceives.
-
Intent Detection: Distinguishes
Assertion(Teaching) fromQuery(Asking). -
Template Matching: Assigns a structural template (
is_a,has_attr,relation). -
Entity Normalization: Maps diverse linguistic forms to canonical entities.
-
"Socrates","The Socrates","socrates"$\rightarrow$ socrates -
"Birds","A bird","The bird"$\rightarrow$ bird
-
To prevent "Graph Pollution", Manas strictly rejects meaningless entities.
- Numeric Rejection: Entities like
"1","100"are rejected (unless explicitly mathematical). - Stopword Rejection:
"is","the","a"are prevented from becoming nodes. - Namespace Separation: A Predicate (e.g.,
is_a) cannot also be an Entity.
Structure of a parsed sentence: "Socrates is a human."
{
"template": "is_a",
"raw_text": "Socrates is a human.",
"entities": ["socrates", "human"],
"canonical": {
"subject": "socrates",
"predicate": "is_a",
"object": "human"
},
"confidence": 0.9,
"polarity": 1,
"epistemic_type": "DEFAULT"
}State: Persistent & Quantitative
Chitta ("Memory") stores beliefs as a hypergraph. It manages the Lifecycle of a belief using quantitative parameters.
Every belief in the db has these core parameters:
-
id: Unique UUID. -
epistemic_state: The logical rank (AXIOM,DEFAULT,OBSERVATION,EXCEPTION). -
confidence($C$ ): A float$0.0 \dots 1.0$ representing strength. -
evidence_count($N$ ): Number of times this belief has been reinforced. -
active: Boolean flag. If$False$ , the belief is "forgotten" and invisible to logic.
1. Reinforcement (Evidence Boosting) When a belief is re-stated, its confidence boosts asymptotically towards 1.0.
(Where Alpha is logical learning rate, e.g., 0.05)
2. Temporal Decay Over time, unsupported beliefs fade.
(Typical Decay_Rate = 0.995)
3. Logic Gating Beliefs must cross a semantic threshold to be "visible" to the Logic Engine.
IF Conf > Threshold: Status = ACTIVE (Visible to Buddhi)
IF Conf <= Threshold: Status = INACTIVE (Invisible to Buddhi)
State: Logical & Non-Monotonic
Buddhi ("Intellect") determines Truth. It uses a Lattice of Truth to resolve conflicts between active beliefs.
Not all truths are equal. Episteme ranks them:
- AXIOM: Immutable laws (e.g., "A triangle has 3 sides").
- OBSERVATION: Direct empirical facts ("The sky is currently blue").
- EXCEPTION: Specific overrides ("Penguins don't fly").
- DEFAULT: General rules ("Birds fly").
- HYPOTHESIS: Unverified assumptions.
How Episteme decides when beliefs contradict:
| Scenario | Condition | Verdict | Reason |
|---|---|---|---|
| No Conflict | Only one valid path exists | YES / NO |
Entailment |
| Vertical Conflict | Path A (Neg) is shorter than Path B (Pos) | Specific Wins | Specificity Override (Penguin > Bird) |
| Rank Conflict | Path A (Axiom) vs Path B (Default) | Rank Wins | Epistemic Superiority |
| Horizontal Conflict | Rank Equal, Distance Equal, Signs Opposed | CONFLICT | The Nixon Diamond (Quaker vs Republican) |
Episteme handles subtle logical distinctions that break standard RAG or Graph-RAG systems.
The system automatically constructs a Taxonomic Backbone.
- Input:
Socrates is Human+Human is Mammal+Mammal is Animal. - Inference:
Socrates is Animal(Distance 3). - Nuance: This is Directional. It will not infer
Animal is Socrates.
The system understands that specific rules override general ones.
- General: "Mammals have hair" (DEFAULT).
- Specific: "Whales are mammals" + "Whales do NOT have hair" (EXCEPTION).
- Result:
- Query
Do mammals have hair?-> YES (General case). - Query
Do whales have hair?-> NO (Specific override).
- Query
Episteme distinguishes between FALSE and UNKNOWN.
- FALSE: Explicit negation found ("Socrates is NOT a god").
- UNKNOWN: No path found ("Socrates is a plumber?").
- Benefit: This prevents the "Hallucination of Negation" where models say "No" just because they explicitly don't know "Yes".
Episteme is validated against a Brutal Benchmark suite of 1,050 test cases.
| Category | Cases | Accuracy | Insight |
|---|---|---|---|
| Compositional Logic | 70 | 100% | Handles multi-step chains ( |
| Ungrounded Refusal | 150 | 100% | Correctly answers REFUSED for unknown facts instead of hallucinating NO. |
| Entity Ambiguity | 50 | 100% | Distinguishes distinct entities with same names (if context differs). |
| Cross-Frame | 150 | 98% | Prevents context leakage between independent scenarios. |
| Explicit Contradiction | 350 | 74.6% | Identifying why something is a contradiction is harder than just spotting it. |
| Inheritance Exception | 150 | 60.7% | Specificity logic is complex; V1.0 greatly improved this over V0 (18%). |
Actual logs from the Grand Showcase (showcase_episteme.py)
Goal: Prove that knowledge of a subclass overrides the superclass.
Input:
- "Birds fly." (DEFAULT)
- "Penguins are birds."
- "Penguins do not fly." (EXCEPTION)
Trace:
➤ Query: 'Does Tweety fly?'
[Buddhi] Path 1 (Positive): Tweety -> Penguin -> Bird -> Fly (Distance 2)
[Buddhi] Path 2 (Negative): Tweety -> Penguin -> Not Fly (Distance 1)
VERDICT: NO
Reason: Specificity Win: Negative penguin (Dist 1) overrides Positive bird (Dist 2)
Goal: Identify when logic is genuinely inconclusive.
Input:
- "Quakers are pacifists."
- "Republicans are not pacifists."
- "Nixon is a Quaker."
- "Nixon is a Republican."
Trace:
➤ Query: 'Is Nixon a pacifist?'
[Buddhi] Path 1 (Pos): Nixon -> Quaker -> Pacifist (Dist 1, Rank: Default)
[Buddhi] Path 2 (Neg): Nixon -> Republican -> Not Pacifist (Dist 1, Rank: Default)
VERDICT: CONFLICT
Conflict Detected: Horizontal Conflict: quaker (Pos) vs republican (Neg) at equal distance 1.
Goal: Show logic reacting to confidence loss.
Trace:
➤ Event: 'Market will crash' (Confidence: 0.1)
[Buddhi] Query: 'Will market crash?' -> YES
➤ Time passes... (Decay applied)
[Chitta] 📉 Deactivating 'Market will crash' (Conf 0.05 < 0.1 Threshold)
➤ Query: 'Will market crash?'
VERDICT: UNKNOWN
Reason: No active beliefs found.