use dbs::{AtomDBConfig, ClauseDBConfig};
use vsids::VSIDS;
pub mod dbs;
#[doc(hidden)]
pub mod misc;
pub mod vsids;
#[derive(Clone)]
pub struct Config {
pub luby_u: crate::generic::luby::LubyRepresentation,
pub polarity_lean: PolarityLean,
pub random_decision_bias: RandomDecisionBias,
pub stopping_criteria: StoppingCriteria,
pub time_limit: Option<std::time::Duration>,
pub vsids_variant: VSIDS,
pub scheduler: Scheduler,
pub switch: Switches,
pub clause_db: ClauseDBConfig,
pub atom_db: AtomDBConfig,
}
impl Default for Config {
fn default() -> Self {
Config {
luby_u: 128,
polarity_lean: 0.0,
random_decision_bias: 0.0,
stopping_criteria: StoppingCriteria::FirstUIP,
scheduler: Scheduler {
restart: Some(2),
conflict: Some(50_000),
},
time_limit: None,
vsids_variant: VSIDS::MiniSAT,
switch: Switches::default(),
clause_db: ClauseDBConfig::default(),
atom_db: AtomDBConfig::default(),
}
}
}
pub type Activity = f64;
pub type LBD = u8;
pub type PolarityLean = f64;
pub type RandomDecisionBias = f64;
#[derive(Clone, Copy, PartialEq, Eq)]
pub struct Scheduler {
pub restart: Option<u32>,
pub conflict: Option<u32>,
}
#[derive(Clone, Copy, PartialEq, Eq)]
pub enum StoppingCriteria {
FirstUIP,
None,
}
impl std::fmt::Display for StoppingCriteria {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::FirstUIP => write!(f, "FirstUIP"),
Self::None => write!(f, "None"),
}
}
}
#[derive(Clone)]
pub struct Switches {
pub phase_saving: bool,
pub preprocessing: bool,
pub restart: bool,
pub subsumption: bool,
}
impl Default for Switches {
fn default() -> Self {
Switches {
phase_saving: true,
preprocessing: false,
restart: true,
subsumption: true,
}
}
}