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,153 @@
1
+ #include "internal.hpp"
2
+
3
+ namespace CaDiCaL {
4
+
5
+ /*------------------------------------------------------------------------*/
6
+
7
+ DratTracer::DratTracer (Internal *i, File *f, bool b)
8
+ : internal (i), file (f), binary (b)
9
+ #ifndef QUIET
10
+ ,
11
+ added (0), deleted (0)
12
+ #endif
13
+ {
14
+ (void) internal;
15
+ }
16
+
17
+ void DratTracer::connect_internal (Internal *i) {
18
+ internal = i;
19
+ file->connect_internal (internal);
20
+ LOG ("DRAT TRACER connected to internal");
21
+ }
22
+
23
+ DratTracer::~DratTracer () {
24
+ LOG ("DRAT TRACER delete");
25
+ delete file;
26
+ }
27
+
28
+ /*------------------------------------------------------------------------*/
29
+
30
+ inline void DratTracer::put_binary_zero () {
31
+ assert (binary);
32
+ assert (file);
33
+ file->put ((unsigned char) 0);
34
+ }
35
+
36
+ inline void DratTracer::put_binary_lit (int lit) {
37
+ assert (binary);
38
+ assert (file);
39
+ assert (lit != INT_MIN);
40
+ unsigned idx = abs (lit);
41
+ assert (idx < (1u << 31));
42
+ unsigned x = 2u * idx + (lit < 0);
43
+ unsigned char ch;
44
+ while (x & ~0x7f) {
45
+ ch = (x & 0x7f) | 0x80;
46
+ file->put (ch);
47
+ x >>= 7;
48
+ }
49
+ ch = x;
50
+ file->put (ch);
51
+ }
52
+
53
+ /*------------------------------------------------------------------------*/
54
+
55
+ void DratTracer::drat_add_clause (const vector<int> &clause) {
56
+ if (binary)
57
+ file->put ('a');
58
+ for (const auto &external_lit : clause)
59
+ if (binary)
60
+ put_binary_lit (external_lit);
61
+ else
62
+ file->put (external_lit), file->put (' ');
63
+ if (binary)
64
+ put_binary_zero ();
65
+ else
66
+ file->put ("0\n");
67
+ }
68
+ void DratTracer::drat_delete_clause (const vector<int> &clause) {
69
+ if (binary)
70
+ file->put ('d');
71
+ else
72
+ file->put ("d ");
73
+ for (const auto &external_lit : clause)
74
+ if (binary)
75
+ put_binary_lit (external_lit);
76
+ else
77
+ file->put (external_lit), file->put (' ');
78
+ if (binary)
79
+ put_binary_zero ();
80
+ else
81
+ file->put ("0\n");
82
+ }
83
+
84
+ /*------------------------------------------------------------------------*/
85
+
86
+ void DratTracer::add_derived_clause (int64_t, bool, int,
87
+ const vector<int> &clause,
88
+ const vector<int64_t> &) {
89
+ if (file->closed ())
90
+ return;
91
+ LOG ("DRAT TRACER tracing addition of derived clause");
92
+ drat_add_clause (clause);
93
+ #ifndef QUIET
94
+ added++;
95
+ #endif
96
+ }
97
+
98
+ void DratTracer::delete_clause (int64_t, bool, const vector<int> &clause) {
99
+ if (file->closed ())
100
+ return;
101
+ LOG ("DRAT TRACER tracing deletion of clause");
102
+ drat_delete_clause (clause);
103
+ #ifndef QUIET
104
+ deleted++;
105
+ #endif
106
+ }
107
+
108
+ /*------------------------------------------------------------------------*/
109
+
110
+ bool DratTracer::closed () { return file->closed (); }
111
+
112
+ #ifndef QUIET
113
+
114
+ void DratTracer::print_statistics () {
115
+ uint64_t bytes = file->bytes ();
116
+ uint64_t total = added + deleted;
117
+ MSG ("DRAT %" PRId64 " added clauses %.2f%%", added,
118
+ percent (added, total));
119
+ MSG ("DRAT %" PRId64 " deleted clauses %.2f%%", deleted,
120
+ percent (deleted, total));
121
+ MSG ("DRAT %" PRId64 " bytes (%.2f MB)", bytes,
122
+ bytes / (double) (1 << 20));
123
+ }
124
+
125
+ #endif
126
+
127
+ void DratTracer::close (bool print) {
128
+ assert (!closed ());
129
+ file->close ();
130
+ #ifndef QUIET
131
+ if (print) {
132
+ MSG ("DRAT proof file '%s' closed", file->name ());
133
+ print_statistics ();
134
+ }
135
+ #else
136
+ (void) print;
137
+ #endif
138
+ }
139
+
140
+ void DratTracer::flush (bool print) {
141
+ assert (!closed ());
142
+ file->flush ();
143
+ #ifndef QUIET
144
+ if (print) {
145
+ MSG ("DRAT proof file '%s' flushed", file->name ());
146
+ print_statistics ();
147
+ }
148
+ #else
149
+ (void) print;
150
+ #endif
151
+ }
152
+
153
+ } // namespace CaDiCaL
@@ -0,0 +1,55 @@
1
+ #ifndef _drattracer_h_INCLUDED
2
+ #define _drattracer_h_INCLUDED
3
+
4
+ #include "file.hpp"
5
+ #include "tracer.hpp"
6
+
7
+ namespace CaDiCaL {
8
+
9
+ class DratTracer : public FileTracer {
10
+
11
+ Internal *internal;
12
+ File *file;
13
+ bool binary;
14
+ #ifndef QUIET
15
+ int64_t added, deleted;
16
+ #endif
17
+ void put_binary_zero ();
18
+ void put_binary_lit (int external_lit);
19
+
20
+ // support DRAT
21
+ void drat_add_clause (const std::vector<int> &);
22
+ void drat_delete_clause (const std::vector<int> &);
23
+
24
+ public:
25
+ // own and delete 'file'
26
+ DratTracer (Internal *, File *file, bool binary);
27
+ ~DratTracer ();
28
+
29
+ void connect_internal (Internal *i) override;
30
+ void begin_proof (int64_t) override {} // skip
31
+
32
+ void add_original_clause (int64_t, bool, const std::vector<int> &,
33
+ bool = false) override {} // skip
34
+
35
+ void add_derived_clause (int64_t, bool, int, const std::vector<int> &,
36
+ const std::vector<int64_t> &) override;
37
+
38
+ void delete_clause (int64_t, bool, const std::vector<int> &) override;
39
+
40
+ void finalize_clause (int64_t, const std::vector<int> &) override {
41
+ } // skip
42
+
43
+ void report_status (int, int64_t) override {} // skip
44
+
45
+ #ifndef QUIET
46
+ void print_statistics ();
47
+ #endif
48
+ bool closed () override;
49
+ void close (bool) override;
50
+ void flush (bool) override;
51
+ };
52
+
53
+ } // namespace CaDiCaL
54
+
55
+ #endif