pub struct ModelFinder<'a> { /* private fields */ }Expand description
A structure used to find models in a DecisionDNNF.
Queries can involved assumption literals; in this case, the only models under consideration are the ones that involve such literals. In case models exists but none include those assumptions, then the query will return that no model exist.
§Example
use decdnnf_rs::{Literal, ModelFinder};
let ddnnf = gimme_ddnnf();
let model_finder = ModelFinder::new(&ddnnf);
if let Some(model) = model_finder.find_model() {
println!("the formula has models; here is one:");
for l in model {
print!("{l} ");
}
println!();
if model_finder.find_model_under_assumptions(&[Literal::from(-1)]).is_some() {
println!("some of them involve the literal -1");
}
if model_finder.find_model_under_assumptions(&[Literal::from(1)]).is_some() {
println!("some of them involve the literal 1");
}
} else {
println!("the formula has no model");
}Implementations§
Source§impl<'a> ModelFinder<'a>
impl<'a> ModelFinder<'a>
Sourcepub fn new(ddnnf: &'a DecisionDNNF) -> Self
pub fn new(ddnnf: &'a DecisionDNNF) -> Self
Builds a new model finder given a DecisionDNNF.
Sourcepub fn find_model(&self) -> Option<Vec<Literal>>
pub fn find_model(&self) -> Option<Vec<Literal>>
Search for a model.
Sourcepub fn find_model_under_assumptions(
&self,
assumptions: &[Literal],
) -> Option<Vec<Literal>>
pub fn find_model_under_assumptions( &self, assumptions: &[Literal], ) -> Option<Vec<Literal>>
Search for a model compatible with the provided assumptions.
§Panics
The literals must refer to existing variables. In case the variable index of a literal is higher than the highest variable index in the formula, this function panics.
Auto Trait Implementations§
impl<'a> Freeze for ModelFinder<'a>
impl<'a> RefUnwindSafe for ModelFinder<'a>
impl<'a> Send for ModelFinder<'a>
impl<'a> Sync for ModelFinder<'a>
impl<'a> Unpin for ModelFinder<'a>
impl<'a> UnwindSafe for ModelFinder<'a>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Casts the value.
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
Source§fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
Source§fn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> WrappingAs for T
impl<T> WrappingAs for T
Source§fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
Source§fn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
Casts the value.