1#ifndef _internal_hpp_INCLUDED
2#define _internal_hpp_INCLUDED
40#include <unordered_set>
131 std::vector<std::vector<int>>
cubes;
305 bool force_phase_messages;
341 void init_queue (
int old_max_var,
int new_max_var);
343 void init_scores (
int old_max_var,
int new_max_var);
356 void enlarge (
int new_max_var);
363 int res =
stats.active;
364#ifndef CADICAL_NDEBUG
367 tmp -=
stats.now.fixed;
368 tmp -=
stats.now.eliminated;
369 tmp -=
stats.now.substituted;
370 tmp -=
stats.now.pure;
391 double scale (
double v)
const;
409 return (
lit < 0) + 2u * (unsigned)
vidx (
lit);
422 int res = (ulit / 2) + 1;
431 return (
lit < 0) + 2u * (unsigned) idx;
437 const unsigned uidx =
vlit (
lit);
506 const signed char mask = 0x3f;
507#ifndef CADICAL_NDEBUG
508 const signed char bits = m & mask;
510 m = (m & mask) | (
sign (
lit) << 6);
519 const signed char mask = 0x3f;
520#ifndef CADICAL_NDEBUG
521 const signed bits = m & mask;
559 return (res & bit) != 0;
583#ifndef CADICAL_NDEBUG
594#ifndef CADICAL_NDEBUG
626 ws.push_back (
Watch (blit, c));
627 LOG (c,
"watch %d blit %d in",
lit, blit);
655 queue.unassigned = idx;
657 LOG (
"queue unassigned now %d bumped %" PRId64
"", idx,
btab[idx]);
684 std::vector<int>::reverse_iterator &,
685 std::vector<int>::reverse_iterator &,
686 std::vector<int>::size_type,
const int);
688 const std::vector<int>::reverse_iterator &,
689 unsigned &,
const int);
691 const std::vector<int>::reverse_iterator &,
693 unsigned shrink_next (
int,
unsigned &,
unsigned &);
694 std::vector<int>::reverse_iterator
696 unsigned int &,
unsigned int &,
const int);
697 unsigned shrink_block (std::vector<int>::reverse_iterator &,
698 std::vector<int>::reverse_iterator &,
int,
699 unsigned &,
unsigned &,
const int,
unsigned);
722 int64_t
cache_lines (
size_t bytes) {
return (bytes + 127) / 128; }
730 bool propagate_unstable ();
731 bool propagate_stable ();
733 void analyze_unstable ();
734 void analyze_stable ();
736 int decide_stable ();
737 int decide_unstable ();
739#define propagate_wrapper propagate
740#define analyze_wrapper analyze
741#define decide_wrapper decide
778 int &antecedent_size);
780 int &antecedent_size);
785 const std::vector<int> &);
798 bool no_backtrack =
false);
800 bool no_backtrack =
false);
824#ifndef CADICAL_NDEBUG
825 bool get_merged_literals (std::vector<int> &);
826 void get_all_fixed_literals (std::vector<int> &);
879 LOG (
"forcing asynchronous termination");
967 std::vector<Clause *> &schedule);
971 const std::vector<int> &,
Clause *,
972 std::vector<std::tuple<int, Clause *, bool>> &lrat_stack,
976 std::vector<std::tuple<int, Clause *, bool>> &);
1031 LOG (
"marking %d as subsuming literal candidate", abs (
lit));
1032 stats.mark.subsume++;
1039 LOG (
"marking %d as ternary resolution literal candidate", abs (
lit));
1040 stats.mark.ternary++;
1045 const unsigned bit =
bign (
lit);
1048 LOG (
"marking %d as factor literal candidate",
lit);
1049 stats.mark.factor++;
1068 LOG (
"marking %d as elimination literal candidate",
lit);
1074 const unsigned bit =
bign (
lit);
1077 LOG (
"marking %d as blocking literal candidate",
lit);
1091 const unsigned bit =
bign (
lit);
1092 return (f.
block & bit) != 0;
1096 const unsigned bit =
bign (
lit);
1105 const unsigned bit =
bign (
lit);
1108 LOG (
"marking %d to be skipped as blocking literal",
lit);
1113 const unsigned bit =
bign (
lit);
1114 return (f.
skip & bit) != 0;
1121 const unsigned bit =
bign (
lit);
1128 const unsigned bit =
bign (
lit);
1133 const unsigned bit =
bign (
lit);
1202 void elim (
bool update_limits =
true);
1251 unsigned scheduled);
1312 void ternary_lit (
int pivot, int64_t &steps, int64_t &htrs);
1313 void ternary_idx (
int idx, int64_t &steps, int64_t &htrs);
1343 void inprobe (
bool update_limits =
true);
1360 bool invert =
false);
1386 const unsigned bit =
bign (
lit);
1387 return (f.
assumed & bit) != 0;
1400 void implied (std::vector<int> &entrailed);
1404 void phase (
int lit);
1423 void condition (
bool update_limits =
true);
1486 int solve (
bool preprocess_only =
false);
1502#ifndef CADICAL_QUIET
1505 void start_profiling (Profile &
p,
double);
1506 void stop_profiling (Profile &
p,
double);
1508 double update_profiles ();
1509 void print_profile ();
1547 int res =
vals[idx];
1559 const int idx = abs (
lit);
1572 if ((
size_t) idx >=
frozentab.size ()) {
1574 while (new_vsize <= (
size_t)
max_var)
1579 if (ref < UINT_MAX) {
1581 LOG (
"variable %d frozen %u times", idx, ref);
1583 LOG (
"variable %d remains frozen forever", idx);
1588 if (ref < UINT_MAX) {
1591 LOG (
"variable %d is observed, can not be completely molten",
1595 LOG (
"variable %d completely molten", idx);
1597 LOG (
"variable %d melted once but remains frozen %u times",
lit,
1600 LOG (
"variable %d remains frozen forever", idx);
1627 bool finalize_clauses =
false);
1629 bool finalize_clauses =
false);
1631 bool finalize_clauses =
false);
1633 bool finalize_clauses =
false);
1664 void report (
char type,
int verbose_level = 0);
1672#ifndef CADICAL_QUIET
1674 void print_prefix ();
1681 void vmessage (
const char *, va_list &);
1688 void vverbose (
int level,
const char *fmt, va_list &);
1689 void verbose (
int level,
const char *fmt, ...)
1691 void verbose (
int level);
1699 void section (
const char *title);
1708 void phase (
const char *phase,
const char *, ...)
1715 void phase (
const char *phase, int64_t count,
const char *, ...)
1725 void verror (
const char *, va_list &);
1771 int eidx = abs (elit);
1774 int ilit =
e2i[eidx];
1795 LOG (
"termination asynchronously forced");
1806 if (
lim.terminate.forced) {
1808 if (
lim.terminate.forced-- == 1) {
1809 LOG (
"internally forcing termination");
1813 LOG (
"decremented internal forced termination limit to %d",
1814 lim.terminate.forced);
1827 if (
external->terminator && !
lim.terminate.check--) {
1831 if (
external->terminator->terminate ()) {
1833 LOG (
"connected terminator forces termination");
1847 if (
lim.conflicts >= 0 &&
stats.conflicts >=
lim.conflicts) {
1848 LOG (
"conflict limit %" PRId64
" reached",
lim.conflicts);
1852 if (
lim.decisions >= 0 &&
stats.decisions >=
lim.decisions) {
1853 LOG (
"decision limit %" PRId64
" reached",
lim.decisions);
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
#define CADICAL_assert(ignore)
#define CADICAL_ATTRIBUTE_FORMAT(FORMAT_POSITION, VARIADIC_ARGUMENT_POSITION)
type
CUBE COVER and CUBE typedefs ///.
#define propagate_wrapper
void fatal_message_start()
void remove_watch(Watches &ws, Clause *clause)
double relative(double a, double b)
std::vector< Link > Links
void fatal(const char *fmt,...)
heap< score_smaller > ScoreSchedule
std::vector< std::vector< int > > cubes
int fixed(int elit) const
unsigned char marked_signed
void delete_garbage_clauses()
void check_clause_stats()
void vivify_round(Vivifier &, int64_t delta)
void sort_and_reuse_assumptions()
void minimize_sort_clause()
Clause * new_factor_clause()
bool is_blocked_clause(Clause *c, int pivot)
int forward_false_satisfiable()
void unsetbit(int lit, int bit)
void clear_sign_marked_literals()
double clause_variable_ratio() const
bool cover_clause(Clause *c, Coveror &)
void increase_elimination_bound()
const char * parse_solution(const char *)
unsigned shrunken_block_uip(int, int, std::vector< int >::reverse_iterator &, std::vector< int >::reverse_iterator &, std::vector< int >::size_type, const int)
void elim_update_removed_lit(Eliminator &, int lit)
void citten_clear_track_log_terminate()
void elimfast_add_resolvents(Eliminator &, int pivot)
int next_decision_variable_with_best_score()
void update_queue_unassigned(int idx)
void save_add_clear_core(Sweeper &sweeper)
void notify_assignments()
void mark_duplicated_binary_clauses_as_garbage()
void watch_literal(int lit, int blit, Clause *c)
void remove_garbage_binaries()
void mark_shrinkable_as_removable(int, std::vector< int >::size_type)
bool marked_block(int lit) const
int64_t cache_lines(size_t bytes)
unsigned schedule_all_other_not_scheduled_yet(Sweeper &sweeper)
int try_to_subsume_clause(Clause *, vector< Clause * > &shrunken)
bool get_clause(Clause *, vector< int > &)
int positive_horn_satisfiable()
bool vivify_clause(Vivifier &, Clause *candidate)
void try_to_fasteliminate_variable(Eliminator &, int pivot, bool &)
void bump_also_all_reason_literals()
void sweep_dense_propagate(Sweeper &sweeper)
int get_new_extension_variable()
void condition_assign(int lit)
Clause * find_binary_clause(int, int)
int64_t irredundant() const
void mark_decomposed(int lit)
void elim_backward_clause(Eliminator &, Clause *)
vector< unsigned > relevanttab
void inprobe(bool update_limits=true)
void unschedule_sweeping(Sweeper &sweeper, unsigned swept, unsigned scheduled)
void block_reschedule_clause(Blocker &, int lit, Clause *)
void sweep_refine(Sweeper &sweeper)
void flush_trace(bool stats=false)
void elim_update_added_clause(Eliminator &, Clause *)
int next_scheduled(Sweeper &sweeper)
long condition_round(long unassigned_literal_propagation_limit)
void sweep_update_noccs(Clause *c)
unsigned incomplete_variables()
void covered_literal_addition(int lit, Coveror &)
void copy_clause(Clause *)
void vivify_sort_watched(Clause *c)
void unwatch_clause(Clause *c)
void add_literal_to_environment(Sweeper &sweeper, unsigned depth, int)
int next_decision_variable()
void new_trail_level(int lit)
void promote_clause_glue_only(Clause *, int new_glue)
void assume_analyze_literal(int lit)
void sweep_substitute_lrat(Clause *c, int64_t id)
size_t first_factor(Factoring &, int)
int64_t cache_lines(size_t n, size_t bytes)
void garbage_collection()
Delay delaying_vivify_irredundant
vector< StatTracer * > stat_tracers
unsigned reschedule_previously_remaining(Sweeper &sweeper)
void unmark_in_candidate_clause(int lit)
Clause * new_hyper_ternary_resolved_clause_and_watch(bool red, bool)
void block_literal_with_at_least_two_negative_occs(Blocker &, int lit)
Quotient * best_quotient(Factoring &, size_t *)
void mark_garbage(Clause *)
void build_chain_for_empty()
double scale(double v) const
bool ext_clause_forgettable
int backward_false_satisfiable()
void new_proof_on_demand()
void lookahead_flush_probes()
void rescale_variable_scores()
vector< unsigned > frozentab
void vivify_prioritize_leftovers(char, size_t prioritized, std::vector< Clause * > &schedule)
vector< int64_t > lrat_chain
Clause * wrapped_learn_external_reason_clause(int lit)
int second_literal_in_binary_clause(Eliminator &, Clause *, int first)
int elim_round(bool &completed, bool &)
vector< int64_t > unit_clauses_idx
int forward_true_satisfiable()
void assume_analyze_reason(int lit, Clause *reason)
bool external_check_solution()
bool searching_lucky_phases
void clear_minimized_literals()
void bump_clause(Clause *)
bool scheduled_variable(Sweeper &sweeper, int idx)
void bump_also_reason_literals(int lit, int depth_limit, size_t size_limit)
void flush_watches(int lit, Watches &)
void init_scores(int old_max_var, int new_max_var)
void force_backtrack(size_t new_level)
void setbit(int lit, int bit)
void copy_non_garbage_clauses()
bool is_binary_clause(Clause *c, int &, int &)
void preprocess_quickly()
void report(char type, int verbose_level=0)
bool cadical_kitten_ticks_limit_hit(Sweeper &sweeper, const char *when)
bool bump_also_reason_literal(int lit)
void sweep_add_clause(Sweeper &sweeper, unsigned depth)
void void error_message_start()
void add_observed_var(int ilit)
void bump_variable_score_inc()
void probe_post_dominator_lrat(vector< Clause * > &, int, int)
void mark_redundant_clauses_with_eliminated_variables_as_garbage()
Clause * new_learned_redundant_clause(int glue)
void decompose_analyze_binary_chain(DFS *dfs, int)
void error(const char *,...) CADICAL_ATTRIBUTE_FORMAT(2
void renotify_trail_after_ilb()
void sweep_remove(Sweeper &sweeper, int lit)
void mark_ternary(int lit)
bool is_conditional_literal(int lit) const
int backward_true_satisfiable()
void add_external_clause(int propagated_lit=0, bool no_backtrack=false)
void block_literal(Blocker &, int lit)
int negative_horn_satisfiable()
bool get_ternary_clause(Clause *, int &, int &, int &)
void implied(std::vector< int > &entrailed)
const Flags & flags(int lit) const
bool run_factorization(int64_t limit)
void find_if_then_else(Eliminator &, int pivot)
void factorize_next(Factoring &, int, unsigned)
void find_equivalence(Eliminator &, int pivot)
int local_search_round(int round)
void close_trace(bool stats=false)
static bool is_valid_limit(const char *name)
bool in_mode(Mode m) const
Clause * walk_pick_clause(Walker &)
void find_gate_clauses(Eliminator &, int pivot)
void vivify_analyze_redundant(Vivifier &, Clause *start, bool &)
void renotify_full_trail()
bool is_clause(Clause *, const vector< int > &)
bool terminated_asynchronously(int factor=1)
Clause * block_impossible(Blocker &, int lit)
void move_literals_to_watch()
void clean_probehbr_lrat()
void mark_removed(int lit)
vector< Tracer * > tracers
void promote_clause(Clause *, int new_glue)
void add_new_original_clause(int64_t)
bool disconnect_proof_tracer(Tracer *tracer)
void vivify_assume(int lit)
unsigned schedule_sweeping(Sweeper &sweeper)
void update_decision_rate_average()
CubesWithStatus generate_cubes(int, int)
void update_factored(Factoring &factoring, Quotient *q)
void eagerly_remove_from_occurences(Clause *c)
void resize_unit_clauses_idx()
void limit_local_search(int)
void shrunken_block_no_uip(const std::vector< int >::reverse_iterator &, const std::vector< int >::reverse_iterator &, unsigned &, const int)
Clause * on_the_fly_strengthen(Clause *conflict, int lit)
void handle_external_clause(Clause *)
void mark_garbage_external_forgettable(int64_t id)
void flush_vivification_schedule(std::vector< Clause * > &, int64_t &)
void vivify_increment_stats(const Vivifier &vivifier)
bool self_subsuming_factor(Quotient *)
void watch_clause(Clause *c)
void limit_terminate(int)
void sweep_set_cadical_kitten_ticks_limit(Sweeper &sweeper)
void cover_push_extension(int lit, Coveror &)
bool can_sweep_clause(Clause *c)
void learn_empty_clause()
void assign_unit(int lit)
void clear_flauses(vector< Clause * > &)
void verror(const char *, va_list &)
void resize_factoring(Factoring &factoring, int lit)
void mark_substituted(int)
void schedule_outer(Sweeper &sweeper, int idx)
void clear_sweeper(Sweeper &sweeper)
void init_queue(int old_max_var, int new_max_var)
void find_and_gate(Eliminator &, int pivot)
void remove_falsified_literals(Clause *)
bool marked_subsume(int lit) const
bool better_decision(int lit, int other)
void mark_eliminated(int)
bool marked_skip(int lit)
void warning(const char *,...) CADICAL_ATTRIBUTE_FORMAT(2
void vivify_subsume_clause(Clause *subsuming, Clause *subsumed)
bool resolve_clauses(Eliminator &, Clause *, int pivot, Clause *, bool)
void release_sweeper(Sweeper &sweeper)
void clear_phases(vector< signed char > &)
void block_pure_literal(Blocker &, int lit)
void condition(bool update_limits=true)
void probe_assign_unit(int lit)
void mark_as_conditional_literal(int lit)
bool apply_factoring(Factoring &factoring, Quotient *q)
void init_report_limits()
void block_reschedule(Blocker &, int lit)
const char * sweep_variable(Sweeper &sweeper, int idx)
void try_to_eliminate_variable(Eliminator &, int pivot, bool &)
int decide_phase(int idx, bool target)
void search_assume_decision(int decision)
bool propagate_out_of_order_units()
void otfs_strengthen_clause(Clause *, int, int, const std::vector< int > &)
void finish_added_clause_with_id(int64_t id, bool restore=false)
int sweep_flip_and_implicant(int)
void calculate_minimize_chain(int lit, std::vector< int > &stack)
void unmark_block(int lit)
void demote_clause(Clause *)
void walk_flip_lit(Walker &, int lit)
Clause * learn_external_reason_clause(int lit, int falsified_elit=0, bool no_backtrack=false)
int shrink_literal(int, int, unsigned)
Clause * find_clause(const vector< int > &)
void sweep_empty_clause(Sweeper &sweeper)
void sweep_substitute_new_equivalences(Sweeper &sweeper)
void elim(bool update_limits=true)
vector< int64_t > conclusion
void eagerly_subsume_recently_learned_clauses(Clause *)
int most_occurring_literal()
void add_factored_quotient(Quotient *, int not_fresh)
signed char val(int lit) const
bool limit(const char *name, int)
vector< Clause * > inst_chain
void flush_unmatched_clauses(Quotient *)
signed char marked(int lit) const
int64_t unit_id(int lit) const
void collect_instantiation_candidates(Instantiator &)
bool traverse_constraint(ClauseIterator &)
void unmark_gate_clauses(Eliminator &)
int64_t flush_elimfast_occs(int lit)
void connect_proof_tracer(Tracer *tracer, bool antecedents, bool finalize_clauses=false)
void add_original_lit(int lit)
void connect_binary_watches()
bool minimize_literal(int lit, int depth=0)
int clause_contains_fixed_literal(Clause *)
void schedule_factorization(Factoring &)
double process_time() const
vector< int64_t > unit_chain
void init_search_limits()
void produce_failed_assumptions()
void init_sweeper(Sweeper &sweeper)
bool ternary_find_binary_clause(int, int)
vector< int > sweep_schedule
int likely_phase(int idx)
void set_val(int lit, signed char val)
Clause * new_clause(bool red, int glue=0)
bool sweep_extract_fixed(Sweeper &sweeper, int lit)
int walk_pick_lit(Walker &, Clause *)
bool lucky_propagate_discrepency(int)
Quotient * new_quotient(Factoring &, int)
void deallocate_clause(Clause *)
bool ask_external_clause()
unsigned lit2citten(int lit)
void vivify_build_lrat(int, Clause *, std::vector< std::tuple< int, Clause *, bool > > &)
bool ternary_find_ternary_clause(int, int, int)
void set_parent_reason_literal(int lit, int reason)
std::vector< int > lookahead_populate_locc()
void backtrack_without_updating_phases(int target_level=0)
void reset_subsume_bits()
bool elimfast_resolvents_are_bounded(Eliminator &, int pivot)
std::vector< int >::reverse_iterator minimize_and_shrink_block(std::vector< int >::reverse_iterator &, unsigned int &, unsigned int &, const int)
void otfs_subsume_clause(Clause *subsuming, Clause *subsumed)
void failed_literal(int lit)
void unmark_binary_literals(Eliminator &)
int next_factor(Factoring &, unsigned *)
int propagate_assumptions()
void bump_variable(int lit)
void subsume_clause(Clause *subsuming, Clause *subsumed)
void release_quotients(Factoring &)
void limit_preprocessing(int)
int elimfast_round(bool &completed, bool &)
void mark_useless_redundant_clauses_as_garbage()
vector< int > sign_marked
vector< int > assumptions
void probe_assign(int lit, int parent)
void explain_reason(int lit, Clause *, int &open)
double compute_elim_score(unsigned lit)
void push_literals_of_block(const std::vector< int >::reverse_iterator &, const std::vector< int >::reverse_iterator &, int, unsigned)
void save_core(Sweeper &sweeper, unsigned core)
void backtrack(int target_level=0)
bool is_external_forgettable(int64_t id)
void clear_analyzed_levels()
void clear_unit_analyzed_literals()
void sweep_refine_backbone(Sweeper &sweeper)
void find_xor_gate(Eliminator &, int pivot)
int recompute_glue(Clause *)
const char * parse_dimacs(FILE *)
void sweep_refine_partition(Sweeper &sweeper)
void reserve_ids(int number)
void enlarge_vals(size_t new_vsize)
void elim_update_removed_clause(Eliminator &, Clause *, int except=0)
void init_preprocessing_limits()
int find_conflict_level(int &forced)
void block_literal_with_one_negative_occ(Blocker &, int lit)
unsigned vlit(int lit) const
void sweep_dense_mode_and_watch_irredundant()
void clear_core(Sweeper &sweeper, unsigned core_idx)
void asymmetric_literal_addition(int lit, Coveror &)
void bump_clause2(Clause *)
void init_probehbr_lrat()
void update_target_and_best()
unsigned shrink_along_reason(int, int, bool, bool &, unsigned)
bool is_autarky_literal(int lit) const
void strengthen_clause(Clause *, int)
void block_schedule(Blocker &)
unsigned shrink_block(std::vector< int >::reverse_iterator &, std::vector< int >::reverse_iterator &, int, unsigned &, unsigned &, const int, unsigned)
bool ternary_round(int64_t &steps, int64_t &htrs)
signed char marked67(int lit) const
vector< int > unit_analyzed
int sweep_repr(Sweeper &sweeper, int lit)
void probe_assign_decision(int lit)
void elim_backward_clauses(Eliminator &)
bool cover_propagate_asymmetric(int lit, Clause *ignore, Coveror &)
bool cover_propagate_covered(int lit, Coveror &)
void init_backbone_and_partition(Sweeper &sweeper)
void vivify_strengthen(Clause *candidate)
void limit_decisions(int)
vector< int64_t > minimize_chain
void vivify_analyze(Clause *start, bool &, Clause **, const Clause *const, int implied, bool &)
void build_lrat_for_clause(const vector< vector< Clause * > > &dfs_chains, bool invert=false)
void update_reason_references()
int next_decision_variable_on_queue()
bool forced_backt_allowed
vector< Clause * > clauses
void walk_save_minimum(Walker &)
void mark_eliminated_clauses_as_garbage(Eliminator &, int pivot, bool &)
bool is_decision(int ilit)
void inst_assign(int lit)
void renotify_trail_after_local_search()
vector< vector< vector< int64_t > > > probehbr_chains
void vivify_deduce(Clause *candidate, Clause *conflct, int implied, Clause **, bool &)
vector< signed char > marks
void init_vars(int new_max_var)
void ternary_idx(int idx, int64_t &steps, int64_t &htrs)
void connect_propagator()
int cdcl_loop_with_inprocessing()
Clause * new_resolved_irredundant_clause()
void flush_all_occs_and_watches()
void flip_backbone_literals(struct Sweeper &sweeper)
Clause * new_hyper_binary_resolved_clause(bool red, int glue)
bool external_propagate()
int solve(bool preprocess_only=false)
void mark_binary_literals(Eliminator &, int pivot)
void clear_analyzed_literals()
int try_to_satisfy_formula_by_saved_phases()
void update_factor_candidate(Factoring &, int)
int assignment_level(int lit, Clause *)
void vivify_chain_for_units(int lit, Clause *reason)
void search_assign_external(int lit)
int64_t add_sweep_binary(sweep_proof_clause, int lit, int other)
int probe_dominator(int a, int b)
void blocked_clause(Quotient *q, int)
void require_mode(Mode m) const
void get_probehbr_lrat(int lit, int uip)
void lookahead_generate_probes()
void add_factored_divider(Quotient *, int)
bool consider_to_vivify_clause(Clause *candidate)
void substitute_connected_clauses(Sweeper &sweeper, int lit, int other, int64_t id)
void unmarkfact(int lit, int fact)
int trivially_true_satisfiable()
bool instantiate_candidate(int lit, Clause *)
bool vivify_propagate(int64_t &)
int lookahead_next_probe()
void add_core(Sweeper &sweeper, unsigned core_idx)
size_t block_candidates(Blocker &, int lit)
vector< Clause * > decompose_analyze_binary_clauses(DFS *dfs, int from)
bool preprocess_round(int round)
int lookahead_locc(const std::vector< int > &)
void analyze_literal(int lit, int &open, int &resolvent_size, int &antecedent_size)
Clause * new_driving_clause(const int glue, int &jump)
int get_parent_reason_literal(int lit)
int trivially_false_satisfiable()
bool scheduable_variable(Sweeper &sweeper, int idx, size_t *occ_ptr)
void decompose_conflicting_scc_lrat(DFS *dfs, vector< int > &)
unsigned walk_break_value(int lit)
void vivify_assign(int lit, Clause *)
void print_resource_usage()
int otfs_find_backtrack_level(int &forced)
void shrink_and_minimize_clause()
void copy_phases(vector< signed char > &)
int64_t & unit_clauses(int uidx)
double tied_next_factor_score(int)
void delete_sweep_binary(const sweep_binary &sb)
void set_tainted_literal()
void remove_observed_var(int ilit)
void probe_lrat_for_units(int lit)
void init_enqueue(int idx)
void markfact(int lit, int fact)
bool marked2(int lit) const
void bump_variable_score(int lit)
void mark_satisfied_clauses_as_garbage()
size_t shrink_clause(Clause *, int new_size)
int subsume_check(Clause *subsuming, Clause *subsumed)
void explain_external_propagations()
int citten2lit(unsigned ulit)
void notify_backtrack(size_t new_level)
void learn_unit_clause(int lit)
unsigned shrink_next(int, unsigned &, unsigned &)
const char * parse_dimacs(const char *)
void schedule_inner(Sweeper &sweeper, int idx)
void mark_subsume(int lit)
void mark_factor(int lit)
void sweep_clause(Sweeper &sweeper, unsigned depth, Clause *)
void probe_dominator_lrat(int dom, Clause *reason)
void mark_added(int lit, int size, bool redundant)
bool marked_decomposed(int lit)
void mark_clauses_to_be_flushed()
void flip_partition_literals(struct Sweeper &sweeper)
void vivify_initialize(Vivifier &vivifier, int64_t &ticks)
bool match_ternary_clause(Clause *, int, int, int)
Clause * new_clause_as(const Clause *orig)
void unmark_decomposed(int lit)
void add_self_subsuming_factor(Quotient *, Quotient *)
void assign_original_unit(int64_t, int)
void condition_unassign(int lit)
void enlarge(int new_max_var)
bool external_prop_is_lazy
bool observed(int ilit) const
vector< FileTracer * > file_tracers
Clause * find_ternary_clause(int, int, int)
int second_literal_in_binary_clause_lrat(Clause *, int first)
void elim_propagate(Eliminator &, int unit)
int64_t & bumped(int lit)
vector< int64_t > mini_chain
void mark_in_candidate_clause(int lit)
void clear_nounted(vector< int > &)
bool vivify_instantiate(const std::vector< int > &, Clause *, std::vector< std::tuple< int, Clause *, bool > > &lrat_stack, int64_t &ticks)
Watches & watches(int lit)
Clause * new_hyper_ternary_resolved_clause(bool red)
void analyze_reason(int lit, Clause *, int &open, int &resolvent_size, int &antecedent_size)
bool likely_to_be_kept_clause(Clause *c)
void delete_clause(Clause *)
bool traverse_clauses(ClauseIterator &)
void set_probehbr_lrat(int lit, int uip)
bool sweep_backbone_candidate(Sweeper &sweeper, int lit)
void search_assign_driving(int lit, Clause *reason)
bool sweep_equivalence_candidates(Sweeper &sweeper, int lit, int other)
int64_t redundant() const
int hyper_binary_resolve(Clause *)
bool is_in_candidate_clause(int lit) const
void compute_tier_limits(Vivifier &)
void delete_unfactored(Quotient *q)
int determine_actual_backtrack_level(int jump)
bool hyper_ternary_resolve(Clause *, int, Clause *)
void limit_conflicts(int)
bool elim_resolvents_are_bounded(Eliminator &, int pivot)
void search_assign(int lit, Clause *)
volatile bool termination_forced
void build_chain_for_units(int lit, Clause *reason, bool forced)
size_t flush_occs(int lit)
void unmark_as_conditional_literal(int lit)
void instantiate(Instantiator &)
void check_watched_literal_invariants()
void mark_incomplete(Sweeper &sweeper)
bool vivify_shrinkable(const std::vector< int > &sorted, Clause *c)
void ternary_lit(int pivot, int64_t &steps, int64_t &htrs)
bool getfact(int lit, int fact) const
bool getbit(int lit, int bit) const
int walk_round(int64_t limit, bool prev)
void elim_on_the_fly_self_subsumption(Eliminator &, Clause *, int)
void unmark(vector< int > &lits)
void find_definition(Eliminator &, int)
void elim_add_resolvents(Eliminator &, int pivot)
void connect_watches(bool irredundant_only=false)
score_smaller(Internal *i)