feat(library/blast): improve trace messages
This commit is contained in:
parent
a7f5d6603a
commit
6bbbc3d50e
7 changed files with 29 additions and 20 deletions
|
@ -290,7 +290,7 @@ action_result recursor_action(hypothesis_idx hidx, name const & R) {
|
||||||
return action_result::failed(); // ill-formed recursor
|
return action_result::failed(); // ill-formed recursor
|
||||||
|
|
||||||
save_state.commit();
|
save_state.commit();
|
||||||
lean_trace(name({"blast", "action"}), tout() << "recursor " << R << "\n";);
|
lean_trace_action(tout() << "recursor " << R << "\n";);
|
||||||
if (new_goals.empty()) {
|
if (new_goals.empty()) {
|
||||||
return action_result::solved(rec);
|
return action_result::solved(rec);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,14 +18,14 @@ action_result assumption_action() {
|
||||||
for (hypothesis_idx hidx : s.get_head_related()) {
|
for (hypothesis_idx hidx : s.get_head_related()) {
|
||||||
hypothesis const & h = s.get_hypothesis_decl(hidx);
|
hypothesis const & h = s.get_hypothesis_decl(hidx);
|
||||||
if (is_def_eq(h.get_type(), target)) {
|
if (is_def_eq(h.get_type(), target)) {
|
||||||
trace_action("assumption");
|
lean_trace_action(tout() << "assumption " << h << "\n";);
|
||||||
return action_result(h.get_self());
|
return action_result(h.get_self());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return action_result::failed();
|
return action_result::failed();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Close branch IF h is of the form (H : a ~ a) where ~ is a reflexive relation */
|
/* Close branch IF h is of the form (H : not a ~ a) where ~ is a reflexive relation */
|
||||||
static optional<expr> try_not_refl_relation(hypothesis const & h) {
|
static optional<expr> try_not_refl_relation(hypothesis const & h) {
|
||||||
expr p;
|
expr p;
|
||||||
if (!is_not(h.get_type(), p))
|
if (!is_not(h.get_type(), p))
|
||||||
|
@ -62,15 +62,15 @@ action_result assumption_contradiction_actions(hypothesis_idx hidx) {
|
||||||
hypothesis const & h = s.get_hypothesis_decl(hidx);
|
hypothesis const & h = s.get_hypothesis_decl(hidx);
|
||||||
expr const & type = h.get_type();
|
expr const & type = h.get_type();
|
||||||
if (blast::is_false(type)) {
|
if (blast::is_false(type)) {
|
||||||
trace_action("contradiction");
|
lean_trace_action(tout() << "contradiction " << h << "\n";);
|
||||||
return action_result(b.mk_false_rec(s.get_target(), h.get_self()));
|
return action_result(b.mk_false_rec(s.get_target(), h.get_self()));
|
||||||
}
|
}
|
||||||
if (is_def_eq(type, s.get_target())) {
|
if (is_def_eq(type, s.get_target())) {
|
||||||
trace_action("assumption");
|
lean_trace_action(tout() << "assumption " << h << "\n";);
|
||||||
return action_result(h.get_self());
|
return action_result(h.get_self());
|
||||||
}
|
}
|
||||||
if (auto pr = try_not_refl_relation(h)) {
|
if (auto pr = try_not_refl_relation(h)) {
|
||||||
trace_action("contradiction");
|
lean_trace_action(tout() << "contradiction " << h << "\n";);
|
||||||
return action_result(*pr);
|
return action_result(*pr);
|
||||||
}
|
}
|
||||||
expr p1 = type;
|
expr p1 = type;
|
||||||
|
@ -82,7 +82,7 @@ action_result assumption_contradiction_actions(hypothesis_idx hidx) {
|
||||||
unsigned num_not2 = consume_not(p2);
|
unsigned num_not2 = consume_not(p2);
|
||||||
if ((num_not1 % 2) != (num_not2 % 2)) {
|
if ((num_not1 % 2) != (num_not2 % 2)) {
|
||||||
if (is_def_eq(p1, p2)) {
|
if (is_def_eq(p1, p2)) {
|
||||||
trace_action("contradiction");
|
lean_trace_action(tout() << "contradiction " << h << " " << h2 << "\n";);
|
||||||
expr pr1 = h.get_self();
|
expr pr1 = h.get_self();
|
||||||
expr pr2 = h2.get_self();
|
expr pr2 = h2.get_self();
|
||||||
reduce_nots(pr1, num_not1);
|
reduce_nots(pr1, num_not1);
|
||||||
|
@ -158,7 +158,7 @@ bool discard(hypothesis_idx hidx) {
|
||||||
action_result discard_action(hypothesis_idx hidx) {
|
action_result discard_action(hypothesis_idx hidx) {
|
||||||
if (discard(hidx)) {
|
if (discard(hidx)) {
|
||||||
curr_state().del_hypothesis(hidx);
|
curr_state().del_hypothesis(hidx);
|
||||||
trace_action("discard");
|
lean_trace_action(tout() << "discard " << curr_state().get_hypothesis_decl(hidx) << "\n";);
|
||||||
return action_result::new_branch();
|
return action_result::new_branch();
|
||||||
} else {
|
} else {
|
||||||
return action_result::failed();
|
return action_result::failed();
|
||||||
|
|
|
@ -109,7 +109,7 @@ public:
|
||||||
m_lemmas = tail(m_lemmas);
|
m_lemmas = tail(m_lemmas);
|
||||||
action_result r = try_lemma(lemma, m_prop_only);
|
action_result r = try_lemma(lemma, m_prop_only);
|
||||||
if (!failed(r)) {
|
if (!failed(r)) {
|
||||||
lean_trace(name({"blast", "action"}), tout() << m_action_name << " (next) " << lemma << "\n";);
|
lean_trace_action(tout() << m_action_name << " (next) " << lemma << "\n";);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ action_result backward_action_core(list<gexpr> const & lemmas, bool prop_only_br
|
||||||
// create choice point
|
// create choice point
|
||||||
if (!cut && !empty(it))
|
if (!cut && !empty(it))
|
||||||
push_choice_point(choice_point(new backward_choice_point_cell(action_name, s, it, prop_only_branches)));
|
push_choice_point(choice_point(new backward_choice_point_cell(action_name, s, it, prop_only_branches)));
|
||||||
lean_trace(name({"blast", "action"}), tout() << action_name << " " << H << "\n";);
|
lean_trace_action(tout() << action_name << " " << H << "\n";);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
curr_state() = s;
|
curr_state() = s;
|
||||||
|
|
|
@ -841,9 +841,9 @@ optional<unsigned> state::select_hypothesis_to_activate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void state::activate_hypothesis(hypothesis_idx hidx) {
|
void state::activate_hypothesis(hypothesis_idx hidx) {
|
||||||
lean_trace(name({"blast", "search"}),
|
lean_trace_search(
|
||||||
hypothesis const & h = get_hypothesis_decl(hidx);
|
hypothesis const & h = get_hypothesis_decl(hidx);
|
||||||
tout() << "activate " << h.get_name() << " : " << ppb(h.get_type()) << "\n";);
|
tout() << "activate " << h.get_name() << " : " << ppb(h.get_type()) << "\n";);
|
||||||
m_branch.m_active.insert(hidx);
|
m_branch.m_active.insert(hidx);
|
||||||
update_indices(hidx);
|
update_indices(hidx);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ optional<expr> strategy_fn::search() {
|
||||||
m_init_num_choices = get_num_choice_points();
|
m_init_num_choices = get_num_choice_points();
|
||||||
unsigned init_proof_depth = curr_state().get_proof_depth();
|
unsigned init_proof_depth = curr_state().get_proof_depth();
|
||||||
unsigned max_depth = get_config().m_max_depth;
|
unsigned max_depth = get_config().m_max_depth;
|
||||||
lean_trace(name({"blast", "search"}), tout() << "search upto depth " << max_depth << "\n";);
|
lean_trace_search(tout() << "search upto depth " << max_depth << "\n";);
|
||||||
trace_curr_state();
|
trace_curr_state();
|
||||||
trace_target();
|
trace_target();
|
||||||
action_result r = next_action();
|
action_result r = next_action();
|
||||||
|
|
|
@ -19,7 +19,7 @@ MK_THREAD_LOCAL_GET_DEF(expr, get_last_target);
|
||||||
void trace_target() {
|
void trace_target() {
|
||||||
if (lean_is_trace_enabled(name({"blast", "search"})) &&
|
if (lean_is_trace_enabled(name({"blast", "search"})) &&
|
||||||
curr_state().get_target() != get_last_target()) {
|
curr_state().get_target() != get_last_target()) {
|
||||||
lean_trace(name({"blast", "search"}), tout() << "target " << ppb(curr_state().get_target()) << "\n";);
|
lean_trace_search(tout() << "target " << ppb(curr_state().get_target()) << "\n";);
|
||||||
get_last_target() = curr_state().get_target();
|
get_last_target() = curr_state().get_target();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,16 +67,15 @@ void trace_depth_nchoices() {
|
||||||
p.second == get_num_choice_points())
|
p.second == get_num_choice_points())
|
||||||
return;
|
return;
|
||||||
p = mk_pair(curr_state().get_proof_depth(), get_num_choice_points());
|
p = mk_pair(curr_state().get_proof_depth(), get_num_choice_points());
|
||||||
lean_trace(name({"blast", "search"}),
|
lean_trace_search(tout() << "depth: " << p.first << ", #choice: " << p.second << "\n";);
|
||||||
tout() << "depth: " << p.first << ", #choice: " << p.second << "\n";);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void trace_search(char const * msg) {
|
void trace_search(char const * msg) {
|
||||||
lean_trace(name({"blast", "search"}), tout() << msg << "\n";);
|
lean_trace_search(tout() << msg << "\n";);
|
||||||
}
|
}
|
||||||
|
|
||||||
void trace_action(char const * a) {
|
void trace_action(char const * a) {
|
||||||
lean_trace(name({"blast", "action"}), tout() << a << "\n";);
|
lean_trace_action(tout() << a << "\n";);
|
||||||
}
|
}
|
||||||
|
|
||||||
void trace_curr_state_if(action_result r) {
|
void trace_curr_state_if(action_result r) {
|
||||||
|
@ -89,4 +88,9 @@ io_state_stream const & operator<<(io_state_stream const & out, ppb const & e) {
|
||||||
out << tmp;
|
out << tmp;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
io_state_stream const & operator<<(io_state_stream const & out, hypothesis const & h) {
|
||||||
|
out << ppb(h.get_self());
|
||||||
|
return out;
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -5,8 +5,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
|
||||||
Author: Leonardo de Moura
|
Author: Leonardo de Moura
|
||||||
*/
|
*/
|
||||||
#include "library/trace.h"
|
#include "library/trace.h"
|
||||||
#include "library/blast/action_result.h"
|
|
||||||
#include "library/io_state_stream.h"
|
#include "library/io_state_stream.h"
|
||||||
|
#include "library/blast/action_result.h"
|
||||||
|
#include "library/blast/hypothesis.h"
|
||||||
|
|
||||||
namespace lean {
|
namespace lean {
|
||||||
namespace blast {
|
namespace blast {
|
||||||
|
@ -17,6 +18,9 @@ void trace_depth_nchoices();
|
||||||
void trace_action(char const * a);
|
void trace_action(char const * a);
|
||||||
void trace_curr_state_if(action_result r);
|
void trace_curr_state_if(action_result r);
|
||||||
|
|
||||||
|
#define lean_trace_action(Code) lean_trace(name({"blast", "action"}), Code)
|
||||||
|
#define lean_trace_search(Code) lean_trace(name({"blast", "search"}), Code)
|
||||||
|
|
||||||
/** \brief Helper class for pretty printing blast expressions.
|
/** \brief Helper class for pretty printing blast expressions.
|
||||||
It uses state::to_kernel_expr to export a blast expression
|
It uses state::to_kernel_expr to export a blast expression
|
||||||
into an expression that can be processed by the pretty printer */
|
into an expression that can be processed by the pretty printer */
|
||||||
|
@ -26,4 +30,5 @@ struct ppb {
|
||||||
};
|
};
|
||||||
|
|
||||||
io_state_stream const & operator<<(io_state_stream const & out, ppb const & e);
|
io_state_stream const & operator<<(io_state_stream const & out, ppb const & e);
|
||||||
|
io_state_stream const & operator<<(io_state_stream const & out, hypothesis const & h);
|
||||||
}}
|
}}
|
||||||
|
|
Loading…
Reference in a new issue