cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
state_encoding_targets.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: State Encoding Targets
4
5
Author: Daniel Kroening, dkr@amazon.com
6
7
\*******************************************************************/
8
9
#ifndef CPROVER_CPROVER_STATE_ENCODING_TARGETS_H
10
#define CPROVER_CPROVER_STATE_ENCODING_TARGETS_H
11
12
#include <
solvers/smt2/smt2_conv.h
>
13
14
#include <iosfwd>
15
16
class
encoding_targett
17
{
18
public
:
19
virtual
void
annotation
(
const
std::string &)
20
{
21
}
22
23
virtual
void
set_to_true
(
source_locationt
,
exprt
) = 0;
24
25
void
set_to_true
(
exprt
expr)
26
{
27
set_to_true
(
source_location
, std::move(expr));
28
}
29
30
void
set_source_location
(
source_locationt
__source_location)
31
{
32
source_location
= std::move(__source_location);
33
}
34
35
virtual
~encoding_targett
() =
default
;
36
37
protected
:
38
source_locationt
source_location
=
source_locationt::nil
();
39
};
40
41
class
container_encoding_targett
:
public
encoding_targett
42
{
43
public
:
44
container_encoding_targett
() =
default
;
45
46
using
constraintst
= std::vector<exprt>;
47
constraintst
constraints
;
48
49
void
set_to_true
(
source_locationt
source_location
,
exprt
expr)
override
50
{
51
if
(
source_location
.is_not_nil())
52
expr.
add_source_location
() =
source_location
;
53
54
constraints
.emplace_back(std::move(expr));
55
}
56
57
protected
:
58
source_locationt
last_source_location
=
source_locationt::nil
();
59
};
60
61
static
inline
void
operator<<
(
encoding_targett
&target,
exprt
constraint)
62
{
63
target.
set_to_true
(std::move(constraint));
64
}
65
66
static
inline
void
67
operator<<
(
encoding_targett
&target,
const
container_encoding_targett
&src)
68
{
69
for
(
const
auto
&constraint : src.
constraints
)
70
target << constraint;
71
}
72
73
class
state_encoding_smt2_convt
:
public
smt2_convt
74
{
75
public
:
76
state_encoding_smt2_convt
(
const
namespacet
&
ns
, std::ostream &_out)
77
:
smt2_convt
(
ns
,
""
,
"cprover"
,
""
,
smt2_convt
::
solvert
::
GENERIC
, _out)
78
79
{
80
use_array_of_bool
=
true
;
81
use_as_const
=
true
;
82
add_converters
();
83
}
84
85
void
add_converters
();
86
};
87
88
class
smt2_encoding_targett
:
public
encoding_targett
89
{
90
public
:
91
smt2_encoding_targett
(
const
namespacet
&ns, std::ostream &_out)
92
:
out
(_out),
smt2_conv
(ns, _out)
93
{
94
}
95
96
~smt2_encoding_targett
()
97
{
98
// finish the conversion to SMT-LIB2
99
smt2_conv
();
100
}
101
102
void
set_to_true
(
source_locationt
,
exprt
expr)
override
103
{
104
smt2_conv
.set_to_true(std::move(expr));
105
}
106
107
void
annotation
(
const
std::string &text)
override
108
{
109
if
(text.empty())
110
out
<<
'\n'
;
111
else
112
out
<<
';'
<<
' '
<< text <<
'\n'
;
113
}
114
115
protected
:
116
std::ostream &
out
;
117
state_encoding_smt2_convt
smt2_conv
;
118
119
void
add_converters
();
120
};
121
122
class
ascii_encoding_targett
:
public
encoding_targett
123
{
124
public
:
125
explicit
ascii_encoding_targett
(std::ostream &_out) :
out
(_out)
126
{
127
}
128
129
void
set_to_true
(
source_locationt
,
exprt
)
override
;
130
131
void
annotation
(
const
std::string &text)
override
132
{
133
out
<< text <<
'\n'
;
134
}
135
136
protected
:
137
std::ostream &
out
;
138
std::size_t
counter
= 0;
139
};
140
141
#endif
// CPROVER_CPROVER_STATE_ENCODING_TARGETS_H
ascii_encoding_targett::out
std::ostream & out
Definition
state_encoding_targets.h:137
ascii_encoding_targett::counter
std::size_t counter
Definition
state_encoding_targets.h:138
ascii_encoding_targett::annotation
void annotation(const std::string &text) override
Definition
state_encoding_targets.h:131
ascii_encoding_targett::ascii_encoding_targett
ascii_encoding_targett(std::ostream &_out)
Definition
state_encoding_targets.h:125
ascii_encoding_targett::set_to_true
void set_to_true(source_locationt, exprt) override
Definition
state_encoding_targets.cpp:16
container_encoding_targett
Definition
state_encoding_targets.h:42
container_encoding_targett::container_encoding_targett
container_encoding_targett()=default
container_encoding_targett::constraintst
std::vector< exprt > constraintst
Definition
state_encoding_targets.h:46
container_encoding_targett::last_source_location
source_locationt last_source_location
Definition
state_encoding_targets.h:58
container_encoding_targett::constraints
constraintst constraints
Definition
state_encoding_targets.h:47
container_encoding_targett::set_to_true
void set_to_true(source_locationt source_location, exprt expr) override
Definition
state_encoding_targets.h:49
encoding_targett
Definition
state_encoding_targets.h:17
encoding_targett::set_to_true
void set_to_true(exprt expr)
Definition
state_encoding_targets.h:25
encoding_targett::annotation
virtual void annotation(const std::string &)
Definition
state_encoding_targets.h:19
encoding_targett::~encoding_targett
virtual ~encoding_targett()=default
encoding_targett::set_source_location
void set_source_location(source_locationt __source_location)
Definition
state_encoding_targets.h:30
encoding_targett::set_to_true
virtual void set_to_true(source_locationt, exprt)=0
encoding_targett::source_location
source_locationt source_location
Definition
state_encoding_targets.h:38
exprt
Base class for all expressions.
Definition
expr.h:57
exprt::add_source_location
source_locationt & add_source_location()
Definition
expr.h:241
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition
namespace.h:91
smt2_convt::ns
const namespacet & ns
Definition
smt2_conv.h:101
smt2_convt::smt2_convt
smt2_convt(const namespacet &_ns, const std::string &_benchmark, const std::string &_notes, const std::string &_logic, solvert _solver, std::ostream &_out)
Definition
smt2_conv.cpp:59
smt2_convt::use_as_const
bool use_as_const
Definition
smt2_conv.h:70
smt2_convt::use_array_of_bool
bool use_array_of_bool
Definition
smt2_conv.h:69
smt2_convt::solvert
solvert
Definition
smt2_conv.h:45
smt2_convt::solvert::GENERIC
@ GENERIC
Definition
smt2_conv.h:46
smt2_encoding_targett::set_to_true
void set_to_true(source_locationt, exprt expr) override
Definition
state_encoding_targets.h:102
smt2_encoding_targett::smt2_encoding_targett
smt2_encoding_targett(const namespacet &ns, std::ostream &_out)
Definition
state_encoding_targets.h:91
smt2_encoding_targett::add_converters
void add_converters()
smt2_encoding_targett::annotation
void annotation(const std::string &text) override
Definition
state_encoding_targets.h:107
smt2_encoding_targett::out
std::ostream & out
Definition
state_encoding_targets.h:116
smt2_encoding_targett::~smt2_encoding_targett
~smt2_encoding_targett()
Definition
state_encoding_targets.h:96
smt2_encoding_targett::smt2_conv
state_encoding_smt2_convt smt2_conv
Definition
state_encoding_targets.h:117
source_locationt
Definition
source_location.h:20
source_locationt::nil
static const source_locationt & nil()
Definition
source_location.h:206
state_encoding_smt2_convt
Definition
state_encoding_targets.h:74
state_encoding_smt2_convt::state_encoding_smt2_convt
state_encoding_smt2_convt(const namespacet &ns, std::ostream &_out)
Definition
state_encoding_targets.h:76
state_encoding_smt2_convt::add_converters
void add_converters()
Definition
state_encoding_targets.cpp:25
smt2_conv.h
operator<<
static void operator<<(encoding_targett &target, exprt constraint)
Definition
state_encoding_targets.h:61
cprover
state_encoding_targets.h
Generated by
1.17.0