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,208 @@
1
+ #include "cadical.hpp"
2
+
3
+ #include <cstdlib>
4
+ #include <cstring>
5
+
6
+ namespace CaDiCaL {
7
+
8
+ struct Wrapper : Learner, Terminator {
9
+
10
+ Solver *solver;
11
+ struct {
12
+ void *state;
13
+ int (*function) (void *);
14
+ } terminator;
15
+
16
+ struct {
17
+ void *state;
18
+ int max_length;
19
+ int *begin_clause, *end_clause, *capacity_clause;
20
+ void (*function) (void *, int *);
21
+ } learner;
22
+
23
+ bool terminate () {
24
+ if (!terminator.function)
25
+ return false;
26
+ return terminator.function (terminator.state);
27
+ }
28
+
29
+ bool learning (int size) {
30
+ if (!learner.function)
31
+ return false;
32
+ return size <= learner.max_length;
33
+ }
34
+
35
+ void learn (int lit) {
36
+ if (learner.end_clause == learner.capacity_clause) {
37
+ size_t count = learner.end_clause - learner.begin_clause;
38
+ size_t size = count ? 2 * count : 1;
39
+ learner.begin_clause =
40
+ (int *) realloc (learner.begin_clause, size * sizeof (int));
41
+ learner.end_clause = learner.begin_clause + count;
42
+ learner.capacity_clause = learner.begin_clause + size;
43
+ }
44
+ *learner.end_clause++ = lit;
45
+ if (lit)
46
+ return;
47
+ learner.function (learner.state, learner.begin_clause);
48
+ learner.end_clause = learner.begin_clause;
49
+ }
50
+
51
+ Wrapper () : solver (new Solver ()) {
52
+ memset (&terminator, 0, sizeof terminator);
53
+ memset (&learner, 0, sizeof learner);
54
+ }
55
+
56
+ ~Wrapper () {
57
+ terminator.function = 0;
58
+ if (learner.begin_clause)
59
+ free (learner.begin_clause);
60
+ delete solver;
61
+ }
62
+ };
63
+
64
+ } // namespace CaDiCaL
65
+
66
+ using namespace CaDiCaL;
67
+
68
+ extern "C" {
69
+
70
+ #include "ccadical.h"
71
+
72
+ const char *ccadical_signature (void) { return Solver::signature (); }
73
+
74
+ CCaDiCaL *ccadical_init (void) { return (CCaDiCaL *) new Wrapper (); }
75
+
76
+ void ccadical_release (CCaDiCaL *wrapper) { delete (Wrapper *) wrapper; }
77
+
78
+ void ccadical_constrain (CCaDiCaL *wrapper, int lit) {
79
+ ((Wrapper *) wrapper)->solver->constrain (lit);
80
+ }
81
+
82
+ int ccadical_constraint_failed (CCaDiCaL *wrapper) {
83
+ return ((Wrapper *) wrapper)->solver->constraint_failed ();
84
+ }
85
+
86
+ void ccadical_set_option (CCaDiCaL *wrapper, const char *name, int val) {
87
+ ((Wrapper *) wrapper)->solver->set (name, val);
88
+ }
89
+
90
+ void ccadical_limit (CCaDiCaL *wrapper, const char *name, int val) {
91
+ ((Wrapper *) wrapper)->solver->limit (name, val);
92
+ }
93
+
94
+ int ccadical_get_option (CCaDiCaL *wrapper, const char *name) {
95
+ return ((Wrapper *) wrapper)->solver->get (name);
96
+ }
97
+
98
+ void ccadical_add (CCaDiCaL *wrapper, int lit) {
99
+ ((Wrapper *) wrapper)->solver->add (lit);
100
+ }
101
+
102
+ void ccadical_assume (CCaDiCaL *wrapper, int lit) {
103
+ ((Wrapper *) wrapper)->solver->assume (lit);
104
+ }
105
+
106
+ int ccadical_solve (CCaDiCaL *wrapper) {
107
+ return ((Wrapper *) wrapper)->solver->solve ();
108
+ }
109
+
110
+ int ccadical_simplify (CCaDiCaL *wrapper) {
111
+ return ((Wrapper *) wrapper)->solver->simplify ();
112
+ }
113
+
114
+ int ccadical_val (CCaDiCaL *wrapper, int lit) {
115
+ return ((Wrapper *) wrapper)->solver->val (lit);
116
+ }
117
+
118
+ int ccadical_failed (CCaDiCaL *wrapper, int lit) {
119
+ return ((Wrapper *) wrapper)->solver->failed (lit);
120
+ }
121
+
122
+ void ccadical_print_statistics (CCaDiCaL *wrapper) {
123
+ ((Wrapper *) wrapper)->solver->statistics ();
124
+ }
125
+
126
+ void ccadical_terminate (CCaDiCaL *wrapper) {
127
+ ((Wrapper *) wrapper)->solver->terminate ();
128
+ }
129
+
130
+ int64_t ccadical_active (CCaDiCaL *wrapper) {
131
+ return ((Wrapper *) wrapper)->solver->active ();
132
+ }
133
+
134
+ int64_t ccadical_irredundant (CCaDiCaL *wrapper) {
135
+ return ((Wrapper *) wrapper)->solver->irredundant ();
136
+ }
137
+
138
+ int ccadical_fixed (CCaDiCaL *wrapper, int lit) {
139
+ return ((Wrapper *) wrapper)->solver->fixed (lit);
140
+ }
141
+
142
+ void ccadical_set_terminate (CCaDiCaL *ptr, void *state,
143
+ int (*terminate) (void *)) {
144
+ Wrapper *wrapper = (Wrapper *) ptr;
145
+ wrapper->terminator.state = state;
146
+ wrapper->terminator.function = terminate;
147
+ if (terminate)
148
+ wrapper->solver->connect_terminator (wrapper);
149
+ else
150
+ wrapper->solver->disconnect_terminator ();
151
+ }
152
+
153
+ void ccadical_set_learn (CCaDiCaL *ptr, void *state, int max_length,
154
+ void (*learn) (void *state, int *clause)) {
155
+ Wrapper *wrapper = (Wrapper *) ptr;
156
+ wrapper->learner.state = state;
157
+ wrapper->learner.max_length = max_length;
158
+ wrapper->learner.function = learn;
159
+ if (learn)
160
+ wrapper->solver->connect_learner (wrapper);
161
+ else
162
+ wrapper->solver->disconnect_learner ();
163
+ }
164
+
165
+ void ccadical_freeze (CCaDiCaL *ptr, int lit) {
166
+ ((Wrapper *) ptr)->solver->freeze (lit);
167
+ }
168
+
169
+ void ccadical_melt (CCaDiCaL *ptr, int lit) {
170
+ ((Wrapper *) ptr)->solver->melt (lit);
171
+ }
172
+
173
+ int ccadical_frozen (CCaDiCaL *ptr, int lit) {
174
+ return ((Wrapper *) ptr)->solver->frozen (lit);
175
+ }
176
+
177
+ int ccadical_trace_proof (CCaDiCaL *ptr, FILE *file, const char *path) {
178
+ return ((Wrapper *) ptr)->solver->trace_proof (file, path);
179
+ }
180
+
181
+ void ccadical_close_proof (CCaDiCaL *ptr) {
182
+ ((Wrapper *) ptr)->solver->close_proof_trace ();
183
+ }
184
+
185
+ void ccadical_conclude (CCaDiCaL *ptr) {
186
+ ((Wrapper *) ptr)->solver->conclude ();
187
+ }
188
+
189
+ int ccadical_vars (CCaDiCaL *ptr) {
190
+ return ((Wrapper *) ptr)->solver->vars ();
191
+ }
192
+
193
+ int ccadical_declare_more_variables (CCaDiCaL *ptr, int number_of_vars) {
194
+ return ((Wrapper *) ptr)->solver->declare_more_variables (number_of_vars);
195
+ }
196
+
197
+ int ccadical_declare_one_more_variable (CCaDiCaL *ptr) {
198
+ return ((Wrapper *) ptr)->solver->declare_one_more_variable ();
199
+ }
200
+
201
+ void ccadical_phase (CCaDiCaL *wrapper, int lit) {
202
+ ((Wrapper *) wrapper)->solver->phase (lit);
203
+ }
204
+
205
+ void ccadical_unphase (CCaDiCaL *wrapper, int lit) {
206
+ ((Wrapper *) wrapper)->solver->unphase (lit);
207
+ }
208
+ }
@@ -0,0 +1,74 @@
1
+ #ifndef _ccadical_h_INCLUDED
2
+ #define _ccadical_h_INCLUDED
3
+
4
+ /*------------------------------------------------------------------------*/
5
+ #ifdef __cplusplus
6
+ extern "C" {
7
+ #endif
8
+ /*------------------------------------------------------------------------*/
9
+
10
+ #include <stdint.h>
11
+ #include <stdio.h>
12
+
13
+ // C wrapper for CaDiCaL's C++ API following IPASIR.
14
+
15
+ typedef struct CCaDiCaL CCaDiCaL;
16
+
17
+ const char *ccadical_signature (void);
18
+ CCaDiCaL *ccadical_init (void);
19
+ void ccadical_release (CCaDiCaL *);
20
+
21
+ void ccadical_add (CCaDiCaL *, int lit);
22
+ void ccadical_assume (CCaDiCaL *, int lit);
23
+ int ccadical_solve (CCaDiCaL *);
24
+ int ccadical_val (CCaDiCaL *, int lit);
25
+ int ccadical_failed (CCaDiCaL *, int lit);
26
+
27
+ void ccadical_set_terminate (CCaDiCaL *, void *state,
28
+ int (*terminate) (void *state));
29
+
30
+ void ccadical_set_learn (CCaDiCaL *, void *state, int max_length,
31
+ void (*learn) (void *state, int *clause));
32
+
33
+ /*------------------------------------------------------------------------*/
34
+
35
+ // Non-IPASIR conformant 'C' functions.
36
+
37
+ void ccadical_constrain (CCaDiCaL *, int lit);
38
+ int ccadical_constraint_failed (CCaDiCaL *);
39
+ void ccadical_set_option (CCaDiCaL *, const char *name, int val);
40
+ void ccadical_limit (CCaDiCaL *, const char *name, int limit);
41
+ int ccadical_get_option (CCaDiCaL *, const char *name);
42
+ void ccadical_print_statistics (CCaDiCaL *);
43
+ int64_t ccadical_active (CCaDiCaL *);
44
+ int64_t ccadical_irredundant (CCaDiCaL *);
45
+ int ccadical_fixed (CCaDiCaL *, int lit);
46
+ int ccadical_trace_proof (CCaDiCaL *, FILE *, const char *);
47
+ void ccadical_close_proof (CCaDiCaL *);
48
+ void ccadical_conclude (CCaDiCaL *);
49
+ void ccadical_terminate (CCaDiCaL *);
50
+ void ccadical_freeze (CCaDiCaL *, int lit);
51
+ int ccadical_frozen (CCaDiCaL *, int lit);
52
+ void ccadical_melt (CCaDiCaL *, int lit);
53
+ int ccadical_simplify (CCaDiCaL *);
54
+ int ccadical_vars (CCaDiCaL *);
55
+ int ccadical_declare_more_variables (CCaDiCaL *, int number_of_vars);
56
+ int ccadical_declare_one_more_variable (CCaDiCaL *);
57
+ void ccadical_phase (CCaDiCaL *wrapper, int lit);
58
+ void ccadical_unphase (CCaDiCaL *wrapper, int lit);
59
+
60
+ /*------------------------------------------------------------------------*/
61
+
62
+ // Support legacy names used before moving to more IPASIR conforming names.
63
+
64
+ #define ccadical_reset ccadical_release
65
+ #define ccadical_sat ccadical_solve
66
+ #define ccadical_deref ccadical_val
67
+
68
+ /*------------------------------------------------------------------------*/
69
+ #ifdef __cplusplus
70
+ }
71
+ #endif
72
+ /*------------------------------------------------------------------------*/
73
+
74
+ #endif