/* 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 "kernel/expr.h" namespace lean { /** \brief Create a universe level metavariable that can be used as a placeholder in #match. \remark The index \c i is encoded in the hierarchical name, and can be quickly accessed. In the match procedure the substitution is also efficiently represented as an array (aka buffer). */ level mk_idx_metauniv(unsigned i); /** \brief Return true iff \c l is a metauniverse created using \c mk_idx_metauniv */ bool is_idx_metauniv(level const & l); unsigned to_meta_idx(level const & l); /** \brief Create a special metavariable that can be used as a placeholder in #match. \remark The index \c i is encoded in the hierarchical name, and can be quickly accessed. In the match procedure the substitution is also efficiently represented as an array (aka buffer). */ expr mk_idx_metavar(unsigned i, expr const & type); /** \brief Return true iff \c l is a metavariable created using \c mk_idx_metavar */ bool is_idx_metavar(expr const & l); unsigned to_meta_idx(expr const & e); void initialize_idx_metavar(); void finalize_idx_metavar(); }