//! aether_governor.rs //! //! Provenance: Lean 4 -> C -> Rust //! Source: HeytingLean.Bridge.Sharma.AetherGovernor fn clamp(x: f64, lo: f64, hi: f64) -> f64 { x.max(lo).min(hi) } /// (Lean: govError) pub fn governor_error(r_target: f64, delta: f64, epsilon: f64) -> f64 { delta / epsilon - r_target } /// (Lean: govStep) pub fn governor_step( epsilon: f64, e_prev: f64, delta: f64, dt: f64, alpha: f64, beta: f64, eps_min: f64, eps_max: f64, r_target: f64, ) -> f64 { let e = governor_error(r_target, delta, epsilon); let d_error = (e - e_prev) / dt; let adjustment = alpha * e + beta * d_error; clamp(epsilon + adjustment, eps_min, eps_max) } /// (Lean: hft_gain_margin_refined) pub fn gain_margin_refined(dt: f64) -> bool { dt >= 1.0 && (0.01 + 0.05 / dt) < 1.0 } #[cfg(test)] mod tests { use super::*; #[test] fn test_gain_margin_refined() { assert!(gain_margin_refined(1.0)); assert!(!gain_margin_refined(0.001)); } }