Knowledge Representation & Reasoning Through Object-Oriented Design#

KRROOD is a Python framework that unifies symbolic knowledge representation, expressive querying, and rule-based reasoning with clear, object-oriented abstractions.

KRROOD is designed to help you:

  • Model your domain as Python dataclasses and objects

  • Query entities with a pythonic, relational language (EQL)

  • Create and apply rules for inference and reasoning

  • Work in-memory or persist to SQL through an ORM interface (ORMatic)

Overall, KRROOD turns your python package into a knowledge base. The approach draws inspiration from classic knowledge representation and reasoning like Prolog, First Order Logic, SQL and Description Logic while emphasizing clean object-oriented design. A major inspiration for the development of KRROOD is the book Knowledge Representation and Reasoning.

Core Components#

  • Entity Query Language (EQL)

    • A pythonic relational query language for entities and relationships

    • Supports joins, nesting, predicates, rule-based inference, and more

    • Works uniformly against in-memory data, and via ORMatic, SQL backends

  • ORMatic

    • Bridges your object model to relational storage

    • Generates and manages mappings so you can write EQL over SQL-backed data

    • Provides an EQL-to-SQL interface to keep queries portable across backends

  • Reasoning and Rules

    • Express symbolic rules and rule trees over your domain model

    • Run inference to derive new knowledge from existing facts and relationships

When to Use KRROOD#

  • You have a rich domain model and want first-class, object-oriented knowledge representation

  • You need expressive, composable queries that feel natural in Python

  • You want reasoning capabilities (rules and inference) coupled with your data

  • You want to target both in-memory and SQL stores without rewriting queries

Key Ideas#

  • Object-Oriented Knowledge: Entities, attributes, and relations are represented as Python objects and classes

  • Uniform Querying: The same query patterns apply to in-memory and SQL sources

  • Rules as First-Class Citizens: Rules and rule trees integrate directly with queries for inference

Quick Start#

  • Install the package:

pip install krrood
  • Explore EQL

    • Start with the EQL introduction and examples covering cached symbols, logical connectives, nesting, joins, predicates, indexing, flattening, concatenation, universal quantification, and rule-based inference

  • Add Persistence with ORMatic

    • Use ORMatic for automatic or alternative mappings and run the same EQL queries against SQL databases

Design Philosophy#

  • Object-Oriented First: Model the domain with classes and relationships

  • Expressive but Safe: Queries and interfaces aim to be clear, composable, and hard to misuse

  • Single Source of Truth: Keep one conceptual model for both reasoning and persistence

If you are new to KRROOD, start with the EQL introduction, then add ORMatic as soon as you want SQL-backed persistence. The examples are designed to be incremental and self-contained.

To Cite:#

@software{bassiouny2025krrood,
author = {Bassiouny, Abdelrhman AND Schierenbeck, Tom},
title = {Knowledge Representation & Reasoning Through Object-Oriented Design},
url = {https://github.com/code-iai/krrood},
version = {1.0.0},
}