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,920 @@
1
+ // vim: set tw=300: set VIM text width to 300 characters for this file.
2
+
3
+ #include "internal.hpp"
4
+
5
+ namespace CaDiCaL {
6
+
7
+ /*------------------------------------------------------------------------*/
8
+
9
+ Stats::Stats () {
10
+ time.real = absolute_real_time ();
11
+ time.process = absolute_process_time ();
12
+ walk.minimum = LONG_MAX;
13
+ used.resize (2);
14
+ used[0].resize (127);
15
+ used[1].resize (127);
16
+ }
17
+
18
+ /*------------------------------------------------------------------------*/
19
+
20
+ #define PRT(FMT, ...) \
21
+ do { \
22
+ if (FMT[0] == ' ' && !all) \
23
+ break; \
24
+ MSG (FMT, __VA_ARGS__); \
25
+ } while (0)
26
+
27
+ /*------------------------------------------------------------------------*/
28
+
29
+ void Stats::print (Internal *internal) {
30
+
31
+ #ifdef QUIET
32
+ (void) internal;
33
+ #else
34
+
35
+ Stats &stats = internal->stats;
36
+
37
+ int all = internal->opts.verbose > 0 || internal->opts.stats;
38
+ #ifdef LOGGING
39
+ if (internal->opts.log)
40
+ all = true;
41
+ #endif // ifdef LOGGING
42
+
43
+ if (internal->opts.profile)
44
+ internal->print_profile ();
45
+
46
+ double t = internal->solve_time ();
47
+
48
+ int64_t propagations = 0;
49
+ propagations += stats.propagations.cover;
50
+ propagations += stats.propagations.probe;
51
+ propagations += stats.propagations.search;
52
+ propagations += stats.propagations.transred;
53
+ propagations += stats.propagations.vivify;
54
+
55
+ int64_t vivified = stats.vivifysubs + stats.vivifystrs;
56
+ int64_t searchticks = stats.ticks.search[0] + stats.ticks.search[1];
57
+ int64_t inprobeticks = stats.ticks.vivify + stats.ticks.probe +
58
+ stats.ticks.factor + stats.ticks.ternary +
59
+ stats.ticks.sweep + stats.ticks.backbone;
60
+ int64_t totalticks = searchticks + inprobeticks;
61
+
62
+ size_t extendbytes = internal->external->extension.size ();
63
+ extendbytes *= sizeof (int);
64
+
65
+ SECTION ("statistics");
66
+
67
+ if (all || stats.blocked) {
68
+ PRT ("blocked: %15" PRId64
69
+ " %10.2f %% of irredundant clauses",
70
+ stats.blocked, percent (stats.blocked, stats.added.irredundant));
71
+ PRT (" blockings: %15" PRId64 " %10.2f internal",
72
+ stats.blockings, relative (stats.conflicts, stats.blockings));
73
+ PRT (" candidates: %15" PRId64 " %10.2f per blocking ",
74
+ stats.blockcands, relative (stats.blockcands, stats.blockings));
75
+ PRT (" blockres: %15" PRId64 " %10.2f per candidate",
76
+ stats.blockres, relative (stats.blockres, stats.blockcands));
77
+ PRT (" pure: %15" PRId64 " %10.2f %% of all variables",
78
+ stats.all.pure, percent (stats.all.pure, stats.vars));
79
+ PRT (" pureclauses: %15" PRId64 " %10.2f per pure literal",
80
+ stats.blockpured, relative (stats.blockpured, stats.all.pure));
81
+ }
82
+ if (all || stats.chrono)
83
+ PRT ("chronological: %15" PRId64 " %10.2f %% of conflicts",
84
+ stats.chrono, percent (stats.chrono, stats.conflicts));
85
+ if (all)
86
+ PRT ("compacts: %15" PRId64 " %10.2f interval",
87
+ stats.compacts, relative (stats.conflicts, stats.compacts));
88
+ if (all || stats.conflicts) {
89
+ PRT ("conflicts: %15" PRId64 " %10.2f per second",
90
+ stats.conflicts, relative (stats.conflicts, t));
91
+ PRT (" backtracked: %15" PRId64 " %10.2f %% of conflicts",
92
+ stats.backtracks, percent (stats.backtracks, stats.conflicts));
93
+ }
94
+ if (all || stats.incremental_decay) {
95
+ PRT ("inc-decay: %15" PRId64 " %10.2f %% per search",
96
+ stats.incremental_decay,
97
+ percent (stats.incremental_decay, stats.searches));
98
+ }
99
+ if (all || stats.backbone.rounds) {
100
+ PRT ("backbone: %15" PRId64 " %10.2f %% of vars",
101
+ stats.backbone.probes,
102
+ percent (stats.backbone.probes, stats.vars));
103
+ PRT (" rounds: %15" PRId64 " %10.2f per phase",
104
+ stats.backbone.rounds,
105
+ relative (stats.backbone.rounds, stats.backbone.phases));
106
+ PRT (" phases: %15" PRId64 " %10.2f interval",
107
+ stats.backbone.phases,
108
+ relative (stats.conflicts, stats.backbone.phases));
109
+ PRT (" units: %15" PRId64 " %10.2f per phase",
110
+ stats.backbone.units,
111
+ percent (stats.backbone.units, stats.backbone.phases));
112
+ }
113
+ if (all || stats.deduplicatedinit) {
114
+ PRT ("dedup-init-rnds: %15" PRId64 " %10.2f %% of interval",
115
+ stats.deduplicatedinitrounds,
116
+ percent (stats.deduplicatedinitrounds, stats.conflicts));
117
+ PRT ("dedup-init: %15" PRId64 " %10.2f %% of subsumed",
118
+ stats.deduplicatedinit,
119
+ percent (stats.deduplicatedinit, stats.deduplicatedinit));
120
+ }
121
+ if (all || stats.conditioned) {
122
+ PRT ("conditioned: %15" PRId64
123
+ " %10.2f %% of irredundant clauses",
124
+ stats.conditioned,
125
+ percent (stats.conditioned, stats.added.irredundant));
126
+ PRT (" conditionings: %15" PRId64 " %10.2f interval",
127
+ stats.conditionings,
128
+ relative (stats.conflicts, stats.conditionings));
129
+ PRT (" condcands: %15" PRId64 " %10.2f candidate clauses",
130
+ stats.condcands, relative (stats.condcands, stats.conditionings));
131
+ PRT (" condassinit: %17.1f %9.2f %% initial assigned",
132
+ relative (stats.condassinit, stats.conditionings),
133
+ percent (stats.condassinit, stats.condassvars));
134
+ PRT (" condcondinit: %17.1f %9.2f %% initial condition",
135
+ relative (stats.condcondinit, stats.conditionings),
136
+ percent (stats.condcondinit, stats.condassinit));
137
+ PRT (" condautinit: %17.1f %9.2f %% initial autarky",
138
+ relative (stats.condautinit, stats.conditionings),
139
+ percent (stats.condautinit, stats.condassinit));
140
+ PRT (" condassrem: %17.1f %9.2f %% final assigned",
141
+ relative (stats.condassrem, stats.conditioned),
142
+ percent (stats.condassrem, stats.condassirem));
143
+ PRT (" condcondrem: %19.3f %7.2f %% final conditional",
144
+ relative (stats.condcondrem, stats.conditioned),
145
+ percent (stats.condcondrem, stats.condassrem));
146
+ PRT (" condautrem: %19.3f %7.2f %% final autarky",
147
+ relative (stats.condautrem, stats.conditioned),
148
+ percent (stats.condautrem, stats.condassrem));
149
+ PRT (" condprops: %15" PRId64 " %10.2f per candidate",
150
+ stats.condprops, relative (stats.condprops, stats.condcands));
151
+ }
152
+ if (all || stats.cover.total) {
153
+ PRT ("covered: %15" PRId64
154
+ " %10.2f %% of irredundant clauses",
155
+ stats.cover.total,
156
+ percent (stats.cover.total, stats.added.irredundant));
157
+ PRT (" coverings: %15" PRId64 " %10.2f interval",
158
+ stats.cover.count, relative (stats.conflicts, stats.cover.count));
159
+ PRT (" asymmetric: %15" PRId64 " %10.2f %% of covered clauses",
160
+ stats.cover.asymmetric,
161
+ percent (stats.cover.asymmetric, stats.cover.total));
162
+ PRT (" blocked: %15" PRId64 " %10.2f %% of covered clauses",
163
+ stats.cover.blocked,
164
+ percent (stats.cover.blocked, stats.cover.total));
165
+ }
166
+ if (all || stats.decisions) {
167
+ PRT ("decisions: %15" PRId64 " %10.2f per second",
168
+ stats.decisions, relative (stats.decisions, t));
169
+ PRT (" searched: %15" PRId64 " %10.2f per decision",
170
+ stats.searched, relative (stats.searched, stats.decisions));
171
+ }
172
+ if (all || stats.randec.random_decisions) {
173
+ PRT ("rand. dec phase: %15" PRId64 " %10.2f per interval",
174
+ stats.randec.random_decision_phases,
175
+ relative (stats.randec.random_decision_phases, stats.decisions));
176
+ PRT ("random decs: %15" PRId64 " %10.2f per phase",
177
+ stats.randec.random_decisions,
178
+ relative (stats.randec.random_decisions,
179
+ stats.randec.random_decision_phases));
180
+ }
181
+ if (all || stats.all.eliminated) {
182
+ PRT ("eliminated: %15" PRId64 " %10.2f %% of all variables",
183
+ stats.all.eliminated, percent (stats.all.eliminated, stats.vars));
184
+ PRT (" fastelim: %15" PRId64 " %10.2f %% of eliminated",
185
+ stats.all.fasteliminated,
186
+ percent (stats.all.fasteliminated, stats.all.eliminated));
187
+ PRT (" elimphases: %15" PRId64 " %10.2f interval",
188
+ stats.elimphases, relative (stats.conflicts, stats.elimphases));
189
+ PRT (" elimrounds: %15" PRId64 " %10.2f per phase",
190
+ stats.elimrounds, relative (stats.elimrounds, stats.elimphases));
191
+ PRT (" elimtried: %15" PRId64 " %10.2f %% eliminated",
192
+ stats.elimtried, percent (stats.all.eliminated, stats.elimtried));
193
+ PRT (" elimgates: %15" PRId64 " %10.2f %% gates per tried",
194
+ stats.elimgates, percent (stats.elimgates, stats.elimtried));
195
+ PRT (" elimequivs: %15" PRId64 " %10.2f %% equivalence gates",
196
+ stats.elimequivs, percent (stats.elimequivs, stats.elimgates));
197
+ PRT (" elimands: %15" PRId64 " %10.2f %% and gates",
198
+ stats.elimands, percent (stats.elimands, stats.elimgates));
199
+ PRT (" elimites: %15" PRId64 " %10.2f %% if-then-else gates",
200
+ stats.elimites, percent (stats.elimites, stats.elimgates));
201
+ PRT (" elimxors: %15" PRId64 " %10.2f %% xor gates",
202
+ stats.elimxors, percent (stats.elimxors, stats.elimgates));
203
+ PRT (" elimdefs: %15" PRId64 " %10.2f %% definitions",
204
+ stats.definitions_extracted,
205
+ percent (stats.definitions_extracted, stats.elimgates));
206
+ PRT (" elimsubst: %15" PRId64 " %10.2f %% substituted",
207
+ stats.elimsubst, percent (stats.elimsubst, stats.all.eliminated));
208
+ PRT (" elimsubstequi: %15" PRId64 " %10.2f %% equivalence gates",
209
+ stats.eliminated_equi,
210
+ percent (stats.eliminated_equi, stats.elimsubst));
211
+ PRT (" elimsubstands: %15" PRId64 " %10.2f %% and gates",
212
+ stats.eliminated_and,
213
+ percent (stats.eliminated_and, stats.elimsubst));
214
+ PRT (" elimsubstites: %15" PRId64 " %10.2f %% if-then-else gates",
215
+ stats.eliminated_ite,
216
+ percent (stats.eliminated_ite, stats.elimsubst));
217
+ PRT (" elimsubstxors: %15" PRId64 " %10.2f %% xor gates",
218
+ stats.eliminated_xor,
219
+ percent (stats.eliminated_xor, stats.elimsubst));
220
+ PRT (" elimsubstdefs: %15" PRId64 " %10.2f %% definitions",
221
+ stats.eliminated_def,
222
+ percent (stats.eliminated_def, stats.elimsubst));
223
+ PRT (" elimres: %15" PRId64 " %10.2f per eliminated",
224
+ stats.elimres, relative (stats.elimres, stats.all.eliminated));
225
+ PRT (" elimrestried: %15" PRId64 " %10.2f %% per resolution",
226
+ stats.elimrestried, percent (stats.elimrestried, stats.elimres));
227
+ PRT (" def checked: %15" PRId64 " %10.2f per phase",
228
+ stats.definitions_checked,
229
+ relative (stats.definitions_checked, stats.elimphases));
230
+ PRT (" def extracted: %15" PRId64 " %10.2f %% per checked",
231
+ stats.definitions_extracted,
232
+ percent (stats.definitions_extracted, stats.definitions_checked));
233
+ PRT (" def units: %15" PRId64 " %10.2f %% per checked",
234
+ stats.definition_units,
235
+ percent (stats.definition_units, stats.definitions_checked));
236
+ }
237
+ if (all || stats.ext_prop.ext_cb) {
238
+ PRT ("ext.prop. calls: %15" PRId64 " %10.2f %% of queries",
239
+ stats.ext_prop.eprop_call,
240
+ percent (stats.ext_prop.eprop_call, stats.ext_prop.ext_cb));
241
+ PRT (" propagating: %15" PRId64 " %10.2f %% per eprop-call",
242
+ stats.ext_prop.eprop_prop,
243
+ percent (stats.ext_prop.eprop_prop, stats.ext_prop.eprop_call));
244
+ PRT (" explained: %15" PRId64 " %10.2f %% per eprop-call",
245
+ stats.ext_prop.eprop_expl,
246
+ percent (stats.ext_prop.eprop_expl, stats.ext_prop.eprop_call));
247
+ PRT (" falsified: %15" PRId64 " %10.2f %% per eprop-call",
248
+ stats.ext_prop.eprop_conf,
249
+ percent (stats.ext_prop.eprop_conf, stats.ext_prop.eprop_call));
250
+ PRT ("ext.clause calls:%15" PRId64 " %10.2f %% of queries",
251
+ stats.ext_prop.elearn_call,
252
+ percent (stats.ext_prop.elearn_call, stats.ext_prop.ext_cb));
253
+ PRT (" learned: %15" PRId64 " %10.2f %% per called",
254
+ stats.ext_prop.elearned,
255
+ percent (stats.ext_prop.elearned, stats.ext_prop.elearn_call));
256
+ PRT (" conflicting: %15" PRId64 " %10.2f %% per learned",
257
+ stats.ext_prop.elearn_conf,
258
+ percent (stats.ext_prop.elearn_conf, stats.ext_prop.elearned));
259
+ PRT (" propagating: %15" PRId64 " %10.2f %% per learned",
260
+ stats.ext_prop.elearn_prop,
261
+ percent (stats.ext_prop.elearn_prop, stats.ext_prop.elearned));
262
+ PRT ("ext.final check: %15" PRId64 " %10.2f %% of queries",
263
+ stats.ext_prop.echeck_call,
264
+ percent (stats.ext_prop.echeck_call, stats.ext_prop.ext_cb));
265
+ }
266
+ if (all || stats.factored) {
267
+ PRT ("factored: %15" PRId64 " %10.2f %% of variables",
268
+ stats.factored, percent (stats.factored, internal->max_var));
269
+ PRT (" factor: %15" PRId64 " %10.2f conflict interval",
270
+ stats.factor, relative (stats.conflicts, stats.factor));
271
+ PRT (" cls factored: %15" PRId64 " %10.2f per factored",
272
+ stats.factor_added, relative (stats.factor_added, factored));
273
+ PRT (" lits factored: %15" PRId64 " %10.2f per factored",
274
+ stats.literals_factored,
275
+ relative (stats.literals_factored, factored));
276
+ PRT (" cls unfactored:%15" PRId64 " %10.2f per factored",
277
+ stats.clauses_unfactored,
278
+ relative (stats.clauses_unfactored, factored));
279
+ PRT (" lits unfactored:%14" PRId64 " %10.2f per factored",
280
+ stats.literals_unfactored,
281
+ relative (stats.literals_unfactored, factored));
282
+ }
283
+ if (all || stats.all.fixed) {
284
+ PRT ("fixed: %15" PRId64 " %10.2f %% of all variables",
285
+ stats.all.fixed, percent (stats.all.fixed, stats.vars));
286
+ PRT (" failed: %15" PRId64 " %10.2f %% of all variables",
287
+ stats.failed, percent (stats.failed, stats.vars));
288
+ PRT (" probefailed: %15" PRId64 " %10.2f %% per failed",
289
+ stats.probefailed, percent (stats.probefailed, stats.failed));
290
+ PRT (" transredunits: %15" PRId64 " %10.2f %% per failed",
291
+ stats.transredunits, percent (stats.transredunits, stats.failed));
292
+ PRT (" inprobephases: %15" PRId64 " %10.2f interval",
293
+ stats.inprobingphases,
294
+ relative (stats.conflicts, stats.inprobingphases));
295
+ PRT (" inprobesuccess:%15" PRId64 " %10.2f %% phases",
296
+ stats.inprobesuccess,
297
+ percent (stats.inprobesuccess, stats.inprobingphases));
298
+ PRT (" probingrounds: %15" PRId64 " %10.2f per phase",
299
+ stats.probingrounds,
300
+ relative (stats.probingrounds, stats.inprobingphases));
301
+ PRT (" probed: %15" PRId64 " %10.2f per failed",
302
+ stats.probed, relative (stats.probed, stats.failed));
303
+ PRT (" hbrs: %15" PRId64 " %10.2f per probed",
304
+ stats.hbrs, relative (stats.hbrs, stats.probed));
305
+ PRT (" hbrsizes: %15" PRId64 " %10.2f per hbr",
306
+ stats.hbrsizes, relative (stats.hbrsizes, stats.hbrs));
307
+ PRT (" hbreds: %15" PRId64 " %10.2f %% per hbr",
308
+ stats.hbreds, percent (stats.hbreds, stats.hbrs));
309
+ PRT (" hbrsubs: %15" PRId64 " %10.2f %% per hbr",
310
+ stats.hbrsubs, percent (stats.hbrsubs, stats.hbrs));
311
+ }
312
+ PRT (" units: %15" PRId64 " %10.2f interval", stats.units,
313
+ relative (stats.conflicts, stats.units));
314
+ PRT (" binaries: %15" PRId64 " %10.2f interval",
315
+ stats.binaries, relative (stats.conflicts, stats.binaries));
316
+ if (all || stats.flush.learned) {
317
+ PRT ("flushed: %15" PRId64 " %10.2f %% per conflict",
318
+ stats.flush.learned,
319
+ percent (stats.flush.learned, stats.conflicts));
320
+ PRT (" hyper: %15" PRId64 " %10.2f %% per conflict",
321
+ stats.flush.hyper, relative (stats.flush.hyper, stats.conflicts));
322
+ PRT (" flushings: %15" PRId64 " %10.2f interval",
323
+ stats.flush.count, relative (stats.conflicts, stats.flush.count));
324
+ }
325
+ if (all || stats.instantiated) {
326
+ PRT ("instantiated: %15" PRId64 " %10.2f %% of tried",
327
+ stats.instantiated, percent (stats.instantiated, stats.instried));
328
+ PRT (" instrounds: %15" PRId64 " %10.2f %% of elimrounds",
329
+ stats.instrounds, percent (stats.instrounds, stats.elimrounds));
330
+ }
331
+ if (all || stats.conflicts) {
332
+ PRT ("learned: %15" PRId64 " %10.2f %% per conflict",
333
+ stats.learned.clauses,
334
+ percent (stats.learned.clauses, stats.conflicts));
335
+ PRT (" bumped: %15" PRId64 " %10.2f per learned",
336
+ stats.bumped, relative (stats.bumped, stats.learned.clauses));
337
+ PRT (" recomputed: %15" PRId64 " %10.2f %% per learned",
338
+ stats.recomputed,
339
+ percent (stats.recomputed, stats.learned.clauses));
340
+ PRT (" promoted1: %15" PRId64 " %10.2f %% per learned",
341
+ stats.promoted1, percent (stats.promoted1, stats.learned.clauses));
342
+ PRT (" promoted2: %15" PRId64 " %10.2f %% per learned",
343
+ stats.promoted2, percent (stats.promoted2, stats.learned.clauses));
344
+ PRT (" improvedglue: %15" PRId64 " %10.2f %% per learned",
345
+ stats.improvedglue,
346
+ percent (stats.improvedglue, stats.learned.clauses));
347
+ }
348
+ if (all || stats.lucky.succeeded) {
349
+ PRT ("lucky: %15" PRId64 " %10.2f %% of tried",
350
+ stats.lucky.succeeded,
351
+ percent (stats.lucky.succeeded, stats.lucky.tried));
352
+ PRT (" constantzero %15" PRId64 " %10.2f %% of tried",
353
+ stats.lucky.constant.zero,
354
+ percent (stats.lucky.constant.zero, stats.lucky.tried));
355
+ PRT (" constantone %15" PRId64 " %10.2f %% of tried",
356
+ stats.lucky.constant.one,
357
+ percent (stats.lucky.constant.one, stats.lucky.tried));
358
+ PRT (" backwardone %15" PRId64 " %10.2f %% of tried",
359
+ stats.lucky.backward.one,
360
+ percent (stats.lucky.backward.one, stats.lucky.tried));
361
+ PRT (" backwardzero %15" PRId64 " %10.2f %% of tried",
362
+ stats.lucky.backward.zero,
363
+ percent (stats.lucky.backward.zero, stats.lucky.tried));
364
+ PRT (" forwardone %15" PRId64 " %10.2f %% of tried",
365
+ stats.lucky.forward.one,
366
+ percent (stats.lucky.forward.one, stats.lucky.tried));
367
+ PRT (" forwardzero %15" PRId64 " %10.2f %% of tried",
368
+ stats.lucky.forward.zero,
369
+ percent (stats.lucky.forward.zero, stats.lucky.tried));
370
+ PRT (" positivehorn %15" PRId64 " %10.2f %% of tried",
371
+ stats.lucky.horn.positive,
372
+ percent (stats.lucky.horn.positive, stats.lucky.tried));
373
+ PRT (" negativehorn %15" PRId64 " %10.2f %% of tried",
374
+ stats.lucky.horn.negative,
375
+ percent (stats.lucky.horn.negative, stats.lucky.tried));
376
+ }
377
+ PRT (" extendbytes: %15zd %10.2f bytes and MB", extendbytes,
378
+ extendbytes / (double) (1l << 20));
379
+ if (all || stats.learned.clauses)
380
+ PRT ("learned_lits: %15" PRId64 " %10.2f %% learned literals",
381
+ stats.learned.literals,
382
+ percent (stats.learned.literals, stats.learned.literals));
383
+ PRT ("minimized: %15" PRId64 " %10.2f %% learned literals",
384
+ stats.minimized, percent (stats.minimized, stats.learned.literals));
385
+ PRT ("shrunken: %15" PRId64 " %10.2f %% learned literals",
386
+ stats.shrunken, percent (stats.shrunken, stats.learned.literals));
387
+ PRT ("minishrunken: %15" PRId64 " %10.2f %% learned literals",
388
+ stats.minishrunken,
389
+ percent (stats.minishrunken, stats.learned.literals));
390
+
391
+ if (all || stats.conflicts) {
392
+ PRT ("otfs: %15" PRId64 " %10.2f %% of conflict",
393
+ stats.otfs.subsumed + stats.otfs.strengthened,
394
+ percent (stats.otfs.subsumed + stats.otfs.strengthened,
395
+ stats.conflicts));
396
+ PRT (" subsumed %15" PRId64 " %10.2f %% of conflict",
397
+ stats.otfs.subsumed,
398
+ percent (stats.otfs.subsumed, stats.conflicts));
399
+ PRT (" strengthened %15" PRId64 " %10.2f %% of conflict",
400
+ stats.otfs.strengthened,
401
+ percent (stats.otfs.strengthened, stats.conflicts));
402
+ }
403
+
404
+ PRT ("propagations: %15" PRId64 " %10.2f M per second",
405
+ propagations, relative (propagations / 1e6, t));
406
+ PRT (" coverprops: %15" PRId64 " %10.2f %% of propagations",
407
+ stats.propagations.cover,
408
+ percent (stats.propagations.cover, propagations));
409
+ PRT (" probeprops: %15" PRId64 " %10.2f %% of propagations",
410
+ stats.propagations.probe,
411
+ percent (stats.propagations.probe, propagations));
412
+ PRT (" searchprops: %15" PRId64 " %10.2f %% of propagations",
413
+ stats.propagations.search,
414
+ percent (stats.propagations.search, propagations));
415
+ PRT (" transredprops: %15" PRId64 " %10.2f %% of propagations",
416
+ stats.propagations.transred,
417
+ percent (stats.propagations.transred, propagations));
418
+ PRT (" vivifyprops: %15" PRId64 " %10.2f %% of propagations",
419
+ stats.propagations.vivify,
420
+ percent (stats.propagations.vivify, propagations));
421
+ if (all || stats.reactivated) {
422
+ PRT ("reactivated: %15" PRId64 " %10.2f %% of all variables",
423
+ stats.reactivated, percent (stats.reactivated, stats.vars));
424
+ }
425
+ if (all || stats.reduced) {
426
+ PRT ("reduced: %15" PRId64 " %10.2f %% per conflict",
427
+ stats.reduced, percent (stats.reduced, stats.conflicts));
428
+ PRT (" reductions: %15" PRId64 " %10.2f interval",
429
+ stats.reductions, relative (stats.conflicts, stats.reductions));
430
+ PRT (" sqrt scheme: %15" PRId64 " %10.2f %% reductions",
431
+ stats.reduced_sqrt,
432
+ relative (stats.reduced_sqrt, stats.reductions));
433
+ PRT (" prct scheme: %15" PRId64 " %10.2f %% reductions",
434
+ stats.reduced_prct,
435
+ relative (stats.reduced_prct, stats.reductions));
436
+ PRT (" collections: %15" PRId64 " %10.2f interval",
437
+ stats.collections, relative (stats.conflicts, stats.collections));
438
+ }
439
+ if (all || stats.rephased.total) {
440
+ PRT ("rephased: %15" PRId64 " %10.2f interval",
441
+ stats.rephased.total,
442
+ relative (stats.conflicts, stats.rephased.total));
443
+ PRT (" rephasedbest: %15" PRId64 " %10.2f %% rephased best",
444
+ stats.rephased.best,
445
+ percent (stats.rephased.best, stats.rephased.total));
446
+ PRT (" rephasedflip: %15" PRId64 " %10.2f %% rephased flipping",
447
+ stats.rephased.flipped,
448
+ percent (stats.rephased.flipped, stats.rephased.total));
449
+ PRT (" rephasedinv: %15" PRId64 " %10.2f %% rephased inverted",
450
+ stats.rephased.inverted,
451
+ percent (stats.rephased.inverted, stats.rephased.total));
452
+ PRT (" rephasedorig: %15" PRId64 " %10.2f %% rephased original",
453
+ stats.rephased.original,
454
+ percent (stats.rephased.original, stats.rephased.total));
455
+ PRT (" rephasedrand: %15" PRId64 " %10.2f %% rephased random",
456
+ stats.rephased.random,
457
+ percent (stats.rephased.random, stats.rephased.total));
458
+ PRT (" rephasedwalk: %15" PRId64 " %10.2f %% rephased walk",
459
+ stats.rephased.walk,
460
+ percent (stats.rephased.walk, stats.rephased.total));
461
+ }
462
+ if (all)
463
+ PRT ("rescored: %15" PRId64 " %10.2f interval",
464
+ stats.rescored, relative (stats.conflicts, stats.rescored));
465
+ if (all || stats.restarts) {
466
+ PRT ("restarts: %15" PRId64 " %10.2f interval",
467
+ stats.restarts, relative (stats.conflicts, stats.restarts));
468
+ PRT (" reused: %15" PRId64 " %10.2f %% per restart",
469
+ stats.reused, percent (stats.reused, stats.restarts));
470
+ PRT (" reusedlevels: %15" PRId64 " %10.2f %% per restart levels",
471
+ stats.reusedlevels,
472
+ percent (stats.reusedlevels, stats.restartlevels));
473
+ }
474
+ if (all || stats.restored) {
475
+ PRT ("restored: %15" PRId64 " %10.2f %% per weakened",
476
+ stats.restored, percent (stats.restored, stats.weakened));
477
+ PRT (" restorations: %15" PRId64 " %10.2f %% per extension",
478
+ stats.restorations,
479
+ percent (stats.restorations, stats.extensions));
480
+ PRT (" literals: %15" PRId64 " %10.2f per restored clause",
481
+ stats.restoredlits, relative (stats.restoredlits, stats.restored));
482
+ }
483
+ if (all || stats.stabphases) {
484
+ PRT ("stabilizing: %15" PRId64 " %10.2f %% of conflicts",
485
+ stats.stabphases, percent (stats.stabconflicts, stats.conflicts));
486
+ PRT (" restartstab: %15" PRId64 " %10.2f %% of all restarts",
487
+ stats.restartstable,
488
+ percent (stats.restartstable, stats.restarts));
489
+ PRT (" reusedstab: %15" PRId64 " %10.2f %% per stable restarts",
490
+ stats.reusedstable,
491
+ percent (stats.reusedstable, stats.restartstable));
492
+ }
493
+ if (all || stats.all.substituted) {
494
+ PRT ("substituted: %15" PRId64 " %10.2f %% of all variables",
495
+ stats.all.substituted,
496
+ percent (stats.all.substituted, stats.vars));
497
+ PRT (" decompositions:%15" PRId64 " %10.2f per phase",
498
+ stats.decompositions,
499
+ relative (stats.decompositions, stats.inprobingphases));
500
+ }
501
+ if (all || stats.sweep_equivalences) {
502
+ PRT ("sweep equivs: %15" PRId64 " %10.2f %% of swept variables",
503
+ stats.sweep_equivalences,
504
+ percent (stats.sweep_equivalences, stats.sweep_variables));
505
+ PRT (" sweepings: %15" PRId64 " %10.2f vars per sweeping",
506
+ stats.sweep, relative (stats.sweep_variables, stats.sweep));
507
+ PRT (" swept vars: %15" PRId64 " %10.2f %% of all variables",
508
+ stats.sweep_variables,
509
+ percent (stats.sweep_variables, stats.vars));
510
+ PRT (" sweep units: %15" PRId64 " %10.2f %% of all variables",
511
+ stats.sweep_units, percent (stats.sweep_units, stats.vars));
512
+ PRT (" solved: %15" PRId64 " %10.2f per swept variable",
513
+ stats.sweep_solved,
514
+ relative (stats.sweep_solved, stats.sweep_variables));
515
+ PRT (" sat: %15" PRId64 " %10.2f %% solved",
516
+ stats.sweep_sat, percent (stats.sweep_sat, stats.sweep_solved));
517
+ PRT (" unsat: %15" PRId64 " %10.2f %% solved",
518
+ stats.sweep_unsat,
519
+ percent (stats.sweep_unsat, stats.sweep_solved));
520
+ PRT (" backbone solved:%14" PRId64 " %10.2f %% solved",
521
+ stats.sweep_solved_backbone,
522
+ percent (stats.sweep_solved_backbone, stats.sweep_solved));
523
+ PRT (" sat: %15" PRId64 " %10.2f %% backbone solved",
524
+ stats.sweep_sat_backbone,
525
+ percent (stats.sweep_sat_backbone, stats.sweep_solved_backbone));
526
+ PRT (" unsat: %15" PRId64 " %10.2f %% backbone solved",
527
+ stats.sweep_unsat_backbone,
528
+ percent (stats.sweep_unsat_backbone, stats.sweep_solved_backbone));
529
+ PRT (" unknown: %15" PRId64 " %10.2f %% backbone solved",
530
+ stats.sweep_unknown_backbone,
531
+ percent (stats.sweep_unknown_backbone,
532
+ stats.sweep_solved_backbone));
533
+ PRT (" fixed: %15" PRId64 " %10.2f per swept variable",
534
+ stats.sweep_fixed_backbone,
535
+ relative (stats.sweep_fixed_backbone, stats.sweep_variables));
536
+ PRT (" flip: %15" PRId64 " %10.2f per swept variable",
537
+ stats.sweep_flip_backbone,
538
+ relative (stats.sweep_flip_backbone, stats.sweep_variables));
539
+ PRT (" flipped: %15" PRId64 " %10.2f %% of backbone flip",
540
+ stats.sweep_flipped_backbone,
541
+ percent (stats.sweep_flipped_backbone, stats.sweep_flip_backbone));
542
+ PRT (" equiv solved: %15" PRId64 " %10.2f %% solved",
543
+ stats.sweep_solved_equivalences,
544
+ percent (stats.sweep_solved_equivalences, stats.sweep_solved));
545
+ PRT (" sat: %15" PRId64 " %10.2f %% equiv solved",
546
+ stats.sweep_sat_equivalences,
547
+ percent (stats.sweep_sat_equivalences,
548
+ stats.sweep_solved_equivalences));
549
+ PRT (" unsat: %15" PRId64 " %10.2f %% equiv solved",
550
+ stats.sweep_unsat_equivalences,
551
+ percent (stats.sweep_unsat_equivalences,
552
+ stats.sweep_solved_equivalences));
553
+ PRT (" unknown: %15" PRId64 " %10.2f %% equiv solved",
554
+ stats.sweep_unknown_equivalences,
555
+ percent (stats.sweep_unknown_equivalences,
556
+ stats.sweep_solved_equivalences));
557
+ PRT (" flip: %15" PRId64 " %10.2f per swept variable",
558
+ stats.sweep_flip_equivalences,
559
+ relative (stats.sweep_flip_equivalences, stats.sweep_variables));
560
+ PRT (" flipped: %15" PRId64 " %10.2f %% of equiv flip",
561
+ stats.sweep_flipped_equivalences,
562
+ percent (stats.sweep_flipped_equivalences,
563
+ stats.sweep_flip_equivalences));
564
+ PRT (" depth: %15" PRId64 " %10.2f per swept variable",
565
+ stats.sweep_depth,
566
+ relative (stats.sweep_depth, stats.sweep_variables));
567
+ PRT (" environment: %15" PRId64 " %10.2f per swept variable",
568
+ stats.sweep_environment,
569
+ relative (stats.sweep_environment, stats.sweep_variables));
570
+ PRT (" clauses: %15" PRId64 " %10.2f per swept variable",
571
+ stats.sweep_clauses,
572
+ relative (stats.sweep_clauses, stats.sweep_variables));
573
+ PRT (" completed: %15" PRId64 " %10.2f sweeps to complete",
574
+ stats.sweep_completed,
575
+ relative (stats.sweep, stats.sweep_completed));
576
+ }
577
+ if (all || stats.subsumed) {
578
+ PRT ("subsumed: %15" PRId64 " %10.2f %% of all clauses",
579
+ stats.subsumed, percent (stats.subsumed, stats.added.total));
580
+ PRT (" subsumephases: %15" PRId64 " %10.2f interval",
581
+ stats.subsumephases,
582
+ relative (stats.conflicts, stats.subsumephases));
583
+ PRT (" subsumerounds: %15" PRId64 " %10.2f per phase",
584
+ stats.subsumerounds,
585
+ relative (stats.subsumerounds, stats.subsumephases));
586
+ PRT (" deduplicated: %15" PRId64 " %10.2f %% per subsumed",
587
+ stats.deduplicated, percent (stats.deduplicated, stats.subsumed));
588
+ PRT (" transreds: %15" PRId64 " %10.2f interval",
589
+ stats.transreds, relative (stats.conflicts, stats.transreds));
590
+ PRT (" transitive: %15" PRId64 " %10.2f %% per subsumed",
591
+ stats.transitive, percent (stats.transitive, stats.subsumed));
592
+ PRT (" subirr: %15" PRId64 " %10.2f %% of subsumed",
593
+ stats.subirr, percent (stats.subirr, stats.subsumed));
594
+ PRT (" subred: %15" PRId64 " %10.2f %% of subsumed",
595
+ stats.subred, percent (stats.subred, stats.subsumed));
596
+ PRT (" subtried: %15" PRId64 " %10.2f tried per subsumed",
597
+ stats.subtried, relative (stats.subtried, stats.subsumed));
598
+ PRT (" subchecks: %15" PRId64 " %10.2f per tried",
599
+ stats.subchecks, relative (stats.subchecks, stats.subtried));
600
+ PRT (" subchecks2: %15" PRId64 " %10.2f %% per subcheck",
601
+ stats.subchecks2, percent (stats.subchecks2, stats.subchecks));
602
+ PRT (" elimotfsub: %15" PRId64 " %10.2f %% of subsumed",
603
+ stats.elimotfsub, percent (stats.elimotfsub, stats.subsumed));
604
+ PRT (" elimbwsub: %15" PRId64 " %10.2f %% of subsumed",
605
+ stats.elimbwsub, percent (stats.elimbwsub, stats.subsumed));
606
+ PRT (" eagersub: %15" PRId64 " %10.2f %% of subsumed",
607
+ stats.eagersub, percent (stats.eagersub, stats.subsumed));
608
+ PRT (" eagertried: %15" PRId64 " %10.2f tried per eagersub",
609
+ stats.eagertried, relative (stats.eagertried, stats.eagersub));
610
+ }
611
+ if (all || stats.strengthened) {
612
+ PRT ("strengthened: %15" PRId64 " %10.2f %% of all clauses",
613
+ stats.strengthened,
614
+ percent (stats.strengthened, stats.added.total));
615
+ PRT (" elimotfstr: %15" PRId64 " %10.2f %% of strengthened",
616
+ stats.elimotfstr, percent (stats.elimotfstr, stats.strengthened));
617
+ PRT (" elimbwstr: %15" PRId64 " %10.2f %% of strengthened",
618
+ stats.elimbwstr, percent (stats.elimbwstr, stats.strengthened));
619
+ }
620
+ if (all || stats.htrs) {
621
+ PRT ("ternary: %15" PRId64 " %10.2f %% of resolved",
622
+ stats.htrs, percent (stats.htrs, stats.ternres));
623
+ PRT (" phases: %15" PRId64 " %10.2f interval",
624
+ stats.ternary, relative (stats.conflicts, stats.ternary));
625
+ PRT (" htr3: %15" PRId64
626
+ " %10.2f %% ternary hyper ternres",
627
+ stats.htrs3, percent (stats.htrs3, stats.htrs));
628
+ PRT (" htr2: %15" PRId64 " %10.2f %% binary hyper ternres",
629
+ stats.htrs2, percent (stats.htrs2, stats.htrs));
630
+ }
631
+ PRT ("ticks: %15" PRId64 " %10.2f propagation", totalticks,
632
+ relative (totalticks, stats.propagations.search));
633
+ PRT (" searchticks: %15" PRId64 " %10.2f %% totalticks",
634
+ searchticks, percent (searchticks, totalticks));
635
+ PRT (" stableticks: %15" PRId64 " %10.2f %% searchticks",
636
+ stats.ticks.search[1], percent (stats.ticks.search[1], searchticks));
637
+ PRT (" unstableticks:%15" PRId64 " %10.2f %% searchticks",
638
+ stats.ticks.search[0], percent (stats.ticks.search[0], searchticks));
639
+ PRT (" inprobeticks: %15" PRId64 " %10.2f %% totalticks",
640
+ inprobeticks, percent (inprobeticks, totalticks));
641
+ PRT (" backboneticks:%15" PRId64 " %10.2f %% searchticks",
642
+ stats.ticks.backbone, percent (stats.ticks.backbone, searchticks));
643
+ PRT (" factorticks: %15" PRId64 " %10.2f %% searchticks",
644
+ stats.ticks.factor, percent (stats.ticks.factor, searchticks));
645
+ PRT (" probeticks: %15" PRId64 " %10.2f %% searchticks",
646
+ stats.ticks.probe, percent (stats.ticks.probe, searchticks));
647
+ PRT (" sweepticks: %15" PRId64 " %10.2f %% searchticks",
648
+ stats.ticks.sweep, percent (stats.ticks.sweep, searchticks));
649
+ PRT (" ternaryticks: %15" PRId64 " %10.2f %% searchticks",
650
+ stats.ticks.ternary, percent (stats.ticks.ternary, searchticks));
651
+ PRT (" vivifyticks: %15" PRId64 " %10.2f %% searchticks",
652
+ stats.ticks.vivify, percent (stats.ticks.vivify, searchticks));
653
+ PRT (" walkticks: %15" PRId64 " %10.2f %% searchticks",
654
+ stats.ticks.walk, percent (stats.ticks.walk, searchticks));
655
+ PRT (" walkflipticks:%15" PRId64 " %10.2f %% searchticks",
656
+ stats.ticks.walkflip, percent (stats.ticks.walkflip, searchticks));
657
+ PRT (" walkflipbrk: %15" PRId64 " %10.2f %% searchticks",
658
+ stats.ticks.walkflipbroken,
659
+ percent (stats.ticks.walkflipbroken, searchticks));
660
+ PRT (" walkflipWL: %15" PRId64 " %10.2f %% searchticks",
661
+ stats.ticks.walkflipWL,
662
+ percent (stats.ticks.walkflipWL, searchticks));
663
+ PRT (" walkpickticks:%15" PRId64 " %10.2f %% searchticks",
664
+ stats.ticks.walkpick, percent (stats.ticks.walkpick, searchticks));
665
+ PRT (" walkbreak: %15" PRId64 " %10.2f %% searchticks",
666
+ stats.ticks.walkbreak, percent (stats.ticks.walkbreak, searchticks));
667
+ if (all) {
668
+ PRT ("tier recomputed: %15" PRId64 " %10.2f interval",
669
+ stats.tierecomputed,
670
+ relative (stats.conflicts, stats.tierecomputed));
671
+ }
672
+ if (all || stats.ilbtriggers) {
673
+ PRT ("trail reuses: %15" PRId64 " %10.2f %% of incremental calls",
674
+ stats.ilbsuccess, percent (stats.ilbsuccess, stats.ilbtriggers));
675
+ PRT (" levels: %15" PRId64 " %10.2f per reuse",
676
+ stats.levelsreused,
677
+ relative (stats.levelsreused, stats.ilbsuccess));
678
+ PRT (" literals: %15" PRId64 " %10.2f per reuse",
679
+ stats.literalsreused,
680
+ relative (stats.literalsreused, stats.ilbsuccess));
681
+ PRT (" assumptions: %15" PRId64 " %10.2f per reuse",
682
+ stats.assumptionsreused,
683
+ relative (stats.assumptionsreused, stats.ilbsuccess));
684
+ }
685
+ if (all || vivified) {
686
+ PRT ("vivified: %15" PRId64 " %10.2f %% of all clauses",
687
+ vivified, percent (vivified, stats.added.total));
688
+ PRT (" vivifications: %15" PRId64 " %10.2f interval",
689
+ stats.vivifications,
690
+ relative (stats.conflicts, stats.vivifications));
691
+ PRT (" vivifychecks: %15" PRId64 " %10.2f %% per conflict",
692
+ stats.vivifychecks, percent (stats.vivifychecks, stats.conflicts));
693
+ const int64_t vivified = stats.vivifiedtier1 + stats.vivifiedtier2 +
694
+ stats.vivifiedtier3 + stats.vivifiedirred;
695
+ PRT (" vivified: %15" PRId64 " %10.2f %% per check", vivified,
696
+ percent (vivified, stats.vivifychecks));
697
+ PRT (" vified-irred: %15" PRId64 " %10.2f %% per vivified",
698
+ stats.vivifiedirred, percent (stats.vivifiedirred, vivified));
699
+ PRT (" vified-tier1: %15" PRId64 " %10.2f %% per vivified",
700
+ stats.vivifiedtier1, percent (stats.vivifiedtier1, vivified));
701
+ PRT (" vified-tier2: %15" PRId64 " %10.2f %% per vivified",
702
+ stats.vivifiedtier2, percent (stats.vivifiedtier2, vivified));
703
+ PRT (" vified-tier3: %15" PRId64 " %10.2f %% per vivified",
704
+ stats.vivifiedtier3, percent (stats.vivifiedtier3, vivified));
705
+ PRT (" vivifysched: %15" PRId64 " %10.2f %% checks per scheduled",
706
+ stats.vivifysched,
707
+ percent (stats.vivifychecks, stats.vivifysched));
708
+ PRT (" vivifyunits: %15" PRId64 " %10.2f %% per vivify check",
709
+ stats.vivifyunits,
710
+ percent (stats.vivifyunits, stats.vivifychecks));
711
+ PRT (" vivifyinst: %15" PRId64 " %10.2f %% per vivify check",
712
+ stats.vivifyinst, percent (stats.vivifyinst, stats.vivifychecks));
713
+ PRT (" vivifysubs: %15" PRId64 " %10.2f %% per subsumed",
714
+ stats.vivifysubs, percent (stats.vivifysubs, stats.subsumed));
715
+ PRT (" vivifyflushed: %15" PRId64 " %10.2f %% per subsumed",
716
+ stats.vivifyflushed,
717
+ percent (stats.vivifyflushed, stats.subsumed));
718
+ PRT (" vivifysubred: %15" PRId64 " %10.2f %% per subs",
719
+ stats.vivifysubred,
720
+ percent (stats.vivifysubred, stats.vivifysubs));
721
+ PRT (" vivifysubirr: %15" PRId64 " %10.2f %% per subs",
722
+ stats.vivifysubirr,
723
+ percent (stats.vivifysubirr, stats.vivifysubs));
724
+ PRT (" vivifystrs: %15" PRId64 " %10.2f %% per strengthened",
725
+ stats.vivifystrs, percent (stats.vivifystrs, stats.strengthened));
726
+ PRT (" vivifystrirr: %15" PRId64 " %10.2f %% per vivifystrs",
727
+ stats.vivifystrirr,
728
+ percent (stats.vivifystrirr, stats.vivifystrs));
729
+ PRT (" vivifystred1: %15" PRId64 " %10.2f %% per vivifystrs",
730
+ stats.vivifystred1,
731
+ percent (stats.vivifystred1, stats.vivifystrs));
732
+ PRT (" vivifystred2: %15" PRId64 " %10.2f %% per viviyfstrs",
733
+ stats.vivifystred2,
734
+ percent (stats.vivifystred2, stats.vivifystrs));
735
+ PRT (" vivifystred3: %15" PRId64 " %10.2f %% per vivifystrs",
736
+ stats.vivifystred3,
737
+ percent (stats.vivifystred3, stats.vivifystrs));
738
+ PRT (" vivifydemote: %15" PRId64 " %10.2f %% per vivifystrs",
739
+ stats.vivifydemote,
740
+ percent (stats.vivifydemote, stats.vivifystrs));
741
+ PRT (" vivifydecs: %15" PRId64 " %10.2f per checks",
742
+ stats.vivifydecs, relative (stats.vivifydecs, stats.vivifychecks));
743
+ PRT (" vivifyreused: %15" PRId64
744
+ " %10.2f %% per non-reused decision",
745
+ stats.vivifyreused,
746
+ percent (stats.vivifyreused, stats.vivifydecs));
747
+ }
748
+ if (all || stats.walk.count) {
749
+ PRT ("walked: %15" PRId64 " %10.2f interval",
750
+ stats.walk.count, relative (stats.conflicts, stats.walk.count));
751
+ if (all || stats.warmup.count) {
752
+ PRT (" prop-warmup: %15" PRId64 " %10.2f per warmup",
753
+ stats.warmup.propagated,
754
+ relative (stats.warmup.propagated, stats.warmup.count));
755
+ PRT (" dec-warmup: %15" PRId64 " %10.2f per warmup",
756
+ stats.warmup.decision,
757
+ relative (stats.warmup.decision, stats.warmup.count));
758
+ PRT (" dummydec-w: %15" PRId64 " %10.2f per warmup",
759
+ stats.warmup.dummydecision,
760
+ relative (stats.warmup.dummydecision, stats.warmup.count));
761
+ PRT (" conflicts: %15" PRId64 " %10.2f per warmup",
762
+ stats.warmup.conflicts,
763
+ relative (stats.warmup.conflicts, stats.warmup.count));
764
+ PRT (" warmup: %15" PRId64 " %10.2f per walk",
765
+ stats.warmup.count,
766
+ relative (stats.warmup.count, stats.walk.count));
767
+ }
768
+ #ifndef QUIET
769
+ if (internal->profiles.walk.value > 0)
770
+ PRT (" flips: %15" PRId64 " %10.2f M per second",
771
+ stats.walk.flips,
772
+ relative (1e-6 * stats.walk.flips,
773
+ internal->profiles.walk.value));
774
+ else
775
+ #endif
776
+ PRT (" flips: %15" PRId64 " %10.2f per walk",
777
+ stats.walk.flips, relative (stats.walk.flips, stats.walk.count));
778
+ if (stats.walk.minimum < LONG_MAX)
779
+ PRT (" minimum: %15" PRId64 " %10.2f %% clauses",
780
+ stats.walk.minimum,
781
+ percent (stats.walk.minimum, stats.added.irredundant));
782
+ PRT (" broken: %15" PRId64 " %10.2f per flip",
783
+ stats.walk.broken, relative (stats.walk.broken, stats.walk.flips));
784
+ PRT (" improved: %15" PRId64 " %10.2f per walk",
785
+ stats.walk.improved,
786
+ relative (stats.walk.improved, stats.walk.count));
787
+ }
788
+ if (all || stats.weakened) {
789
+ PRT ("weakened: %15" PRId64 " %10.2f average size",
790
+ stats.weakened, relative (stats.weakenedlen, stats.weakened));
791
+ PRT (" extensions: %15" PRId64 " %10.2f interval",
792
+ stats.extensions, relative (stats.conflicts, stats.extensions));
793
+ PRT (" flipped: %15" PRId64 " %10.2f per weakened",
794
+ stats.extended, relative (stats.extended, stats.weakened));
795
+ }
796
+
797
+ if (all || stats.congruence.gates) {
798
+ PRT ("congruence: %15" PRId64 " %10.2f interval",
799
+ stats.congruence.rounds,
800
+ relative (stats.conflicts, stats.congruence.rounds));
801
+ PRT (" units: %15" PRId64 " %10.2f per congruent",
802
+ stats.congruence.units,
803
+ relative (stats.congruence.units, stats.congruence.congruent));
804
+ PRT (" cong-and: %15" PRId64 " %10.2f per found gates",
805
+ stats.congruence.ands,
806
+ relative (stats.congruence.ands, stats.congruence.gates));
807
+ PRT (" cong-ite: %15" PRId64 " %10.2f per found gates",
808
+ stats.congruence.ites,
809
+ relative (stats.congruence.ites, stats.congruence.gates));
810
+ PRT (" cong-xor: %15" PRId64 " %10.2f per found gates",
811
+ stats.congruence.xors,
812
+ relative (stats.congruence.xors, stats.congruence.gates));
813
+ PRT (" congruent: %15" PRId64 " %10.2f per round",
814
+ stats.congruence.congruent,
815
+ relative (stats.congruence.rounds, stats.congruence.congruent));
816
+ PRT (" unaries: %15" PRId64 " %10.2f per round",
817
+ stats.congruence.unaries,
818
+ relative (stats.congruence.rounds, stats.congruence.unaries));
819
+ int64_t rewritten = stats.congruence.rewritten_ands +
820
+ stats.congruence.rewritten_xors +
821
+ stats.congruence.rewritten_ites;
822
+ PRT (" rewritten: %15" PRId64 " %10.2f per round", rewritten,
823
+ percent (rewritten, stats.congruence.rounds));
824
+ PRT (" rewri.-ands: %15" PRId64 " %10.2f per rewritten",
825
+ stats.congruence.rewritten_ands,
826
+ percent (stats.congruence.rewritten_ands, rewritten));
827
+ PRT (" rewri.-xors: %15" PRId64 " %10.2f%% per rewritten",
828
+ stats.congruence.rewritten_xors,
829
+ percent (stats.congruence.rewritten_xors, rewritten));
830
+ PRT (" rewri.-ites: %15" PRId64 " %10.2f%% per rewritten",
831
+ stats.congruence.rewritten_ites,
832
+ percent (stats.congruence.rewritten_ites, rewritten));
833
+ PRT (" subsumed: %15" PRId64 " %10.2f%% per round",
834
+ stats.congruence.subsumed,
835
+ relative (stats.congruence.subsumed, stats.congruence.rounds));
836
+ }
837
+
838
+ LINE ();
839
+ MSG ("%sseconds are measured in %s time for solving%s",
840
+ tout.magenta_code (), internal->opts.realtime ? "real" : "process",
841
+ tout.normal_code ());
842
+
843
+ SECTION ("glue usage");
844
+
845
+ internal->print_tier_usage_statistics ();
846
+
847
+ #endif // ifndef QUIET
848
+ }
849
+
850
+ void Internal::print_resource_usage () {
851
+ #ifndef QUIET
852
+ SECTION ("resources");
853
+ uint64_t m = maximum_resident_set_size ();
854
+ MSG ("total process time since initialization: %12.2f seconds",
855
+ internal->process_time ());
856
+ MSG ("total real time since initialization: %12.2f seconds",
857
+ internal->real_time ());
858
+ MSG ("maximum resident set size of process: %12.2f MB",
859
+ m / (double) (1l << 20));
860
+ #endif
861
+ }
862
+
863
+ /*------------------------------------------------------------------------*/
864
+
865
+ void Checker::print_stats () {
866
+
867
+ if (!stats.added && !stats.deleted)
868
+ return;
869
+
870
+ SECTION ("checker statistics");
871
+
872
+ MSG ("checks: %15" PRId64 "", stats.checks);
873
+ MSG ("assumptions: %15" PRId64 " %10.2f per check",
874
+ stats.assumptions, relative (stats.assumptions, stats.checks));
875
+ MSG ("propagations: %15" PRId64 " %10.2f per check",
876
+ stats.propagations, relative (stats.propagations, stats.checks));
877
+ MSG ("original: %15" PRId64 " %10.2f %% of all clauses",
878
+ stats.original, percent (stats.original, stats.added));
879
+ MSG ("derived: %15" PRId64 " %10.2f %% of all clauses",
880
+ stats.derived, percent (stats.derived, stats.added));
881
+ MSG ("deleted: %15" PRId64 " %10.2f %% of all clauses",
882
+ stats.deleted, percent (stats.deleted, stats.added));
883
+ MSG ("insertions: %15" PRId64 " %10.2f %% of all clauses",
884
+ stats.insertions, percent (stats.insertions, stats.added));
885
+ MSG ("collections: %15" PRId64 " %10.2f deleted per collection",
886
+ stats.collections, relative (stats.collections, stats.deleted));
887
+ MSG ("collisions: %15" PRId64 " %10.2f per search",
888
+ stats.collisions, relative (stats.collisions, stats.searches));
889
+ MSG ("searches: %15" PRId64 "", stats.searches);
890
+ MSG ("units: %15" PRId64 "", stats.units);
891
+ }
892
+
893
+ void LratChecker::print_stats () {
894
+
895
+ if (!stats.added && !stats.deleted)
896
+ return;
897
+
898
+ SECTION ("lrat checker statistics");
899
+
900
+ MSG ("checks: %15" PRId64 "", stats.checks);
901
+ MSG ("insertions: %15" PRId64 " %10.2f %% of all clauses",
902
+ stats.insertions, percent (stats.insertions, stats.added));
903
+ MSG ("original: %15" PRId64 " %10.2f %% of all clauses",
904
+ stats.original, percent (stats.original, stats.added));
905
+ MSG ("derived: %15" PRId64 " %10.2f %% of all clauses",
906
+ stats.derived, percent (stats.derived, stats.added));
907
+ MSG ("rat: %15" PRId64 " %10.2f %% of derived clauses",
908
+ stats.rat, percent (stats.rat, stats.derived));
909
+ MSG ("deleted: %15" PRId64 " %10.2f %% of all clauses",
910
+ stats.deleted, percent (stats.deleted, stats.added));
911
+ MSG ("finalized: %15" PRId64 " %10.2f %% of all clauses",
912
+ stats.finalized, percent (stats.finalized, stats.added));
913
+ MSG ("collections: %15" PRId64 " %10.2f deleted per collection",
914
+ stats.collections, relative (stats.collections, stats.deleted));
915
+ MSG ("collisions: %15" PRId64 " %10.2f per search",
916
+ stats.collisions, relative (stats.collisions, stats.searches));
917
+ MSG ("searches: %15" PRId64 "", stats.searches);
918
+ }
919
+
920
+ } // namespace CaDiCaL