pub struct BCDDFunction<F: Function>(/* private fields */);Expand description
Boolean function backed by a complement edge binary decision diagram
Implementations§
Source§impl<F: Function> BCDDFunction<F>
impl<F: Function> BCDDFunction<F>
Sourcepub fn into_inner(self) -> F
pub fn into_inner(self) -> F
Convert self into the underlying Function
Trait Implementations§
Source§impl<F: Function> BooleanFunction for BCDDFunction<F>where
for<'id> F::Manager<'id>: Manager<Terminal = BCDDTerminal, EdgeTag = EdgeTag> + HasBCDDOpApplyCache<F::Manager<'id>>,
for<'id> INodeOfFunc<'id, F>: HasLevel,
impl<F: Function> BooleanFunction for BCDDFunction<F>where
for<'id> F::Manager<'id>: Manager<Terminal = BCDDTerminal, EdgeTag = EdgeTag> + HasBCDDOpApplyCache<F::Manager<'id>>,
for<'id> INodeOfFunc<'id, F>: HasLevel,
Source§fn var_edge<'id>(
manager: &Self::Manager<'id>,
var: VarNo,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn var_edge<'id>( manager: &Self::Manager<'id>, var: VarNo, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Get the Boolean function (as edge) that is true if and only if
var is
true Read moreSource§fn f_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
fn f_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
Get the always false function
⊥ as edgeSource§fn t_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
fn t_edge<'id>(manager: &Self::Manager<'id>) -> EdgeOfFunc<'id, Self>
Get the always true function
⊤ as edgeSource§fn not_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn not_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negation
¬edge, edge versionSource§fn not_edge_owned<'id>(
_manager: &Self::Manager<'id>,
edge: EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn not_edge_owned<'id>( _manager: &Self::Manager<'id>, edge: EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negation
¬edge, owned edge version Read moreSource§fn and_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn and_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the conjunction
lhs ∧ rhs, edge versionSource§fn or_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn or_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the disjunction
lhs ∨ rhs, edge versionSource§fn nand_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn nand_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negated conjunction
lhs ⊼ rhs, edge versionSource§fn nor_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn nor_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the negated disjunction
lhs ⊽ rhs, edge versionSource§fn xor_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn xor_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the exclusive disjunction
lhs ⊕ rhs, edge versionSource§fn equiv_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn equiv_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the equivalence
lhs ↔ rhs, edge versionSource§fn imp_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn imp_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the implication
lhs → rhs, edge versionSource§fn imp_strict_edge<'id>(
manager: &Self::Manager<'id>,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn imp_strict_edge<'id>( manager: &Self::Manager<'id>, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute the strict implication
lhs < rhs, edge versionSource§fn ite_edge<'id>(
manager: &Self::Manager<'id>,
if_edge: &EdgeOfFunc<'id, Self>,
then_edge: &EdgeOfFunc<'id, Self>,
else_edge: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn ite_edge<'id>( manager: &Self::Manager<'id>, if_edge: &EdgeOfFunc<'id, Self>, then_edge: &EdgeOfFunc<'id, Self>, else_edge: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Compute
if if_edge { then_edge } else { else_edge } (edge version) Read moreSource§fn sat_count_edge<'id, N: SatCountNumber, S: BuildHasher>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
vars: LevelNo,
cache: &mut SatCountCache<N, S>,
) -> N
fn sat_count_edge<'id, N: SatCountNumber, S: BuildHasher>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, vars: LevelNo, cache: &mut SatCountCache<N, S>, ) -> N
Edge version of Self::sat_count()Source§fn pick_cube_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool,
) -> Option<Vec<OptBool>>
fn pick_cube_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool, ) -> Option<Vec<OptBool>>
Edge version of Self::pick_cube()Source§fn pick_cube_dd_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn pick_cube_dd_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, choice: impl FnMut(&Self::Manager<'id>, &EdgeOfFunc<'id, Self>, LevelNo) -> bool, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Edge version of Self::pick_cube_dd()Source§fn pick_cube_dd_set_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
literal_set: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn pick_cube_dd_set_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, literal_set: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Edge version of Self::pick_cube_dd_set()Source§fn eval_edge<'id>(
manager: &Self::Manager<'id>,
edge: &EdgeOfFunc<'id, Self>,
args: impl IntoIterator<Item = (VarNo, bool)>,
) -> bool
fn eval_edge<'id>( manager: &Self::Manager<'id>, edge: &EdgeOfFunc<'id, Self>, args: impl IntoIterator<Item = (VarNo, bool)>, ) -> bool
Edge version of Self::eval()Source§fn var<'id>(manager: &Self::Manager<'id>, var: u32) -> Result<Self, OutOfMemory>
fn var<'id>(manager: &Self::Manager<'id>, var: u32) -> Result<Self, OutOfMemory>
Get the Boolean function that is true if and only if
var is true Read moreSource§fn not_var<'id>(
manager: &Self::Manager<'id>,
var: u32,
) -> Result<Self, OutOfMemory>
fn not_var<'id>( manager: &Self::Manager<'id>, var: u32, ) -> Result<Self, OutOfMemory>
Get the Boolean function that is true if and only if
var is false Read moreSource§fn cofactor_true(&self) -> Option<Self>
fn cofactor_true(&self) -> Option<Self>
Source§fn cofactor_false(&self) -> Option<Self>
fn cofactor_false(&self) -> Option<Self>
Source§fn not_owned(self) -> Result<Self, OutOfMemory>
fn not_owned(self) -> Result<Self, OutOfMemory>
Compute the negation
¬self, owned version Read moreSource§fn and(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn and(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the conjunction
self ∧ rhs Read moreSource§fn or(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn or(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the disjunction
self ∨ rhs Read moreSource§fn nand(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn nand(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the negated conjunction
self ⊼ rhs Read moreSource§fn nor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn nor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the negated disjunction
self ⊽ rhs Read moreSource§fn xor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn xor(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the exclusive disjunction
self ⊕ rhs Read moreSource§fn equiv(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn equiv(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the equivalence
self ↔ rhs Read moreSource§fn imp(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn imp(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Source§fn imp_strict(&self, rhs: &Self) -> Result<Self, OutOfMemory>
fn imp_strict(&self, rhs: &Self) -> Result<Self, OutOfMemory>
Compute the strict implication
self < rhs Read moreSource§fn not_var_edge<'id>(
manager: &Self::Manager<'id>,
var: u32,
) -> Result<<Self::Manager<'id> as Manager>::Edge, OutOfMemory>
fn not_var_edge<'id>( manager: &Self::Manager<'id>, var: u32, ) -> Result<<Self::Manager<'id> as Manager>::Edge, OutOfMemory>
Get the Boolean function (as edge) that is true if and only if
var is
false Read moreSource§fn cofactors_edge<'a, 'id>(
manager: &'a Self::Manager<'id>,
f: &'a <Self::Manager<'id> as Manager>::Edge,
) -> Option<(Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)>
fn cofactors_edge<'a, 'id>( manager: &'a Self::Manager<'id>, f: &'a <Self::Manager<'id> as Manager>::Edge, ) -> Option<(Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)>
Source§fn cofactors_node<'a, 'id>(
tag: <Self::Manager<'id> as Manager>::EdgeTag,
node: &'a <Self::Manager<'id> as Manager>::InnerNode,
) -> (Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)
fn cofactors_node<'a, 'id>( tag: <Self::Manager<'id> as Manager>::EdgeTag, node: &'a <Self::Manager<'id> as Manager>::InnerNode, ) -> (Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>, Borrowed<'a, <Self::Manager<'id> as Manager>::Edge>)
Source§fn satisfiable(&self) -> bool
fn satisfiable(&self) -> bool
Source§fn ite(&self, then_case: &Self, else_case: &Self) -> Result<Self, OutOfMemory>
fn ite(&self, then_case: &Self, else_case: &Self) -> Result<Self, OutOfMemory>
Compute
if self { then_case } else { else_case } Read moreSource§fn sat_count<N, S>(&self, vars: u32, cache: &mut SatCountCache<N, S>) -> Nwhere
N: SatCountNumber,
S: BuildHasher,
fn sat_count<N, S>(&self, vars: u32, cache: &mut SatCountCache<N, S>) -> Nwhere
N: SatCountNumber,
S: BuildHasher,
Count the number of satisfying assignments, assuming
vars input
variables Read moreSource§fn pick_cube(
&self,
choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool,
) -> Option<Vec<OptBool>>
fn pick_cube( &self, choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool, ) -> Option<Vec<OptBool>>
Pick a cube of this function Read more
Source§fn pick_cube_dd(
&self,
choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool,
) -> Result<Self, OutOfMemory>
fn pick_cube_dd( &self, choice: impl for<'id> FnMut(&Self::Manager<'id>, &<Self::Manager<'id> as Manager>::Edge, u32) -> bool, ) -> Result<Self, OutOfMemory>
Pick a symbolic cube of this function, i.e., as decision diagram Read more
Source§fn pick_cube_dd_set(&self, literal_set: &Self) -> Result<Self, OutOfMemory>
fn pick_cube_dd_set(&self, literal_set: &Self) -> Result<Self, OutOfMemory>
Pick a symbolic cube of this function, i.e., as decision diagram, using
the literals in
literal_set if there is a choice Read moreSource§fn pick_cube_uniform<S>(
&self,
cache: &mut SatCountCache<F64, S>,
rng: &mut WyRand,
) -> Option<Vec<OptBool>>where
S: BuildHasher,
fn pick_cube_uniform<S>(
&self,
cache: &mut SatCountCache<F64, S>,
rng: &mut WyRand,
) -> Option<Vec<OptBool>>where
S: BuildHasher,
Pick a random cube of this function, where each cube has the same
probability of being chosen Read more
Source§fn pick_cube_uniform_edge<'id, S>(
manager: &Self::Manager<'id>,
edge: &<Self::Manager<'id> as Manager>::Edge,
cache: &mut SatCountCache<F64, S>,
rng: &mut WyRand,
) -> Option<Vec<OptBool>>where
S: BuildHasher,
fn pick_cube_uniform_edge<'id, S>(
manager: &Self::Manager<'id>,
edge: &<Self::Manager<'id> as Manager>::Edge,
cache: &mut SatCountCache<F64, S>,
rng: &mut WyRand,
) -> Option<Vec<OptBool>>where
S: BuildHasher,
Edge version of Self::pick_cube_uniform()Source§impl<F: Function> BooleanFunctionQuant for BCDDFunction<F>where
for<'id> F::Manager<'id>: Manager<Terminal = BCDDTerminal, EdgeTag = EdgeTag> + HasBCDDOpApplyCache<F::Manager<'id>>,
for<'id> INodeOfFunc<'id, F>: HasLevel,
impl<F: Function> BooleanFunctionQuant for BCDDFunction<F>where
for<'id> F::Manager<'id>: Manager<Terminal = BCDDTerminal, EdgeTag = EdgeTag> + HasBCDDOpApplyCache<F::Manager<'id>>,
for<'id> INodeOfFunc<'id, F>: HasLevel,
Source§fn restrict_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn restrict_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Restrict a set of
vars to constant values, edge version Read moreSource§fn forall_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn forall_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Source§fn exists_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn exists_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Source§fn unique_edge<'id>(
manager: &Self::Manager<'id>,
root: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn unique_edge<'id>( manager: &Self::Manager<'id>, root: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Source§fn apply_forall_edge<'id>(
manager: &Self::Manager<'id>,
op: BooleanOperator,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn apply_forall_edge<'id>( manager: &Self::Manager<'id>, op: BooleanOperator, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Combined application of
op and forall quantification, edge version Read moreSource§fn apply_exists_edge<'id>(
manager: &Self::Manager<'id>,
op: BooleanOperator,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn apply_exists_edge<'id>( manager: &Self::Manager<'id>, op: BooleanOperator, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Combined application of
op and existential quantification, edge
version Read moreSource§fn apply_unique_edge<'id>(
manager: &Self::Manager<'id>,
op: BooleanOperator,
lhs: &EdgeOfFunc<'id, Self>,
rhs: &EdgeOfFunc<'id, Self>,
vars: &EdgeOfFunc<'id, Self>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn apply_unique_edge<'id>( manager: &Self::Manager<'id>, op: BooleanOperator, lhs: &EdgeOfFunc<'id, Self>, rhs: &EdgeOfFunc<'id, Self>, vars: &EdgeOfFunc<'id, Self>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Combined application of
op and unique quantification, edge version Read moreSource§fn restrict(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn restrict(&self, vars: &Self) -> Result<Self, OutOfMemory>
Restrict a set of
vars to constant values Read moreSource§fn forall(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn forall(&self, vars: &Self) -> Result<Self, OutOfMemory>
Compute the universal quantification over
vars Read moreSource§fn exists(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn exists(&self, vars: &Self) -> Result<Self, OutOfMemory>
Compute the existential quantification over
vars Read moreSource§fn exist(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn exist(&self, vars: &Self) -> Result<Self, OutOfMemory>
👎Deprecated
Deprecated alias for
Self::exists()Source§fn unique(&self, vars: &Self) -> Result<Self, OutOfMemory>
fn unique(&self, vars: &Self) -> Result<Self, OutOfMemory>
Compute the unique quantification over
vars Read moreSource§fn apply_forall(
&self,
op: BooleanOperator,
rhs: &Self,
vars: &Self,
) -> Result<Self, OutOfMemory>
fn apply_forall( &self, op: BooleanOperator, rhs: &Self, vars: &Self, ) -> Result<Self, OutOfMemory>
Combined application of
op and quantification ∀x. self <op> rhs,
where <op> is any of the operations from BooleanOperator Read moreSource§fn apply_exists(
&self,
op: BooleanOperator,
rhs: &Self,
vars: &Self,
) -> Result<Self, OutOfMemory>
fn apply_exists( &self, op: BooleanOperator, rhs: &Self, vars: &Self, ) -> Result<Self, OutOfMemory>
Combined application of
op and quantification ∃x. self <op> rhs,
where <op> is any of the operations from BooleanOperator Read moreSource§fn apply_exist(
&self,
op: BooleanOperator,
rhs: &Self,
vars: &Self,
) -> Result<Self, OutOfMemory>
fn apply_exist( &self, op: BooleanOperator, rhs: &Self, vars: &Self, ) -> Result<Self, OutOfMemory>
👎Deprecated
Deprecated alias for
Self::apply_exists()Source§fn apply_unique(
&self,
op: BooleanOperator,
rhs: &Self,
vars: &Self,
) -> Result<Self, OutOfMemory>
fn apply_unique( &self, op: BooleanOperator, rhs: &Self, vars: &Self, ) -> Result<Self, OutOfMemory>
Combined application of
op and quantification ∃!x. self <op> rhs,
where <op> is any of the operations from BooleanOperator Read moreSource§fn exist_edge<'id>(
manager: &Self::Manager<'id>,
root: &<Self::Manager<'id> as Manager>::Edge,
vars: &<Self::Manager<'id> as Manager>::Edge,
) -> Result<<Self::Manager<'id> as Manager>::Edge, OutOfMemory>
fn exist_edge<'id>( manager: &Self::Manager<'id>, root: &<Self::Manager<'id> as Manager>::Edge, vars: &<Self::Manager<'id> as Manager>::Edge, ) -> Result<<Self::Manager<'id> as Manager>::Edge, OutOfMemory>
👎Deprecated
Deprecated alias for
Self::exists_edge()Source§fn apply_exist_edge<'id>(
manager: &Self::Manager<'id>,
op: BooleanOperator,
lhs: &<Self::Manager<'id> as Manager>::Edge,
rhs: &<Self::Manager<'id> as Manager>::Edge,
vars: &<Self::Manager<'id> as Manager>::Edge,
) -> Result<<Self::Manager<'id> as Manager>::Edge, OutOfMemory>
fn apply_exist_edge<'id>( manager: &Self::Manager<'id>, op: BooleanOperator, lhs: &<Self::Manager<'id> as Manager>::Edge, rhs: &<Self::Manager<'id> as Manager>::Edge, vars: &<Self::Manager<'id> as Manager>::Edge, ) -> Result<<Self::Manager<'id> as Manager>::Edge, OutOfMemory>
👎Deprecated
Deprecated alias for
Self::apply_exists_edge()Source§impl<F: Clone + Function> Clone for BCDDFunction<F>
impl<F: Clone + Function> Clone for BCDDFunction<F>
Source§fn clone(&self) -> BCDDFunction<F>
fn clone(&self) -> BCDDFunction<F>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<F: Function> From<F> for BCDDFunction<F>
impl<F: Function> From<F> for BCDDFunction<F>
Source§impl<F: Function> Function for BCDDFunction<F>
impl<F: Function> Function for BCDDFunction<F>
Source§type Manager<'__id> = <F as Function>::Manager<'__id>
type Manager<'__id> = <F as Function>::Manager<'__id>
Type of the associated manager Read more
Source§type ManagerRef = <F as Function>::ManagerRef
type ManagerRef = <F as Function>::ManagerRef
Source§fn from_edge<'__id>(
manager: &Self::Manager<'__id>,
edge: <Self::Manager<'__id> as Manager>::Edge,
) -> Self
fn from_edge<'__id>( manager: &Self::Manager<'__id>, edge: <Self::Manager<'__id> as Manager>::Edge, ) -> Self
Create a new function from a manager reference and an edge
Source§fn as_edge<'__id>(
&self,
manager: &Self::Manager<'__id>,
) -> &<Self::Manager<'__id> as Manager>::Edge
fn as_edge<'__id>( &self, manager: &Self::Manager<'__id>, ) -> &<Self::Manager<'__id> as Manager>::Edge
Converts this function into the underlying edge (as reference), checking
that it belongs to the given
manager Read moreSource§fn into_edge<'__id>(
self,
manager: &Self::Manager<'__id>,
) -> <Self::Manager<'__id> as Manager>::Edge
fn into_edge<'__id>( self, manager: &Self::Manager<'__id>, ) -> <Self::Manager<'__id> as Manager>::Edge
Converts this function into the underlying edge, checking that it
belongs to the given
manager Read moreSource§fn manager_ref(&self) -> <F as Function>::ManagerRef
fn manager_ref(&self) -> <F as Function>::ManagerRef
Clone the
ManagerRef partObtain a shared manager reference as well as the underlying edge Read more
Source§fn with_manager_exclusive<__F, __T>(&self, f: __F) -> __T
fn with_manager_exclusive<__F, __T>(&self, f: __F) -> __T
Obtain an exclusive manager reference as well as the underlying edge Read more
Source§fn from_edge_ref<'id>(
manager: &Self::Manager<'id>,
edge: &<Self::Manager<'id> as Manager>::Edge,
) -> Self
fn from_edge_ref<'id>( manager: &Self::Manager<'id>, edge: &<Self::Manager<'id> as Manager>::Edge, ) -> Self
Create a new function from a manager reference and an edge reference
Source§fn node_count(&self) -> usize
fn node_count(&self) -> usize
Count the number of nodes in this function, including terminal nodes Read more
Source§impl<F: Function> FunctionSubst for BCDDFunction<F>where
for<'id> F::Manager<'id>: Manager<Terminal = BCDDTerminal, EdgeTag = EdgeTag> + HasBCDDOpApplyCache<F::Manager<'id>>,
for<'id> INodeOfFunc<'id, F>: HasLevel,
impl<F: Function> FunctionSubst for BCDDFunction<F>where
for<'id> F::Manager<'id>: Manager<Terminal = BCDDTerminal, EdgeTag = EdgeTag> + HasBCDDOpApplyCache<F::Manager<'id>>,
for<'id> INodeOfFunc<'id, F>: HasLevel,
Source§fn substitute_edge<'id, 'a>(
manager: &'a Self::Manager<'id>,
edge: &'a EdgeOfFunc<'id, Self>,
substitution: impl Substitution<Replacement = Borrowed<'a, EdgeOfFunc<'id, Self>>>,
) -> AllocResult<EdgeOfFunc<'id, Self>>
fn substitute_edge<'id, 'a>( manager: &'a Self::Manager<'id>, edge: &'a EdgeOfFunc<'id, Self>, substitution: impl Substitution<Replacement = Borrowed<'a, EdgeOfFunc<'id, Self>>>, ) -> AllocResult<EdgeOfFunc<'id, Self>>
Edge version of Self::substitute()Source§fn substitute<'a>(
&'a self,
substitution: impl Substitution<Replacement = &'a Self>,
) -> Result<Self, OutOfMemory>
fn substitute<'a>( &'a self, substitution: impl Substitution<Replacement = &'a Self>, ) -> Result<Self, OutOfMemory>
Source§impl<F: Ord + Function> Ord for BCDDFunction<F>
impl<F: Ord + Function> Ord for BCDDFunction<F>
Source§fn cmp(&self, other: &BCDDFunction<F>) -> Ordering
fn cmp(&self, other: &BCDDFunction<F>) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl<F: PartialOrd + Function> PartialOrd for BCDDFunction<F>
impl<F: PartialOrd + Function> PartialOrd for BCDDFunction<F>
impl<F: Eq + Function> Eq for BCDDFunction<F>
impl<F: Function> StructuralPartialEq for BCDDFunction<F>
Auto Trait Implementations§
impl<F> Freeze for BCDDFunction<F>where
F: Freeze,
impl<F> RefUnwindSafe for BCDDFunction<F>where
F: RefUnwindSafe,
impl<F> Send for BCDDFunction<F>where
F: Send,
impl<F> Sync for BCDDFunction<F>where
F: Sync,
impl<F> Unpin for BCDDFunction<F>where
F: Unpin,
impl<F> UnwindSafe for BCDDFunction<F>where
F: UnwindSafe,
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