/*++ Copyright (c) 2014 Microsoft Corporation Module Name: xor_solver.h Abstract: XOR solver. Interface outline. --*/ #pragma once #include "sat/smt/euf_solver.h" namespace xr { class solver : public euf::th_solver { public: solver(euf::solver& ctx); th_solver* clone(euf::solver& ctx) override; sat::literal internalize(expr* e, bool sign, bool root) override { UNREACHABLE(); return sat::null_literal; } void internalize(expr* e) override { UNREACHABLE(); } void asserted(sat::literal l) override; bool unit_propagate() override; void get_antecedents(sat::literal l, sat::ext_justification_idx idx, sat::literal_vector & r, bool probing) override; void pre_simplify() override; void simplify() override; sat::check_result check() override; void push() override; void pop(unsigned n) override; std::ostream& display(std::ostream& out) const override; std::ostream& display_justification(std::ostream& out, sat::ext_justification_idx idx) const override; std::ostream& display_constraint(std::ostream& out, sat::ext_constraint_idx idx) const override; }; }