Skip to main content

NnfFormula

Enum NnfFormula 

Source
pub enum NnfFormula {
    Atom(usize),
    NegAtom(usize),
    And(Box<NnfFormula>, Box<NnfFormula>),
    Or(Box<NnfFormula>, Box<NnfFormula>),
    Top,
    Bot,
}
Expand description

A propositional formula in NNF (Negation Normal Form).

In NNF, negations appear only at atoms (literals). This simplifies many proof-theoretic manipulations.

Variants§

§

Atom(usize)

A positive atom (propositional variable index).

§

NegAtom(usize)

A negated atom.

§

And(Box<NnfFormula>, Box<NnfFormula>)

Conjunction.

§

Or(Box<NnfFormula>, Box<NnfFormula>)

Disjunction.

§

Top

The constant True.

§

Bot

The constant False.

Implementations§

Source§

impl NnfFormula

Source

pub fn is_literal(&self) -> bool

Check if the formula is a literal (atom or negated atom).

Source

pub fn atom_count(&self) -> usize

Count the number of atoms in the formula.

Source

pub fn connective_count(&self) -> usize

Count the number of connectives in the formula.

Source

pub fn variables(&self) -> Vec<usize>

Collect all variable indices appearing in the formula.

Source

pub fn eval(&self, assignment: &[bool]) -> bool

Evaluate the formula under a truth assignment (variable index → bool).

Source

pub fn simplify(self) -> NnfFormula

Simplify by eliminating Top/Bot.

Trait Implementations§

Source§

impl Clone for NnfFormula

Source§

fn clone(&self) -> NnfFormula

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NnfFormula

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for NnfFormula

Source§

fn eq(&self, other: &NnfFormula) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for NnfFormula

Source§

impl StructuralPartialEq for NnfFormula

Auto Trait Implementations§

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> 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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> Setoid for T
where T: PartialEq,

Source§

fn equiv(&self, other: &T) -> bool

The equivalence relation.
Source§

fn refl(&self) -> bool

Reflexivity of the equivalence.
Source§

fn symm(&self, other: &Self) -> bool

Symmetry: if self ~ other then other ~ self.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.