ModelCounter

Struct ModelCounter 

Source
pub struct ModelCounter<'a> { /* private fields */ }
Expand description

A structure used to count the models of a DecisionDNNF.

The algorithm takes a time polynomial in the size of the Decision-DNNF.

§Example

use decdnnf_rs::{DecisionDNNF, ModelCounter};

fn count_models(ddnnf: &DecisionDNNF) {
    let model_counter = ModelCounter::new(ddnnf, false);
    println!("the formula has {} models", model_counter.global_count());
}

Implementations§

Source§

impl<'a> ModelCounter<'a>

Source

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

Builds a new model counter given a formula.

This function can both count the number of full or partial models.

Source

pub fn set_assumptions(&mut self, assumptions: &[Literal])

Set assumption literals, reducing the number of models.

The only models to be considered are the ones that contain all the literals marked as assumptions. The set of assumptions must involved at most once each variable.

§Panics

This function panics if the set of assumptions involves the same variable multiple times.

Source

pub fn global_count(&self) -> &Integer

Returns the number of counted elements of the whole formula.

Source

pub fn ddnnf(&self) -> &DecisionDNNF

Returns the DecisionDNNF which elements are counted.

Source

pub fn count_from(&self, index: NodeIndex) -> &Integer

Returns the number of counted elements of the subfomula rooted at the node which index is given.

§Panics

This function panics if the provided node index is greater or equal to the number of nodes of the formula.

Source

pub fn partial_models(&self) -> bool

Returns a Boolean value indicating if partial models are computed (false is returns in case full models are computed).

Auto Trait Implementations§

§

impl<'a> !Freeze for ModelCounter<'a>

§

impl<'a> RefUnwindSafe for ModelCounter<'a>

§

impl<'a> Send for ModelCounter<'a>

§

impl<'a> Sync for ModelCounter<'a>

§

impl<'a> Unpin for ModelCounter<'a>

§

impl<'a> UnwindSafe for ModelCounter<'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.