ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
CaDiCaL::Checker Class Reference

#include <checker.hpp>

Inheritance diagram for CaDiCaL::Checker:
Collaboration diagram for CaDiCaL::Checker:

Public Member Functions

 Checker (Internal *)
 
virtual ~Checker ()
 
void connect_internal (Internal *i) override
 
void add_original_clause (int64_t, bool, const vector< int > &, bool=false) override
 
void add_derived_clause (int64_t, bool, const vector< int > &, const vector< int64_t > &) override
 
void delete_clause (int64_t, bool, const vector< int > &) override
 
void finalize_clause (int64_t, const vector< int > &) override
 
void report_status (int, int64_t) override
 
void begin_proof (int64_t) override
 
void add_assumption_clause (int64_t, const vector< int > &, const vector< int64_t > &) override
 
void print_stats () override
 
void dump ()
 
- Public Member Functions inherited from CaDiCaL::StatTracer
 StatTracer ()
 
virtual ~StatTracer ()
 
- Public Member Functions inherited from CaDiCaL::InternalTracer
 InternalTracer ()
 
virtual ~InternalTracer ()
 
- Public Member Functions inherited from CaDiCaL::Tracer
 Tracer ()
 
virtual ~Tracer ()
 
virtual void add_original_clause (int64_t, bool, const std::vector< int > &, bool=false)
 
virtual void add_derived_clause (int64_t, bool, const std::vector< int > &, const std::vector< int64_t > &)
 
virtual void delete_clause (int64_t, bool, const std::vector< int > &)
 
virtual void demote_clause (uint64_t, const std::vector< int > &)
 
virtual void weaken_minus (int64_t, const std::vector< int > &)
 
virtual void strengthen (int64_t)
 
virtual void finalize_clause (int64_t, const std::vector< int > &)
 
virtual void solve_query ()
 
virtual void add_assumption (int)
 
virtual void add_constraint (const std::vector< int > &)
 
virtual void reset_assumptions ()
 
virtual void add_assumption_clause (int64_t, const std::vector< int > &, const std::vector< int64_t > &)
 
virtual void conclude_unsat (ConclusionType, const std::vector< int64_t > &)
 
virtual void conclude_sat (const std::vector< int > &)
 
virtual void conclude_unknown (const std::vector< int > &)
 

Detailed Description

Definition at line 54 of file checker.hpp.

Constructor & Destructor Documentation

◆ Checker()

CaDiCaL::Checker::Checker ( Internal * i)

Definition at line 176 of file cadical_checker.cpp.

177 : internal (i), size_vars (0), vals (0), inconsistent (false),
178 num_clauses (0), num_garbage (0), size_clauses (0), clauses (0),
179 garbage (0), next_to_propagate (0), last_hash (0) {
180
181 // Initialize random number table for hash function.
182 //
183 Random random (42);
184 for (unsigned n = 0; n < num_nonces; n++) {
185 uint64_t nonce = random.next ();
186 if (!(nonce & 1))
187 nonce++;
188 CADICAL_assert (nonce), CADICAL_assert (nonce & 1);
189 nonces[n] = nonce;
190 }
191
192 memset (&stats, 0, sizeof (stats)); // Initialize statistics.
193}
#define CADICAL_assert(ignore)
Definition global.h:14
char * memset()
long random()
Here is the call graph for this function:

◆ ~Checker()

CaDiCaL::Checker::~Checker ( )
virtual

Definition at line 200 of file cadical_checker.cpp.

200 {
201 LOG ("CHECKER delete");
202 vals -= size_vars;
203 delete[] vals;
204 for (size_t i = 0; i < size_clauses; i++)
205 for (CheckerClause *c = clauses[i], *next; c; c = next)
206 next = c->next, delete_clause (c);
207 for (CheckerClause *c = garbage, *next; c; c = next)
208 next = c->next, delete_clause (c);
209 delete[] clauses;
210}
#define LOG(...)

Member Function Documentation

◆ add_assumption_clause()

void CaDiCaL::Checker::add_assumption_clause ( int64_t id,
const vector< int > & c,
const vector< int64_t > & chain )
override

Definition at line 628 of file cadical_checker.cpp.

629 {
630 add_derived_clause (id, true, c, chain);
631 delete_clause (id, true, c);
632}
void add_derived_clause(int64_t, bool, const vector< int > &, const vector< int64_t > &) override
Here is the call graph for this function:

◆ add_derived_clause()

void CaDiCaL::Checker::add_derived_clause ( int64_t id,
bool ,
const vector< int > & c,
const vector< int64_t > &  )
override

Definition at line 564 of file cadical_checker.cpp.

565 {
566 if (inconsistent)
567 return;
568 START (checking);
569 LOG (c, "CHECKER addition of derived clause");
570 stats.added++;
571 stats.derived++;
572 import_clause (c);
573 last_id = id;
574 if (tautological ())
575 LOG ("CHECKER ignoring satisfied derived clause");
576 else if (!check () && !check_blocked ()) { // needed for ER proof support
578 fputs ("failed to check derived clause:\n", stderr);
579 for (const auto &lit : unsimplified)
580 fprintf (stderr, "%d ", lit);
581 fputc ('0', stderr);
583 } else
584 add_clause ("derived");
585 simplified.clear ();
586 unsimplified.clear ();
587 STOP (checking);
588}
void fatal_message_start()
void fatal_message_end()
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
int lit
Definition satVec.h:130
Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_original_clause()

void CaDiCaL::Checker::add_original_clause ( int64_t id,
bool ,
const vector< int > & c,
bool = false )
override

Definition at line 545 of file cadical_checker.cpp.

546 {
547 if (inconsistent)
548 return;
549 START (checking);
550 LOG (c, "CHECKER addition of original clause");
551 stats.added++;
552 stats.original++;
553 import_clause (c);
554 last_id = id;
555 if (tautological ())
556 LOG ("CHECKER ignoring satisfied original clause");
557 else
558 add_clause ("original");
559 simplified.clear ();
560 unsimplified.clear ();
561 STOP (checking);
562}

◆ begin_proof()

void CaDiCaL::Checker::begin_proof ( int64_t )
inlineoverridevirtual

Reimplemented from CaDiCaL::Tracer.

Definition at line 167 of file checker.hpp.

167{} // skip

◆ connect_internal()

void CaDiCaL::Checker::connect_internal ( Internal * i)
overridevirtual

Reimplemented from CaDiCaL::InternalTracer.

Definition at line 195 of file cadical_checker.cpp.

195 {
196 internal = i;
197 LOG ("CHECKER connected to internal");
198}

◆ delete_clause()

void CaDiCaL::Checker::delete_clause ( int64_t id,
bool ,
const vector< int > & c )
override

Definition at line 592 of file cadical_checker.cpp.

592 {
593 if (inconsistent)
594 return;
595 START (checking);
596 LOG (c, "CHECKER checking deletion of clause");
597 stats.deleted++;
598 simplified.clear (); // Can be non-empty if clause allocation fails.
599 unsimplified.clear (); // Can be non-empty if clause allocation fails.
600 import_clause (c);
601 last_id = id;
602 if (!tautological ()) {
603 CheckerClause **p = find (), *d = *p;
604 if (d) {
605 CADICAL_assert (d->size > 1);
606 // Remove from hash table, mark as garbage, connect to garbage list.
607 num_garbage++;
608 CADICAL_assert (num_clauses);
609 num_clauses--;
610 *p = d->next;
611 d->next = garbage;
612 garbage = d;
613 d->size = 0;
614 } else {
616 fputs ("deleted clause not in proof:\n", stderr);
617 for (const auto &lit : unsimplified)
618 fprintf (stderr, "%d ", lit);
619 fputc ('0', stderr);
621 }
622 }
623 simplified.clear ();
624 unsimplified.clear ();
625 STOP (checking);
626}
Cube * p
Definition exorList.c:222
Here is the call graph for this function:

◆ dump()

void CaDiCaL::Checker::dump ( )

Definition at line 636 of file cadical_checker.cpp.

636 {
637 int max_var = 0;
638 for (uint64_t i = 0; i < size_clauses; i++)
639 for (CheckerClause *c = clauses[i]; c; c = c->next)
640 for (unsigned i = 0; i < c->size; i++)
641 if (abs (c->literals[i]) > max_var)
642 max_var = abs (c->literals[i]);
643 printf ("p cnf %d %" PRIu64 "\n", max_var, num_clauses);
644 for (uint64_t i = 0; i < size_clauses; i++)
645 for (CheckerClause *c = clauses[i]; c; c = c->next) {
646 for (unsigned i = 0; i < c->size; i++)
647 printf ("%d ", c->literals[i]);
648 printf ("0\n");
649 }
650}

◆ finalize_clause()

void CaDiCaL::Checker::finalize_clause ( int64_t ,
const vector< int > &  )
inlineoverride

Definition at line 165 of file checker.hpp.

165{} // skip

◆ print_stats()

void CaDiCaL::Checker::print_stats ( )
overridevirtual

Reimplemented from CaDiCaL::StatTracer.

Definition at line 771 of file cadical_stats.cpp.

771 {
772
773 if (!stats.added && !stats.deleted)
774 return;
775
776 SECTION ("checker statistics");
777
778 MSG ("checks: %15" PRId64 "", stats.checks);
779 MSG ("assumptions: %15" PRId64 " %10.2f per check",
780 stats.assumptions, relative (stats.assumptions, stats.checks));
781 MSG ("propagations: %15" PRId64 " %10.2f per check",
782 stats.propagations, relative (stats.propagations, stats.checks));
783 MSG ("original: %15" PRId64 " %10.2f %% of all clauses",
784 stats.original, percent (stats.original, stats.added));
785 MSG ("derived: %15" PRId64 " %10.2f %% of all clauses",
786 stats.derived, percent (stats.derived, stats.added));
787 MSG ("deleted: %15" PRId64 " %10.2f %% of all clauses",
788 stats.deleted, percent (stats.deleted, stats.added));
789 MSG ("insertions: %15" PRId64 " %10.2f %% of all clauses",
790 stats.insertions, percent (stats.insertions, stats.added));
791 MSG ("collections: %15" PRId64 " %10.2f deleted per collection",
792 stats.collections, relative (stats.collections, stats.deleted));
793 MSG ("collisions: %15" PRId64 " %10.2f per search",
794 stats.collisions, relative (stats.collisions, stats.searches));
795 MSG ("searches: %15" PRId64 "", stats.searches);
796 MSG ("units: %15" PRId64 "", stats.units);
797}
#define MSG(...)
Definition message.hpp:49
#define SECTION(...)
Definition message.hpp:55
double relative(double a, double b)
Definition util.hpp:20
double percent(double a, double b)
Definition util.hpp:21
Here is the call graph for this function:

◆ report_status()

void CaDiCaL::Checker::report_status ( int ,
int64_t  )
inlineoverridevirtual

Reimplemented from CaDiCaL::Tracer.

Definition at line 166 of file checker.hpp.

166{} // skip

Member Data Documentation

◆ added

int64_t CaDiCaL::Checker::added

Definition at line 133 of file checker.hpp.

◆ assumptions

int64_t CaDiCaL::Checker::assumptions

Definition at line 139 of file checker.hpp.

◆ checks

int64_t CaDiCaL::Checker::checks

Definition at line 146 of file checker.hpp.

◆ collections

int64_t CaDiCaL::Checker::collections

Definition at line 148 of file checker.hpp.

◆ collisions

int64_t CaDiCaL::Checker::collisions

Definition at line 143 of file checker.hpp.

◆ deleted

int64_t CaDiCaL::Checker::deleted

Definition at line 137 of file checker.hpp.

◆ derived

int64_t CaDiCaL::Checker::derived

Definition at line 135 of file checker.hpp.

◆ insertions

int64_t CaDiCaL::Checker::insertions

Definition at line 142 of file checker.hpp.

◆ original

int64_t CaDiCaL::Checker::original

Definition at line 134 of file checker.hpp.

◆ propagations

int64_t CaDiCaL::Checker::propagations

Definition at line 140 of file checker.hpp.

◆ searches

int64_t CaDiCaL::Checker::searches

Definition at line 144 of file checker.hpp.

◆ units

int64_t CaDiCaL::Checker::units

Definition at line 149 of file checker.hpp.


The documentation for this class was generated from the following files: