cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
cnf_clause_list.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: CNF Generation
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
11
12
#ifndef CPROVER_SOLVERS_SAT_CNF_CLAUSE_LIST_H
13
#define CPROVER_SOLVERS_SAT_CNF_CLAUSE_LIST_H
14
15
#include <list>
16
17
#include <
util/threeval.h
>
18
19
#include "
cnf.h
"
20
21
// CNF given as a list of clauses
22
23
class
cnf_clause_listt
:
public
cnft
24
{
25
public
:
26
explicit
cnf_clause_listt
(
message_handlert
&message_handler)
27
:
cnft
(message_handler)
28
{
29
}
30
virtual
~cnf_clause_listt
() { }
31
32
void
lcnf
(
const
bvt
&bv)
override
;
33
34
std::string
solver_text
()
const override
35
{
return
"CNF clause list"
; }
36
37
tvt
l_get
(
literalt
)
const override
38
{
39
return
tvt::unknown
();
40
}
41
42
size_t
no_clauses
()
const override
43
{
44
return
clauses
.size();
45
}
46
47
typedef
std::list<bvt>
clausest
;
48
49
clausest
&
get_clauses
() {
return
clauses
; }
50
51
void
copy_to
(
cnft
&cnf)
const
52
{
53
cnf.
set_no_variables
(
_no_variables
);
54
for
(clausest::const_iterator
55
it=
clauses
.begin();
56
it!=
clauses
.end();
57
it++)
58
cnf.
lcnf
(*it);
59
}
60
61
static
size_t
hash_clause
(
const
bvt
&bv)
62
{
63
size_t
result=0;
64
for
(bvt::const_iterator it=bv.begin(); it!=bv.end(); it++)
65
result=((result<<2)^it->get())-result;
66
67
return
result;
68
}
69
70
size_t
hash
()
const
71
{
72
size_t
result=0;
73
for
(clausest::const_iterator it=
clauses
.begin(); it!=
clauses
.end(); it++)
74
result=((result<<2)^
hash_clause
(*it))-result;
75
76
return
result;
77
}
78
79
protected
:
80
resultt
do_prop_solve
(
const
bvt
&)
override
81
{
82
return
resultt::P_ERROR
;
83
}
84
85
clausest
clauses
;
86
};
87
88
// CNF given as a list of clauses
89
// PLUS an assignment to the variables
90
91
class
cnf_clause_list_assignmentt
:
public
cnf_clause_listt
92
{
93
public
:
94
explicit
cnf_clause_list_assignmentt
(
message_handlert
&message_handler)
95
:
cnf_clause_listt
(message_handler)
96
{
97
}
98
99
typedef
std::vector<tvt>
assignmentt
;
100
101
assignmentt
&
get_assignment
()
102
{
103
return
assignment
;
104
}
105
106
tvt
l_get
(
literalt
literal)
const override
107
{
108
if
(literal.
is_true
())
109
return
tvt
(
true
);
110
if
(literal.
is_false
())
111
return
tvt
(
false
);
112
113
unsigned
v=literal.
var_no
();
114
115
if
(v==0 || v>=
assignment
.size())
116
return
tvt::unknown
();
117
118
tvt
r
=
assignment
[v];
119
return
literal.
sign
()?!
r
:
r
;
120
}
121
122
virtual
void
copy_assignment_from
(
const
propt
&prop);
123
void
print_assignment
(std::ostream &out)
const
;
124
125
protected
:
126
assignmentt
assignment
;
127
};
128
129
#endif
// CPROVER_SOLVERS_SAT_CNF_CLAUSE_LIST_H
cnf_clause_list_assignmentt::assignment
assignmentt assignment
Definition
cnf_clause_list.h:126
cnf_clause_list_assignmentt::l_get
tvt l_get(literalt literal) const override
Definition
cnf_clause_list.h:106
cnf_clause_list_assignmentt::copy_assignment_from
virtual void copy_assignment_from(const propt &prop)
Definition
cnf_clause_list.cpp:32
cnf_clause_list_assignmentt::get_assignment
assignmentt & get_assignment()
Definition
cnf_clause_list.h:101
cnf_clause_list_assignmentt::assignmentt
std::vector< tvt > assignmentt
Definition
cnf_clause_list.h:99
cnf_clause_list_assignmentt::cnf_clause_list_assignmentt
cnf_clause_list_assignmentt(message_handlert &message_handler)
Definition
cnf_clause_list.h:94
cnf_clause_list_assignmentt::print_assignment
void print_assignment(std::ostream &out) const
Definition
cnf_clause_list.cpp:26
cnf_clause_listt::l_get
tvt l_get(literalt) const override
Definition
cnf_clause_list.h:37
cnf_clause_listt::get_clauses
clausest & get_clauses()
Definition
cnf_clause_list.h:49
cnf_clause_listt::clausest
std::list< bvt > clausest
Definition
cnf_clause_list.h:47
cnf_clause_listt::~cnf_clause_listt
virtual ~cnf_clause_listt()
Definition
cnf_clause_list.h:30
cnf_clause_listt::no_clauses
size_t no_clauses() const override
Definition
cnf_clause_list.h:42
cnf_clause_listt::do_prop_solve
resultt do_prop_solve(const bvt &) override
Definition
cnf_clause_list.h:80
cnf_clause_listt::hash_clause
static size_t hash_clause(const bvt &bv)
Definition
cnf_clause_list.h:61
cnf_clause_listt::cnf_clause_listt
cnf_clause_listt(message_handlert &message_handler)
Definition
cnf_clause_list.h:26
cnf_clause_listt::clauses
clausest clauses
Definition
cnf_clause_list.h:85
cnf_clause_listt::copy_to
void copy_to(cnft &cnf) const
Definition
cnf_clause_list.h:51
cnf_clause_listt::solver_text
std::string solver_text() const override
Definition
cnf_clause_list.h:34
cnf_clause_listt::hash
size_t hash() const
Definition
cnf_clause_list.h:70
cnf_clause_listt::lcnf
void lcnf(const bvt &bv) override
Definition
cnf_clause_list.cpp:16
cnft::set_no_variables
virtual void set_no_variables(size_t no)
Definition
cnf.h:43
cnft::_no_variables
size_t _no_variables
Definition
cnf.h:57
cnft::cnft
cnft(message_handlert &message_handler)
Definition
cnf.h:22
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
message_handlert
Definition
message.h:27
propt
TO_BE_DOCUMENTED.
Definition
prop.h:25
propt::lcnf
void lcnf(literalt l0, literalt l1)
Definition
prop.h:58
propt::resultt
resultt
Definition
prop.h:101
propt::resultt::P_ERROR
@ P_ERROR
Definition
prop.h:101
tvt
Definition
threeval.h:20
tvt::unknown
static tvt unknown()
Definition
threeval.h:33
cnf.h
CNF Generation, via Tseitin.
r
static int8_t r
Definition
irep_hash.h:60
bvt
std::vector< literalt > bvt
Definition
literal.h:201
threeval.h
solvers
sat
cnf_clause_list.h
Generated by
1.17.0