mirror of
https://github.com/Z3Prover/z3
synced 2026-02-17 14:21:45 +00:00
Issue #7502 shows that running nlsat eagerly during final check can block quantifier instantiation. To give space for quantifier instances we introduce two levels for final check such that nlsat is only applied in the second and final level.
56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
/*++
|
|
Copyright (c) 2006 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
theory_no_arith.h
|
|
|
|
Abstract:
|
|
|
|
<abstract>
|
|
|
|
Author:
|
|
|
|
Leonardo de Moura (leonardo) 2008-12-30.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "smt/smt_theory.h"
|
|
|
|
namespace smt {
|
|
|
|
/**
|
|
\brief Do nothing theory. Tracks whether theory expressions were internalized.
|
|
When theory expressions were internalized, it returns FC_GIVEUP in the final_check_eh.
|
|
*/
|
|
class theory_dummy : public theory {
|
|
bool m_theory_exprs;
|
|
char const * m_name;
|
|
void found_theory_expr();
|
|
|
|
protected:
|
|
bool internalize_atom(app * atom, bool gate_ctx) override;
|
|
bool internalize_term(app * term) override;
|
|
void new_eq_eh(theory_var v1, theory_var v2) override;
|
|
bool use_diseqs() const override;
|
|
void new_diseq_eh(theory_var v1, theory_var v2) override;
|
|
void reset_eh() override;
|
|
final_check_status final_check_eh(unsigned) override;
|
|
bool build_models() const override {
|
|
return false;
|
|
}
|
|
void display(std::ostream& out) const override {}
|
|
|
|
public:
|
|
theory_dummy(context& ctx, family_id fid, char const * name);
|
|
|
|
theory * mk_fresh(context * new_ctx) override { return alloc(theory_dummy, *new_ctx, get_family_id(), m_name); }
|
|
|
|
char const * get_name() const override;
|
|
};
|
|
};
|
|
|
|
|