"""Create reasoning_engine
Generated by Phi-Octopus Eden
2025-11-07 19:53:50.910001
"""

```python
from typing import List, Dict


class KnowledgeBase:
    def __init__(self):
        self.facts = []
        self.rules = []

    def add_fact(self, fact: str) -> None:
        """Add a new fact to the knowledge base."""
        self.facts.append(fact)

    def add_rule(self, rule: str) -> None:
        """Add a new inference rule to the knowledge base."""
        self.rules.append(rule)


class ReasoningEngine:
    """A simple reasoning engine that uses basic rules and facts to infer conclusions."""

    def __init__(self):
        self.kb = KnowledgeBase()

    def add_knowledge(self, fact: str) -> None:
        """Add new knowledge (fact or rule) to the reasoning engine."""
        self.kb.add_fact(fact)
    
    def apply_rule(self, rule: str) -> List[str]:
        """
        Apply a given inference rule on the current facts in the knowledge base.
        
        :param rule: A string representing the rule to be applied.
        :return: A list of new facts inferred from applying the rule.
        """
        inferred_facts = []
        premises, conclusion = self.parse_rule(rule)
        for premise in premises:
            if premise in self.kb.facts:
                inferred_facts.append(conclusion)
        return inferred_facts

    def parse_rule(self, rule: str) -> (List[str], str):
        """
        Parse the given inference rule into its components.
        
        :param rule: A string representing an inference rule.
        :return: A tuple of premises and conclusion as strings.
        """
        parts = rule.split(" => ")
        if len(parts) != 2:
            raise ValueError(f"Invalid rule format: {rule}")
        return parts[0].split(", "), parts[1]

    def run(self, rules: List[str]) -> None:
        """Run the reasoning engine by applying each given inference rule."""
        for rule in rules:
            new_facts = self.apply_rule(rule)
            print(f"Inferred facts from '{rule}': {new_facts}")


# Example usage
if __name__ == "__main__":
    reasoner = ReasoningEngine()
    reasoner.add_knowledge("A")
    reasoner.add_knowledge("B")

    rules = [
        "A, B => C",
        "C, A => D"
    ]

    reasoner.run(rules)
```