PseudoBooleanFunction

Trait PseudoBooleanFunction 

Source
pub trait PseudoBooleanFunction: Function {
    type Number: NumberBase;

Show 18 methods // Required methods fn constant_edge<'id>( manager: &Self::Manager<'id>, value: Self::Number, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn var_edge<'id>( manager: &Self::Manager<'id>, var: VarNo, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn add_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn sub_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn mul_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn div_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn min_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn max_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>; fn eval_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, args: impl IntoIterator<Item = (VarNo, bool)>, ) -> Self::Number; // Provided methods fn constant<'id>( manager: &Self::Manager<'id>, value: Self::Number, ) -> AllocResult<Self> { ... } fn var<'id>(manager: &Self::Manager<'id>, var: VarNo) -> AllocResult<Self> { ... } fn add(&self, rhs: &Self) -> AllocResult<Self> { ... } fn sub(&self, rhs: &Self) -> AllocResult<Self> { ... } fn mul(&self, rhs: &Self) -> AllocResult<Self> { ... } fn div(&self, rhs: &Self) -> AllocResult<Self> { ... } fn min(&self, rhs: &Self) -> AllocResult<Self> { ... } fn max(&self, rhs: &Self) -> AllocResult<Self> { ... } fn eval( &self, args: impl IntoIterator<Item = (VarNo, bool)>, ) -> Self::Number { ... }
}
Expand description

Pseudo-Boolean function 𝔹ⁿ → ℝ

Required Associated Types§

Source

type Number: NumberBase

The number type used for the functions’ target set.

Required Methods§

Source

fn constant_edge<'id>( manager: &Self::Manager<'id>, value: Self::Number, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::constant()

Source

fn var_edge<'id>( manager: &Self::Manager<'id>, var: VarNo, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::var()

Source

fn add_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::add()

Source

fn sub_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::sub()

Source

fn mul_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::mul()

Source

fn div_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::div()

Source

fn min_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::min()

Source

fn max_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>

Edge version of Self::max()

Source

fn eval_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, args: impl IntoIterator<Item = (VarNo, bool)>, ) -> Self::Number

Edge version of Self::eval()

Provided Methods§

Source

fn constant<'id>( manager: &Self::Manager<'id>, value: Self::Number, ) -> AllocResult<Self>

Get the constant value

Source

fn var<'id>(manager: &Self::Manager<'id>, var: VarNo) -> AllocResult<Self>

Get the function that is 1 if the variable is true and 0 otherwise.

Panics if var is greater or equal to the number of variables in manager.

Source

fn add(&self, rhs: &Self) -> AllocResult<Self>

Point-wise addition self + rhs

Locking behavior: acquires a shared manager lock

Panics if self and rhs do not belong to the same manager.

Source

fn sub(&self, rhs: &Self) -> AllocResult<Self>

Point-wise subtraction self - rhs

Locking behavior: acquires a shared manager lock

Panics if self and rhs do not belong to the same manager.

Source

fn mul(&self, rhs: &Self) -> AllocResult<Self>

Point-wise multiplication self * rhs

Locking behavior: acquires a shared manager lock

Panics if self and rhs do not belong to the same manager.

Source

fn div(&self, rhs: &Self) -> AllocResult<Self>

Point-wise division self / rhs

Locking behavior: acquires a shared manager lock

Panics if self and rhs do not belong to the same manager.

Source

fn min(&self, rhs: &Self) -> AllocResult<Self>

Point-wise minimum min(self, rhs)

Locking behavior: acquires a shared manager lock

Panics if self and rhs do not belong to the same manager.

Source

fn max(&self, rhs: &Self) -> AllocResult<Self>

Point-wise maximum max(self, rhs)

Locking behavior: acquires a shared manager lock

Panics if self and rhs do not belong to the same manager.

Source

fn eval(&self, args: impl IntoIterator<Item = (VarNo, bool)>) -> Self::Number

Evaluate this function

args consists of pairs (variable, value) and determines the valuation for all variables in the function’s domain. The order is irrelevant (except that if the valuation for a variable is given multiple times, the last value counts).

Should there be a decision node for a variable not part of the domain, then unknown is used as the decision value.

Locking behavior: acquires the manager’s lock for shared access.

Panics if any variable number in args is larger that the number of variables in the containing manager.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§