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,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
|