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,129 @@
1
+ #include "internal.hpp"
2
+
3
+ namespace CaDiCaL {
4
+
5
+ /*------------------------------------------------------------------------*/
6
+
7
+ bool parse_int_str (const char *val_str, int &val) {
8
+ if (!strcmp (val_str, "true"))
9
+ val = 1;
10
+ else if (!strcmp (val_str, "false"))
11
+ val = 0;
12
+ else {
13
+ const char *p = val_str;
14
+ int sign;
15
+
16
+ if (*p == '-')
17
+ sign = -1, p++;
18
+ else
19
+ sign = 1;
20
+
21
+ int ch;
22
+ if (!isdigit ((ch = *p++)))
23
+ return false;
24
+
25
+ const int64_t bound = -(int64_t) INT_MIN;
26
+ int64_t mantissa = ch - '0';
27
+
28
+ while (isdigit (ch = *p++)) {
29
+ if (bound / 10 < mantissa)
30
+ mantissa = bound;
31
+ else
32
+ mantissa *= 10;
33
+ const int digit = ch - '0';
34
+ if (bound - digit < mantissa)
35
+ mantissa = bound;
36
+ else
37
+ mantissa += digit;
38
+ }
39
+
40
+ int exponent = 0;
41
+ if (ch == 'e') {
42
+ while (isdigit ((ch = *p++)))
43
+ exponent = exponent ? 10 : ch - '0';
44
+ if (ch)
45
+ return false;
46
+ } else if (ch)
47
+ return false;
48
+
49
+ assert (exponent <= 10);
50
+ int64_t val64 = mantissa;
51
+ for (int i = 0; i < exponent; i++)
52
+ val64 *= 10;
53
+
54
+ if (sign < 0) {
55
+ val64 = -val64;
56
+ if (val64 < INT_MIN)
57
+ val64 = INT_MIN;
58
+ } else {
59
+ if (val64 > INT_MAX)
60
+ val64 = INT_MAX;
61
+ }
62
+
63
+ assert (INT_MIN <= val64);
64
+ assert (val64 <= INT_MAX);
65
+
66
+ val = val64;
67
+ }
68
+ return true;
69
+ }
70
+
71
+ /*------------------------------------------------------------------------*/
72
+
73
+ bool has_suffix (const char *str, const char *suffix) {
74
+ size_t k = strlen (str), l = strlen (suffix);
75
+ return k > l && !strcmp (str + k - l, suffix);
76
+ }
77
+
78
+ bool has_prefix (const char *str, const char *prefix) {
79
+ for (const char *p = str, *q = prefix; *q; q++, p++)
80
+ if (*q != *p)
81
+ return false;
82
+ return true;
83
+ }
84
+
85
+ /*------------------------------------------------------------------------*/
86
+
87
+ bool is_color_option (const char *arg) {
88
+ return !strcmp (arg, "--color") || !strcmp (arg, "--colors") ||
89
+ !strcmp (arg, "--colour") || !strcmp (arg, "--colours") ||
90
+ !strcmp (arg, "--color=1") || !strcmp (arg, "--colors=1") ||
91
+ !strcmp (arg, "--colour=1") || !strcmp (arg, "--colours=1") ||
92
+ !strcmp (arg, "--color=true") || !strcmp (arg, "--colors=true") ||
93
+ !strcmp (arg, "--colour=true") || !strcmp (arg, "--colours=true");
94
+ }
95
+
96
+ bool is_no_color_option (const char *arg) {
97
+ return !strcmp (arg, "--no-color") || !strcmp (arg, "--no-colors") ||
98
+ !strcmp (arg, "--no-colour") || !strcmp (arg, "--no-colours") ||
99
+ !strcmp (arg, "--color=0") || !strcmp (arg, "--colors=0") ||
100
+ !strcmp (arg, "--colour=0") || !strcmp (arg, "--colours=0") ||
101
+ !strcmp (arg, "--color=false") ||
102
+ !strcmp (arg, "--colors=false") ||
103
+ !strcmp (arg, "--colour=false") ||
104
+ !strcmp (arg, "--colours=false");
105
+ }
106
+
107
+ /*------------------------------------------------------------------------*/
108
+
109
+ static uint64_t primes[] = {
110
+ 1111111111111111111lu, 2222222222222222249lu, 3333333333333333347lu,
111
+ 4444444444444444537lu, 5555555555555555621lu, 6666666666666666677lu,
112
+ 7777777777777777793lu, 8888888888888888923lu, 9999999999999999961lu,
113
+ };
114
+
115
+ uint64_t hash_string (const char *str) {
116
+ const unsigned size = sizeof primes / sizeof *primes;
117
+ uint64_t res = 0;
118
+ unsigned char ch;
119
+ unsigned i = 0;
120
+ for (const char *p = str; (ch = *p); p++) {
121
+ res += ch;
122
+ res *= primes[i++];
123
+ if (i == size)
124
+ i = 0;
125
+ }
126
+ return res;
127
+ }
128
+
129
+ } // namespace CaDiCaL
@@ -0,0 +1,181 @@
1
+ #ifndef _util_hpp_INCLUDED
2
+ #define _util_hpp_INCLUDED
3
+
4
+ #include <cassert>
5
+ #include <cstdint>
6
+ #include <vector>
7
+
8
+ namespace CaDiCaL {
9
+
10
+ using namespace std;
11
+
12
+ // Common simple utility functions independent from 'Internal'.
13
+
14
+ /*------------------------------------------------------------------------*/
15
+
16
+ inline double relative (double a, double b) { return b ? a / b : 0; }
17
+ inline double percent (double a, double b) { return relative (100 * a, b); }
18
+ inline int sign (int lit) { return (lit > 0) - (lit < 0); }
19
+ inline unsigned bign (int lit) { return 1 + (lit < 0); }
20
+
21
+ /*------------------------------------------------------------------------*/
22
+
23
+ bool has_suffix (const char *str, const char *suffix);
24
+ bool has_prefix (const char *str, const char *prefix);
25
+
26
+ /*------------------------------------------------------------------------*/
27
+
28
+ // Parse integer string in the form of
29
+ //
30
+ // true
31
+ // false
32
+ // [-]<mantissa>[e<exponent>]
33
+ //
34
+ // and in the latter case '<val>' has to be within [-INT_MAX,INT_MAX].
35
+ //
36
+ // The function returns true if parsing is successful and then also sets
37
+ // the second argument to the parsed value.
38
+
39
+ bool parse_int_str (const char *str, int &);
40
+
41
+ /*------------------------------------------------------------------------*/
42
+
43
+ inline bool is_power_of_two (unsigned n) { return n && !(n & (n - 1)); }
44
+
45
+ inline bool contained (int64_t c, int64_t l, int64_t u) {
46
+ return l <= c && c <= u;
47
+ }
48
+
49
+ inline bool aligned (size_t n, size_t alignment) {
50
+ assert (is_power_of_two (alignment));
51
+ const size_t mask = alignment - 1;
52
+ return !(n & mask);
53
+ }
54
+
55
+ inline size_t align (size_t n, size_t alignment) {
56
+ size_t res = n;
57
+ assert (is_power_of_two (alignment));
58
+ const size_t mask = alignment - 1;
59
+ if (res & mask)
60
+ res = (res | mask) + 1;
61
+ assert (aligned (res, alignment));
62
+ return res;
63
+ }
64
+
65
+ /*------------------------------------------------------------------------*/
66
+
67
+ inline bool parity (unsigned a) {
68
+ assert (sizeof a == 4);
69
+ unsigned tmp = a;
70
+ tmp ^= (tmp >> 16);
71
+ tmp ^= (tmp >> 8);
72
+ tmp ^= (tmp >> 4);
73
+ tmp ^= (tmp >> 2);
74
+ tmp ^= (tmp >> 1);
75
+ return tmp & 1;
76
+ }
77
+
78
+ /*------------------------------------------------------------------------*/
79
+
80
+ // The standard 'Effective STL' way (though not guaranteed) to clear a
81
+ // vector and reduce its capacity to zero, thus deallocating all its
82
+ // internal memory. This is quite important for keeping the actual
83
+ // allocated size of watched and occurrence lists small particularly during
84
+ // bounded variable elimination where many clauses are added and removed.
85
+
86
+ template <class T> void erase_vector (std::vector<T> &v) {
87
+ if (v.capacity ()) {
88
+ std::vector<T> ().swap (v);
89
+ }
90
+ assert (!v.capacity ()); // not guaranteed though
91
+ }
92
+
93
+ // The standard 'Effective STL' way (though not guaranteed) to shrink the
94
+ // capacity of a vector to its size thus kind of releasing all the internal
95
+ // excess memory not needed at the moment any more.
96
+
97
+ template <class T> void shrink_vector (std::vector<T> &v) {
98
+ if (v.capacity () > v.size ()) {
99
+ std::vector<T> (v).swap (v);
100
+ }
101
+ assert (v.capacity () == v.size ()); // not guaranteed though
102
+ }
103
+
104
+ template <class T>
105
+ static void enlarge_init (vector<T> &v, size_t N, const T &i) {
106
+ if (v.size () < N)
107
+ v.resize (N, i);
108
+ }
109
+
110
+ template <class T> static void enlarge_only (vector<T> &v, size_t N) {
111
+ if (v.size () < N)
112
+ v.resize (N, T ());
113
+ }
114
+
115
+ template <class T> static void enlarge_zero (vector<T> &v, size_t N) {
116
+ enlarge_init (v, N, (const T &) 0);
117
+ }
118
+
119
+ // double the capacity until it fits. This is different from reserve
120
+ // that will allocate exactly the size requested, meaning that the
121
+ // amortized complexity is lost.
122
+ template <class T> static void reserve_at_least (vector<T> &v, size_t N) {
123
+ if (N < v.capacity ())
124
+ return;
125
+ size_t new_size = v.size ();
126
+ if (!new_size)
127
+ new_size = N;
128
+ while (new_size < N)
129
+ new_size *= 2;
130
+ v.reserve (new_size);
131
+ }
132
+
133
+ // Clean-up class for bad_alloc error safety.
134
+
135
+ template <typename T> struct DeferDeleteArray {
136
+ T *data;
137
+ DeferDeleteArray (T *t) : data (t) {}
138
+ ~DeferDeleteArray () { delete[] data; }
139
+ void release () { data = nullptr; }
140
+ void free () {
141
+ delete[] data;
142
+ data = nullptr;
143
+ }
144
+ };
145
+
146
+ template <typename T> struct DeferDeletePtr {
147
+ T *data;
148
+ DeferDeletePtr (T *t) : data (t) {}
149
+ ~DeferDeletePtr () { delete data; }
150
+ void release () { data = nullptr; }
151
+ void free () {
152
+ delete data;
153
+ data = nullptr;
154
+ }
155
+ };
156
+
157
+ /*------------------------------------------------------------------------*/
158
+
159
+ template <class T> inline void clear_n (T *base, size_t n) {
160
+ memset (base, 0, sizeof (T) * n);
161
+ }
162
+
163
+ /*------------------------------------------------------------------------*/
164
+
165
+ // These are options both to 'cadical' and 'mobical'. After wasting some
166
+ // on not remembering the spelling (British vs American), nor singular vs
167
+ // plural and then wanted to use '--color=false', and '--colours=0' too, I
168
+ // just factored this out into these two utility functions.
169
+
170
+ bool is_color_option (const char *arg); // --color, --colour, ...
171
+ bool is_no_color_option (const char *arg); // --no-color, --no-colour, ...
172
+
173
+ /*------------------------------------------------------------------------*/
174
+
175
+ uint64_t hash_string (const char *str);
176
+
177
+ /*------------------------------------------------------------------------*/
178
+
179
+ } // namespace CaDiCaL
180
+
181
+ #endif
@@ -0,0 +1,39 @@
1
+ #include "internal.hpp"
2
+
3
+ namespace CaDiCaL {
4
+
5
+ void Internal::reset_subsume_bits () {
6
+ LOG ("marking all variables as not subsume");
7
+ for (auto idx : vars)
8
+ flags (idx).subsume = false;
9
+ }
10
+
11
+ void Internal::check_var_stats () {
12
+ #ifndef NDEBUG
13
+ int64_t fixed = 0, eliminated = 0, substituted = 0, pure = 0, unused = 0;
14
+ for (auto idx : vars) {
15
+ Flags &f = flags (idx);
16
+ if (f.active ())
17
+ continue;
18
+ if (f.fixed ())
19
+ fixed++;
20
+ if (f.eliminated ())
21
+ eliminated++;
22
+ if (f.substituted ())
23
+ substituted++;
24
+ if (f.unused ())
25
+ unused++;
26
+ if (f.pure ())
27
+ pure++;
28
+ }
29
+ assert (stats.now.fixed == fixed);
30
+ assert (stats.now.eliminated == eliminated);
31
+ assert (stats.now.substituted == substituted);
32
+ assert (stats.now.pure == pure);
33
+ int64_t inactive = unused + fixed + eliminated + substituted + pure;
34
+ assert (stats.inactive == inactive);
35
+ assert (max_var == stats.active + stats.inactive);
36
+ #endif
37
+ }
38
+
39
+ } // namespace CaDiCaL
@@ -0,0 +1,22 @@
1
+ #ifndef _var_hpp_INCLUDED
2
+ #define _var_hpp_INCLUDED
3
+
4
+ namespace CaDiCaL {
5
+
6
+ struct Clause;
7
+
8
+ // This structure captures data associated with an assigned variable.
9
+
10
+ struct Var {
11
+
12
+ // Note that none of these members is valid unless the variable is
13
+ // assigned. During unassigning a variable we do not reset it.
14
+
15
+ int level; // decision level
16
+ int trail; // trail height at assignment
17
+ Clause *reason; // implication graph edge during search
18
+ };
19
+
20
+ } // namespace CaDiCaL
21
+
22
+ #endif