FSO-Genesis-Space / engine.py
LOOFYYLO's picture
Upload folder using huggingface_hub
2c54126 verified
Raw
History Blame Contribute Delete
7.11 kB
import time, sys
from typing import Dict, List, Optional, Tuple, Any, Callable
from core import extract_weights, verify_sigma, PRECOMPUTED, solve, run_hybrid_sa
from algebraic import get_algebraic_proof, parse_domain, export_lean_proof
class Domain:
def __init__(self, name, n, k, m, fiber_map, tags, precomputed=None, group="", notes=""):
self.name=name; self.n=n; self.k=k; self.m=m; self.fiber_map=fiber_map
self.tags=tags; self.precomputed=precomputed; self.group=group; self.notes=notes
class Engine:
"""
The Global Structure Engine provides a unified interface for classifying
and solving combinatorial problems using the Short Exact Sequence framework.
"""
def register(self, domain: Domain):
self.registry.append(domain)
def print_results(self):
print(f'\n--- Engine Registry: {len(self.registry)} Domains ---')
for d in self.registry:
print(f' {d.name:<40} (n={d.n}, k={d.k}, m={d.m})')
def __init__(self):
self.registry = []
"""Initializes the discovery engine."""
pass
def run(self, m: int, k: int, strategy: str = "standard") -> Dict[str, Any]:
"""
Runs the classification and optional search for a problem (m, k).
Args:
m: The group order (Z_m).
k: The dimension (number of cycles).
strategy: Search strategy ('standard', 'hybrid', 'equivariant').
Returns:
A dictionary containing the status, proof steps, and solution if found.
"""
t0 = time.perf_counter()
proof_obj = get_algebraic_proof(m, k)
solution = None
if proof_obj['exists'] == "PROVED_POSSIBLE":
if (m, k) in PRECOMPUTED:
solution = PRECOMPUTED[(m, k)]
elif strategy == "hybrid":
print(f" Running hybrid SA for m={m}, k={k}...")
solution, stats = run_hybrid_sa(m, k=k)
else:
solution = solve(m, k)
verified = bool(solution and verify_sigma(solution, m))
dt = time.perf_counter() - t0
return {
"m": m, "k": k, "status": proof_obj['exists'],
"theorem": proof_obj.get('theorem', ''),
"proof": proof_obj.get('proof', []),
"theorem_id": proof_obj.get("theorem_id"),
"theorem_name": proof_obj.get("theorem_name"),
"witness_hash": proof_obj.get('witness_hash', ''),
"solution_found": verified, "elapsed_ms": dt * 1000
}
def analyse_text(self, desc: str, strategy: str = "standard") -> Dict[str, Any]:
"""
Automatically parses a text description and classifies the domain.
Args:
desc: Text description of the problem.
strategy: Search strategy to use.
"""
d = parse_domain(desc)
res = self.run(d['m'], d['k'], strategy=strategy)
res['parsed'] = d
return res
def simplify_problem(self, m: int, k: int) -> Dict[str, Any]:
"""
Uses categorical morphisms (Quotient, Product) to reduce a complex problem
to smaller solvable components.
"""
suggested = get_suggested_morphisms(m, k)
reduction = None
for m_ in suggested:
if m_.kind == "Quotient":
# Check if quotient is solvable
sub_res = self.run(int(m_.target.split('_')[-1]), k)
if sub_res['status'] == "PROVED_POSSIBLE":
reduction = {
"kind": m_.kind,
"source": m_.source,
"target": m_.target,
"status": "REDUCIBLE",
"proof": f"Reduces to solvable quotient {m_.target}."
}
break
return reduction or {"status": "IRREDUCIBLE"}
def get_lean_export(self, m: int, k: int) -> str:
"""Generates Lean 4 source for the parity obstruction proof."""
return export_lean_proof(m, k)
def get_suggested_morphisms(m: int, k: int) -> List[Any]:
"""Suggests ways to simplify or solve (m, k) using known components."""
class Morphism:
def __init__(self, kind: str, source: str, target: str):
self.kind = kind; self.source = source; self.target = target
m_list = []
for q in range(2, m):
if m % q == 0:
m_list.append(Morphism("Lift", f"G_{q}", f"G_{m}"))
m_list.append(Morphism("Quotient", f"G_{m}", f"G_{q}"))
factors = [i for i in range(2, m) if m % i == 0]
for f in factors:
other = m // f
if other > 1:
m_list.append(Morphism("Product", f"G_{f} x G_{other}", f"G_{m}"))
return m_list
def check_remote_search_status() -> Dict[str, str]:
"""Checks the status of Kaggle search kernels if CLI is configured."""
import subprocess
kernels = [
"hichambedrani/claudes-cycles-p1-equiv",
"hichambedrani/claudes-cycles-p2-equiv"
]
status = {}
for k in kernels:
try:
res = subprocess.check_output(["kaggle", "kernels", "status", k],
stderr=subprocess.STDOUT, text=True)
status[k.split('/')[-1]] = res.strip()
except:
status[k.split('/')[-1]] = "Unknown (API not configured?)"
return status
if __name__ == "__main__":
e = Engine()
if "--remote" in sys.argv:
stats = check_remote_search_status()
print("\n--- Remote Kaggle Search Status ---")
for k, v in stats.items():
print(f" {k}: {v}")
elif "--parse" in sys.argv:
idx = sys.argv.index("--parse")
desc = " ".join(sys.argv[idx+1:])
strat = "hybrid" if "--hybrid" in sys.argv else "standard"
res = e.analyse_text(desc, strategy=strat)
print(f"\n--- Analysis for Domain: {res['parsed']['G']} ---")
print(f"SES: {res['parsed']['SES']}")
if res.get('theorem_id'):
print(f"Applies Theorem {res['theorem_id']}: {res['theorem_name']}")
print(f"Status: {res['status']}")
print(f"Proof Steps:")
for line in res['proof']: print(f" {line}")
print(f"Classification Time: {res['elapsed_ms']:.2f}ms")
if res['solution_found']:
print(f"Solution: Found and Verified ✓")
elif "--lean" in sys.argv:
idx = sys.argv.index("--lean")
m, k = int(sys.argv[idx+1]), int(sys.argv[idx+2])
print(e.get_lean_export(m, k))
elif "--morphisms" in sys.argv:
m, k = int(sys.argv[sys.argv.index("--morphisms")+1]), int(sys.argv[sys.argv.index("--morphisms")+2])
morphs = get_suggested_morphisms(m, k)
print(f"\n--- Suggested Morphisms for G_{m} (k={k}) ---")
for morph in morphs:
print(f" {morph.kind:10} : {morph.source:15} -> {morph.target}")
else:
for m, k in [(3,3), (4,3), (4,4), (6,3)]:
res = e.run(m, k)
print(f"G_{m}(k={k}): {res['status']} ({res['elapsed_ms']:.2f}ms)")