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,89 @@
1
+ #include "internal.hpp"
2
+
3
+ namespace CaDiCaL {
4
+
5
+ void Format::enlarge () {
6
+ char *old = buffer;
7
+ buffer = new char[size = size ? 2 * size : 1];
8
+ memcpy (buffer, old, count);
9
+ delete[] old;
10
+ }
11
+
12
+ inline void Format::push_char (char ch) {
13
+ if (size == count)
14
+ enlarge ();
15
+ buffer[count++] = ch;
16
+ }
17
+
18
+ void Format::push_string (const char *s) {
19
+ char ch;
20
+ while ((ch = *s++))
21
+ push_char (ch);
22
+ }
23
+
24
+ void Format::push_int (int d) {
25
+ char tmp[16];
26
+ snprintf (tmp, sizeof tmp, "%d", d);
27
+ push_string (tmp);
28
+ }
29
+
30
+ void Format::push_uint64 (uint64_t u) {
31
+ char tmp[16];
32
+ snprintf (tmp, sizeof tmp, "%" PRIu64, u);
33
+ push_string (tmp);
34
+ }
35
+
36
+ static bool match_format (const char *&str, const char *pattern) {
37
+ assert (pattern);
38
+ const char *p = str;
39
+ const char *q = pattern;
40
+ while (*q)
41
+ if (*q++ != *p++)
42
+ return false;
43
+ str = p;
44
+ return true;
45
+ }
46
+
47
+ const char *Format::add (const char *fmt, va_list &ap) {
48
+ const char *p = fmt;
49
+ char ch;
50
+ while ((ch = *p++)) {
51
+ if (ch != '%')
52
+ push_char (ch);
53
+ else if (*p == 'c')
54
+ push_char (va_arg (ap, int)), p++;
55
+ else if (*p == 'd')
56
+ push_int (va_arg (ap, int)), p++;
57
+ else if (*p == 's')
58
+ push_string (va_arg (ap, const char *)), p++;
59
+ else if (match_format (p, PRIu64))
60
+ push_uint64 (va_arg (ap, uint64_t));
61
+ else {
62
+ push_char ('%');
63
+ push_char (*p);
64
+ break;
65
+ } // unsupported
66
+ }
67
+ push_char (0);
68
+ count--; // thus automatic append in subsequent calls.
69
+ return buffer;
70
+ }
71
+
72
+ const char *Format::init (const char *fmt, ...) {
73
+ count = 0;
74
+ va_list ap;
75
+ va_start (ap, fmt);
76
+ const char *res = add (fmt, ap);
77
+ va_end (ap);
78
+ return res;
79
+ }
80
+
81
+ const char *Format::append (const char *fmt, ...) {
82
+ va_list ap;
83
+ va_start (ap, fmt);
84
+ const char *res = add (fmt, ap);
85
+ va_end (ap);
86
+ return res;
87
+ }
88
+
89
+ } // namespace CaDiCaL
@@ -0,0 +1,36 @@
1
+ #ifndef _format_hpp_INCLUDED
2
+ #define _format_hpp_INCLUDED
3
+
4
+ #include <cstdarg>
5
+ #include <cstdint>
6
+
7
+ namespace CaDiCaL {
8
+
9
+ // This class provides a 'printf' style formatting utility.
10
+ // Only '%c', '%d', '%s' are supported at this point.
11
+ // It is used to capture and save an error message.
12
+
13
+ class Format {
14
+ char *buffer;
15
+ int64_t count, size;
16
+ void enlarge ();
17
+ void push_char (char);
18
+ void push_string (const char *);
19
+ void push_int (int);
20
+ void push_uint64 (uint64_t);
21
+ const char *add (const char *fmt, va_list &);
22
+
23
+ public:
24
+ Format () : buffer (0), count (0), size (0) {}
25
+ ~Format () {
26
+ if (buffer)
27
+ delete[] buffer;
28
+ }
29
+ const char *init (const char *fmt, ...) CADICAL_ATTRIBUTE_FORMAT (2, 3);
30
+ const char *append (const char *fmt, ...) CADICAL_ATTRIBUTE_FORMAT (2, 3);
31
+ operator const char * () const { return count ? buffer : 0; }
32
+ };
33
+
34
+ } // namespace CaDiCaL
35
+
36
+ #endif
@@ -0,0 +1,277 @@
1
+ #include "internal.hpp"
2
+
3
+ namespace CaDiCaL {
4
+
5
+ /*------------------------------------------------------------------------*/
6
+
7
+ FratTracer::FratTracer (Internal *i, File *f, bool b, bool a)
8
+ : internal (i), file (f), binary (b), with_antecedents (a)
9
+ #ifndef QUIET
10
+ ,
11
+ added (0), deleted (0), finalized (0), original (0)
12
+ #endif
13
+ {
14
+ (void) internal;
15
+ }
16
+
17
+ void FratTracer::connect_internal (Internal *i) {
18
+ internal = i;
19
+ file->connect_internal (internal);
20
+ LOG ("FRAT TRACER connected to internal");
21
+ }
22
+
23
+ FratTracer::~FratTracer () {
24
+ LOG ("FRAT TRACER delete");
25
+ delete file;
26
+ }
27
+
28
+ /*------------------------------------------------------------------------*/
29
+
30
+ inline void FratTracer::put_binary_zero () {
31
+ assert (binary);
32
+ assert (file);
33
+ file->put ((unsigned char) 0);
34
+ }
35
+
36
+ inline void FratTracer::put_binary_lit (int lit) {
37
+ assert (binary);
38
+ assert (file);
39
+ assert (lit != INT_MIN);
40
+ unsigned x = 2 * abs (lit) + (lit < 0);
41
+ unsigned char ch;
42
+ while (x & ~0x7f) {
43
+ ch = (x & 0x7f) | 0x80;
44
+ file->put (ch);
45
+ x >>= 7;
46
+ }
47
+ ch = x;
48
+ file->put (ch);
49
+ }
50
+
51
+ inline void FratTracer::put_binary_id (int64_t id, bool can_be_negative) {
52
+ assert (binary);
53
+ assert (file);
54
+ uint64_t x = abs (id);
55
+ if (can_be_negative) {
56
+ x = 2 * x + (id < 0);
57
+ }
58
+ unsigned char ch;
59
+ while (x & ~0x7f) {
60
+ ch = (x & 0x7f) | 0x80;
61
+ file->put (ch);
62
+ x >>= 7;
63
+ }
64
+ ch = x;
65
+ file->put (ch);
66
+ }
67
+
68
+ /*------------------------------------------------------------------------*/
69
+
70
+ void FratTracer::frat_add_original_clause (int64_t id,
71
+ const vector<int> &clause) {
72
+ if (binary)
73
+ file->put ('o');
74
+ else
75
+ file->put ("o ");
76
+ if (binary)
77
+ put_binary_id (id);
78
+ else
79
+ file->put (id), file->put (" ");
80
+ for (const auto &external_lit : clause)
81
+ if (binary)
82
+ put_binary_lit (external_lit);
83
+ else
84
+ file->put (external_lit), file->put (' ');
85
+ if (binary)
86
+ put_binary_zero ();
87
+ else
88
+ file->put ("0\n");
89
+ }
90
+
91
+ void FratTracer::frat_add_derived_clause (int64_t id,
92
+ const vector<int> &clause) {
93
+ if (binary)
94
+ file->put ('a');
95
+ else
96
+ file->put ("a ");
97
+ if (binary)
98
+ put_binary_id (id);
99
+ else
100
+ file->put (id), file->put (" ");
101
+ for (const auto &external_lit : clause)
102
+ if (binary)
103
+ put_binary_lit (external_lit);
104
+ else
105
+ file->put (external_lit), file->put (' ');
106
+ if (binary)
107
+ put_binary_zero ();
108
+ else
109
+ file->put ("0\n");
110
+ }
111
+
112
+ void FratTracer::frat_add_derived_clause (int64_t id,
113
+ const vector<int> &clause,
114
+ const vector<int64_t> &chain) {
115
+ if (binary)
116
+ file->put ('a');
117
+ else
118
+ file->put ("a ");
119
+ if (binary)
120
+ put_binary_id (id);
121
+ else
122
+ file->put (id), file->put (" ");
123
+ for (const auto &external_lit : clause)
124
+ if (binary)
125
+ put_binary_lit (external_lit);
126
+ else
127
+ file->put (external_lit), file->put (' ');
128
+ if (binary)
129
+ put_binary_zero (), file->put ('l');
130
+ else
131
+ file->put ("0 l ");
132
+ for (const auto &c : chain)
133
+ if (binary)
134
+ put_binary_id (c, true); // LRAT can have negative ids
135
+ else
136
+ file->put (c), file->put (' '); // in proof chain, so they get
137
+ if (binary)
138
+ put_binary_zero (); // since cadical has no rat-steps
139
+ else
140
+ file->put ("0\n"); // this is just 2c here
141
+ }
142
+
143
+ void FratTracer::frat_delete_clause (int64_t id,
144
+ const vector<int> &clause) {
145
+ if (binary)
146
+ file->put ('d');
147
+ else
148
+ file->put ("d ");
149
+ if (binary)
150
+ put_binary_id (id);
151
+ else
152
+ file->put (id), file->put (" ");
153
+ for (const auto &external_lit : clause)
154
+ if (binary)
155
+ put_binary_lit (external_lit);
156
+ else
157
+ file->put (external_lit), file->put (' ');
158
+ if (binary)
159
+ put_binary_zero ();
160
+ else
161
+ file->put ("0\n");
162
+ }
163
+
164
+ void FratTracer::frat_finalize_clause (int64_t id,
165
+ const vector<int> &clause) {
166
+ if (binary)
167
+ file->put ('f');
168
+ else
169
+ file->put ("f ");
170
+ if (binary)
171
+ put_binary_id (id);
172
+ else
173
+ file->put (id), file->put (" ");
174
+ for (const auto &external_lit : clause)
175
+ if (binary)
176
+ put_binary_lit (external_lit);
177
+ else
178
+ file->put (external_lit), file->put (' ');
179
+ if (binary)
180
+ put_binary_zero ();
181
+ else
182
+ file->put ("0\n");
183
+ }
184
+
185
+ /*------------------------------------------------------------------------*/
186
+
187
+ void FratTracer::add_original_clause (int64_t id, bool,
188
+ const vector<int> &clause, bool) {
189
+ if (file->closed ())
190
+ return;
191
+ LOG ("FRAT TRACER tracing addition of original clause");
192
+ frat_add_original_clause (id, clause);
193
+ }
194
+
195
+ void FratTracer::add_derived_clause (int64_t id, bool, int,
196
+ const vector<int> &clause,
197
+ const vector<int64_t> &chain) {
198
+ if (file->closed ())
199
+ return;
200
+ LOG ("FRAT TRACER tracing addition of derived clause");
201
+ if (with_antecedents)
202
+ frat_add_derived_clause (id, clause, chain);
203
+ else
204
+ frat_add_derived_clause (id, clause);
205
+ #ifndef QUIET
206
+ added++;
207
+ #endif
208
+ }
209
+
210
+ void FratTracer::delete_clause (int64_t id, bool,
211
+ const vector<int> &clause) {
212
+ if (file->closed ())
213
+ return;
214
+ LOG ("FRAT TRACER tracing deletion of clause");
215
+ frat_delete_clause (id, clause);
216
+ #ifndef QUIET
217
+ deleted++;
218
+ #endif
219
+ }
220
+
221
+ void FratTracer::finalize_clause (int64_t id, const vector<int> &clause) {
222
+ if (file->closed ())
223
+ return;
224
+ LOG ("FRAT TRACER tracing finalization of clause");
225
+ frat_finalize_clause (id, clause);
226
+ }
227
+
228
+ /*------------------------------------------------------------------------*/
229
+
230
+ bool FratTracer::closed () { return file->closed (); }
231
+
232
+ #ifndef QUIET
233
+
234
+ void FratTracer::print_statistics () {
235
+ uint64_t bytes = file->bytes ();
236
+ uint64_t total = original + added + deleted + finalized;
237
+ MSG ("FRAT %" PRId64 " original clauses %.2f%%", original,
238
+ percent (original, total));
239
+ MSG ("FRAT %" PRId64 " added clauses %.2f%%", added,
240
+ percent (added, total));
241
+ MSG ("FRAT %" PRId64 " deleted clauses %.2f%%", deleted,
242
+ percent (deleted, total));
243
+ MSG ("FRAT %" PRId64 " finalized clauses %.2f%%", finalized,
244
+ percent (finalized, total));
245
+ MSG ("FRAT %" PRId64 " bytes (%.2f MB)", bytes,
246
+ bytes / (double) (1 << 20));
247
+ }
248
+
249
+ #endif
250
+
251
+ void FratTracer::close (bool print) {
252
+ assert (!closed ());
253
+ file->close ();
254
+ #ifndef QUIET
255
+ if (print) {
256
+ MSG ("FRAT proof file '%s' closed", file->name ());
257
+ print_statistics ();
258
+ }
259
+ #else
260
+ (void) print;
261
+ #endif
262
+ }
263
+
264
+ void FratTracer::flush (bool print) {
265
+ assert (!closed ());
266
+ file->flush ();
267
+ #ifndef QUIET
268
+ if (print) {
269
+ MSG ("FRAT proof file '%s' flushed", file->name ());
270
+ print_statistics ();
271
+ }
272
+ #else
273
+ (void) print;
274
+ #endif
275
+ }
276
+
277
+ } // namespace CaDiCaL
@@ -0,0 +1,67 @@
1
+ #ifndef _frattracer_h_INCLUDED
2
+ #define _frattracer_h_INCLUDED
3
+
4
+ #include "file.hpp"
5
+ #include "tracer.hpp"
6
+
7
+ #include <vector>
8
+
9
+ namespace CaDiCaL {
10
+
11
+ class FratTracer : public FileTracer {
12
+
13
+ Internal *internal;
14
+ File *file;
15
+ bool binary;
16
+ bool with_antecedents;
17
+
18
+ #ifndef QUIET
19
+ int64_t added, deleted;
20
+ int64_t finalized, original;
21
+ #endif
22
+
23
+ std::vector<int64_t> delete_ids;
24
+
25
+ void put_binary_zero ();
26
+ void put_binary_lit (int external_lit);
27
+ void put_binary_id (int64_t id, bool = false);
28
+
29
+ // support FRAT
30
+ void frat_add_original_clause (int64_t, const std::vector<int> &);
31
+ void frat_add_derived_clause (int64_t, const std::vector<int> &);
32
+ void frat_add_derived_clause (int64_t, const std::vector<int> &,
33
+ const std::vector<int64_t> &);
34
+ void frat_delete_clause (int64_t, const std::vector<int> &);
35
+ void frat_finalize_clause (int64_t, const std::vector<int> &);
36
+
37
+ public:
38
+ // own and delete 'file'
39
+ FratTracer (Internal *, File *file, bool binary, bool antecedents);
40
+ ~FratTracer ();
41
+
42
+ void connect_internal (Internal *i) override;
43
+ void begin_proof (int64_t) override {} // skip
44
+
45
+ void add_original_clause (int64_t, bool, const std::vector<int> &,
46
+ bool = false) override;
47
+
48
+ void add_derived_clause (int64_t, bool, int, const std::vector<int> &,
49
+ const std::vector<int64_t> &) override;
50
+
51
+ void delete_clause (int64_t, bool, const std::vector<int> &) override;
52
+
53
+ void finalize_clause (int64_t, const std::vector<int> &) override;
54
+
55
+ void report_status (int, int64_t) override {} // skip
56
+
57
+ #ifndef QUIET
58
+ void print_statistics ();
59
+ #endif
60
+ bool closed () override;
61
+ void close (bool) override;
62
+ void flush (bool) override;
63
+ };
64
+
65
+ } // namespace CaDiCaL
66
+
67
+ #endif