ModelFinder

Struct ModelFinder 

Source
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>

Source

pub fn new(ddnnf: &'a DecisionDNNF) -> Self

Builds a new model finder given a DecisionDNNF.

Source

pub fn find_model(&self) -> Option<Vec<Literal>>

Search for a model.

Source

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.