| Crates.io | oxiz-theories |
| lib.rs | oxiz-theories |
| version | 0.1.2 |
| created_at | 2026-01-12 04:56:06.433441+00 |
| updated_at | 2026-01-21 05:23:22.482116+00 |
| description | Theory Solvers (EUF, Arithmetic, BitVectors) for OxiZ |
| homepage | |
| repository | https://github.com/cool-japan/oxiz |
| max_upload_size | |
| id | 2037013 |
| size | 1,499,804 |
Theory solvers for OxiZ SMT solver.
This crate provides modular theory solver implementations for CDCL(T):
All theory solvers implement the Theory trait:
pub trait Theory {
fn id(&self) -> TheoryId;
fn name(&self) -> &str;
fn can_handle(&self, term: TermId) -> bool;
fn assert_true(&mut self, term: TermId) -> Result<TheoryResult>;
fn assert_false(&mut self, term: TermId) -> Result<TheoryResult>;
fn check(&mut self) -> Result<TheoryResult>;
fn push(&mut self);
fn pop(&mut self);
fn reset(&mut self);
}
Implements Equality with Uninterpreted Functions using:
use oxiz_theories::euf::EufSolver;
let mut solver = EufSolver::new();
let a = solver.intern(term_a);
let b = solver.intern(term_b);
let fa = solver.intern_app(term_fa, func_f, [a]);
let fb = solver.intern_app(term_fb, func_f, [b]);
solver.merge(a, b, reason)?; // a = b
assert!(solver.are_equal(fa, fb)); // f(a) = f(b) by congruence
Implements Linear Real Arithmetic (LRA) using the Simplex algorithm:
use oxiz_theories::arithmetic::ArithSolver;
use num_rational::Rational64;
let mut solver = ArithSolver::lra();
// x >= 0
solver.assert_ge(&[(x, Rational64::one())], Rational64::zero(), reason);
// x + y <= 10
solver.assert_le(
&[(x, Rational64::one()), (y, Rational64::one())],
Rational64::from_integer(10),
reason
);
let result = solver.check()?;
Implements bit-vector operations:
use oxiz_theories::bv::BvSolver;
let mut solver = BvSolver::new();
solver.assert_eq(bv_term_a, bv_term_b, reason);
let result = solver.check()?;
num-rational - Exact rational arithmeticrustc-hash - Fast hash mapssmallvec - Stack-allocated vectorsMIT OR Apache-2.0