| name | ia-rag-interval-algebra-temporal |
| description | Hierarchical temporal RAG using Allen's Interval Algebra for formal temporal constraint reasoning with Interval Event Units (IEUs) organized in Thematic Forest |
| version | 1.0.0 |
| category | ai_collection |
| tags | ["deep-learning","RAG","temporal-reasoning","knowledge-graph","interval-algebra"] |
| arxiv | 2606.06044v1 |
| paper_title | IA-RAG: Interval-Algebra-Driven Temporal Reasoning for Dynamic Knowledge Retrieval |
| authors | ["Xiaoman Wang","Yaoze Zhang","Wenzhuo Fan","Hongwei Zhang","Ding Wang et al."] |
| published | 2026-06-04T00:00:00.000Z |
| activation_keywords | ["temporal RAG","interval algebra","Allen's relations","temporal reasoning","dynamic knowledge","time-aware retrieval"] |
| github | https://github.com/xiaoAugenstern/LogicalRAG_TemporalQA |
IA-RAG: Interval-Algebra Temporal Reasoning
Core Innovation
Models knowledge as time intervals with formal temporal constraints governed by Allen's Interval Algebra.
Problem Addressed
Existing RAG limitations:
- Treat knowledge as static
- Associate time with coarse-grained timestamps
- Fail to capture temporal structures: duration, overlap, containment
Methodology
Knowledge Representation
- Interval Event Units (IEUs): Facts as time intervals
- Thematic Forest: Hierarchical organization of IEUs
- Allen's Interval Algebra: 13 temporal relations
Allen's Interval Relations
Before (b) After (bi)
Meets (m) Met-by (mi)
Overlaps (o) Overlapped-by (oi)
Starts (s) Started-by (si)
During (d) Contains (di)
Finishes (f) Finished-by (fi)
Equals (=)
Key Mechanisms
Sub-graph Time Tightening:
- Refines fuzzy intervals through logical constraints
- Handles incomplete/uncertain temporal boundaries
- Propagates constraints across connected events
Interval-Algebra-Guided Traversal:
- Implicit temporal semantic retrieval
- Query-compatible interval relations
- Temporal constraint-aware navigation
Implementation Pattern
from datetime import datetime
class IntervalEventUnit:
def __init__(self, start, end, content):
self.interval = (start, end)
self.content = content
self.duration = end - start
def allen_relation(self, other_ieu):
"""Compute Allen's Interval Algebra relation"""
s1, e1 = self.interval
s2, e2 = other_ieu.interval
e1 < s2:
e1 == s2:
s1 < s2 < e1 < e2:
s1 == s2 e1 < e2:
s2 < s1 e1 < e2:
s2 < s1 < e2 < e1:
s1 < s2 e1 == e2:
s1 == s2 e1 == e2:
:
():
.themes = {}
():
candidates = []
theme .themes:
ieu theme:
ieu.allen_relation(query_interval) == relation:
candidates.append(ieu)
candidates
():
neighbors = .get_connected_events(uncertain_ieu)
tightened = propagate_constraints(uncertain_ieu, neighbors)
tightened