cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
satcheck_booleforce.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_booleforce.h
"
10
11
#include <
util/invariant.h
>
12
13
extern
"C"
14
{
15
#include "booleforce.h"
16
}
17
18
satcheck_booleforcet::satcheck_booleforcet
()
19
{
20
booleforce_set_trace(
false
);
21
}
22
23
satcheck_booleforce_coret::satcheck_booleforce_coret
()
24
{
25
booleforce_set_trace(
true
);
26
}
27
28
satcheck_booleforce_baset::~satcheck_booleforce_baset
()
29
{
30
booleforce_reset();
31
}
32
33
tvt
satcheck_booleforce_baset::l_get
(
literalt
a)
const
34
{
35
PRECONDITION
(
status
==
SAT
);
36
37
if
(a.
is_true
())
38
return
tvt
(
true
);
39
else
if
(a.
is_false
())
40
return
tvt
(
false
);
41
42
tvt
result;
43
unsigned
v=a.
var_no
();
44
CHECK_RETURN
(v <
no_variables
());
45
46
int
r
=booleforce_deref(v);
47
48
if
(
r
>0)
49
result=
tvt
(
true
);
50
else
if
(
r
<0)
51
result=
tvt
(
false
);
52
else
53
result=
tvt
(
tvt::tv_enumt::TV_UNKNOWN
);
54
55
if
(a.
sign
())
56
result=!result;
57
58
return
result;
59
}
60
61
std::string
satcheck_booleforce_baset::solver_text
()
const
62
{
63
return
std::string(
"Booleforce version "
)+booleforce_version();
64
}
65
66
void
satcheck_booleforce_baset::lcnf
(
const
bvt
&bv)
67
{
68
bvt
tmp;
69
70
if
(
process_clause
(bv, tmp))
71
return
;
72
73
for
(
unsigned
j=0; j<tmp.size(); j++)
74
booleforce_add(tmp[j].dimacs());
75
76
// zero-terminated
77
booleforce_add(0);
78
79
clause_counter
++;
80
}
81
82
propt::resultt
satcheck_booleforce_baset::do_prop_solve
(
const
bvt
&assumptions)
83
{
84
PRECONDITION
(assumptions.empty());
85
PRECONDITION
(
status
==
SAT
||
status
==
INIT
);
86
87
int
result=booleforce_sat();
88
89
{
90
std::string msg;
91
92
switch
(result)
93
{
94
case
BOOLEFORCE_UNSATISFIABLE:
95
msg=
"SAT checker: instance is UNSATISFIABLE"
;
96
break
;
97
98
case
BOOLEFORCE_SATISFIABLE:
99
msg=
"SAT checker: instance is SATISFIABLE"
;
100
break
;
101
102
default
:
103
msg=
"SAT checker failed: unknown result"
;
104
break
;
105
}
106
107
log
.status() << msg <<
messaget::eom
;
108
}
109
110
if
(result==BOOLEFORCE_UNSATISFIABLE)
111
{
112
status
=
UNSAT
;
113
return
P_UNSATISFIABLE
;
114
}
115
116
if
(result==BOOLEFORCE_SATISFIABLE)
117
{
118
status
=
SAT
;
119
return
P_SATISFIABLE
;
120
}
121
122
status
=
ERROR
;
123
124
return
P_ERROR
;
125
}
126
127
bool
satcheck_booleforce_coret::is_in_core
(
literalt
l)
const
128
{
129
return
booleforce_var_in_core(l.
var_no
());
130
}
cnf_solvert::status
statust status
Definition
cnf.h:87
cnf_solvert::statust::UNSAT
@ UNSAT
Definition
cnf.h:86
cnf_solvert::statust::SAT
@ SAT
Definition
cnf.h:86
cnf_solvert::statust::ERROR
@ ERROR
Definition
cnf.h:86
cnf_solvert::statust::INIT
@ INIT
Definition
cnf.h:86
cnf_solvert::clause_counter
size_t clause_counter
Definition
cnf.h:88
cnft::process_clause
bool process_clause(const bvt &bv, bvt &dest) const
filter 'true' from clause, eliminate duplicates, recognise trivially satisfied clauses
Definition
cnf.cpp:424
cnft::no_variables
virtual size_t no_variables() const override
Definition
cnf.h:42
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_booleforce_baset::~satcheck_booleforce_baset
virtual ~satcheck_booleforce_baset()
Definition
satcheck_booleforce.cpp:28
satcheck_booleforce_baset::lcnf
void lcnf(const bvt &bv) override
Definition
satcheck_booleforce.cpp:66
satcheck_booleforce_baset::solver_text
std::string solver_text() const override
Definition
satcheck_booleforce.cpp:61
satcheck_booleforce_baset::do_prop_solve
resultt do_prop_solve(const bvt &assumptions) override
Definition
satcheck_booleforce.cpp:82
satcheck_booleforce_baset::l_get
tvt l_get(literalt a) const override
Definition
satcheck_booleforce.cpp:33
satcheck_booleforce_coret::is_in_core
bool is_in_core(literalt l) const
Definition
satcheck_booleforce.cpp:127
satcheck_booleforce_coret::satcheck_booleforce_coret
satcheck_booleforce_coret()
Definition
satcheck_booleforce.cpp:23
satcheck_booleforcet::satcheck_booleforcet
satcheck_booleforcet()
Definition
satcheck_booleforce.cpp:18
tvt
Definition
threeval.h:20
tvt::tv_enumt::TV_UNKNOWN
@ TV_UNKNOWN
Definition
threeval.h:23
r
static int8_t r
Definition
irep_hash.h:60
bvt
std::vector< literalt > bvt
Definition
literal.h:201
satcheck_booleforce.h
invariant.h
CHECK_RETURN
#define CHECK_RETURN(CONDITION)
Definition
invariant.h:495
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
solvers
sat
satcheck_booleforce.cpp
Generated by
1.17.0