cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
satcheck_zchaff.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module:
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
9
#include "
satcheck_zchaff.h
"
10
11
#include <
util/invariant.h
>
12
13
#include <zchaff_solver.h>
14
15
satcheck_zchaff_baset::satcheck_zchaff_baset
(CSolver *_solver):
solver
(_solver)
16
{
17
status
=
INIT
;
18
solver
->set_randomness(0);
19
solver
->set_variable_number(0);
20
}
21
22
satcheck_zchaff_baset::~satcheck_zchaff_baset
()
23
{
24
}
25
26
tvt
satcheck_zchaff_baset::l_get
(
literalt
a)
const
27
{
28
PRECONDITION
(
status
==
SAT
);
29
30
if
(a.
is_true
())
31
return
tvt
(
true
);
32
else
if
(a.
is_false
())
33
return
tvt
(
false
);
34
35
tvt
result;
36
37
INVARIANT
(
38
a.
var_no
() <
solver
->variables().size(),
39
"variable number shall be within bounds"
);
40
41
switch
(
solver
->variable(a.
var_no
()).value())
42
{
43
case
0: result=
tvt
(
false
);
break
;
44
case
1: result=
tvt
(
true
);
break
;
45
default
: result=
tvt
(
tvt::tv_enumt::TV_UNKNOWN
);
break
;
46
}
47
48
if
(a.
sign
())
49
result=!result;
50
51
return
result;
52
}
53
54
std::string
satcheck_zchaff_baset::solver_text
()
const
55
{
56
return
solver
->version();
57
}
58
59
void
satcheck_zchaff_baset::copy_cnf
()
60
{
61
PRECONDITION
(
status
==
INIT
);
62
63
// this can only be called once
64
solver
->set_variable_number(
no_variables
());
65
66
for
(clausest::const_iterator it=
clauses
.begin();
67
it!=
clauses
.end();
68
it++)
69
solver
->add_orig_clause(
70
reinterpret_cast<
int
*
>
(&((*it)[0])), it->size());
71
}
72
73
propt::resultt
satcheck_zchaff_baset::do_prop_solve
(
const
bvt
&assumptions)
74
{
75
// this is *not* incremental
76
PRECONDITION
(assumptions.empty());
77
PRECONDITION
(
status
==
INIT
);
78
79
copy_cnf
();
80
81
{
82
std::string msg=
83
std::to_string(
solver
->num_variables())+
" variables, "
+
84
std::to_string(
solver
->clauses().size())+
" clauses"
;
85
log
.statistics() << msg <<
messaget::eom
;
86
}
87
88
SAT_StatusT result=(SAT_StatusT)
solver
->solve();
89
90
{
91
std::string msg;
92
93
switch
(result)
94
{
95
case
UNSATISFIABLE:
96
msg=
"SAT checker: instance is UNSATISFIABLE"
;
97
break
;
98
99
case
SATISFIABLE:
100
msg=
"SAT checker: instance is SATISFIABLE"
;
101
break
;
102
103
case
UNDETERMINED:
104
msg=
"SAT checker failed: UNDETERMINED"
;
105
break
;
106
107
case
TIME_OUT:
108
msg=
"SAT checker failed: Time out"
;
109
break
;
110
111
case
MEM_OUT:
112
msg=
"SAT checker failed: Out of memory"
;
113
break
;
114
115
case
ABORTED:
116
msg=
"SAT checker failed: ABORTED"
;
117
break
;
118
119
default
:
120
msg=
"SAT checker failed: unknown result"
;
121
break
;
122
}
123
124
log
.status() << msg <<
messaget::eom
;
125
}
126
127
if
(result==SATISFIABLE)
128
{
129
// see if it is complete
130
for
(
unsigned
i=1; i<
solver
->variables().size(); i++)
131
INVARIANT
(
132
solver
->variables()[i].value() == 0 ||
133
solver
->variables()[i].value() == 1,
134
"all variables shall have been assigned"
);
135
}
136
137
#ifdef DEBUG
138
if
(result==SATISFIABLE)
139
{
140
for
(
unsigned
i=2; i<(
_no_variables
*2); i+=2)
141
cout <<
"DEBUG L"
<< i <<
":"
<< get(i) <<
'\n'
;
142
}
143
#endif
144
145
if
(result==UNSATISFIABLE)
146
{
147
status
=
UNSAT
;
148
return
P_UNSATISFIABLE
;
149
}
150
151
if
(result==SATISFIABLE)
152
{
153
status
=
SAT
;
154
return
P_SATISFIABLE
;
155
}
156
157
status
=
ERROR
;
158
159
return
P_ERROR
;
160
}
161
162
void
satcheck_zchaff_baset::set_assignment
(
literalt
a,
bool
value)
163
{
164
unsigned
v=a.
var_no
();
165
bool
sign=a.
sign
();
166
value^=sign;
167
solver
->variables()[v].set_value(value);
168
}
169
170
satcheck_zchafft::satcheck_zchafft
():
171
satcheck_zchaff_baset
(new CSolver)
172
{
173
}
174
175
satcheck_zchafft::~satcheck_zchafft
()
176
{
177
delete
solver
;
178
}
cnf_clause_listt::clauses
clausest clauses
Definition
cnf_clause_list.h:85
cnft::no_variables
virtual size_t no_variables() const override
Definition
cnf.h:42
cnft::_no_variables
size_t _no_variables
Definition
cnf.h:57
literalt
Definition
literal.h:26
literalt::is_true
bool is_true() const
Definition
literal.h:156
literalt::sign
bool sign() const
Definition
literal.h:88
literalt::var_no
var_not var_no() const
Definition
literal.h:83
literalt::is_false
bool is_false() const
Definition
literal.h:161
messaget::eom
static eomt eom
Definition
message.h:289
propt::resultt
resultt
Definition
prop.h:101
propt::resultt::P_UNSATISFIABLE
@ P_UNSATISFIABLE
Definition
prop.h:101
propt::resultt::P_SATISFIABLE
@ P_SATISFIABLE
Definition
prop.h:101
propt::resultt::P_ERROR
@ P_ERROR
Definition
prop.h:101
propt::log
messaget log
Definition
prop.h:134
satcheck_zchaff_baset::copy_cnf
virtual void copy_cnf()
Definition
satcheck_zchaff.cpp:59
satcheck_zchaff_baset::do_prop_solve
resultt do_prop_solve(const bvt &assumptions) override
Definition
satcheck_zchaff.cpp:73
satcheck_zchaff_baset::SAT
@ SAT
Definition
satcheck_zchaff.h:42
satcheck_zchaff_baset::UNSAT
@ UNSAT
Definition
satcheck_zchaff.h:42
satcheck_zchaff_baset::ERROR
@ ERROR
Definition
satcheck_zchaff.h:42
satcheck_zchaff_baset::INIT
@ INIT
Definition
satcheck_zchaff.h:42
satcheck_zchaff_baset::~satcheck_zchaff_baset
virtual ~satcheck_zchaff_baset()
Definition
satcheck_zchaff.cpp:22
satcheck_zchaff_baset::solver_text
std::string solver_text() const override
Definition
satcheck_zchaff.cpp:54
satcheck_zchaff_baset::set_assignment
void set_assignment(literalt a, bool value) override
Definition
satcheck_zchaff.cpp:162
satcheck_zchaff_baset::satcheck_zchaff_baset
satcheck_zchaff_baset(CSolver *_solver)
Definition
satcheck_zchaff.cpp:15
satcheck_zchaff_baset::solver
CSolver * solver
Definition
satcheck_zchaff.h:40
satcheck_zchaff_baset::status
statust status
Definition
satcheck_zchaff.h:43
satcheck_zchaff_baset::l_get
tvt l_get(literalt a) const override
Definition
satcheck_zchaff.cpp:26
satcheck_zchafft::~satcheck_zchafft
virtual ~satcheck_zchafft()
Definition
satcheck_zchaff.cpp:175
satcheck_zchafft::satcheck_zchafft
satcheck_zchafft()
Definition
satcheck_zchaff.cpp:170
tvt
Definition
threeval.h:20
tvt::tv_enumt::TV_UNKNOWN
@ TV_UNKNOWN
Definition
threeval.h:23
bvt
std::vector< literalt > bvt
Definition
literal.h:201
satcheck_zchaff.h
invariant.h
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
INVARIANT
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
Definition
invariant.h:423
solvers
sat
satcheck_zchaff.cpp
Generated by
1.17.0