mirror of
https://github.com/Z3Prover/z3
synced 2025-08-12 06:00:53 +00:00
43 lines
918 B
C++
43 lines
918 B
C++
/*++
|
|
Copyright (c) 2018 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
recfun_rewriter.cpp
|
|
|
|
Abstract:
|
|
|
|
Rewriter recursive function applications to values
|
|
|
|
Author:
|
|
|
|
Nikolaj Bjorner (nbjorner) 2020-04-26
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#include "ast/rewriter/recfun_rewriter.h"
|
|
#include "ast/rewriter/var_subst.h"
|
|
|
|
br_status recfun_rewriter::mk_app_core(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) {
|
|
if (m_rec.is_defined(f) && num_args > 0) {
|
|
for (unsigned i = 0; i < num_args; ++i) {
|
|
if (!m.is_value(args[i]))
|
|
return BR_FAILED;
|
|
}
|
|
if (!m_rec.has_def(f))
|
|
return BR_FAILED;
|
|
recfun::def const& d = m_rec.get_def(f);
|
|
if (!d.get_rhs())
|
|
return BR_FAILED;
|
|
var_subst sub(m);
|
|
result = sub(d.get_rhs(), num_args, args);
|
|
return BR_REWRITE_FULL;
|
|
}
|
|
else {
|
|
return BR_FAILED;
|
|
}
|
|
}
|
|
|
|
|