lean2/src/kernel/converter.h

37 lines
1.3 KiB
C
Raw Normal View History

/*
Copyright (c) 2014 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#pragma once
#include <functional>
#include "kernel/environment.h"
namespace lean {
class type_checker;
class converter {
protected:
name mk_fresh_name(type_checker & tc);
pair<expr, constraint_seq> infer_type(type_checker & tc, expr const & e);
extension_context & get_extension(type_checker & tc);
public:
virtual ~converter() {}
virtual pair<expr, constraint_seq> whnf(expr const & e, type_checker & c) = 0;
virtual pair<bool, constraint_seq> is_def_eq(expr const & t, expr const & s, type_checker & c, delayed_justification & j) = 0;
virtual optional<module_idx> get_module_idx() const = 0;
virtual bool is_opaque(declaration const & d) const = 0;
pair<bool, constraint_seq> is_def_eq(expr const & t, expr const & s, type_checker & c);
};
std::unique_ptr<converter> mk_dummy_converter();
2015-02-08 03:19:01 +00:00
/** \brief Default procedure for deciding whether a declaration is opaque or not */
bool is_opaque(declaration const & d, optional<module_idx> const & mod_idx);
optional<declaration> is_delta(environment const & env, expr const & e);
void initialize_converter();
void finalize_converter();
}