1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
/********************* */
/*! \file bitblast_strategies.h
** \verbatim
** Original author: lianah
** Major contributors: none
** Minor contributors (to current version): none
** This file is part of the CVC4 prototype.
** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys)
** Courant Institute of Mathematical Sciences
** New York University
** See the file COPYING in the top-level source directory for licensing
** information.\endverbatim
**
** \brief Implementation of bitblasting functions for various operators.
**
** Implementation of bitblasting functions for various operators.
**/
#include "cvc4_private.h"
#ifndef __CVC4__BITBLAST__STRATEGIES_H
#define __CVC4__BITBLAST__STRATEGIES_H
#include "expr/node.h"
#include "prop/sat_module.h"
namespace CVC4 {
namespace theory {
namespace bv {
class Bitblaster;
typedef std::vector<Node> Bits;
/**
* Default Atom Bitblasting strategies:
*
* @param node the atom to be bitblasted
* @param markerLit the marker literal corresponding to the atom
* @param bb the bitblaster
*/
Node UndefinedAtomBBStrategy (TNode node, Bitblaster* bb);
Node DefaultEqBB(TNode node, Bitblaster* bb);
Node DefaultUltBB(TNode node, Bitblaster* bb);
Node DefaultUleBB(TNode node, Bitblaster* bb);
Node DefaultUgtBB(TNode node, Bitblaster* bb);
Node DefaultUgeBB(TNode node, Bitblaster* bb);
Node DefaultSltBB(TNode node, Bitblaster* bb);
Node DefaultSleBB(TNode node, Bitblaster* bb);
Node DefaultSgtBB(TNode node, Bitblaster* bb);
Node DefaultSgeBB(TNode node, Bitblaster* bb);
/// other modes
Node AdderUltBB(TNode node, Bitblaster* bb);
/**
* Default Term Bitblasting strategies
*
* @param node the term to be bitblasted
* @param bb the bitblaster in which the clauses are added
*
* @return the bits representing the new term
*/
void UndefinedTermBBStrategy(TNode node, Bits& bits, Bitblaster* bb);
void DefaultVarBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultConstBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultNotBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultConcatBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultAndBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultOrBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultXorBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultXnorBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultNandBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultNorBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultCompBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultMultBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultPlusBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultSubBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultNegBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultUdivBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultUremBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultSdivBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultSremBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultSmodBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultShlBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultLshrBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultAshrBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultExtractBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultRepeatBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultZeroExtendBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultSignExtendBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultRotateRightBB (TNode node, Bits& bits, Bitblaster* bb);
void DefaultRotateLeftBB (TNode node, Bits& bits, Bitblaster* bb);
}
}
}
#endif
|