pub struct HornSatisfiability {
literals: Vec<Option<bool>>,
clauses: Vec<(usize, usize, bool)>,
idx: Vec<Vec<usize>>,
satisfiable: bool,
stack: Vec<usize>,
}Expand description
Horn Satisfiability
$\wedge(\wedge_i v_{p_i}\rightarrow v_q = f)$
Fields§
§literals: Vec<Option<bool>>§clauses: Vec<(usize, usize, bool)>§idx: Vec<Vec<usize>>§satisfiable: bool§stack: Vec<usize>Implementations§
Source§impl HornSatisfiability
impl HornSatisfiability
pub fn new(size: usize) -> Self
pub fn add_clause( &mut self, p: impl IntoIterator<Item = usize>, q: usize, f: bool, )
pub fn is_satisfiable(&self) -> bool
pub fn solve(&self) -> Option<Vec<bool>>
Sourcefn resolve(&mut self)
fn resolve(&mut self)
Examples found in repository?
crates/competitive/src/algorithm/horn_satisfiability.rs (line 35)
23 pub fn add_clause(&mut self, p: impl IntoIterator<Item = usize>, q: usize, f: bool) {
24 let mut count = 0;
25 let id = self.clauses.len();
26 for p_i in p.into_iter() {
27 if self.literals[p_i] != Some(true) {
28 self.idx[p_i].push(id);
29 count += 1;
30 }
31 }
32 self.clauses.push((count, q, f));
33 if count == 0 {
34 self.stack.push(id);
35 self.resolve();
36 }
37 }Auto Trait Implementations§
impl Freeze for HornSatisfiability
impl RefUnwindSafe for HornSatisfiability
impl Send for HornSatisfiability
impl Sync for HornSatisfiability
impl Unpin for HornSatisfiability
impl UnwindSafe for HornSatisfiability
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