pub mod array;
pub mod bv;
pub mod euf;
pub mod fp;
pub mod lra;
pub mod nla;
pub mod quantifier;
pub mod string;
pub use crate::ast::fp::{FloatSort, FloatValue, RoundingMode};
pub use array::ArraySolver;
pub use bv::BitBlaster;
pub use euf::EufSolver;
pub use lra::LraSolver;
pub use nla::NlaSolver;
pub use quantifier::QuantifierSolver;
pub use string::StringSolver;
use crate::ast::{Expr, ModelValue};
pub trait TheorySolver {
fn assert(&mut self, expr: &Expr);
fn check(&mut self) -> bool;
fn explain(&self) -> Vec<Expr>;
fn get_model_value(&self, expr: &Expr) -> Option<ModelValue>;
}
#[derive(Debug, Clone)]
pub struct Bound {
pub val: num_rational::BigRational,
pub is_strict: bool,
}