lean2/src/library/tactic/proof_state.cpp
Leonardo de Moura 796fb3c3bf refactor(library/tactic): remove justification_builder
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2013-11-21 17:29:06 -08:00

46 lines
1.4 KiB
C++

/*
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#include "util/sstream.h"
#include "library/tactic/tactic_exception.h"
#include "library/tactic/proof_state.h"
namespace lean {
format proof_state::pp(formatter const & fmt, options const & opts) const {
format r;
bool first = true;
for (auto const & p : m_goals) {
if (first)
first = false;
else
r += line();
r += group(format{format(p.first), colon(), line(), p.second.pp(fmt, opts)});
}
return r;
}
void swap(proof_state & s1, proof_state & s2) {
swap(s1.m_goals, s2.m_goals);
swap(s1.m_menv, s2.m_menv);
swap(s1.m_proof_builder, s2.m_proof_builder);
}
static name g_main("main");
proof_state to_proof_state(environment const & env, context const & ctx, expr const & t) {
auto gfn = to_goal(env, ctx, t);
goal g = gfn.first;
goal_proof_fn fn = gfn.second;
proof_builder p = mk_proof_builder(
[=](proof_map const & m, environment const &, assignment const &) -> expr {
expr p = find(m, g_main);
if (!p)
throw tactic_exception(sstream() << "failed to find proof for '" << g_main << "' goal");
return fn(p);
});
return proof_state(goals(mk_pair(g_main, g)), metavar_env(), p);
}
}