ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
lidruptracer.hpp
Go to the documentation of this file.
1#ifndef _lidruptracer_h_INCLUDED
2#define _lidruptracer_h_INCLUDED
3
4#include "global.h"
5
7
8class FileTracer;
9
10namespace CaDiCaL {
11
13 LidrupClause *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 std::vector<int64_t> chain;
17 std::vector<int> literals;
18};
19
20class LidrupTracer : 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 LidrupClause **clauses; // hash table of clauses
32 vector<int> imported_clause;
33 vector<int> assumptions;
34 vector<int64_t> imported_chain;
35 vector<int64_t> batch_weaken;
36 vector<int64_t> batch_delete;
37 vector<int64_t> batch_restore;
38
39 static const unsigned num_nonces = 4;
40
41 uint64_t nonces[num_nonces]; // random numbers for hashing
42 uint64_t last_hash; // last computed hash value of clause
43 int64_t last_id; // id of the last added clause
44 LidrupClause *last_clause;
45 uint64_t compute_hash (int64_t); // compute and save hash value of clause
46
47 LidrupClause *new_clause ();
48 void delete_clause (LidrupClause *);
49
50 static uint64_t reduce_hash (uint64_t hash, uint64_t size);
51
52 void enlarge_clauses (); // enlarge hash table for clauses
53 void insert (); // insert clause in hash table
54 bool
55 find_and_delete (const int64_t); // find clause position in hash table
56
57#ifndef CADICAL_QUIET
58 int64_t added, deleted, weakened, restore, original, solved, batched;
59#endif
60
61 void flush_if_piping ();
62
63 void put_binary_zero ();
64 void put_binary_lit (int external_lit);
65 void put_binary_id (int64_t id, bool = true);
66
67 void lidrup_add_derived_clause (int64_t id, const vector<int> &clause,
68 const vector<int64_t> &chain);
69 void lidrup_delete_clause (int64_t id); //, const vector<int> &clause);
70 void
71 lidrup_add_restored_clause (int64_t id); //, const vector<int> &clause);
72 void lidrup_add_original_clause (int64_t id, const vector<int> &clause);
73 void lidrup_conclude_and_delete (const vector<int64_t> &conclusion);
74 void lidrup_report_status (int status);
75 void lidrup_conclude_sat (const vector<int> &model);
76 void lidrup_conclude_unknown (const vector<int> &trail);
77 void lidrup_solve_query ();
78 void lidrup_batch_weaken_restore_and_delete ();
79
80public:
81 LidrupTracer (Internal *, File *file, bool);
83
84 // proof section:
85 void add_derived_clause (int64_t, bool, const vector<int> &,
86 const vector<int64_t> &) override;
87 void add_assumption_clause (int64_t, const vector<int> &,
88 const vector<int64_t> &) override;
89 void weaken_minus (int64_t, const vector<int> &) override;
90 void delete_clause (int64_t, bool, const vector<int> &) override;
91 void add_original_clause (int64_t, bool, const vector<int> &,
92 bool = false) override;
93 void report_status (int, int64_t) override;
94 void conclude_sat (const vector<int> &) override;
95 void conclude_unsat (ConclusionType, const vector<int64_t> &) override;
96 void conclude_unknown (const vector<int> &) override;
97
98 void solve_query () override;
99 void add_assumption (int) override;
100 void reset_assumptions () override;
101
102 // skip
103 void begin_proof (int64_t) override {}
104 void finalize_clause (int64_t, const vector<int> &) override {}
105 void strengthen (int64_t) override {}
106 void add_constraint (const vector<int> &) override {}
107
108 // logging and file io
109 void connect_internal (Internal *i) override;
110
111#ifndef CADICAL_QUIET
112 void print_statistics ();
113#endif
114 bool closed () override;
115 void close (bool) override;
116 void flush (bool) override;
117};
118
119} // namespace CaDiCaL
120
122
123#endif
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
void conclude_sat(const vector< int > &) override
void conclude_unsat(ConclusionType, const vector< int64_t > &) override
void conclude_unknown(const vector< int > &) override
void add_derived_clause(int64_t, bool, const vector< int > &, const vector< int64_t > &) override
void finalize_clause(int64_t, const vector< int > &) override
void add_constraint(const vector< int > &) override
void strengthen(int64_t) override
void connect_internal(Internal *i) override
LidrupTracer(Internal *, File *file, bool)
void report_status(int, int64_t) override
void begin_proof(int64_t) override
void add_assumption(int) override
void add_original_clause(int64_t, bool, const vector< int > &, bool=false) override
void add_assumption_clause(int64_t, const vector< int > &, const vector< int64_t > &) override
void weaken_minus(int64_t, const vector< int > &) override
ConclusionType
Definition tracer.hpp:15
std::vector< int > literals
std::vector< int64_t > chain