cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
qbf_quantor.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 "
qbf_quantor.h
"
10
11
#include <cstdlib>
12
#include <fstream>
13
14
#include <
util/invariant.h
>
15
16
qbf_quantort::qbf_quantort
(
message_handlert
&message_handler)
17
:
qdimacs_cnft
(message_handler)
18
{
19
}
20
21
qbf_quantort::~qbf_quantort
()
22
{
23
}
24
25
tvt
qbf_quantort::l_get
(
literalt
)
const
26
{
27
UNREACHABLE
;
28
}
29
30
std::string
qbf_quantort::solver_text
()
const
31
{
32
return
"Quantor"
;
33
}
34
35
propt::resultt
qbf_quantort::prop_solve
()
36
{
37
{
38
log
.status() <<
"Quantor: "
<<
no_variables
() <<
" variables, "
39
<<
no_clauses
() <<
" clauses"
<<
messaget::eom
;
40
}
41
42
std::string qbf_tmp_file=
"quantor.qdimacs"
;
43
std::string result_tmp_file=
"quantor.out"
;
44
45
{
46
std::ofstream out(qbf_tmp_file.c_str());
47
48
// write it
49
write_qdimacs_cnf
(out);
50
}
51
52
// solve it
53
int
res=system((
54
"quantor "
+qbf_tmp_file+
" -o "
+result_tmp_file).c_str());
55
CHECK_RETURN
(0==res);
56
57
bool
result=
false
;
58
59
// read result
60
{
61
std::ifstream in(result_tmp_file.c_str());
62
63
bool
result_found=
false
;
64
while
(in)
65
{
66
std::string line;
67
68
std::getline(in, line);
69
70
if
(!line.empty() && line[line.size() - 1] ==
'\r'
)
71
line.resize(line.size()-1);
72
73
if
(line==
"s TRUE"
)
74
{
75
result=
true
;
76
result_found=
true
;
77
break
;
78
}
79
else
if
(line==
"s FALSE"
)
80
{
81
result=
false
;
82
result_found=
true
;
83
break
;
84
}
85
}
86
87
if
(!result_found)
88
{
89
log
.error() <<
"Quantor failed: unknown result"
<<
messaget::eom
;
90
return
resultt::P_ERROR
;
91
}
92
}
93
94
if
(result)
95
{
96
log
.status() <<
"Quantor: TRUE"
<<
messaget::eom
;
97
return
resultt::P_SATISFIABLE
;
98
}
99
else
100
{
101
log
.status() <<
"Quantor: FALSE"
<<
messaget::eom
;
102
return
resultt::P_UNSATISFIABLE
;
103
}
104
105
return
resultt::P_ERROR
;
106
}
cnf_clause_listt::no_clauses
size_t no_clauses() const override
Definition
cnf_clause_list.h:42
cnft::no_variables
virtual size_t no_variables() const override
Definition
cnf.h:42
literalt
Definition
literal.h:26
message_handlert
Definition
message.h:27
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
qbf_quantort::qbf_quantort
qbf_quantort(message_handlert &message_handler)
Definition
qbf_quantor.cpp:16
qbf_quantort::prop_solve
virtual resultt prop_solve()
Definition
qbf_quantor.cpp:35
qbf_quantort::l_get
tvt l_get(literalt a) const override
Definition
qbf_quantor.cpp:25
qbf_quantort::~qbf_quantort
~qbf_quantort() override
Definition
qbf_quantor.cpp:21
qbf_quantort::solver_text
std::string solver_text() const override
Definition
qbf_quantor.cpp:30
qdimacs_cnft::write_qdimacs_cnf
virtual void write_qdimacs_cnf(std::ostream &out)
Definition
qdimacs_cnf.cpp:15
qdimacs_cnft::qdimacs_cnft
qdimacs_cnft(message_handlert &message_handler)
Definition
qdimacs_cnf.h:20
tvt
Definition
threeval.h:20
qbf_quantor.h
invariant.h
CHECK_RETURN
#define CHECK_RETURN(CONDITION)
Definition
invariant.h:495
UNREACHABLE
#define UNREACHABLE
This should be used to mark dead code.
Definition
invariant.h:525
solvers
qbf
qbf_quantor.cpp
Generated by
1.17.0