ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
idruptracer.hpp
Go to the documentation of this file.
1#ifndef _idruptracer_h_INCLUDED
2#define _idruptracer_h_INCLUDED
3
4#include "global.h"
5
7
8class FileTracer;
9
10namespace CaDiCaL {
11
13 IdrupClause *next; // collision chain link for hash table
14 uint64_t hash; // previously computed full 64-bit hash
15 int64_t id; // id of clause
16 unsigned size;
17 int literals[1];
18};
19
20class IdrupTracer : public FileTracer {
21
22 Internal *internal;
23 File *file;
24 bool binary;
25 bool piping; // The 'file' is a pipe and needs eagerly flushing.
26
27 // hash table for conclusion
28 //
29 uint64_t num_clauses; // number of clauses in hash table
30 uint64_t size_clauses; // size of clause hash table
31 IdrupClause **clauses; // hash table of clauses
32 vector<int> imported_clause;
33 vector<int> assumptions;
34
35 static const unsigned num_nonces = 4;
36
37 uint64_t nonces[num_nonces]; // random numbers for hashing
38 uint64_t last_hash; // last computed hash value of clause
39 int64_t last_id; // id of the last added clause
40 IdrupClause *last_clause;
41 uint64_t compute_hash (int64_t); // compute and save hash value of clause
42
43 IdrupClause *new_clause ();
44 void delete_clause (IdrupClause *);
45
46 static uint64_t reduce_hash (uint64_t hash, uint64_t size);
47
48 void enlarge_clauses (); // enlarge hash table for clauses
49 void insert (); // insert clause in hash table
50 bool
51 find_and_delete (const int64_t); // find clause position in hash table
52
53#ifndef CADICAL_QUIET
54 int64_t added, deleted, weakened, restore, original, solved;
55#endif
56
57 void flush_if_piping ();
58
59 void put_binary_zero ();
60 void put_binary_lit (int external_lit);
61 void put_binary_id (int64_t id, bool = false);
62
63 void idrup_add_derived_clause (const vector<int> &clause);
64 void idrup_delete_clause (int64_t id, const vector<int> &clause);
65 void idrup_add_restored_clause (const vector<int> &clause);
66 void idrup_add_original_clause (const vector<int> &clause);
67 void idrup_conclude_and_delete (const vector<int64_t> &conclusion);
68 void idrup_report_status (int status);
69 void idrup_conclude_sat (const vector<int> &model);
70 void idrup_conclude_unknown (const vector<int> &trail);
71 void idrup_solve_query ();
72
73public:
74 IdrupTracer (Internal *, File *file, bool);
75 ~IdrupTracer ();
76
77 // proof section:
78 void add_derived_clause (int64_t, bool, const vector<int> &,
79 const vector<int64_t> &) override;
80 void add_assumption_clause (int64_t, const vector<int> &,
81 const vector<int64_t> &) override;
82 void weaken_minus (int64_t, const vector<int> &) override;
83 void delete_clause (int64_t, bool, const vector<int> &) override;
84 void add_original_clause (int64_t, bool, const vector<int> &,
85 bool = false) override;
86 void report_status (int, int64_t) override;
87 void conclude_sat (const vector<int> &) override;
88 void conclude_unsat (ConclusionType, const vector<int64_t> &) override;
89 void conclude_unknown (const vector<int> &) override;
90
91 void solve_query () override;
92 void add_assumption (int) override;
93 void reset_assumptions () override;
94
95 // skip
96 void begin_proof (int64_t) override {}
97 void finalize_clause (int64_t, const vector<int> &) override {}
98 void strengthen (int64_t) override {}
99 void add_constraint (const vector<int> &) override {}
100
101 // logging and file io
102 void connect_internal (Internal *i) override;
103
104#ifndef CADICAL_QUIET
105 void print_statistics ();
106#endif
107 bool closed () override;
108 void close (bool) override;
109 void flush (bool) override;
110};
111
112} // namespace CaDiCaL
113
115
116#endif
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
void conclude_unknown(const vector< int > &) override
void flush(bool) override
void add_constraint(const vector< int > &) override
void connect_internal(Internal *i) override
void add_derived_clause(int64_t, bool, const vector< int > &, const vector< int64_t > &) override
void add_assumption_clause(int64_t, const vector< int > &, const vector< int64_t > &) override
void strengthen(int64_t) override
void reset_assumptions() override
void report_status(int, int64_t) override
void conclude_sat(const vector< int > &) override
void add_assumption(int) override
IdrupTracer(Internal *, File *file, bool)
void finalize_clause(int64_t, const vector< int > &) override
void weaken_minus(int64_t, const vector< int > &) override
void begin_proof(int64_t) override
void conclude_unsat(ConclusionType, const vector< int64_t > &) override
void close(bool) override
void add_original_clause(int64_t, bool, const vector< int > &, bool=false) override
ConclusionType
Definition tracer.hpp:15