cadical 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +26 -0
- data/README.md +101 -0
- data/ext/cadical/cadical/LICENSE +28 -0
- data/ext/cadical/cadical/README.md +65 -0
- data/ext/cadical/cadical/VERSION +1 -0
- data/ext/cadical/cadical/src/analyze.cpp +1360 -0
- data/ext/cadical/cadical/src/arena.cpp +30 -0
- data/ext/cadical/cadical/src/arena.hpp +105 -0
- data/ext/cadical/cadical/src/assume.cpp +616 -0
- data/ext/cadical/cadical/src/averages.cpp +34 -0
- data/ext/cadical/cadical/src/averages.hpp +37 -0
- data/ext/cadical/cadical/src/backbone.cpp +631 -0
- data/ext/cadical/cadical/src/backtrack.cpp +177 -0
- data/ext/cadical/cadical/src/backward.cpp +231 -0
- data/ext/cadical/cadical/src/bins.cpp +22 -0
- data/ext/cadical/cadical/src/bins.hpp +22 -0
- data/ext/cadical/cadical/src/block.cpp +824 -0
- data/ext/cadical/cadical/src/block.hpp +37 -0
- data/ext/cadical/cadical/src/cadical.cpp +1026 -0
- data/ext/cadical/cadical/src/cadical.hpp +1419 -0
- data/ext/cadical/cadical/src/ccadical.cpp +208 -0
- data/ext/cadical/cadical/src/ccadical.h +74 -0
- data/ext/cadical/cadical/src/checker.cpp +649 -0
- data/ext/cadical/cadical/src/checker.hpp +173 -0
- data/ext/cadical/cadical/src/clause.cpp +689 -0
- data/ext/cadical/cadical/src/clause.hpp +190 -0
- data/ext/cadical/cadical/src/collect.cpp +545 -0
- data/ext/cadical/cadical/src/compact.cpp +550 -0
- data/ext/cadical/cadical/src/condition.cpp +940 -0
- data/ext/cadical/cadical/src/config.cpp +101 -0
- data/ext/cadical/cadical/src/config.hpp +20 -0
- data/ext/cadical/cadical/src/congruence.cpp +7880 -0
- data/ext/cadical/cadical/src/congruence.hpp +757 -0
- data/ext/cadical/cadical/src/constrain.cpp +64 -0
- data/ext/cadical/cadical/src/contract.cpp +27 -0
- data/ext/cadical/cadical/src/contract.hpp +139 -0
- data/ext/cadical/cadical/src/cover.cpp +704 -0
- data/ext/cadical/cadical/src/cover.hpp +34 -0
- data/ext/cadical/cadical/src/decide.cpp +347 -0
- data/ext/cadical/cadical/src/decompose.cpp +738 -0
- data/ext/cadical/cadical/src/decompose.hpp +23 -0
- data/ext/cadical/cadical/src/deduplicate.cpp +275 -0
- data/ext/cadical/cadical/src/definition.cpp +283 -0
- data/ext/cadical/cadical/src/delay.hpp +38 -0
- data/ext/cadical/cadical/src/drattracer.cpp +153 -0
- data/ext/cadical/cadical/src/drattracer.hpp +55 -0
- data/ext/cadical/cadical/src/elim.cpp +1171 -0
- data/ext/cadical/cadical/src/elim.hpp +53 -0
- data/ext/cadical/cadical/src/elimfast.cpp +570 -0
- data/ext/cadical/cadical/src/ema.cpp +95 -0
- data/ext/cadical/cadical/src/ema.hpp +68 -0
- data/ext/cadical/cadical/src/extend.cpp +289 -0
- data/ext/cadical/cadical/src/external.cpp +1034 -0
- data/ext/cadical/cadical/src/external.hpp +487 -0
- data/ext/cadical/cadical/src/external_propagate.cpp +1316 -0
- data/ext/cadical/cadical/src/factor.cpp +1011 -0
- data/ext/cadical/cadical/src/factor.hpp +54 -0
- data/ext/cadical/cadical/src/file.cpp +506 -0
- data/ext/cadical/cadical/src/file.hpp +210 -0
- data/ext/cadical/cadical/src/flags.cpp +135 -0
- data/ext/cadical/cadical/src/flags.hpp +93 -0
- data/ext/cadical/cadical/src/flip.cpp +269 -0
- data/ext/cadical/cadical/src/format.cpp +89 -0
- data/ext/cadical/cadical/src/format.hpp +36 -0
- data/ext/cadical/cadical/src/frattracer.cpp +277 -0
- data/ext/cadical/cadical/src/frattracer.hpp +67 -0
- data/ext/cadical/cadical/src/gates.cpp +766 -0
- data/ext/cadical/cadical/src/heap.hpp +212 -0
- data/ext/cadical/cadical/src/idruptracer.cpp +566 -0
- data/ext/cadical/cadical/src/idruptracer.hpp +112 -0
- data/ext/cadical/cadical/src/instantiate.cpp +365 -0
- data/ext/cadical/cadical/src/instantiate.hpp +45 -0
- data/ext/cadical/cadical/src/internal.cpp +1265 -0
- data/ext/cadical/cadical/src/internal.hpp +1941 -0
- data/ext/cadical/cadical/src/inttypes.hpp +34 -0
- data/ext/cadical/cadical/src/ipasir.cpp +47 -0
- data/ext/cadical/cadical/src/ipasir.h +37 -0
- data/ext/cadical/cadical/src/kitten.c +2599 -0
- data/ext/cadical/cadical/src/kitten.h +97 -0
- data/ext/cadical/cadical/src/level.hpp +33 -0
- data/ext/cadical/cadical/src/lidruptracer.cpp +657 -0
- data/ext/cadical/cadical/src/lidruptracer.hpp +122 -0
- data/ext/cadical/cadical/src/limit.cpp +146 -0
- data/ext/cadical/cadical/src/limit.hpp +168 -0
- data/ext/cadical/cadical/src/logging.cpp +214 -0
- data/ext/cadical/cadical/src/logging.hpp +98 -0
- data/ext/cadical/cadical/src/lookahead.cpp +520 -0
- data/ext/cadical/cadical/src/lratchecker.cpp +833 -0
- data/ext/cadical/cadical/src/lratchecker.hpp +168 -0
- data/ext/cadical/cadical/src/lrattracer.cpp +200 -0
- data/ext/cadical/cadical/src/lrattracer.hpp +61 -0
- data/ext/cadical/cadical/src/lucky.cpp +506 -0
- data/ext/cadical/cadical/src/message.cpp +218 -0
- data/ext/cadical/cadical/src/message.hpp +65 -0
- data/ext/cadical/cadical/src/minimize.cpp +224 -0
- data/ext/cadical/cadical/src/mobical.cpp +5588 -0
- data/ext/cadical/cadical/src/occs.cpp +52 -0
- data/ext/cadical/cadical/src/occs.hpp +36 -0
- data/ext/cadical/cadical/src/options.cpp +359 -0
- data/ext/cadical/cadical/src/options.hpp +442 -0
- data/ext/cadical/cadical/src/parse.cpp +471 -0
- data/ext/cadical/cadical/src/parse.hpp +75 -0
- data/ext/cadical/cadical/src/phases.cpp +56 -0
- data/ext/cadical/cadical/src/phases.hpp +19 -0
- data/ext/cadical/cadical/src/probe.cpp +990 -0
- data/ext/cadical/cadical/src/profile.cpp +107 -0
- data/ext/cadical/cadical/src/profile.hpp +283 -0
- data/ext/cadical/cadical/src/proof.cpp +691 -0
- data/ext/cadical/cadical/src/proof.hpp +125 -0
- data/ext/cadical/cadical/src/propagate.cpp +584 -0
- data/ext/cadical/cadical/src/queue.cpp +90 -0
- data/ext/cadical/cadical/src/queue.hpp +74 -0
- data/ext/cadical/cadical/src/radix.hpp +180 -0
- data/ext/cadical/cadical/src/random.cpp +207 -0
- data/ext/cadical/cadical/src/random.h +44 -0
- data/ext/cadical/cadical/src/random.hpp +98 -0
- data/ext/cadical/cadical/src/range.hpp +125 -0
- data/ext/cadical/cadical/src/reap.cpp +127 -0
- data/ext/cadical/cadical/src/reap.hpp +28 -0
- data/ext/cadical/cadical/src/reduce.cpp +278 -0
- data/ext/cadical/cadical/src/reluctant.hpp +82 -0
- data/ext/cadical/cadical/src/rephase.cpp +402 -0
- data/ext/cadical/cadical/src/report.cpp +313 -0
- data/ext/cadical/cadical/src/resources.cpp +160 -0
- data/ext/cadical/cadical/src/resources.hpp +16 -0
- data/ext/cadical/cadical/src/restart.cpp +178 -0
- data/ext/cadical/cadical/src/restore.cpp +267 -0
- data/ext/cadical/cadical/src/score.cpp +51 -0
- data/ext/cadical/cadical/src/score.hpp +16 -0
- data/ext/cadical/cadical/src/shrink.cpp +507 -0
- data/ext/cadical/cadical/src/signal.cpp +136 -0
- data/ext/cadical/cadical/src/signal.hpp +33 -0
- data/ext/cadical/cadical/src/solution.cpp +50 -0
- data/ext/cadical/cadical/src/solver.cpp +1871 -0
- data/ext/cadical/cadical/src/stable.cpp +31 -0
- data/ext/cadical/cadical/src/stack.h +110 -0
- data/ext/cadical/cadical/src/stats.cpp +920 -0
- data/ext/cadical/cadical/src/stats.hpp +418 -0
- data/ext/cadical/cadical/src/subsume.cpp +645 -0
- data/ext/cadical/cadical/src/sweep.cpp +1960 -0
- data/ext/cadical/cadical/src/sweep.hpp +61 -0
- data/ext/cadical/cadical/src/terminal.cpp +38 -0
- data/ext/cadical/cadical/src/terminal.hpp +96 -0
- data/ext/cadical/cadical/src/ternary.cpp +450 -0
- data/ext/cadical/cadical/src/testing.hpp +24 -0
- data/ext/cadical/cadical/src/tier.cpp +189 -0
- data/ext/cadical/cadical/src/tracer.hpp +186 -0
- data/ext/cadical/cadical/src/transred.cpp +253 -0
- data/ext/cadical/cadical/src/unstable.cpp +29 -0
- data/ext/cadical/cadical/src/util.cpp +129 -0
- data/ext/cadical/cadical/src/util.hpp +181 -0
- data/ext/cadical/cadical/src/var.cpp +39 -0
- data/ext/cadical/cadical/src/var.hpp +22 -0
- data/ext/cadical/cadical/src/veripbtracer.cpp +427 -0
- data/ext/cadical/cadical/src/veripbtracer.hpp +106 -0
- data/ext/cadical/cadical/src/version.cpp +107 -0
- data/ext/cadical/cadical/src/version.hpp +13 -0
- data/ext/cadical/cadical/src/vivify.cpp +1893 -0
- data/ext/cadical/cadical/src/vivify.hpp +50 -0
- data/ext/cadical/cadical/src/walk.cpp +1088 -0
- data/ext/cadical/cadical/src/walk.hpp +91 -0
- data/ext/cadical/cadical/src/walk_full_occs.cpp +966 -0
- data/ext/cadical/cadical/src/warmup.cpp +403 -0
- data/ext/cadical/cadical/src/watch.cpp +126 -0
- data/ext/cadical/cadical/src/watch.hpp +77 -0
- data/ext/cadical/cadical_ext.c +778 -0
- data/ext/cadical/extconf.rb +26 -0
- data/lib/cadical/version.rb +3 -0
- data/lib/cadical.rb +12 -0
- metadata +218 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#ifndef _lratchecker_hpp_INCLUDED
|
|
2
|
+
#define _lratchecker_hpp_INCLUDED
|
|
3
|
+
|
|
4
|
+
/*------------------------------------------------------------------------*/
|
|
5
|
+
#include "tracer.hpp"
|
|
6
|
+
#include <cstdint>
|
|
7
|
+
#include <unordered_map>
|
|
8
|
+
|
|
9
|
+
namespace CaDiCaL {
|
|
10
|
+
|
|
11
|
+
/*------------------------------------------------------------------------*/
|
|
12
|
+
|
|
13
|
+
// This checker implements an LRUP checker.
|
|
14
|
+
// It requires LRAT-style proof chains for each learned clause
|
|
15
|
+
//
|
|
16
|
+
// Most of the infrastructure is taken from checker, but without the
|
|
17
|
+
// propagation
|
|
18
|
+
|
|
19
|
+
/*------------------------------------------------------------------------*/
|
|
20
|
+
|
|
21
|
+
struct LratCheckerClause {
|
|
22
|
+
LratCheckerClause *next; // collision chain link for hash table
|
|
23
|
+
uint64_t hash; // previously computed full 64-bit hash
|
|
24
|
+
int64_t id; // id of clause
|
|
25
|
+
bool garbage; // for garbage clauses
|
|
26
|
+
unsigned size;
|
|
27
|
+
bool used;
|
|
28
|
+
bool tautological;
|
|
29
|
+
int literals[1]; // 'literals' of length 'size'
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/*------------------------------------------------------------------------*/
|
|
33
|
+
|
|
34
|
+
class LratChecker : public StatTracer {
|
|
35
|
+
|
|
36
|
+
Internal *internal;
|
|
37
|
+
|
|
38
|
+
// Capacity of variable values.
|
|
39
|
+
//
|
|
40
|
+
int64_t size_vars;
|
|
41
|
+
|
|
42
|
+
// The 'watchers' and 'marks' data structures are not that time critical
|
|
43
|
+
// and thus we access them by first mapping a literal to 'unsigned'.
|
|
44
|
+
//
|
|
45
|
+
static unsigned l2u (int lit);
|
|
46
|
+
|
|
47
|
+
signed char &checked_lit (int lit);
|
|
48
|
+
signed char &mark (int lit);
|
|
49
|
+
|
|
50
|
+
std::vector<signed char> checked_lits;
|
|
51
|
+
std::vector<signed char> marks; // mark bits of literals
|
|
52
|
+
std::unordered_map<int64_t, std::vector<int>> clauses_to_reconstruct;
|
|
53
|
+
std::vector<int> assumptions;
|
|
54
|
+
std::vector<int> constraint;
|
|
55
|
+
bool concluded;
|
|
56
|
+
|
|
57
|
+
uint64_t num_clauses; // number of clauses in hash table
|
|
58
|
+
uint64_t num_finalized;
|
|
59
|
+
uint64_t num_garbage; // number of garbage clauses
|
|
60
|
+
uint64_t size_clauses; // size of clause hash table
|
|
61
|
+
LratCheckerClause **clauses; // hash table of clauses
|
|
62
|
+
LratCheckerClause *garbage; // linked list of garbage clauses
|
|
63
|
+
|
|
64
|
+
std::vector<int> imported_clause; // original clause for reporting
|
|
65
|
+
std::vector<int64_t> assumption_clauses;
|
|
66
|
+
|
|
67
|
+
void enlarge_vars (int64_t idx);
|
|
68
|
+
void import_literal (int lit);
|
|
69
|
+
void import_clause (const std::vector<int> &);
|
|
70
|
+
|
|
71
|
+
static const unsigned num_nonces = 4;
|
|
72
|
+
|
|
73
|
+
uint64_t nonces[num_nonces]; // random numbers for hashing
|
|
74
|
+
uint64_t last_hash; // last computed hash value of clause
|
|
75
|
+
int64_t last_id; // id of the last added/deleted clause
|
|
76
|
+
int64_t current_id; // id of the last added clause
|
|
77
|
+
uint64_t compute_hash (int64_t); // compute and save hash value of clause
|
|
78
|
+
|
|
79
|
+
// Reduce hash value to the actual size.
|
|
80
|
+
//
|
|
81
|
+
static uint64_t reduce_hash (uint64_t hash, uint64_t size);
|
|
82
|
+
|
|
83
|
+
void enlarge_clauses (); // enlarge hash table for clauses
|
|
84
|
+
void insert (); // insert clause in hash table
|
|
85
|
+
LratCheckerClause **
|
|
86
|
+
find (const int64_t); // find clause position in hash table
|
|
87
|
+
|
|
88
|
+
void add_clause (const char *type);
|
|
89
|
+
|
|
90
|
+
void collect_garbage_clauses ();
|
|
91
|
+
|
|
92
|
+
LratCheckerClause *new_clause ();
|
|
93
|
+
void delete_clause (LratCheckerClause *);
|
|
94
|
+
|
|
95
|
+
bool check (std::vector<int64_t>); // check RUP
|
|
96
|
+
bool check_resolution (std::vector<int64_t>); // check resolution
|
|
97
|
+
bool check_blocked (std::vector<int64_t>); // check ER
|
|
98
|
+
|
|
99
|
+
struct {
|
|
100
|
+
|
|
101
|
+
int64_t added; // number of added clauses
|
|
102
|
+
int64_t original; // number of added original clauses
|
|
103
|
+
int64_t derived; // number of added derived clauses
|
|
104
|
+
int64_t rat; // number of added rat clauses
|
|
105
|
+
|
|
106
|
+
int64_t deleted; // number of deleted clauses
|
|
107
|
+
int64_t finalized; // number of finalized clauses
|
|
108
|
+
|
|
109
|
+
int64_t insertions; // number of clauses added to hash table
|
|
110
|
+
int64_t collisions; // number of hash collisions in 'find'
|
|
111
|
+
int64_t searches; // number of searched clauses in 'find'
|
|
112
|
+
|
|
113
|
+
int64_t checks; // number of implication checks
|
|
114
|
+
|
|
115
|
+
int64_t collections; // garbage collections
|
|
116
|
+
|
|
117
|
+
} stats;
|
|
118
|
+
|
|
119
|
+
public:
|
|
120
|
+
LratChecker (Internal *);
|
|
121
|
+
virtual ~LratChecker ();
|
|
122
|
+
|
|
123
|
+
void connect_internal (Internal *i) override;
|
|
124
|
+
void begin_proof (int64_t) override;
|
|
125
|
+
|
|
126
|
+
void add_original_clause (int64_t, bool, const std::vector<int> &,
|
|
127
|
+
bool restore) override;
|
|
128
|
+
void restore_clause (int64_t, const std::vector<int> &);
|
|
129
|
+
|
|
130
|
+
// check the proof chain for the new clause and add it to the checker
|
|
131
|
+
void add_derived_clause (int64_t, bool, int, const std::vector<int> &,
|
|
132
|
+
const std::vector<int64_t> &) override;
|
|
133
|
+
|
|
134
|
+
// check if the clause is present and delete it from the checker
|
|
135
|
+
void delete_clause (int64_t, bool, const std::vector<int> &) override;
|
|
136
|
+
// check if the clause is present and delete it from the checker
|
|
137
|
+
void weaken_minus (int64_t, const std::vector<int> &) override;
|
|
138
|
+
|
|
139
|
+
// check if the clause is present and delete it from the checker
|
|
140
|
+
void finalize_clause (int64_t, const std::vector<int> &) override;
|
|
141
|
+
|
|
142
|
+
// check the proof chain of the assumption clause and delete it
|
|
143
|
+
// immediately also check that they contain only assumptions and
|
|
144
|
+
// constraints
|
|
145
|
+
void add_assumption_clause (int64_t, const std::vector<int> &,
|
|
146
|
+
const std::vector<int64_t> &) override;
|
|
147
|
+
|
|
148
|
+
// mark lit as assumption
|
|
149
|
+
void add_assumption (int) override;
|
|
150
|
+
|
|
151
|
+
// mark lits as constraint
|
|
152
|
+
void add_constraint (const std::vector<int> &) override;
|
|
153
|
+
|
|
154
|
+
void reset_assumptions () override;
|
|
155
|
+
|
|
156
|
+
// check if all clauses have been deleted
|
|
157
|
+
void report_status (int, int64_t) override;
|
|
158
|
+
|
|
159
|
+
void conclude_unsat (ConclusionType,
|
|
160
|
+
const std::vector<int64_t> &) override;
|
|
161
|
+
|
|
162
|
+
void print_stats () override;
|
|
163
|
+
void dump (); // for debugging purposes only
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
} // namespace CaDiCaL
|
|
167
|
+
|
|
168
|
+
#endif
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#include "internal.hpp"
|
|
2
|
+
|
|
3
|
+
#include <limits.h>
|
|
4
|
+
|
|
5
|
+
namespace CaDiCaL {
|
|
6
|
+
|
|
7
|
+
/*------------------------------------------------------------------------*/
|
|
8
|
+
|
|
9
|
+
LratTracer::LratTracer (Internal *i, File *f, bool b)
|
|
10
|
+
: internal (i), file (f), binary (b)
|
|
11
|
+
#ifndef QUIET
|
|
12
|
+
,
|
|
13
|
+
added (0), deleted (0)
|
|
14
|
+
#endif
|
|
15
|
+
,
|
|
16
|
+
latest_id (0) {
|
|
17
|
+
(void) internal;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
void LratTracer::connect_internal (Internal *i) {
|
|
21
|
+
internal = i;
|
|
22
|
+
file->connect_internal (internal);
|
|
23
|
+
LOG ("LRAT TRACER connected to internal");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
LratTracer::~LratTracer () {
|
|
27
|
+
LOG ("LRAT TRACER delete");
|
|
28
|
+
delete file;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/*------------------------------------------------------------------------*/
|
|
32
|
+
|
|
33
|
+
inline void LratTracer::put_binary_zero () {
|
|
34
|
+
assert (binary);
|
|
35
|
+
assert (file);
|
|
36
|
+
file->put ((unsigned char) 0);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
inline void LratTracer::put_binary_lit (int lit) {
|
|
40
|
+
assert (binary);
|
|
41
|
+
assert (file);
|
|
42
|
+
assert (lit != INT_MIN);
|
|
43
|
+
unsigned idx = abs (lit);
|
|
44
|
+
assert (idx < (1u << 31));
|
|
45
|
+
unsigned x = 2 * idx + (lit < 0);
|
|
46
|
+
unsigned char ch;
|
|
47
|
+
while (x & ~0x7f) {
|
|
48
|
+
ch = (x & 0x7f) | 0x80;
|
|
49
|
+
file->put (ch);
|
|
50
|
+
x >>= 7;
|
|
51
|
+
}
|
|
52
|
+
ch = x;
|
|
53
|
+
file->put (ch);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
inline void LratTracer::put_binary_id (int64_t id) {
|
|
57
|
+
assert (binary);
|
|
58
|
+
assert (file);
|
|
59
|
+
uint64_t x = abs (id);
|
|
60
|
+
x = 2 * x + (id < 0);
|
|
61
|
+
unsigned char ch;
|
|
62
|
+
while (x & ~0x7f) {
|
|
63
|
+
ch = (x & 0x7f) | 0x80;
|
|
64
|
+
file->put (ch);
|
|
65
|
+
x >>= 7;
|
|
66
|
+
}
|
|
67
|
+
ch = x;
|
|
68
|
+
file->put (ch);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/*------------------------------------------------------------------------*/
|
|
72
|
+
|
|
73
|
+
void LratTracer::lrat_add_clause (int64_t id, const vector<int> &clause,
|
|
74
|
+
const vector<int64_t> &chain) {
|
|
75
|
+
if (delete_ids.size ()) {
|
|
76
|
+
if (!binary)
|
|
77
|
+
file->put (latest_id), file->put (" ");
|
|
78
|
+
if (binary)
|
|
79
|
+
file->put ('d');
|
|
80
|
+
else
|
|
81
|
+
file->put ("d ");
|
|
82
|
+
for (auto &did : delete_ids) {
|
|
83
|
+
if (binary)
|
|
84
|
+
put_binary_id (did);
|
|
85
|
+
else
|
|
86
|
+
file->put (did), file->put (" ");
|
|
87
|
+
}
|
|
88
|
+
if (binary)
|
|
89
|
+
put_binary_zero ();
|
|
90
|
+
else
|
|
91
|
+
file->put ("0\n");
|
|
92
|
+
delete_ids.clear ();
|
|
93
|
+
}
|
|
94
|
+
latest_id = id;
|
|
95
|
+
|
|
96
|
+
if (binary)
|
|
97
|
+
file->put ('a'), put_binary_id (id);
|
|
98
|
+
else
|
|
99
|
+
file->put (id), file->put (" ");
|
|
100
|
+
for (const auto &external_lit : clause)
|
|
101
|
+
if (binary)
|
|
102
|
+
put_binary_lit (external_lit);
|
|
103
|
+
else
|
|
104
|
+
file->put (external_lit), file->put (' ');
|
|
105
|
+
if (binary)
|
|
106
|
+
put_binary_zero ();
|
|
107
|
+
else
|
|
108
|
+
file->put ("0 ");
|
|
109
|
+
for (const auto &c : chain)
|
|
110
|
+
if (binary)
|
|
111
|
+
put_binary_id (c);
|
|
112
|
+
else
|
|
113
|
+
file->put (c), file->put (' '); // in proof chain, so they get
|
|
114
|
+
if (binary)
|
|
115
|
+
put_binary_zero (); // since cadical has no rat-steps
|
|
116
|
+
else
|
|
117
|
+
file->put ("0\n"); // this is just 2c here
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
void LratTracer::lrat_delete_clause (int64_t id) {
|
|
121
|
+
delete_ids.push_back (id); // pushing off deletion for later
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*------------------------------------------------------------------------*/
|
|
125
|
+
|
|
126
|
+
void LratTracer::add_derived_clause (int64_t id, bool, int,
|
|
127
|
+
const vector<int> &clause,
|
|
128
|
+
const vector<int64_t> &chain) {
|
|
129
|
+
if (file->closed ())
|
|
130
|
+
return;
|
|
131
|
+
LOG ("LRAT TRACER tracing addition of derived clause");
|
|
132
|
+
lrat_add_clause (id, clause, chain);
|
|
133
|
+
#ifndef QUIET
|
|
134
|
+
added++;
|
|
135
|
+
#endif
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
void LratTracer::delete_clause (int64_t id, bool, const vector<int> &) {
|
|
139
|
+
if (file->closed ())
|
|
140
|
+
return;
|
|
141
|
+
LOG ("LRAT TRACER tracing deletion of clause");
|
|
142
|
+
lrat_delete_clause (id);
|
|
143
|
+
#ifndef QUIET
|
|
144
|
+
deleted++;
|
|
145
|
+
#endif
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
void LratTracer::begin_proof (int64_t id) {
|
|
149
|
+
if (file->closed ())
|
|
150
|
+
return;
|
|
151
|
+
LOG ("LRAT TRACER tracing begin of proof");
|
|
152
|
+
latest_id = id;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/*------------------------------------------------------------------------*/
|
|
156
|
+
|
|
157
|
+
bool LratTracer::closed () { return file->closed (); }
|
|
158
|
+
|
|
159
|
+
#ifndef QUIET
|
|
160
|
+
|
|
161
|
+
void LratTracer::print_statistics () {
|
|
162
|
+
uint64_t bytes = file->bytes ();
|
|
163
|
+
uint64_t total = added + deleted;
|
|
164
|
+
MSG ("LRAT %" PRId64 " added clauses %.2f%%", added,
|
|
165
|
+
percent (added, total));
|
|
166
|
+
MSG ("LRAT %" PRId64 " deleted clauses %.2f%%", deleted,
|
|
167
|
+
percent (deleted, total));
|
|
168
|
+
MSG ("LRAT %" PRId64 " bytes (%.2f MB)", bytes,
|
|
169
|
+
bytes / (double) (1 << 20));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
#endif
|
|
173
|
+
|
|
174
|
+
void LratTracer::close (bool print) {
|
|
175
|
+
assert (!closed ());
|
|
176
|
+
file->close ();
|
|
177
|
+
#ifndef QUIET
|
|
178
|
+
if (print) {
|
|
179
|
+
MSG ("LRAT proof file '%s' closed", file->name ());
|
|
180
|
+
print_statistics ();
|
|
181
|
+
}
|
|
182
|
+
#else
|
|
183
|
+
(void) print;
|
|
184
|
+
#endif
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
void LratTracer::flush (bool print) {
|
|
188
|
+
assert (!closed ());
|
|
189
|
+
file->flush ();
|
|
190
|
+
#ifndef QUIET
|
|
191
|
+
if (print) {
|
|
192
|
+
MSG ("LRAT proof file '%s' flushed", file->name ());
|
|
193
|
+
print_statistics ();
|
|
194
|
+
}
|
|
195
|
+
#else
|
|
196
|
+
(void) print;
|
|
197
|
+
#endif
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
} // namespace CaDiCaL
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#ifndef _lrattracer_h_INCLUDED
|
|
2
|
+
#define _lrattracer_h_INCLUDED
|
|
3
|
+
|
|
4
|
+
#include "file.hpp"
|
|
5
|
+
#include "tracer.hpp"
|
|
6
|
+
|
|
7
|
+
namespace CaDiCaL {
|
|
8
|
+
|
|
9
|
+
class LratTracer : public FileTracer {
|
|
10
|
+
|
|
11
|
+
Internal *internal;
|
|
12
|
+
File *file;
|
|
13
|
+
bool binary;
|
|
14
|
+
|
|
15
|
+
#ifndef QUIET
|
|
16
|
+
int64_t added, deleted;
|
|
17
|
+
#endif
|
|
18
|
+
int64_t latest_id;
|
|
19
|
+
std::vector<int64_t> delete_ids;
|
|
20
|
+
|
|
21
|
+
void put_binary_zero ();
|
|
22
|
+
void put_binary_lit (int external_lit);
|
|
23
|
+
void put_binary_id (int64_t id);
|
|
24
|
+
|
|
25
|
+
// support LRAT
|
|
26
|
+
void lrat_add_clause (int64_t, const std::vector<int> &,
|
|
27
|
+
const std::vector<int64_t> &);
|
|
28
|
+
void lrat_delete_clause (int64_t);
|
|
29
|
+
|
|
30
|
+
public:
|
|
31
|
+
// own and delete 'file'
|
|
32
|
+
LratTracer (Internal *, File *file, bool binary);
|
|
33
|
+
~LratTracer ();
|
|
34
|
+
|
|
35
|
+
void connect_internal (Internal *i) override;
|
|
36
|
+
void begin_proof (int64_t) override;
|
|
37
|
+
|
|
38
|
+
void add_original_clause (int64_t, bool, const std::vector<int> &,
|
|
39
|
+
bool = false) override {} // skip
|
|
40
|
+
|
|
41
|
+
void add_derived_clause (int64_t, bool, int, const std::vector<int> &,
|
|
42
|
+
const std::vector<int64_t> &) override;
|
|
43
|
+
|
|
44
|
+
void delete_clause (int64_t, bool, const std::vector<int> &) override;
|
|
45
|
+
|
|
46
|
+
void finalize_clause (int64_t, const std::vector<int> &) override {
|
|
47
|
+
} // skip
|
|
48
|
+
|
|
49
|
+
void report_status (int, int64_t) override {} // skip
|
|
50
|
+
|
|
51
|
+
#ifndef QUIET
|
|
52
|
+
void print_statistics ();
|
|
53
|
+
#endif
|
|
54
|
+
bool closed () override;
|
|
55
|
+
void close (bool) override;
|
|
56
|
+
void flush (bool) override;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
} // namespace CaDiCaL
|
|
60
|
+
|
|
61
|
+
#endif
|