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.
Files changed (171) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +26 -0
  3. data/README.md +101 -0
  4. data/ext/cadical/cadical/LICENSE +28 -0
  5. data/ext/cadical/cadical/README.md +65 -0
  6. data/ext/cadical/cadical/VERSION +1 -0
  7. data/ext/cadical/cadical/src/analyze.cpp +1360 -0
  8. data/ext/cadical/cadical/src/arena.cpp +30 -0
  9. data/ext/cadical/cadical/src/arena.hpp +105 -0
  10. data/ext/cadical/cadical/src/assume.cpp +616 -0
  11. data/ext/cadical/cadical/src/averages.cpp +34 -0
  12. data/ext/cadical/cadical/src/averages.hpp +37 -0
  13. data/ext/cadical/cadical/src/backbone.cpp +631 -0
  14. data/ext/cadical/cadical/src/backtrack.cpp +177 -0
  15. data/ext/cadical/cadical/src/backward.cpp +231 -0
  16. data/ext/cadical/cadical/src/bins.cpp +22 -0
  17. data/ext/cadical/cadical/src/bins.hpp +22 -0
  18. data/ext/cadical/cadical/src/block.cpp +824 -0
  19. data/ext/cadical/cadical/src/block.hpp +37 -0
  20. data/ext/cadical/cadical/src/cadical.cpp +1026 -0
  21. data/ext/cadical/cadical/src/cadical.hpp +1419 -0
  22. data/ext/cadical/cadical/src/ccadical.cpp +208 -0
  23. data/ext/cadical/cadical/src/ccadical.h +74 -0
  24. data/ext/cadical/cadical/src/checker.cpp +649 -0
  25. data/ext/cadical/cadical/src/checker.hpp +173 -0
  26. data/ext/cadical/cadical/src/clause.cpp +689 -0
  27. data/ext/cadical/cadical/src/clause.hpp +190 -0
  28. data/ext/cadical/cadical/src/collect.cpp +545 -0
  29. data/ext/cadical/cadical/src/compact.cpp +550 -0
  30. data/ext/cadical/cadical/src/condition.cpp +940 -0
  31. data/ext/cadical/cadical/src/config.cpp +101 -0
  32. data/ext/cadical/cadical/src/config.hpp +20 -0
  33. data/ext/cadical/cadical/src/congruence.cpp +7880 -0
  34. data/ext/cadical/cadical/src/congruence.hpp +757 -0
  35. data/ext/cadical/cadical/src/constrain.cpp +64 -0
  36. data/ext/cadical/cadical/src/contract.cpp +27 -0
  37. data/ext/cadical/cadical/src/contract.hpp +139 -0
  38. data/ext/cadical/cadical/src/cover.cpp +704 -0
  39. data/ext/cadical/cadical/src/cover.hpp +34 -0
  40. data/ext/cadical/cadical/src/decide.cpp +347 -0
  41. data/ext/cadical/cadical/src/decompose.cpp +738 -0
  42. data/ext/cadical/cadical/src/decompose.hpp +23 -0
  43. data/ext/cadical/cadical/src/deduplicate.cpp +275 -0
  44. data/ext/cadical/cadical/src/definition.cpp +283 -0
  45. data/ext/cadical/cadical/src/delay.hpp +38 -0
  46. data/ext/cadical/cadical/src/drattracer.cpp +153 -0
  47. data/ext/cadical/cadical/src/drattracer.hpp +55 -0
  48. data/ext/cadical/cadical/src/elim.cpp +1171 -0
  49. data/ext/cadical/cadical/src/elim.hpp +53 -0
  50. data/ext/cadical/cadical/src/elimfast.cpp +570 -0
  51. data/ext/cadical/cadical/src/ema.cpp +95 -0
  52. data/ext/cadical/cadical/src/ema.hpp +68 -0
  53. data/ext/cadical/cadical/src/extend.cpp +289 -0
  54. data/ext/cadical/cadical/src/external.cpp +1034 -0
  55. data/ext/cadical/cadical/src/external.hpp +487 -0
  56. data/ext/cadical/cadical/src/external_propagate.cpp +1316 -0
  57. data/ext/cadical/cadical/src/factor.cpp +1011 -0
  58. data/ext/cadical/cadical/src/factor.hpp +54 -0
  59. data/ext/cadical/cadical/src/file.cpp +506 -0
  60. data/ext/cadical/cadical/src/file.hpp +210 -0
  61. data/ext/cadical/cadical/src/flags.cpp +135 -0
  62. data/ext/cadical/cadical/src/flags.hpp +93 -0
  63. data/ext/cadical/cadical/src/flip.cpp +269 -0
  64. data/ext/cadical/cadical/src/format.cpp +89 -0
  65. data/ext/cadical/cadical/src/format.hpp +36 -0
  66. data/ext/cadical/cadical/src/frattracer.cpp +277 -0
  67. data/ext/cadical/cadical/src/frattracer.hpp +67 -0
  68. data/ext/cadical/cadical/src/gates.cpp +766 -0
  69. data/ext/cadical/cadical/src/heap.hpp +212 -0
  70. data/ext/cadical/cadical/src/idruptracer.cpp +566 -0
  71. data/ext/cadical/cadical/src/idruptracer.hpp +112 -0
  72. data/ext/cadical/cadical/src/instantiate.cpp +365 -0
  73. data/ext/cadical/cadical/src/instantiate.hpp +45 -0
  74. data/ext/cadical/cadical/src/internal.cpp +1265 -0
  75. data/ext/cadical/cadical/src/internal.hpp +1941 -0
  76. data/ext/cadical/cadical/src/inttypes.hpp +34 -0
  77. data/ext/cadical/cadical/src/ipasir.cpp +47 -0
  78. data/ext/cadical/cadical/src/ipasir.h +37 -0
  79. data/ext/cadical/cadical/src/kitten.c +2599 -0
  80. data/ext/cadical/cadical/src/kitten.h +97 -0
  81. data/ext/cadical/cadical/src/level.hpp +33 -0
  82. data/ext/cadical/cadical/src/lidruptracer.cpp +657 -0
  83. data/ext/cadical/cadical/src/lidruptracer.hpp +122 -0
  84. data/ext/cadical/cadical/src/limit.cpp +146 -0
  85. data/ext/cadical/cadical/src/limit.hpp +168 -0
  86. data/ext/cadical/cadical/src/logging.cpp +214 -0
  87. data/ext/cadical/cadical/src/logging.hpp +98 -0
  88. data/ext/cadical/cadical/src/lookahead.cpp +520 -0
  89. data/ext/cadical/cadical/src/lratchecker.cpp +833 -0
  90. data/ext/cadical/cadical/src/lratchecker.hpp +168 -0
  91. data/ext/cadical/cadical/src/lrattracer.cpp +200 -0
  92. data/ext/cadical/cadical/src/lrattracer.hpp +61 -0
  93. data/ext/cadical/cadical/src/lucky.cpp +506 -0
  94. data/ext/cadical/cadical/src/message.cpp +218 -0
  95. data/ext/cadical/cadical/src/message.hpp +65 -0
  96. data/ext/cadical/cadical/src/minimize.cpp +224 -0
  97. data/ext/cadical/cadical/src/mobical.cpp +5588 -0
  98. data/ext/cadical/cadical/src/occs.cpp +52 -0
  99. data/ext/cadical/cadical/src/occs.hpp +36 -0
  100. data/ext/cadical/cadical/src/options.cpp +359 -0
  101. data/ext/cadical/cadical/src/options.hpp +442 -0
  102. data/ext/cadical/cadical/src/parse.cpp +471 -0
  103. data/ext/cadical/cadical/src/parse.hpp +75 -0
  104. data/ext/cadical/cadical/src/phases.cpp +56 -0
  105. data/ext/cadical/cadical/src/phases.hpp +19 -0
  106. data/ext/cadical/cadical/src/probe.cpp +990 -0
  107. data/ext/cadical/cadical/src/profile.cpp +107 -0
  108. data/ext/cadical/cadical/src/profile.hpp +283 -0
  109. data/ext/cadical/cadical/src/proof.cpp +691 -0
  110. data/ext/cadical/cadical/src/proof.hpp +125 -0
  111. data/ext/cadical/cadical/src/propagate.cpp +584 -0
  112. data/ext/cadical/cadical/src/queue.cpp +90 -0
  113. data/ext/cadical/cadical/src/queue.hpp +74 -0
  114. data/ext/cadical/cadical/src/radix.hpp +180 -0
  115. data/ext/cadical/cadical/src/random.cpp +207 -0
  116. data/ext/cadical/cadical/src/random.h +44 -0
  117. data/ext/cadical/cadical/src/random.hpp +98 -0
  118. data/ext/cadical/cadical/src/range.hpp +125 -0
  119. data/ext/cadical/cadical/src/reap.cpp +127 -0
  120. data/ext/cadical/cadical/src/reap.hpp +28 -0
  121. data/ext/cadical/cadical/src/reduce.cpp +278 -0
  122. data/ext/cadical/cadical/src/reluctant.hpp +82 -0
  123. data/ext/cadical/cadical/src/rephase.cpp +402 -0
  124. data/ext/cadical/cadical/src/report.cpp +313 -0
  125. data/ext/cadical/cadical/src/resources.cpp +160 -0
  126. data/ext/cadical/cadical/src/resources.hpp +16 -0
  127. data/ext/cadical/cadical/src/restart.cpp +178 -0
  128. data/ext/cadical/cadical/src/restore.cpp +267 -0
  129. data/ext/cadical/cadical/src/score.cpp +51 -0
  130. data/ext/cadical/cadical/src/score.hpp +16 -0
  131. data/ext/cadical/cadical/src/shrink.cpp +507 -0
  132. data/ext/cadical/cadical/src/signal.cpp +136 -0
  133. data/ext/cadical/cadical/src/signal.hpp +33 -0
  134. data/ext/cadical/cadical/src/solution.cpp +50 -0
  135. data/ext/cadical/cadical/src/solver.cpp +1871 -0
  136. data/ext/cadical/cadical/src/stable.cpp +31 -0
  137. data/ext/cadical/cadical/src/stack.h +110 -0
  138. data/ext/cadical/cadical/src/stats.cpp +920 -0
  139. data/ext/cadical/cadical/src/stats.hpp +418 -0
  140. data/ext/cadical/cadical/src/subsume.cpp +645 -0
  141. data/ext/cadical/cadical/src/sweep.cpp +1960 -0
  142. data/ext/cadical/cadical/src/sweep.hpp +61 -0
  143. data/ext/cadical/cadical/src/terminal.cpp +38 -0
  144. data/ext/cadical/cadical/src/terminal.hpp +96 -0
  145. data/ext/cadical/cadical/src/ternary.cpp +450 -0
  146. data/ext/cadical/cadical/src/testing.hpp +24 -0
  147. data/ext/cadical/cadical/src/tier.cpp +189 -0
  148. data/ext/cadical/cadical/src/tracer.hpp +186 -0
  149. data/ext/cadical/cadical/src/transred.cpp +253 -0
  150. data/ext/cadical/cadical/src/unstable.cpp +29 -0
  151. data/ext/cadical/cadical/src/util.cpp +129 -0
  152. data/ext/cadical/cadical/src/util.hpp +181 -0
  153. data/ext/cadical/cadical/src/var.cpp +39 -0
  154. data/ext/cadical/cadical/src/var.hpp +22 -0
  155. data/ext/cadical/cadical/src/veripbtracer.cpp +427 -0
  156. data/ext/cadical/cadical/src/veripbtracer.hpp +106 -0
  157. data/ext/cadical/cadical/src/version.cpp +107 -0
  158. data/ext/cadical/cadical/src/version.hpp +13 -0
  159. data/ext/cadical/cadical/src/vivify.cpp +1893 -0
  160. data/ext/cadical/cadical/src/vivify.hpp +50 -0
  161. data/ext/cadical/cadical/src/walk.cpp +1088 -0
  162. data/ext/cadical/cadical/src/walk.hpp +91 -0
  163. data/ext/cadical/cadical/src/walk_full_occs.cpp +966 -0
  164. data/ext/cadical/cadical/src/warmup.cpp +403 -0
  165. data/ext/cadical/cadical/src/watch.cpp +126 -0
  166. data/ext/cadical/cadical/src/watch.hpp +77 -0
  167. data/ext/cadical/cadical_ext.c +778 -0
  168. data/ext/cadical/extconf.rb +26 -0
  169. data/lib/cadical/version.rb +3 -0
  170. data/lib/cadical.rb +12 -0
  171. 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