ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
probe.c
Go to the documentation of this file.
1#include "probe.h"
2#include "backbone.h"
3#include "backtrack.h"
4#include "congruence.h"
5#include "factor.h"
6#include "internal.h"
7#include "print.h"
8#include "substitute.h"
9#include "sweep.h"
10#include "terminate.h"
11#include "transitive.h"
12#include "vivify.h"
13
14#include <inttypes.h>
15
17
19 if (!solver->enabled.probe)
20 return false;
21 statistics *statistics = &solver->statistics_;
22 const uint64_t conflicts = statistics->conflicts;
23 if (solver->last.conflicts.reduce == conflicts)
24 return false;
25 return solver->limits.probe.conflicts < conflicts;
26}
27
28static void probe (kissat *solver) {
30 KISSAT_assert (!solver->inconsistent);
32 kissat_phase (solver, "probe", GET (probings),
33 "probing limit hit after %" PRIu64 " conflicts",
34 solver->limits.probe.conflicts);
45}
46
47static void probe_initially (kissat *solver) {
48 KISSAT_assert (!solver->level);
49 KISSAT_assert (!solver->inconsistent);
50 kissat_phase (solver, "probe", GET (probings), "initial probing");
51 bool substitute_at_the_end = true;
52 if (GET_OPTION (preprocesscongruence)) {
55 substitute_at_the_end = false;
56 }
57 }
58 if (GET_OPTION (preprocessbackbone))
60 if (GET_OPTION (preprocessweep)) {
61 if (kissat_sweep (solver)) {
63 substitute_at_the_end = false;
64 }
65 }
66 if (substitute_at_the_end)
68 if (GET_OPTION (preprocessfactor))
70}
71
73 KISSAT_assert (!solver->inconsistent);
74 INC (probings);
75 KISSAT_assert (!solver->probing);
76 solver->probing = true;
77 const unsigned max_rounds = GET_OPTION (proberounds);
78 for (unsigned round = 0; round != max_rounds; round++) {
79 unsigned before = solver->active;
80 probe (solver);
81 if (solver->inconsistent)
82 break;
83 if (before == solver->active)
84 break;
85 }
87 UPDATE_CONFLICT_LIMIT (probe, probings, NLOGN, true);
88 solver->last.ticks.probe = solver->statistics_.search_ticks;
89 KISSAT_assert (solver->probing);
90 solver->probing = false;
91 return solver->inconsistent ? 20 : 0;
92}
93
95 KISSAT_assert (!solver->level);
96 KISSAT_assert (!solver->inconsistent);
97 INC (probings);
98 START (probe);
99 KISSAT_assert (!solver->probing);
100 solver->probing = true;
101 probe_initially (solver);
102 KISSAT_assert (solver->probing);
103 solver->probing = false;
104 STOP (probe);
105 return solver->inconsistent ? 20 : 0;
106}
107
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void kissat_binary_clauses_backbone(kissat *solver)
Definition backbone.c:574
void kissat_backtrack_propagate_and_flush_trail(kissat *solver)
Definition backtrack.c:165
#define INC(NAME)
ABC_NAMESPACE_IMPL_START void kissat_classify(struct kissat *solver)
Definition classify.c:7
bool kissat_congruence(kissat *solver)
void kissat_factor(kissat *solver)
Definition factor.c:1083
#define UPDATE_CONFLICT_LIMIT(NAME, COUNT, SCALE_COUNT_FUNCTION, SCALE_DELTA)
Definition kimits.h:115
#define NLOGN(COUNT)
Definition kimits.h:109
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define GET_OPTION(N)
Definition options.h:295
#define kissat_phase(...)
Definition print.h:48
int kissat_probe(kissat *solver)
Definition probe.c:72
int kissat_probe_initially(kissat *solver)
Definition probe.c:94
ABC_NAMESPACE_IMPL_START bool kissat_probing(kissat *solver)
Definition probe.c:18
#define STOP_SEARCH_AND_START_SIMPLIFIER(...)
Definition profile.h:133
#define STOP_SIMPLIFIER_AND_RESUME_SEARCH(...)
Definition profile.h:136
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
#define GET(NAME)
Definition statistics.h:416
void kissat_substitute(kissat *solver, bool complete)
Definition substitute.c:606
bool kissat_sweep(kissat *solver)
Definition sweep.c:1650
void kissat_transitive_reduction(kissat *solver)
Definition transitive.c:301
void kissat_vivify(kissat *solver)
Definition vivify.c:1402