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,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
|