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,65 @@
|
|
|
1
|
+
#ifndef _message_h_INCLUDED
|
|
2
|
+
#define _message_h_INCLUDED
|
|
3
|
+
|
|
4
|
+
/*------------------------------------------------------------------------*/
|
|
5
|
+
|
|
6
|
+
// Macros for compact message code.
|
|
7
|
+
|
|
8
|
+
#ifndef QUIET
|
|
9
|
+
|
|
10
|
+
#define LINE() \
|
|
11
|
+
do { \
|
|
12
|
+
if (internal) \
|
|
13
|
+
internal->message (); \
|
|
14
|
+
} while (0)
|
|
15
|
+
|
|
16
|
+
#define MSG(...) \
|
|
17
|
+
do { \
|
|
18
|
+
if (internal) \
|
|
19
|
+
internal->message (__VA_ARGS__); \
|
|
20
|
+
} while (0)
|
|
21
|
+
|
|
22
|
+
#define PHASE(...) \
|
|
23
|
+
do { \
|
|
24
|
+
if (internal) \
|
|
25
|
+
internal->phase (__VA_ARGS__); \
|
|
26
|
+
} while (0)
|
|
27
|
+
|
|
28
|
+
#define SECTION(...) \
|
|
29
|
+
do { \
|
|
30
|
+
if (internal) \
|
|
31
|
+
internal->section (__VA_ARGS__); \
|
|
32
|
+
} while (0)
|
|
33
|
+
|
|
34
|
+
#define VERBOSE(...) \
|
|
35
|
+
do { \
|
|
36
|
+
if (internal) \
|
|
37
|
+
internal->verbose (__VA_ARGS__); \
|
|
38
|
+
} while (0)
|
|
39
|
+
|
|
40
|
+
#else
|
|
41
|
+
|
|
42
|
+
#define LINE() \
|
|
43
|
+
do { \
|
|
44
|
+
} while (0)
|
|
45
|
+
#define MSG(...) \
|
|
46
|
+
do { \
|
|
47
|
+
} while (0)
|
|
48
|
+
#define PHASE(...) \
|
|
49
|
+
do { \
|
|
50
|
+
} while (0)
|
|
51
|
+
#define SECTION(...) \
|
|
52
|
+
do { \
|
|
53
|
+
} while (0)
|
|
54
|
+
#define VERBOSE(...) \
|
|
55
|
+
do { \
|
|
56
|
+
} while (0)
|
|
57
|
+
|
|
58
|
+
#endif
|
|
59
|
+
|
|
60
|
+
#define FATAL fatal
|
|
61
|
+
#define WARNING(...) internal->warning (__VA_ARGS__)
|
|
62
|
+
|
|
63
|
+
/*------------------------------------------------------------------------*/
|
|
64
|
+
|
|
65
|
+
#endif // ifndef _message_h_INCLUDED
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
#include "internal.hpp"
|
|
2
|
+
|
|
3
|
+
namespace CaDiCaL {
|
|
4
|
+
|
|
5
|
+
// Functions for learned clause minimization. We only have the recursive
|
|
6
|
+
// version, which actually really is implemented recursively. We also
|
|
7
|
+
// played with a derecursified version, which however was more complex and
|
|
8
|
+
// slower. The trick to keep potential stack exhausting recursion under
|
|
9
|
+
// guards is to explicitly limit the recursion depth.
|
|
10
|
+
|
|
11
|
+
// Instead of signatures as in the original implementation in MiniSAT and
|
|
12
|
+
// our corresponding paper, we use the 'poison' idea of Allen Van Gelder to
|
|
13
|
+
// mark unsuccessful removal attempts, then Donald Knuth's idea to abort
|
|
14
|
+
// minimization if only one literal was seen on the level and a new idea of
|
|
15
|
+
// also aborting if the earliest seen literal was assigned afterwards.
|
|
16
|
+
|
|
17
|
+
bool Internal::minimize_literal (int lit, int depth) {
|
|
18
|
+
LOG ("attempt to minimize lit %d at depth %d", lit, depth);
|
|
19
|
+
assert (val (lit) > 0);
|
|
20
|
+
Flags &f = flags (lit);
|
|
21
|
+
Var &v = var (lit);
|
|
22
|
+
if (!v.level || f.removable || f.keep)
|
|
23
|
+
return true;
|
|
24
|
+
if (!v.reason || f.poison || v.level == level)
|
|
25
|
+
return false;
|
|
26
|
+
const Level &l = control[v.level];
|
|
27
|
+
if (!depth && l.seen.count < 2)
|
|
28
|
+
return false; // Don Knuth's idea
|
|
29
|
+
if (v.trail <= l.seen.trail)
|
|
30
|
+
return false; // new early abort
|
|
31
|
+
if (depth > opts.minimizedepth)
|
|
32
|
+
return false;
|
|
33
|
+
bool res = true;
|
|
34
|
+
assert (v.reason);
|
|
35
|
+
if (opts.minimizeticks)
|
|
36
|
+
stats.ticks.search[stable]++;
|
|
37
|
+
if (v.reason == external_reason) {
|
|
38
|
+
assert (!opts.exteagerreasons);
|
|
39
|
+
v.reason = learn_external_reason_clause (lit, 0, true);
|
|
40
|
+
if (!v.reason) {
|
|
41
|
+
assert (!v.level);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
assert (v.reason != external_reason);
|
|
46
|
+
const const_literal_iterator end = v.reason->end ();
|
|
47
|
+
const_literal_iterator i;
|
|
48
|
+
for (i = v.reason->begin (); res && i != end; i++) {
|
|
49
|
+
const int other = *i;
|
|
50
|
+
if (other == lit)
|
|
51
|
+
continue;
|
|
52
|
+
res = minimize_literal (-other, depth + 1);
|
|
53
|
+
}
|
|
54
|
+
if (res)
|
|
55
|
+
f.removable = true;
|
|
56
|
+
else
|
|
57
|
+
f.poison = true;
|
|
58
|
+
minimized.push_back (lit);
|
|
59
|
+
if (!depth) {
|
|
60
|
+
LOG ("minimizing %d %s", lit, res ? "succeeded" : "failed");
|
|
61
|
+
}
|
|
62
|
+
return res;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Sorting the clause before minimization with respect to the trail order
|
|
66
|
+
// (literals with smaller trail height first) is necessary but natural and
|
|
67
|
+
// might help to minimize the required recursion depth too.
|
|
68
|
+
|
|
69
|
+
struct minimize_trail_positive_rank {
|
|
70
|
+
Internal *internal;
|
|
71
|
+
minimize_trail_positive_rank (Internal *s) : internal (s) {}
|
|
72
|
+
typedef unsigned Type;
|
|
73
|
+
Type operator() (const int &a) const {
|
|
74
|
+
assert (internal->val (a));
|
|
75
|
+
return (unsigned) internal->var (a).trail;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
struct minimize_trail_smaller {
|
|
80
|
+
Internal *internal;
|
|
81
|
+
minimize_trail_smaller (Internal *s) : internal (s) {}
|
|
82
|
+
bool operator() (const int &a, const int &b) const {
|
|
83
|
+
return internal->var (a).trail < internal->var (b).trail;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
struct minimize_trail_level_positive_rank {
|
|
88
|
+
Internal *internal;
|
|
89
|
+
minimize_trail_level_positive_rank (Internal *s) : internal (s) {}
|
|
90
|
+
typedef uint64_t Type;
|
|
91
|
+
Type operator() (const int &a) const {
|
|
92
|
+
assert (internal->val (a));
|
|
93
|
+
Var &v = internal->var (a);
|
|
94
|
+
uint64_t res = v.level;
|
|
95
|
+
res <<= 32;
|
|
96
|
+
res |= v.trail;
|
|
97
|
+
return res;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
struct minimize_trail_level_smaller {
|
|
102
|
+
Internal *internal;
|
|
103
|
+
minimize_trail_level_smaller (Internal *s) : internal (s) {}
|
|
104
|
+
bool operator() (const int &a, const int &b) const {
|
|
105
|
+
return minimize_trail_level_positive_rank (internal) (a) <
|
|
106
|
+
minimize_trail_level_positive_rank (internal) (b);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
void Internal::minimize_clause () {
|
|
111
|
+
START (minimize);
|
|
112
|
+
LOG (clause, "minimizing first UIP clause");
|
|
113
|
+
|
|
114
|
+
external->check_learned_clause (); // check 1st UIP learned clause first
|
|
115
|
+
minimize_sort_clause ();
|
|
116
|
+
|
|
117
|
+
assert (minimized.empty ());
|
|
118
|
+
assert (minimize_chain.empty ());
|
|
119
|
+
const auto end = clause.end ();
|
|
120
|
+
auto j = clause.begin (), i = j;
|
|
121
|
+
std::vector<int> stack;
|
|
122
|
+
for (; i != end; i++) {
|
|
123
|
+
if (minimize_literal (-*i)) {
|
|
124
|
+
if (lrat) {
|
|
125
|
+
assert (mini_chain.empty ());
|
|
126
|
+
calculate_minimize_chain (-*i, stack);
|
|
127
|
+
for (auto p : mini_chain) {
|
|
128
|
+
minimize_chain.push_back (p);
|
|
129
|
+
}
|
|
130
|
+
mini_chain.clear ();
|
|
131
|
+
}
|
|
132
|
+
stats.minimized++;
|
|
133
|
+
} else
|
|
134
|
+
flags (*j++ = *i).keep = true;
|
|
135
|
+
}
|
|
136
|
+
LOG ("minimized %zd literals", (size_t) (clause.end () - j));
|
|
137
|
+
if (j != end)
|
|
138
|
+
clause.resize (j - clause.begin ());
|
|
139
|
+
clear_minimized_literals ();
|
|
140
|
+
for (auto p = minimize_chain.rbegin (); p != minimize_chain.rend ();
|
|
141
|
+
p++) {
|
|
142
|
+
lrat_chain.push_back (*p);
|
|
143
|
+
}
|
|
144
|
+
minimize_chain.clear ();
|
|
145
|
+
STOP (minimize);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// go backwards in reason graph and add ids
|
|
149
|
+
// mini_chain is in correct order so we have to add it to minimize_chain
|
|
150
|
+
// and then reverse when we put it on lrat_chain
|
|
151
|
+
//
|
|
152
|
+
// We have to use the non-recursive as we cannot limit the depth like the
|
|
153
|
+
// minimize version. Unlike the minimize version, we have to keep literals
|
|
154
|
+
// on the stack in order to push its reason later.
|
|
155
|
+
void Internal::calculate_minimize_chain (int lit, std::vector<int> &stack) {
|
|
156
|
+
assert (stack.empty ());
|
|
157
|
+
stack.push_back (vidx (lit));
|
|
158
|
+
|
|
159
|
+
while (!stack.empty ()) {
|
|
160
|
+
const int idx = stack.back ();
|
|
161
|
+
assert (idx);
|
|
162
|
+
stack.pop_back ();
|
|
163
|
+
if (idx < 0) {
|
|
164
|
+
Var &v = var (idx);
|
|
165
|
+
mini_chain.push_back (v.reason->id);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
assert (idx);
|
|
169
|
+
Flags &f = flags (idx);
|
|
170
|
+
Var &v = var (idx);
|
|
171
|
+
if (f.keep || f.added || f.poison) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (!v.level) {
|
|
175
|
+
if (f.seen)
|
|
176
|
+
continue;
|
|
177
|
+
f.seen = true;
|
|
178
|
+
unit_analyzed.push_back (idx);
|
|
179
|
+
const int lit = val (idx) > 0 ? idx : -idx;
|
|
180
|
+
int64_t id = unit_id (lit);
|
|
181
|
+
unit_chain.push_back (id);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
f.added = true;
|
|
185
|
+
assert (v.reason && f.removable);
|
|
186
|
+
const const_literal_iterator end = v.reason->end ();
|
|
187
|
+
const_literal_iterator i;
|
|
188
|
+
LOG (v.reason, "LRAT chain for lit %d at depth %zd by going over", lit,
|
|
189
|
+
stack.size ());
|
|
190
|
+
stack.push_back (-idx);
|
|
191
|
+
for (i = v.reason->begin (); i != end; i++) {
|
|
192
|
+
const int other = *i;
|
|
193
|
+
if (other == idx)
|
|
194
|
+
continue;
|
|
195
|
+
stack.push_back (vidx (other));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
assert (stack.empty ());
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Sort the literals in reverse assignment order (thus trail order) to
|
|
202
|
+
// establish the base case of the recursive minimization algorithm in the
|
|
203
|
+
// positive case (where a literal with 'keep' true is hit).
|
|
204
|
+
//
|
|
205
|
+
void Internal::minimize_sort_clause () {
|
|
206
|
+
MSORT (opts.radixsortlim, clause.begin (), clause.end (),
|
|
207
|
+
minimize_trail_positive_rank (this),
|
|
208
|
+
minimize_trail_smaller (this));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
void Internal::clear_minimized_literals () {
|
|
212
|
+
LOG ("clearing %zd minimized literals", minimized.size ());
|
|
213
|
+
for (const auto &lit : minimized) {
|
|
214
|
+
Flags &f = flags (lit);
|
|
215
|
+
f.poison = f.removable = f.shrinkable = f.added = false;
|
|
216
|
+
}
|
|
217
|
+
for (const auto &lit : clause)
|
|
218
|
+
assert (!flags (lit).shrinkable), flags (lit).keep =
|
|
219
|
+
flags (lit).shrinkable =
|
|
220
|
+
flags (lit).added = false;
|
|
221
|
+
minimized.clear ();
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
} // namespace CaDiCaL
|