pub struct TruthTable { /* private fields */ }Expand description
A truth table representing a boolean function.
The truth table stores the output for each possible input combination. For n input variables, there are 2^n rows in the table.
§Example
use problemreductions::truth_table::TruthTable;
// Create AND gate truth table
let and_gate = TruthTable::from_outputs(2, vec![false, false, false, true]);
assert!(!and_gate.evaluate(&[false, false]));
assert!(!and_gate.evaluate(&[true, false]));
assert!(and_gate.evaluate(&[true, true]));Implementations§
Source§impl TruthTable
impl TruthTable
Sourcepub fn from_outputs(num_inputs: usize, outputs: Vec<bool>) -> Self
pub fn from_outputs(num_inputs: usize, outputs: Vec<bool>) -> Self
Create a truth table from a vector of boolean outputs.
The outputs vector must have exactly 2^num_inputs elements. Index i corresponds to the input where the j-th bit represents variable j.
Sourcepub fn from_function<F>(num_inputs: usize, f: F) -> Self
pub fn from_function<F>(num_inputs: usize, f: F) -> Self
Create a truth table from a function.
The function takes a slice of booleans (the input) and returns the output.
Sourcepub fn num_inputs(&self) -> usize
pub fn num_inputs(&self) -> usize
Get the number of input variables.
Sourcepub fn evaluate_config(&self, config: &[usize]) -> bool
pub fn evaluate_config(&self, config: &[usize]) -> bool
Evaluate using a usize config (0/1 values).
Sourcepub fn outputs_vec(&self) -> Vec<bool>
pub fn outputs_vec(&self) -> Vec<bool>
Get all outputs as a vector of bools.
Sourcepub fn index_to_input(&self, index: usize) -> Vec<bool>
pub fn index_to_input(&self, index: usize) -> Vec<bool>
Get the input configuration for a given row index.
Sourcepub fn count_ones(&self) -> usize
pub fn count_ones(&self) -> usize
Count the number of true outputs.
Sourcepub fn count_zeros(&self) -> usize
pub fn count_zeros(&self) -> usize
Count the number of false outputs.
Sourcepub fn is_satisfiable(&self) -> bool
pub fn is_satisfiable(&self) -> bool
Check if the function is satisfiable (has at least one true output).
Sourcepub fn is_tautology(&self) -> bool
pub fn is_tautology(&self) -> bool
Check if the function is a tautology (all outputs are true).
Sourcepub fn is_contradiction(&self) -> bool
pub fn is_contradiction(&self) -> bool
Check if the function is a contradiction (all outputs are false).
Sourcepub fn satisfying_assignments(&self) -> Vec<Vec<bool>>
pub fn satisfying_assignments(&self) -> Vec<Vec<bool>>
Get all satisfying assignments.
Sourcepub fn implies() -> Self
pub fn implies() -> Self
Create an implication gate (a -> b = !a OR b). Input 0 is ‘a’, input 1 is ‘b’.
Sourcepub fn and_with(&self, other: &TruthTable) -> TruthTable
pub fn and_with(&self, other: &TruthTable) -> TruthTable
Combine two truth tables using AND.
Sourcepub fn or_with(&self, other: &TruthTable) -> TruthTable
pub fn or_with(&self, other: &TruthTable) -> TruthTable
Combine two truth tables using OR.
Sourcepub fn negate(&self) -> TruthTable
pub fn negate(&self) -> TruthTable
Negate the truth table.
Trait Implementations§
Source§impl Clone for TruthTable
impl Clone for TruthTable
Source§fn clone(&self) -> TruthTable
fn clone(&self) -> TruthTable
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TruthTable
impl Debug for TruthTable
Source§impl<'de> Deserialize<'de> for TruthTable
impl<'de> Deserialize<'de> for TruthTable
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl PartialEq for TruthTable
impl PartialEq for TruthTable
Source§impl Serialize for TruthTable
impl Serialize for TruthTable
impl Eq for TruthTable
impl StructuralPartialEq for TruthTable
Auto Trait Implementations§
impl Freeze for TruthTable
impl RefUnwindSafe for TruthTable
impl Send for TruthTable
impl Sync for TruthTable
impl Unpin for TruthTable
impl UnwindSafe for TruthTable
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.