lean4-htt/src/library/class_instance_resolution.h

45 lines
2.2 KiB
C++

/*
Copyright (c) 2015 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#pragma once
#include <memory>
#include "kernel/environment.h"
#include "library/io_state.h"
#include "library/old_local_context.h"
namespace lean {
optional<expr> mk_class_instance(environment const & env, options const & o, list<expr> const & ctx, expr const & e);
optional<expr> mk_class_instance(environment const & env, list<expr> const & ctx, expr const & e);
// Old API
/** \brief Create a metavariable, and attach choice constraint for generating
solutions using class-instances.
\param ctx Local context where placeholder is located
\param prefix Prefix for metavariables that will be created by this procedure
\param suffix If provided, then it is added to the main metavariable created by this procedure.
\param use_local_instances If instances in the local context should be used
in the class-instance resolution
\param is_strict True if constraint should fail if not solution is found,
False if empty solution should be returned if there is no solution
\param type Expected type for the placeholder (if known)
\param tag To be associated with new metavariables and expressions (for error localization).
*/
pair<expr, constraint> mk_class_instance_elaborator(
environment const & env, io_state const & ios, old_local_context const & ctx,
optional<name> const & suffix, bool use_local_instances,
bool is_strict, optional<expr> const & type, tag g);
optional<expr> mk_class_instance(environment const & env, io_state const & ios, old_local_context const & ctx, expr const & type, bool use_local_instances);
optional<expr> mk_class_instance(environment const & env, old_local_context const & ctx, expr const & type);
optional<expr> mk_set_instance(old_type_checker & tc, options const & o, list<expr> const & ctx, expr const & type);
optional<expr> mk_subsingleton_instance(environment const & env, options const & o,
list<expr> const & ctx, expr const & type);
void initialize_class_instance_resolution();
void finalize_class_instance_resolution();
}