CatColab Ologs: Ontology Logs
Trit: -1 (MINUS - validator/verifier) Color: Cyan (#00CED1)
Overview
Ologs (Ontology Logs) are category-theoretic representations of knowledge domains, introduced by Spivak and Kent (2011). In CatColab, ologs serve as:
- Conceptual Foundations: Objects = concepts/types, Morphisms = functional relations
- Database Ontologies: The schema layer before populating with data
- Knowledge Graphs: Categorical structure for reasoning about domains
Mathematical Foundation
An olog is a category where:
- Objects represent types or concepts (e.g., "a person", "a company")
- Morphisms represent functional relationships (e.g., "works for", "has birthday")
- Commutative diagrams encode logical constraints
┌─────────────────────────────────────────────────────┐
│ OLOG │
├─────────────────────────────────────────────────────┤
│ Objects: │
│ Person, Company, Date, Department │
│ │
│ Morphisms (functional): │
│ works_for: Person → Company │
│ has_birthday: Person → Date │
│ employs: Company → Department │
│ │
│ Commutative Diagram (constraint): │
│ Person ──works_for──► Company │
│ │ │ │
│ in_dept employs │
│ ▼ ▼ │
│ Dept ════════════════► Dept │
│ (must agree) │
└─────────────────────────────────────────────────────┘
CatColab Implementation
Object Declaration
// In CatColab notebook
{
"type": "ObDecl",
"name": "Person",
"description": "a person in the organization"
}
Morphism Declaration
{
"type": "MorDecl",
"name": "works_for",
"dom": "Person",
"cod": "Company",
"description": "the company that employs this person"
}
Equation (Commutative Diagram)
{
"type": "EqDecl",
"lhs": "Person.in_dept",
"rhs": "Person.works_for.employs",
"description": "a person's department agrees with their company's structure"
}
Double Theory
Ologs in CatColab are instances of the SimpleCategory double theory:
// From catlog
pub fn th_category() -> DiscreteDblTheory {
let mut cat = FpCategory::new();
cat.add_ob_generator(name("Ob"));
cat.add_mor_generator(name("Hom"), name("Ob"), name("Ob"));
// Composition and identity axioms
cat.into()
}
Practical Examples
Example 1: Academic Institution
Objects: Professor, Student, Course, Department, University
Morphisms:
teaches: Professor → Course
enrolled: Student → Course
member_of: Professor → Department
part_of: Department → University
Diagram (functorial):
Professor ──teaches──► Course
│ │
member_of offered_by
▼ ▼
Department ◄──────────── Department
Example 2: Supply Chain
Objects: Supplier, Warehouse, Product, Customer
Morphisms:
supplies: Supplier → Product
stores: Warehouse → Product
orders: Customer → Product
ships_from: Product → Warehouse
Integration with Schemas
Ologs upgrade to Schemas by distinguishing:
- Entities (tables with identity)
- Attributes (columns/properties)
OLOG: SCHEMA:
Person ──name──► String → Person (Entity)
├── id: UUID
└── name: String (Attr)
GF(3) Triads
catcolab-ologs (-1) ⊗ topos-catcolab (0) ⊗ catcolab-schemas (+1) = 0 ✓
catcolab-ologs (-1) ⊗ acsets-relational-thinking (0) ⊗ database-design (+1) = 0 ✓
Commands
# Create new olog
just catcolab-new category "my-ontology"
# Validate olog constraints
just catcolab-validate my-ontology
# Export to JSON-LD
just catcolab-export my-ontology --format=jsonld
References
- Spivak & Kent (2011) "Ologs: A Categorical Framework for Knowledge Representation"
- CatColab Documentation
- RelationalThinking Book
Skill Name: catcolab-ologs Type: Knowledge Representation / Ontology Trit: -1 (MINUS) GF(3): Conserved via triadic composition