tensorlogic_compiler/optimize/mod.rs
1//! Expression optimization passes.
2//!
3//! This module provides various optimization passes for TLExpr expressions:
4//!
5//! - **Negation optimization**: Apply De Morgan's laws and eliminate double negations
6//! - **Constant folding**: Evaluate constant expressions at compile time
7//! - **Algebraic simplification**: Apply mathematical identities (x+0=x, x*1=x, etc.)
8//! - **Strength reduction**: Replace expensive operations with cheaper equivalents
9//! - **Distributivity**: Factor or expand expressions based on cost analysis
10//! - **Quantifier optimization**: Hoist loop-invariant code, reorder quantifiers
11//! - **Dead code elimination**: Remove unreachable code and simplify constant conditions
12//! - **Complexity analysis**: Estimate computational cost and memory usage
13//! - **Cost-based optimization**: Explore rewrites and select optimal execution plan
14//! - **Pipeline**: Multi-pass optimization combining all passes intelligently
15//!
16//! # Quick Start
17//!
18//! For most use cases, use the unified optimization pipeline:
19//!
20//! ```
21//! use tensorlogic_compiler::optimize::{OptimizationPipeline, PipelineConfig};
22//! use tensorlogic_ir::{TLExpr, Term};
23//!
24//! let pipeline = OptimizationPipeline::new();
25//! let expr = TLExpr::add(
26//! TLExpr::mul(TLExpr::Constant(2.0), TLExpr::Constant(3.0)),
27//! TLExpr::Constant(0.0)
28//! );
29//! let (optimized, stats) = pipeline.optimize(&expr);
30//! ```
31//!
32//! For fine-grained control, use individual passes:
33//!
34//! ```
35//! use tensorlogic_compiler::optimize::{fold_constants, simplify_algebraic, reduce_strength};
36//! use tensorlogic_ir::TLExpr;
37//!
38//! let expr = TLExpr::add(TLExpr::Constant(2.0), TLExpr::Constant(3.0));
39//! let (step1, _) = fold_constants(&expr);
40//! let (step2, _) = simplify_algebraic(&step1);
41//! let (optimized, _) = reduce_strength(&step2);
42//! ```
43//!
44//! # Analysis Tools
45//!
46//! The module also provides analysis tools for expressions:
47//!
48//! ```
49//! use tensorlogic_compiler::optimize::analyze_complexity;
50//! use tensorlogic_compiler::CompilerContext;
51//! use tensorlogic_ir::{TLExpr, Term};
52//!
53//! let expr = TLExpr::mul(
54//! TLExpr::add(TLExpr::Constant(1.0), TLExpr::Constant(2.0)),
55//! TLExpr::Constant(3.0)
56//! );
57//! let complexity = analyze_complexity(&expr);
58//! println!("Operations: {}", complexity.total_operations());
59//! println!("Cost: {:.2}", complexity.total_cost());
60//! ```
61
62pub mod algebraic;
63pub mod complexity;
64pub mod constant_folding;
65pub mod cost_based;
66pub mod dead_code;
67pub mod distributivity;
68pub mod memory_estimation;
69pub mod negation;
70pub mod pipeline;
71pub mod quantifier_opt;
72pub mod strength_reduction;
73
74pub use algebraic::{simplify_algebraic, AlgebraicSimplificationStats};
75pub use complexity::{analyze_complexity, compare_complexity, CostWeights, ExpressionComplexity};
76pub use constant_folding::{fold_constants, ConstantFoldingStats};
77pub use cost_based::{optimize_by_cost, optimize_by_cost_with_config, CostBasedStats, RewriteRule};
78pub use dead_code::{eliminate_dead_code, DeadCodeStats};
79pub use distributivity::{optimize_distributivity, DistributivityStats};
80pub use memory_estimation::{estimate_batch_memory, estimate_memory, MemoryEstimate};
81pub use negation::{optimize_negations, NegationOptStats};
82pub use pipeline::{IterationStats, OptimizationPipeline, PipelineConfig, PipelineStats};
83pub use quantifier_opt::{optimize_quantifiers, QuantifierOptStats};
84pub use strength_reduction::{reduce_strength, StrengthReductionStats};