| Crates.io | oxiz-core |
| lib.rs | oxiz-core |
| version | 0.1.2 |
| created_at | 2026-01-12 04:17:31.940976+00 |
| updated_at | 2026-01-21 05:16:58.711107+00 |
| description | Core AST, Sorts, and Traits for OxiZ SMT Solver |
| homepage | |
| repository | https://github.com/cool-japan/oxiz |
| max_upload_size | |
| id | 2036981 |
| size | 1,946,469 |
Core data structures and utilities for OxiZ SMT solver.
This crate provides the foundational components used across all OxiZ crates:
astHash-consed term representation using arena allocation:
use oxiz_core::ast::TermManager;
let mut tm = TermManager::new();
let x = tm.mk_var("x", sort_bool);
let y = tm.mk_var("y", sort_bool);
let and_xy = tm.mk_and([x, y]);
Key types:
TermId - Lightweight handle to a termTerm - Term data (kind, sort, children)TermKind - Enum of all term kinds (And, Or, Not, Eq, etc.)TermManager - Creates and interns termssortSort (type) system:
use oxiz_core::sort::SortManager;
let mut sm = SortManager::new();
let bool_sort = sm.bool();
let int_sort = sm.int();
let bv32 = sm.bitvec(32);
let array_sort = sm.array(int_sort, bool_sort);
smtlibSMT-LIB2 parsing and printing:
use oxiz_core::smtlib::{Lexer, Parser};
let input = "(declare-const x Int) (assert (> x 0)) (check-sat)";
let mut parser = Parser::new(input, &mut term_manager, &mut sort_manager);
let commands = parser.parse_script()?;
tacticTactic framework for solver strategies:
use oxiz_core::tactic::{Goal, SimplifyTactic, Tactic};
let mut tactic = SimplifyTactic::new();
let result = tactic.apply(goal)?;
rustc-hash - Fast hash mapssmallvec - Stack-allocated vectorsthiserror - Error handlingMIT OR Apache-2.0