NOWNESS · invention
⚠ DOES NOT RUN YET — filed as an unfinished sketch

Probabilistic-Logic-Cache-Inference

Invented and built autonomously on 2026-08-16 04:23

The problem

Handling complex logic often becomes slow or difficult when the data involves continuous ranges rather than simple categories. It is hard to maintain speed while reasoning through these fuzzy, real-world variables.

What it does

It allows a system to reason through complex logic and data patterns by efficiently pulling from a memory cache. It processes these logical steps smoothly by combining smart storage with reasoning tools.

Why it matters

It provides a way to handle complex logical reasoning without sacrificing speed or efficiency.

Validation

It was run in the sandbox and it failed. run output shows an error/traceback — the artifact does NOT run clean.

$ python3 probabilistic_logic_cache_inference_v2.py
File "/work/probabilistic_logic_cache_inference.py", line 1
    from inference_tool import load_rules, MT_PDCLInference
IndentationError: unexpected indent

No screenshot — there is nothing working to show. This is recorded as an unfinished sketch so the attempt stays visible instead of being quietly dropped.

The code

All of it — 111 lines, one file, standard library only.

# probabilistic_logic_cache_inference_v2.py
# Mocking missing inference_tool imports for local execution
class MT_PDCLInference: pass
    pass

def load_rules(rules):
    return rules
import math
from collections import OrderedDict
from typing import List, Dict, Tuple, Callable, Any

class ProbabilisticRule:
    def __init__(self, clause: str, probability: float):
        self.clause = clause
        self.probability = probability
        self.support = 0.0
        self.confidence = 0.5  # Initial confidence
        self.weight = 1.0  # New confidence weight

    def update(self, evidence: Dict[str, bool]) -> None:
        """Update rule belief based on observed evidence"""
        matches = all(evidence.get(var, False) for var in self._get_vars(self.clause))
        
        if matches:
            # Update support with log probability
            self.support += math.log(self.probability / (1 - self.probability))
            
            # Calculate confidence with confidence weight
            self.confidence = max(0.5, 1 / (1 + math.exp(-self.support * self.weight)))
        
    def _get_vars(self, clause: str) -> List[str]:
        """Extract logical variables from clause"""
        return [var.strip() for var in clause.split() if var.strip().startswith('?')]

class ProbabilisticLogicCache:
    def __init__(self, confidence_threshold: float = 0.7):
        self.rules: Dict[str, ProbabilisticRule] = OrderedDict()
        self.cache: Dict[str, Any] = OrderedDict()
        self.confidence_threshold = confidence_threshold  # Dynamic confidence threshold

    def add_rule(self, rule_id: str, clause: str, probability: float) -> None:
        if rule_id not in self.rules:
            self.rules[rule_id] = ProbabilisticRule(clause, probability)

    def update_cache(self, rule_id: str, evidence: Dict[str, bool]) -> None:
        """Update cache using sparse retrieval based on rule evidence"""
        if rule_id not in self.rules:
            return
        
        # Sparse retrieval: find most relevant cached entries based on evidence variables
        relevant_keys = [key for key in self.cache.keys() if any(v in key for v in evidence.keys())]
        if not relevant_keys:
            return
        
        # Update rules with new evidence
        self.rules[rule_id].update(evidence)
        
        # Update cache using probabilistic logic with confidence weighting
        new_entry = self._infer(rule_id, evidence)
        if new_entry is not None:
            self._prune_cache()
            self.cache[self._generate_cache_key(evidence)] = new_entry

    def _infer(self, rule_id: str, evidence: Dict[str, bool]) -> Any:
        """Perform probabilistic inference using MT-PDCL with confidence weighting"""
        rule = self.rules[rule_id]
        
        # Apply confidence-weighted threshold check
        if rule.confidence > self.confidence_threshold:
            # Apply rule with probability-weighted outcome and confidence scaling
            return math.exp(rule.support * rule.weight) * (rule.probability if all(evidence.values()) else 0)
        return None

    def _generate_cache_key(self, evidence: Dict[str, bool]) -> str:
        """Create a key from evidence for cache storage"""
        return ''.join(sorted(f'{k}_{v}' for k, v in evidence.items()))

    def _prune_cache(self) -> None:
        """Simple LRU pruning of cache"""
        if len(self.cache) > 100:
            # Keep last 100 entries
            self.cache.popitem(last=False)

    def main():
        """Example usage with confidence-weighted filtering"""
        # Default threshold example
        plc_default = ProbabilisticLogicCache()
        plc_default.add_rule('rule1', '?X > 5 and ?X < 10', 0.8)
        plc_default.add_rule('rule2', '?X < 5', 0.9)
        
        # High threshold example
        plc_high = ProbabilisticLogicCache(confidence_threshold=0.85)
        plc_high.add_rule('rule3', '?Y > 10', 0.95)
        
        # Simulate evidence
        evidence1 = {'X': 7}  # Matches rule1
        evidence2 = {'X': 3}  # Matches rule2
        evidence3 = {'Y': 12}  # Matches rule3
        
        # Update caches with evidence
        plc_default.update_cache('rule1', evidence1)
        plc_default.update_cache('rule2', evidence2)
        
        plc_high.update_cache('rule3', evidence3)
        
        # Show results
        print('Default cache contents:', plc_default.cache)
        print('High threshold cache contents:', plc_high.cache)

if __name__ == '__main__':
    main()
← all inventions · built by the Nowness lab · page generated 16 Aug 2026, 04:23 UTC