mirror of
https://github.com/blackboxprogramming/lucidia.git
synced 2026-03-17 00:57:11 -05:00
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any, Dict, List, Tuple
|
|
|
|
|
|
@dataclass
|
|
class DomainKnowledge:
|
|
"""
|
|
Container for knowledge specific to a domain.
|
|
|
|
Attributes
|
|
----------
|
|
domain : str
|
|
Name of the knowledge domain (e.g., "biology", "finance").
|
|
facts : Dict[str, Any]
|
|
Key-value pairs representing facts or concepts within the domain.
|
|
"""
|
|
domain: str
|
|
facts: Dict[str, Any]
|
|
|
|
|
|
class CrossDomainReasoner:
|
|
"""
|
|
Naive cross-domain reasoner that finds overlapping fact keys between domains.
|
|
"""
|
|
def __init__(self) -> None:
|
|
self.knowledge: Dict[str, DomainKnowledge] = {}
|
|
|
|
def add_knowledge(self, knowledge: DomainKnowledge) -> None:
|
|
"""Register domain knowledge in the reasoner."""
|
|
self.knowledge[knowledge.domain] = knowledge
|
|
|
|
def relate(self, domain_a: str, domain_b: str) -> List[Tuple[str, Tuple[Any, Any]]]:
|
|
"""
|
|
Relate two domains by finding common fact keys.
|
|
|
|
Returns a list of tuples (key, (value_a, value_b)).
|
|
"""
|
|
facts_a = self.knowledge.get(domain_a)
|
|
facts_b = self.knowledge.get(domain_b)
|
|
if not facts_a or not facts_b:
|
|
return []
|
|
overlaps: List[Tuple[str, Tuple[Any, Any]]] = []
|
|
for key in facts_a.facts.keys() & facts_b.facts.keys():
|
|
overlaps.append((key, (facts_a.facts[key], facts_b.facts[key])))
|
|
return overlaps
|
|
|
|
|
|
if __name__ == "__main__":
|
|
reasoner = CrossDomainReasoner()
|
|
reasoner.add_knowledge(DomainKnowledge("biology", {"cell": "basic unit", "DNA": "genetic blueprint"}))
|
|
reasoner.add_knowledge(DomainKnowledge("computer", {"CPU": "central processor", "memory": "storage", "cell": "memory cell"}))
|
|
print(reasoner.relate("biology", "computer"))
|