pub struct Preprocessor { /* private fields */ }Expand description
Preprocessing context
Implementations§
Source§impl Preprocessor
impl Preprocessor
Sourcepub fn build_occurrences(&mut self, clauses: &ClauseDatabase)
pub fn build_occurrences(&mut self, clauses: &ClauseDatabase)
Build occurrence lists from clause database
Sourcepub fn blocked_clause_elimination(
&mut self,
clauses: &mut ClauseDatabase,
) -> usize
pub fn blocked_clause_elimination( &mut self, clauses: &mut ClauseDatabase, ) -> usize
Blocked Clause Elimination
Remove clauses that are blocked on some literal. Returns the number of clauses eliminated.
Sourcepub fn pure_literal_elimination(
&mut self,
clauses: &mut ClauseDatabase,
) -> usize
pub fn pure_literal_elimination( &mut self, clauses: &mut ClauseDatabase, ) -> usize
Pure Literal Elimination
A pure literal is one that appears only in positive or only in negative form. All clauses containing a pure literal can be satisfied and removed. Returns the number of clauses eliminated.
Sourcepub fn subsumption_elimination(&mut self, clauses: &mut ClauseDatabase) -> usize
pub fn subsumption_elimination(&mut self, clauses: &mut ClauseDatabase) -> usize
Subsumption Elimination
A clause C subsumes clause D if C ⊆ D (every literal in C is in D). If C subsumes D, then D can be removed. Returns the number of clauses eliminated.
Sourcepub fn variable_elimination(
&mut self,
clauses: &mut ClauseDatabase,
limit: usize,
) -> usize
pub fn variable_elimination( &mut self, clauses: &mut ClauseDatabase, limit: usize, ) -> usize
Variable Elimination (Bounded Variable Elimination)
Eliminate a variable by resolving all pairs of clauses containing v and ~v, but only if the number of resulting clauses is not too large. Returns the number of variables eliminated.
Sourcepub fn failed_literal_probing(&mut self, clauses: &mut ClauseDatabase) -> usize
pub fn failed_literal_probing(&mut self, clauses: &mut ClauseDatabase) -> usize
Failed Literal Probing
Try to assign each literal and propagate. If a literal leads to a conflict, we can infer its negation must be true (failed literal). Returns the number of failed literals found.
Sourcepub fn bounded_variable_addition(
&mut self,
clauses: &mut ClauseDatabase,
max_vars_to_add: usize,
) -> usize
pub fn bounded_variable_addition( &mut self, clauses: &mut ClauseDatabase, max_vars_to_add: usize, ) -> usize
Bounded Variable Addition (BVA)
Introduce new variables to simplify formulas by factoring out common literals. For example, if we have clauses (a ∨ b ∨ c) and (a ∨ b ∨ d), we can replace them with: (a ∨ b ∨ x), (~x ∨ c), (~x ∨ d) where x is a fresh variable. This can reduce total clause size and improve solving.
Returns the number of variables added.
Sourcepub fn preprocess(&mut self, clauses: &mut ClauseDatabase) -> (usize, usize)
pub fn preprocess(&mut self, clauses: &mut ClauseDatabase) -> (usize, usize)
Apply all preprocessing techniques
Returns (clauses_eliminated, vars_eliminated)
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Preprocessor
impl RefUnwindSafe for Preprocessor
impl Send for Preprocessor
impl Sync for Preprocessor
impl Unpin for Preprocessor
impl UnsafeUnpin for Preprocessor
impl UnwindSafe for Preprocessor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more