3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-03 05:47:01 +00:00
z3/src/cmd_context/cmd_context_to_goal.cpp
2012-11-02 14:00:43 -07:00

48 lines
1.5 KiB
C++

/*++
Copyright (c) 2012 Microsoft Corporation
Module Name:
cmd_context_to_goal.cpp
Abstract:
Procedure for copying the assertions in the
command context to a goal object.
Author:
Leonardo (leonardo) 2012-10-21
Notes:
--*/
#include"cmd_context.h"
#include"goal.h"
/**
\brief Assert expressions from ctx into t.
*/
void assert_exprs_from(cmd_context const & ctx, goal & t) {
if (ctx.produce_proofs() && ctx.produce_unsat_cores())
throw cmd_exception("Frontend does not support simultaneous generation of proofs and unsat cores");
ast_manager & m = t.m();
bool proofs_enabled = t.proofs_enabled();
if (ctx.produce_unsat_cores()) {
ptr_vector<expr>::const_iterator it = ctx.begin_assertions();
ptr_vector<expr>::const_iterator end = ctx.end_assertions();
ptr_vector<expr>::const_iterator it2 = ctx.begin_assertion_names();
ptr_vector<expr>::const_iterator end2 = ctx.end_assertion_names();
SASSERT(end - it == end2 - it2);
for (; it != end; ++it, ++it2) {
t.assert_expr(*it, proofs_enabled ? m.mk_asserted(*it) : 0, m.mk_leaf(*it2));
}
}
else {
ptr_vector<expr>::const_iterator it = ctx.begin_assertions();
ptr_vector<expr>::const_iterator end = ctx.end_assertions();
for (; it != end; ++it) {
t.assert_expr(*it, proofs_enabled ? m.mk_asserted(*it) : 0, 0);
}
SASSERT(ctx.begin_assertion_names() == ctx.end_assertion_names());
}
}