ruvector_math/optimization/mod.rs
1//! Polynomial Optimization and Sum-of-Squares
2//!
3//! Certifiable optimization using SOS (Sum-of-Squares) relaxations.
4//!
5//! ## Key Capabilities
6//!
7//! - **SOS Certificates**: Prove non-negativity of polynomials
8//! - **Moment Relaxations**: Lasserre hierarchy for global optimization
9//! - **Positivstellensatz**: Certificates for polynomial constraints
10//!
11//! ## Integration with Mincut Governance
12//!
13//! SOS provides provable guardrails:
14//! - Certify that permission rules always satisfy bounds
15//! - Prove stability of attention policies
16//! - Verify monotonicity of routing decisions
17//!
18//! ## Mathematical Background
19//!
20//! A polynomial p(x) is SOS if p = Σ q_i² for some polynomials q_i.
21//! If p is SOS, then p(x) ≥ 0 for all x.
22//!
23//! The SOS condition can be written as a semidefinite program (SDP).
24
25mod polynomial;
26mod sos;
27mod sdp;
28mod certificates;
29
30pub use polynomial::{Polynomial, Monomial, Term};
31pub use sos::{SOSDecomposition, SOSConfig, SOSResult};
32pub use sdp::{SDPProblem, SDPSolver, SDPSolution};
33pub use certificates::{NonnegativityCertificate, BoundsCertificate};
34
35/// Degree of a multivariate monomial
36pub type Degree = usize;
37
38/// Variable index
39pub type VarIndex = usize;
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_polynomial_creation() {
47 // x² + 2xy + y² = (x + y)²
48 let p = Polynomial::from_terms(vec![
49 Term::new(1.0, vec![(0, 2)]), // x²
50 Term::new(2.0, vec![(0, 1), (1, 1)]), // 2xy
51 Term::new(1.0, vec![(1, 2)]), // y²
52 ]);
53
54 assert_eq!(p.degree(), 2);
55 assert_eq!(p.num_variables(), 2);
56 }
57}