ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
congruence.h File Reference
#include <stdbool.h>
#include "global.h"
Include dependency graph for congruence.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool kissat_congruence (struct kissat *)
 

Function Documentation

◆ kissat_congruence()

bool kissat_congruence ( struct kissat * solver)

Definition at line 4591 of file congruence.c.

4591 {
4592 if (solver->inconsistent)
4593 return false;
4595 KISSAT_assert (!solver->level);
4596 KISSAT_assert (solver->probing);
4597 KISSAT_assert (solver->watching);
4598 if (!GET_OPTION (congruence))
4599 return false;
4600 if (!GET_OPTION (congruenceands) && !GET_OPTION (congruenceites) &&
4601 !GET_OPTION (congruencexors))
4602 return false;
4603 if (GET_OPTION (congruenceonce) && solver->statistics_.closures)
4604 return false;
4606 return false;
4607 if (DELAYING (congruence))
4608 return false;
4609 START (congruence);
4610 INC (closures);
4612 init_closure (solver, &closure);
4613 extract_gates (&closure);
4614 bool reset = false;
4615 if (!solver->inconsistent && !TERMINATED (congruence_terminated_9)) {
4616 find_units (&closure);
4617 if (!solver->inconsistent && !TERMINATED (congruence_terminated_10)) {
4618 find_equivalences (&closure);
4619 if (!solver->inconsistent && !TERMINATED (congruence_terminated_11)) {
4620 size_t propagated = propagate_units_and_equivalences (&closure);
4621 if (!solver->inconsistent && propagated &&
4623 forward_subsume_matching_clauses (&closure);
4624 reset = true;
4625 }
4626 }
4627 }
4628 }
4629 if (!reset)
4630 reset_closure (&closure);
4631 unsigned equivalent = reset_repr (&closure);
4632 kissat_phase (solver, "congruence", GET (closures),
4633 "merged %u equivalent variables %.2f%%", equivalent,
4634 kissat_percent (equivalent, solver->active));
4635 KISSAT_assert (solver->active >= equivalent);
4636#ifndef KISSAT_QUIET
4637 solver->active -= equivalent;
4638 REPORT (!equivalent, 'c');
4639 if (!solver->inconsistent)
4640 solver->active += equivalent;
4641#endif
4642 if (kissat_average (equivalent, solver->active) < 0.001)
4643 BUMP_DELAY (congruence);
4644 else
4645 REDUCE_DELAY (congruence);
4646 STOP (congruence);
4648 return equivalent;
4649}
#define INC(NAME)
#define BUMP_DELAY(NAME)
Definition kimits.h:183
#define REDUCE_DELAY(NAME)
Definition kimits.h:185
#define DELAYING(NAME)
Definition kimits.h:181
#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
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
#define REPORT(...)
Definition report.h:10
#define kissat_check_statistics(...)
Definition statistics.h:464
#define GET(NAME)
Definition statistics.h:416
#define congruence_terminated_10
Definition terminate.h:57
#define TERMINATED(BIT)
Definition terminate.h:42
#define congruence_terminated_12
Definition terminate.h:59
#define congruence_terminated_8
Definition terminate.h:55
#define congruence_terminated_9
Definition terminate.h:56
#define congruence_terminated_11
Definition terminate.h:58