Преглед на файлове

implement "detecting" conflict clauses

Lucas Stadler преди 10 години
родител
ревизия
2a23b38aee
променени са 1 файла, в които са добавени 21 реда и са изтрити 0 реда
  1. 21 0
      rust/solve/src/dpll.rs

+ 21 - 0
rust/solve/src/dpll.rs

@ -14,6 +14,7 @@ fn from_vec(v: Vec<Var>) -> BoundVars {
14 14
    vars
15 15
}
16 16
17
/// A satisfied clause is a clause where at least one atom is true.
17 18
fn is_clause_satisfied(vars: BoundVars, clause: Clause) -> bool {
18 19
    for v in clause {
19 20
        if vars.contains(&v) {
@ -29,3 +30,23 @@ fn test_is_clause_satisfied() {
29 30
    assert!(is_clause_satisfied(from_vec(vec!(1)), vec!(1)));
30 31
    assert!(!is_clause_satisfied(empty_vars(), vec!(1)));
31 32
}
33
34
/// A conflict clause is a clause whose atoms each are false.
35
fn is_clause_conflict(vars: BoundVars, clause: Clause) -> bool {
36
    for v in clause {
37
        if vars.contains(&v) {
38
            return false
39
        }
40
    }
41
42
    return true
43
}
44
45
#[test]
46
fn test_is_clause_conflict() {
47
    assert!(is_clause_conflict(empty_vars(), vec!(1)));
48
    assert!(is_clause_conflict(empty_vars(), vec!(1, 2, 3)));
49
    assert!(is_clause_conflict(from_vec(vec!(4)), vec!(1, 2, 3)));
50
    assert!(!is_clause_conflict(from_vec(vec!(1)), vec!(1)));
51
    assert!(!is_clause_conflict(from_vec(vec!(2)), vec!(1, 2)));
52
}