cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
equality.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module:
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
9
10
#ifndef CPROVER_SOLVERS_FLATTENING_EQUALITY_H
11
#define CPROVER_SOLVERS_FLATTENING_EQUALITY_H
12
13
#include <map>
14
15
#include <
util/expr.h
>
16
17
#include <
solvers/prop/prop_conv_solver.h
>
18
19
class
equalityt
:
public
prop_conv_solvert
20
{
21
public
:
22
equalityt
(
propt
&_prop,
message_handlert
&message_handler)
23
:
prop_conv_solvert
(_prop, message_handler)
24
{
25
}
26
27
virtual
literalt
equality
(
const
exprt
&e1,
const
exprt
&e2);
28
29
using
SUB
=
prop_conv_solvert
;
30
31
void
finish_eager_conversion
()
override
32
{
33
add_equality_constraints
();
34
SUB::finish_eager_conversion
();
35
typemap
.clear();
// if called incrementally, don't do it twice
36
}
37
38
protected
:
39
typedef
std::unordered_map<const exprt, unsigned, irep_hash>
elementst
;
40
typedef
std::map<std::pair<unsigned, unsigned>,
literalt
>
equalitiest
;
41
typedef
std::map<unsigned, exprt>
elements_revt
;
42
43
struct
typestructt
44
{
45
elementst
elements
;
46
elements_revt
elements_rev
;
47
equalitiest
equalities
;
48
};
49
50
typedef
std::unordered_map<const typet, typestructt, irep_hash>
typemapt
;
51
52
typemapt
typemap
;
53
54
virtual
literalt
equality2
(
const
exprt
&e1,
const
exprt
&e2);
55
56
// an eager conversion of the transitivity constraints
57
virtual
void
add_equality_constraints
();
58
virtual
void
add_equality_constraints
(
const
typestructt
&typestruct);
59
};
60
61
#endif
// CPROVER_SOLVERS_FLATTENING_EQUALITY_H
equalityt::equalitiest
std::map< std::pair< unsigned, unsigned >, literalt > equalitiest
Definition
equality.h:40
equalityt::finish_eager_conversion
void finish_eager_conversion() override
Definition
equality.h:31
equalityt::elementst
std::unordered_map< const exprt, unsigned, irep_hash > elementst
Definition
equality.h:39
equalityt::add_equality_constraints
virtual void add_equality_constraints()
Definition
equality.cpp:89
equalityt::typemapt
std::unordered_map< const typet, typestructt, irep_hash > typemapt
Definition
equality.h:50
equalityt::equalityt
equalityt(propt &_prop, message_handlert &message_handler)
Definition
equality.h:22
equalityt::SUB
prop_conv_solvert SUB
Definition
equality.h:29
equalityt::typemap
typemapt typemap
Definition
equality.h:52
equalityt::elements_revt
std::map< unsigned, exprt > elements_revt
Definition
equality.h:41
equalityt::equality2
virtual literalt equality2(const exprt &e1, const exprt &e2)
Definition
equality.cpp:25
equalityt::equality
virtual literalt equality(const exprt &e1, const exprt &e2)
Definition
equality.cpp:17
exprt
Base class for all expressions.
Definition
expr.h:57
literalt
Definition
literal.h:26
message_handlert
Definition
message.h:27
prop_conv_solvert::prop_conv_solvert
prop_conv_solvert(propt &_prop, message_handlert &message_handler)
Definition
prop_conv_solver.h:32
prop_conv_solvert::finish_eager_conversion
virtual void finish_eager_conversion()
Definition
prop_conv_solver.cpp:439
propt
TO_BE_DOCUMENTED.
Definition
prop.h:25
expr.h
prop_conv_solver.h
equalityt::typestructt
Definition
equality.h:44
equalityt::typestructt::elements_rev
elements_revt elements_rev
Definition
equality.h:46
equalityt::typestructt::elements
elementst elements
Definition
equality.h:45
equalityt::typestructt::equalities
equalitiest equalities
Definition
equality.h:47
solvers
flattening
equality.h
Generated by
1.17.0