Skip to main content

oxiz_theories/
lib.rs

1//! OxiZ Theory Solvers
2//!
3//! This crate provides theory solvers for the CDCL(T) framework:
4//! - **EUF** (Equality with Uninterpreted Functions) using E-graphs
5//! - **LRA/LIA** (Linear Real/Integer Arithmetic) using Simplex
6//! - **BV** (BitVectors) using bit-blasting and word-level propagation
7//! - **Arrays** (Extensional Arrays) using read-over-write axioms
8//! - **FP** (Floating-Point) IEEE 754 using bit-blasting
9//! - **Datatypes** (Algebraic Data Types) for lists, trees, enums
10//! - **Strings** (Word Equations + Regular Expressions) using Brzozowski derivatives
11//! - **Sets** (Set Theory) with union, intersection, membership, cardinality, and powerset
12//! - **Difference Logic** (DL) for constraints x - y ≤ c using Bellman-Ford
13//! - **UTVPI** (Unit Two-Variable Per Inequality) for constraints ±x ± y ≤ c
14//! - **Pseudo-Boolean** (PB) for cardinality and weighted constraints
15//! - **Special Relations** for partial/total orders, transitive closure
16//! - Nelson-Oppen theory combination
17//!
18//! # Architecture
19//!
20//! Each theory solver implements the [`Theory`] trait which provides:
21//! - `assert_literal`: Process a new assignment
22//! - `propagate`: Perform theory propagation
23//! - `check`: Check consistency and produce conflicts
24//! - `explain`: Generate explanations for propagated literals
25//! - `backtrack`: Handle backtracking
26//!
27//! # Examples
28//!
29//! ## Theory Combination
30//!
31//! ```ignore
32//! use oxiz_theories::{TheoryCombiner, CombinationConfig};
33//! use oxiz_theories::euf::EufSolver;
34//! use oxiz_theories::arithmetic::LraSolver;
35//!
36//! // Create a combiner with EUF and LRA
37//! let config = CombinationConfig::default();
38//! let combiner = TheoryCombiner::new(config);
39//! ```
40//!
41//! ## User Propagator
42//!
43//! ```ignore
44//! use oxiz_theories::user_propagator::{UserPropagator, PropagatorCallback};
45//!
46//! struct MyPropagator;
47//!
48//! impl PropagatorCallback for MyPropagator {
49//!     fn on_push(&mut self) {}
50//!     fn on_pop(&mut self, _num_scopes: u32) {}
51//!     fn on_fixed(&mut self, _term: TermId, _value: bool) -> Vec<TermId> {
52//!         vec![]
53//!     }
54//! }
55//! ```
56
57#![forbid(unsafe_code)]
58#![warn(missing_docs)]
59
60pub mod arithmetic;
61pub mod array;
62pub mod array_eager_expand;
63pub mod bv;
64pub mod character;
65pub mod checking;
66pub mod combination;
67pub mod config;
68pub mod datatype;
69pub mod diff_logic;
70pub mod error;
71pub mod euf;
72pub mod fp;
73pub mod fp_interval_prop;
74pub mod hashcons;
75mod lru_cache;
76pub mod nlsat;
77pub mod pb;
78pub mod propagation;
79pub mod quantifier;
80pub mod quantifier_code_tree;
81pub mod recfun;
82pub mod set;
83pub mod simplify;
84pub mod sls;
85pub mod special_relations;
86pub mod string;
87pub mod string_length_prop;
88mod theory;
89pub mod user_propagator;
90pub mod utvpi;
91pub mod watched;
92pub mod wmaxsat;
93
94pub use combination::{Purifier, SharedVar, TheoryCombiner};
95pub use config::{
96    BranchingHeuristic, BvConfig, CombinationConfig, CombinationMode, LiaConfig, PivotingRule,
97    SimplexConfig, TheoryConfig,
98};
99pub use datatype::{Constructor, DatatypeDecl, DatatypeSolver, DatatypeSort, Field, Selector};
100pub use error::{ConflictInfo, ResourceLimit, SolverStats, TheoryError, TheoryResult};
101pub use fp::{FpFormat, FpRoundingMode, FpSolver, FpValue};
102pub use hashcons::{HashConsTable, HcTerm};
103pub use propagation::{Propagation, PropagationPriority, PropagationQueue, PropagationStats};
104pub use simplify::{SimplifyContext, SimplifyResult, SimplifyStats};
105pub use string::{Regex, RegexOp, StringSolver};
106pub use theory::{
107    EqualityNotification, Theory, TheoryCombination, TheoryId, TheoryResult as TheoryCheckResult,
108};
109pub use watched::{WatchList, WatchStats, WatchedConstraint};
110
111// Array eager expansion exports
112pub use array_eager_expand::{
113    EagerArrayExpander, EagerExpandConfig, EagerExpandStats, ExpandedArray,
114};
115
116// Floating-point interval propagation exports
117pub use fp_interval_prop::{
118    FpInterval, FpIntervalPropagator, FpIntervalStats, RoundingMode as FpIntervalRoundingMode,
119};
120
121// String length propagation exports
122pub use string_length_prop::{LengthConstraint, LengthDomain, LengthPropStats, LengthPropagator};
123
124// Quantifier solver exports
125pub use quantifier::{
126    InstantiationLemma, QuantifierConfig, QuantifierSolver, QuantifierStats, TrackedQuantifier,
127};
128pub use quantifier_code_tree::{
129    CodeTree, CodeTreeInstr, CodeTreeStats, CompiledPattern, Match, PatternVar,
130};
131
132// Recursive function solver exports
133pub use recfun::{CaseDef, RecFunConfig, RecFunDef, RecFunId, RecFunSolver, RecFunStats};
134
135// User propagator exports
136pub use user_propagator::{
137    Consequence, PropagatorContext, PropagatorResult, UserPropagator, UserPropagatorManager,
138    UserPropagatorStats,
139};
140
141// Special relations exports
142pub use special_relations::{
143    RelationDef, RelationEdge, RelationKind, RelationProperties, SpecialRelationSolver,
144    SpecialRelationStats,
145};
146
147// Pseudo-Boolean exports
148pub use pb::{PbConfig, PbConstraint, PbConstraintKind, PbSolver, PbStats, WeightedLiteral};
149
150// Difference Logic exports
151pub use diff_logic::{
152    BellmanFord, ConstraintGraph, DenseDiffLogic, DiffConstraint, DiffEdge, DiffLogicConfig,
153    DiffLogicResult, DiffLogicSolver, DiffLogicStats, DiffVar, NegativeCycle,
154};
155
156// UTVPI exports
157pub use utvpi::{
158    DetectedConstraint, DoubledGraph, DoubledNode, Sign, UtConstraint, UtConstraintKind, UtEdge,
159    UtvpiConfig, UtvpiDetector, UtvpiDetectorStats, UtvpiResult, UtvpiSolver, UtvpiStats,
160};
161
162// Theory checking exports
163pub use checking::{
164    ArithCheckConfig, ArithChecker, ArrayChecker, BvChecker, CheckResult, CheckerStats,
165    CombinedChecker, Literal, ProofChecker, ProofStep, ProofStepKind, QuantChecker, TheoryChecker,
166    TheoryKind,
167};
168
169// Weighted MaxSAT exports
170pub use wmaxsat::{
171    SoftClause, WMaxSatConfig, WMaxSatResult, WMaxSatSolver, WMaxSatStats, Weight as WMaxWeight,
172};
173
174// Character theory exports
175pub use character::{
176    AdvancedCharSolver, CaseFoldMode, CaseFolder, CharClass, CharConfig, CharConstraint,
177    CharDomain, CharNormalizer, CharResult, CharSolver, CharStats, CharValue, CharVar, CharWidth,
178    CodePoint, NormalizationForm, UnicodeBlock, UnicodeCategory, UnicodeScript,
179};
180
181// Set theory exports
182pub use set::{
183    CardConstraint, CardConstraintKind, CardDomain, CardPropagator, CardResult, CardStats, EnumSet,
184    FiniteSetEnumerator, MemberConstraint, MemberDomain, MemberPropagator, MemberResult,
185    MemberStats, MemberVar, PowersetBuilder, PowersetConstraint, PowersetIter, PowersetResult,
186    PowersetStats, SetBinOp, SetComplement, SetConfig, SetConstraint, SetDifference, SetElement,
187    SetEnumConfig, SetEnumResult, SetEnumStats, SetExpr, SetIntersection, SetOp, SetOpBuilder,
188    SetOpResult, SetOpStats, SetResult, SetSolver, SetSort, SetStats, SetUnion, SetVar, SetVarId,
189    SubsetConstraint, SubsetDomain, SubsetGraph, SubsetPropagator, SubsetResult, SubsetStats,
190};
191
192// SLS theory exports
193pub use sls::{
194    // Backbone detection
195    BackboneDetector,
196    // BMS selector
197    BmsConfig,
198    BmsSelector,
199    // CCAnr enhancements
200    CcanrConfig,
201    CcanrEnhancer,
202    // Core SLS
203    ClauseId,
204    // Clause importance
205    ClauseImportance,
206    // Clause simplification
207    ClauseSimplifier,
208    ClauseWeightManager,
209    // DDFW weights
210    DdfwConfig,
211    DdfwManager,
212    // Diversification
213    DiversificationManager,
214    DiversificationStrategy,
215    FocusedWalk,
216    FocusedWalkConfig,
217    // Hybrid SLS-CDCL
218    HybridSlsInterface,
219    // Novelty heuristics
220    NoveltyConfig,
221    NoveltySelector,
222    PhaseMode,
223    PhaseSaver,
224    // Portfolio SLS
225    PortfolioConfig,
226    PortfolioSls,
227    // Restart strategies
228    RestartManager,
229    RestartStrategy,
230    SlsAlgorithm,
231    SlsConfig,
232    SlsResult,
233    SlsSolver,
234    SlsStats,
235    // Solution learning
236    SolutionLearner,
237    // Solution verification
238    SolutionVerifier,
239    // Sparrow algorithm
240    SparrowConfig,
241    SparrowSelector,
242    VarActivity,
243    VarSelectHeuristic,
244    VerificationResult,
245    WeightedSlsConfig,
246    WeightedSlsSolver,
247    WeightedSlsStats,
248    WeightingScheme,
249    // YalSAT
250    YalsatConfig,
251    YalsatSolver,
252};