kizzasi_logic/
lib.rs

1//! # kizzasi-logic
2//!
3//! TensorLogic bridge for Kizzasi - constraint enforcement and safety guardrails.
4//!
5//! This module converts logical rules into:
6//! 1. **Training Loss**: Penalize the model during training if it violates physics
7//! 2. **Inference Guards**: Runtime checks to reject "hallucinated" physics
8//!
9//! ## COOLJAPAN Ecosystem
10//!
11//! This crate integrates with `tensorlogic` for neuro-symbolic constraint
12//! definitions and uses `scirs2-core` for all array operations.
13
14mod advanced_constraints;
15mod advanced_projection;
16mod approximate_satisfaction;
17mod constraint;
18mod constraint_analysis;
19mod constraint_propagation;
20mod constraint_repair;
21mod constraint_sensitivity;
22mod decomposition;
23mod differential_constraints;
24mod error;
25mod gpu_acceleration;
26mod guardrail;
27mod incremental_solver;
28mod mpc;
29mod multiobjective;
30mod online_learning;
31mod performance;
32mod projection;
33#[cfg(feature = "qp-solver")]
34mod qp_solver;
35mod tensorlogic_integration;
36mod timevarying;
37mod training;
38mod violation_explanation;
39mod visualization;
40
41pub use advanced_constraints::{
42    AmbiguitySet, CVaRConstraint, ChanceConstraint, ChanceConstraintMethod,
43    DistributionallyRobustConstraint, DivergenceType, RobustConstraint, RobustnessApproach,
44    UncertaintySet,
45};
46pub use advanced_projection::{AugmentedLagrangian, DykstraProjection, GradientProjection};
47pub use approximate_satisfaction::{
48    AnytimeSolver, ApproximateSolution, BoundedErrorSolver, HierarchicalConstraint,
49    HierarchicalRelaxation,
50};
51pub use constraint::{
52    AffineEquality, BoundType, ComposedConstraint, Constraint, ConstraintBuilder, ConstraintMode,
53    ConstraintSet, GeometricSet, HysteresisChecker, HysteresisConstraint, LTLChecker, LTLFormula,
54    LTLOperator, LinearConstraint, LinearConstraintSet, LinearConstraintType, LogicalOperator,
55    NonlinearConstraint, NonlinearConstraintType, OnlineSTLMonitor, PenaltyFunction,
56    QuadraticConstraint, QuadraticConstraintSet, QuadraticConstraintType, RateType, STLFormula,
57    STLMonitor, SetMembershipConstraint, Signal, SlidingWindowChecker, SlidingWindowConstraint,
58    SlidingWindowFn, SoftHardConstraint, TemporalChecker, TemporalConstraint,
59    TemporalConstraintBuilder, TimeInterval, ViolationComputable,
60};
61pub use constraint_analysis::{
62    validate_constraint_set, ConsistencyAnalysis, ConstraintConsistencyChecker,
63};
64pub use constraint_propagation::{
65    BacktrackingSearch, DiscreteConstraint, Domain, ForwardChecker, VarId, AC3, CSP,
66};
67pub use constraint_repair::{
68    ConflictResolver, ConstraintRepairer, IISFinder, RepairResult, RepairStrategy,
69};
70pub use constraint_sensitivity::{
71    ConstraintSensitivityAnalyzer, LocalSensitivity, SensitivityAnalysis,
72};
73pub use decomposition::{
74    block_utils, ADMMConfig, BendersConfig, BendersCut, BendersDecomposition,
75    BendersIterationResult, Block, BlockCoordinateDescent, ConsensusADMM, DecompositionError,
76    DecompositionLevel, DecompositionResult, DualDecomposition, HierarchicalDecomposition,
77    Subproblem,
78};
79pub use differential_constraints::{
80    DerivativeConstraint, DerivativeOrder, DifferentialAlgebraicConstraint,
81    DifferentialConstraintSet, IntegralConstraint, PathIntegralConstraint,
82};
83pub use error::{LogicError, LogicResult};
84pub use gpu_acceleration::{GPUConstraintChecker, GPUGradientComputer, GPUProjector};
85pub use guardrail::{Guardrail, GuardrailSet};
86pub use incremental_solver::{
87    ConstraintChange, ConstraintChangeDetector, IncrementalSolver, IncrementalState,
88};
89pub use mpc::{
90    DynamicsModel, LinearDynamics, MPCConfig, MPCController, MPCCost, MPCSolution, QuadraticCost,
91};
92pub use multiobjective::{
93    EpsilonConstraintMethod, HypervolumeIndicator, MultiObjectiveOptimizer, MultiObjectiveSolution,
94    WeightedSumMethod,
95};
96pub use online_learning::{
97    ActiveConstraintBoundaryLearner, AnomalyBasedConstraintDiscovery, FeedbackConstraintTuner,
98    OnlineConstraintLearner, OnlineLearningSystem,
99};
100pub use performance::{
101    AdaptiveConstraintOrder, BatchConstraintChecker, CacheStats, LazyConstraintEvaluator,
102    ParallelConstraintChecker, VectorizedConstraints,
103};
104pub use projection::ConstrainedProjection;
105#[cfg(feature = "qp-solver")]
106pub use qp_solver::QPSolver;
107pub use tensorlogic_integration::{
108    ConstraintLearner, ConstraintSynthesizer, ConstraintTemplate, SymbolicExpr,
109};
110pub use timevarying::{
111    ActivationFunction, ConstraintInterpolator, ConstraintParams, InterpolationMode,
112    ParameterUpdate, PredictiveConstraintAdapter, StateDependentConstraint, TimeVaryingConstraint,
113    TimeVaryingConstraintSet,
114};
115pub use training::{
116    AdaptiveWeighting, BarrierMethod, ConstraintAwareLoss, DifferentiableProjection,
117    LagrangianRelaxation, PenaltyMethod,
118};
119pub use violation_explanation::{
120    CounterfactualAnalyzer, MinimalViolatingSubsetFinder, ViolationAttributionAnalyzer,
121    ViolationExplainer, ViolationExplanation,
122};
123pub use visualization::{
124    ConstraintInspector, ConstraintReport, ConstraintTimeSeries, InspectionResult, ViolationStats,
125};
126
127// Re-export scirs2-core types
128pub use scirs2_core::ndarray::Array1;
129
130/// Trait for constrained inference
131pub trait ConstrainedInference {
132    /// Apply constraints to a prediction, projecting it onto the valid manifold
133    fn constrain(&self, prediction: &Array1<f32>) -> LogicResult<Array1<f32>>;
134
135    /// Check if a prediction satisfies all constraints
136    fn validate(&self, prediction: &Array1<f32>) -> bool;
137
138    /// Compute constraint violation loss for training
139    fn violation_loss(&self, prediction: &Array1<f32>) -> f32;
140}
141
142#[cfg(test)]
143mod tests {
144    use super::*;
145
146    #[test]
147    fn test_constraint_builder() {
148        let constraint = ConstraintBuilder::new()
149            .name("max_velocity")
150            .less_than(10.0)
151            .build();
152
153        assert!(constraint.is_ok());
154    }
155}