use strange_loop::{
types::{StrangeLoop, LoopConfig, ScalarReasoner, SimpleCritic, SafeReflector},
error::Result,
};
use std::collections::HashMap;
fn main() -> Result<()> {
println!("🔄 Basic Strange Loop Example");
println!("=============================");
let reasoner = ScalarReasoner::new(0.0, 0.1); let critic = SimpleCritic::new();
let reflector = SafeReflector::new();
let config = LoopConfig {
max_iterations: 10_000,
max_duration_ns: 50_000_000, convergence_threshold: 1e-9,
lipschitz_constant: 0.9,
enable_consciousness: false,
enable_quantum: false,
enable_simd: true,
};
println!("Configuration:");
println!(" Target: 0.0");
println!(" Initial step size: 0.1");
println!(" Max iterations: {}", config.max_iterations);
println!(" Convergence threshold: {:.0e}", config.convergence_threshold);
println!(" Lipschitz constant: {}", config.lipschitz_constant);
println!();
let mut strange_loop = StrangeLoop::new(reasoner, critic, reflector, config);
let mut context = HashMap::from([
("x".to_string(), 10.0), ]);
println!("Initial state:");
println!(" x = {}", context["x"]);
println!();
println!("Running strange loop...");
let start_time = std::time::Instant::now();
let result = strange_loop.run(&mut context)?;
let duration = start_time.elapsed();
println!("Results:");
println!(" ✅ Converged: {}", result.converged);
println!(" 🔢 Iterations: {}", result.iterations);
println!(" 📊 Final score: {:.9}", result.final_score);
println!(" 🎯 Final value: {:.9}", context["x"]);
println!(" ⏱️ Duration: {:.2}ms", duration.as_millis());
println!(" 🚀 Rate: {:.0} iterations/second", result.iterations_per_second());
println!(" 📈 Convergence rate: {:.6} per iteration", result.convergence_rate());
println!();
println!("Analysis:");
println!(" Error from target: {:.9}", context["x"].abs());
if result.converged {
println!(" 🎉 Successfully converged to target!");
let improvement = 10.0 - context["x"].abs();
println!(" 📉 Total improvement: {:.6}", improvement);
if result.iterations > 0 {
let avg_improvement = improvement / result.iterations as f64;
println!(" 📊 Average improvement per iteration: {:.9}", avg_improvement);
}
} else {
println!(" ⚠️ Did not converge within limits");
}
println!();
println!("Strange Loop Properties:");
println!(" The system exhibits self-reference through:");
println!(" 1. The reasoner acts on the state (Level 0)");
println!(" 2. The critic evaluates the reasoner's performance (Level 1)");
println!(" 3. The reflector modifies the reasoner's policy (Level 2)");
println!(" 4. Control returns to the modified reasoner (Strange Loop!)");
println!();
println!(" This creates a hierarchy of self-modification where each level");
println!(" observes and influences the level below, creating emergent");
println!(" behavior that is more than the sum of its parts.");
Ok(())
}
#[allow(dead_code)]
fn custom_strange_loop_example() -> Result<()> {
println!("\n🔧 Custom Strange Loop Example");
println!("==============================");
let target = 5.0;
let reasoner = ScalarReasoner::new(target, 0.05); let critic = SimpleCritic::with_adaptation_rate(0.2); let reflector = SafeReflector::with_max_change_rate(0.1);
let config = LoopConfig {
max_iterations: 5_000,
max_duration_ns: 100_000_000, convergence_threshold: 1e-12, lipschitz_constant: 0.95, enable_consciousness: false,
enable_quantum: false,
enable_simd: true,
};
let mut strange_loop = StrangeLoop::new(reasoner, critic, reflector, config);
let mut context = HashMap::from([("x".to_string(), -10.0)]);
println!("Custom configuration:");
println!(" Target: {}", target);
println!(" Initial value: {}", context["x"]);
println!(" Step size: 0.05");
println!(" Higher precision convergence");
let result = strange_loop.run(&mut context)?;
println!();
println!("Custom Results:");
println!(" Converged: {}", result.converged);
println!(" Iterations: {}", result.iterations);
println!(" Final value: {:.12}", context["x"]);
println!(" Error: {:.12}", (context["x"] - target).abs());
Ok(())
}
#[allow(dead_code)]
fn monitored_strange_loop_example() -> Result<()> {
println!("\n📊 Monitored Strange Loop Example");
println!("=================================");
println!("This example would show real-time monitoring of:");
println!(" - Iteration count");
println!(" - Current state value");
println!(" - Policy parameters");
println!(" - Convergence metrics");
println!(" - Self-modification events");
Ok(())
}