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,173 @@
1
+ #ifndef _checker_hpp_INCLUDED
2
+ #define _checker_hpp_INCLUDED
3
+
4
+ #include "tracer.hpp" // Alphabetically after 'checker'.
5
+
6
+ #include <cstdint>
7
+
8
+ namespace CaDiCaL {
9
+
10
+ /*------------------------------------------------------------------------*/
11
+
12
+ // This checker implements an online forward DRUP proof checker enabled by
13
+ // 'opts.checkproof' (requires 'opts.check' also to be enabled). This is
14
+ // useful for model basted testing (and delta-debugging), where we can not
15
+ // rely on an external proof checker such as 'drat-trim'. We also do not
16
+ // have yet a flow for offline incremental proof checking, while this
17
+ // checker here can also be used in an incremental setting.
18
+ //
19
+ // In essence the checker implements is a simple propagation online SAT
20
+ // solver with an additional hash table to find clauses fast for
21
+ // 'delete_clause'. It requires its own data structure for clauses
22
+ // ('CheckerClause') and watches ('CheckerWatch').
23
+ //
24
+ // In our experiments the checker slows down overall SAT solving time by a
25
+ // factor of 3, which we contribute to its slightly less efficient
26
+ // implementation.
27
+
28
+ /*------------------------------------------------------------------------*/
29
+
30
+ struct CheckerClause {
31
+ CheckerClause *next; // collision chain link for hash table
32
+ uint64_t hash; // previously computed full 64-bit hash
33
+ unsigned size; // zero if this is a garbage clause
34
+ int literals[2]; // otherwise 'literals' of length 'size'
35
+ };
36
+
37
+ struct CheckerWatch {
38
+ int blit;
39
+ unsigned size;
40
+ CheckerClause *clause;
41
+ CheckerWatch () {}
42
+ CheckerWatch (int b, CheckerClause *c)
43
+ : blit (b), size (c->size), clause (c) {}
44
+ };
45
+
46
+ typedef std::vector<CheckerWatch> CheckerWatcher;
47
+
48
+ /*------------------------------------------------------------------------*/
49
+
50
+ class Checker : public StatTracer {
51
+
52
+ Internal *internal;
53
+
54
+ // Capacity of variable values.
55
+ //
56
+ int64_t size_vars;
57
+
58
+ // For the assignment we want to have an as fast access as possible and
59
+ // thus we use an array which can also be indexed by negative literals and
60
+ // is actually valid in the range [-size_vars+1, ..., size_vars-1].
61
+ //
62
+ signed char *vals;
63
+
64
+ // The 'watchers' and 'marks' data structures are not that time critical
65
+ // and thus we access them by first mapping a literal to 'unsigned'.
66
+ //
67
+ static unsigned l2u (int lit);
68
+ std::vector<CheckerWatcher> watchers; // watchers of literals
69
+ std::vector<signed char> marks; // mark bits of literals
70
+
71
+ signed char &mark (int lit);
72
+ CheckerWatcher &watcher (int lit);
73
+
74
+ bool inconsistent; // found or added empty clause
75
+
76
+ uint64_t num_clauses; // number of clauses in hash table
77
+ uint64_t num_garbage; // number of garbage clauses
78
+ uint64_t size_clauses; // size of clause hash table
79
+ CheckerClause **clauses; // hash table of clauses
80
+ CheckerClause *garbage; // linked list of garbage clauses
81
+
82
+ std::vector<int> unsimplified; // original clause for reporting
83
+ std::vector<int> simplified; // clause for sorting
84
+
85
+ std::vector<int> trail; // for propagation
86
+
87
+ unsigned next_to_propagate; // next to propagate on trail
88
+
89
+ void enlarge_vars (int64_t idx);
90
+ void import_literal (int lit);
91
+ void import_clause (const std::vector<int> &);
92
+ bool tautological ();
93
+
94
+ static const unsigned num_nonces = 4;
95
+
96
+ uint64_t nonces[num_nonces]; // random numbers for hashing
97
+ uint64_t last_hash; // last computed hash value of clause
98
+ int64_t last_id;
99
+ uint64_t compute_hash (); // compute and save hash value of clause
100
+
101
+ // Reduce hash value to the actual size.
102
+ //
103
+ static uint64_t reduce_hash (uint64_t hash, uint64_t size);
104
+
105
+ void enlarge_clauses (); // enlarge hash table for clauses
106
+ void insert (); // insert clause in hash table
107
+ CheckerClause **find (); // find clause position in hash table
108
+
109
+ void add_clause (const char *type);
110
+
111
+ void collect_garbage_clauses ();
112
+
113
+ CheckerClause *new_clause ();
114
+ void delete_clause (CheckerClause *);
115
+
116
+ signed char val (int lit); // returns '-1', '0' or '1'
117
+
118
+ bool clause_satisfied (CheckerClause *);
119
+
120
+ void assign (int lit); // assign a literal to true
121
+ void assume (int lit); // assume a literal
122
+ bool propagate (); // propagate and check for conflicts
123
+ void backtrack (unsigned); // prepare for next clause
124
+ bool check (); // check simplified clause is implied
125
+ bool check_blocked (); // check if clause is blocked
126
+
127
+ struct {
128
+
129
+ int64_t added; // number of added clauses
130
+ int64_t original; // number of added original clauses
131
+ int64_t derived; // number of added derived clauses
132
+
133
+ int64_t deleted; // number of deleted clauses
134
+
135
+ int64_t assumptions; // number of assumed literals
136
+ int64_t propagations; // number of propagated literals
137
+
138
+ int64_t insertions; // number of clauses added to hash table
139
+ int64_t collisions; // number of hash collisions in 'find'
140
+ int64_t searches; // number of searched clauses in 'find'
141
+
142
+ int64_t checks; // number of implication checks
143
+
144
+ int64_t collections; // garbage collections
145
+ int64_t units;
146
+
147
+ } stats;
148
+
149
+ public:
150
+ Checker (Internal *);
151
+ virtual ~Checker ();
152
+
153
+ void connect_internal (Internal *i) override;
154
+
155
+ void add_original_clause (int64_t, bool, const std::vector<int> &,
156
+ bool = false) override;
157
+ void add_derived_clause (int64_t, bool, int, const std::vector<int> &,
158
+ const std::vector<int64_t> &) override;
159
+ void delete_clause (int64_t, bool, const std::vector<int> &) override;
160
+
161
+ void finalize_clause (int64_t, const std::vector<int> &) override {
162
+ } // skip
163
+ void report_status (int, int64_t) override {} // skip
164
+ void begin_proof (int64_t) override {} // skip
165
+ void add_assumption_clause (int64_t, const std::vector<int> &,
166
+ const std::vector<int64_t> &) override;
167
+ void print_stats () override;
168
+ void dump (); // for debugging purposes only
169
+ };
170
+
171
+ } // namespace CaDiCaL
172
+
173
+ #endif