#ifndef _proof_h_INCLUDED
#define _proof_h_INCLUDED
#include "tracer.hpp"
#include <stdint.h>
namespace CaDiCaL {
class File;
struct Clause;
struct Internal;
class Tracer;
class FileTracer;
class Proof {
Internal *internal;
std::vector<int> clause; std::vector<int64_t> proof_chain; int64_t clause_id; bool redundant;
int witness;
std::vector<Tracer *> tracers; std::vector<FileTracer *> file_tracers;
void add_literal (int internal_lit); void add_literals (Clause *);
void add_literals (const std::vector<int> &);
void add_original_clause (
bool restore = false); void add_derived_clause ();
void add_assumption_clause ();
void delete_clause ();
void demote_clause ();
void weaken_minus ();
void strengthen ();
void finalize_clause ();
void add_assumption ();
void add_constraint ();
public:
Proof (Internal *);
~Proof ();
void connect (Tracer *t) { tracers.push_back (t); }
void disconnect (Tracer *t);
void add_original_clause (int64_t, bool, const std::vector<int> &);
void add_assumption_clause (int64_t, const std::vector<int> &,
const std::vector<int64_t> &);
void add_assumption_clause (int64_t, int, const std::vector<int64_t> &);
void add_assumption (int);
void add_constraint (const std::vector<int> &);
void reset_assumptions ();
void add_external_original_clause (int64_t, bool,
const std::vector<int> &,
bool restore = false);
void delete_external_original_clause (int64_t, bool,
const std::vector<int> &);
void add_derived_empty_clause (int64_t, const std::vector<int64_t> &);
void add_derived_unit_clause (int64_t, int unit,
const std::vector<int64_t> &);
void add_derived_clause (Clause *c, const std::vector<int64_t> &);
void add_derived_clause (int64_t, bool, const std::vector<int> &,
const std::vector<int64_t> &);
void add_derived_rat_clause (int64_t, bool, int, const std::vector<int> &,
const std::vector<int64_t> &);
void add_derived_rat_clause (Clause *c, int w,
const std::vector<int64_t> &);
void delete_clause (int64_t, bool, const std::vector<int> &);
void weaken_minus (int64_t, const std::vector<int> &);
void weaken_plus (int64_t, const std::vector<int> &);
void delete_unit_clause (int64_t id, const int lit);
void delete_clause (Clause *);
void weaken_minus (Clause *);
void weaken_plus (Clause *);
void strengthen (int64_t);
void finalize_unit (int64_t, int);
void finalize_external_unit (int64_t, int);
void finalize_clause (int64_t, const std::vector<int> &c);
void finalize_clause (Clause *);
void report_status (int, int64_t);
void begin_proof (int64_t);
void conclude_unsat (ConclusionType, const std::vector<int64_t> &);
void conclude_sat (const std::vector<int> &model);
void conclude_unknown (const std::vector<int> &trace);
void solve_query ();
void flush_clause (Clause *); void strengthen_clause (Clause *, int, const std::vector<int64_t> &);
void otfs_strengthen_clause (Clause *, const std::vector<int> &,
const std::vector<int64_t> &);
void flush ();
};
}
#endif