-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathaaltasolver.h
69 lines (56 loc) · 1.51 KB
/
aaltasolver.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
* File: aaltasolver.h
* Author: Jianwen Li
* Note: An inheritance class from Minisat::Solver for Aalta use
* Created on August 15, 2017
*/
#ifndef AALTA_SOLVER_H
#define AALTA_SOLVER_H
#include "minisat/core/Solver.h"
#include <vector>
namespace aalta
{
class AaltaSolver : public Minisat::Solver
{
public:
AaltaSolver () {}
AaltaSolver (bool verbose) : verbose_ (verbose) {}
bool verbose_;
Minisat::vec<Minisat::Lit> assumption_; //Assumption for SAT solver
//functions
bool solve_assumption ();
std::vector<int> get_model (); //get the model from SAT solver
std::vector<int> get_uc (); //get UC from SAT solver
void add_clause (int);
void add_clause (int, int);
void add_clause (int, int, int);
void add_clause (int, int, int, int);
void add_clause (std::vector<int>&);
Minisat::Lit SAT_lit (int id); //create the Lit used in SAT solver for the id.
int lit_id (Minisat::Lit); //return the id of SAT lit
//printers
void print_clauses ();
//l <-> r
inline void add_equivalence (int l, int r)
{
add_clause (-l, r);
add_clause (l, -r);
}
//l <-> r1 /\ r2
inline void add_equivalence (int l, int r1, int r2)
{
add_clause (-l, r1);
add_clause (-l, r2);
add_clause (l, -r1, -r2);
}
//l<-> r1 /\ r2 /\ r3
inline void add_equivalence (int l, int r1, int r2, int r3)
{
add_clause (-l, r1);
add_clause (-l, r2);
add_clause (-l, r3);
add_clause (l, -r1, -r2, -r3);
}
};
}
#endif