(* Copyright (C) 2004, HELM Team. * * This file is part of HELM, an Hypertextual, Electronic * Library of Mathematics, developed at the Computer Science * Department, University of Bologna, Italy. * * HELM is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * HELM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HELM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. * * For details, see the HELM World-Wide-Web page, * http://helm.cs.unibo.it/ *) exception MetaSubstFailure of string exception Uncertain of string exception AssertFailure of string exception SubstNotFound of int (* The entry (i,t) in a substitution means that *) (* (META i) have been instantiated with t. *) type substitution = (int * (Cic.context * Cic.term)) list (** @raise SubstNotFound *) val lookup_subst: int -> substitution -> Cic.context * Cic.term (* apply_subst subst t *) (* applies the substitution [subst] to [t] *) (* [subst] must be already unwinded *) val apply_subst : substitution -> Cic.term -> Cic.term val apply_subst_context : substitution -> Cic.context -> Cic.context val apply_subst_metasenv: substitution -> Cic.metasenv -> Cic.metasenv (* {2 Kernel wrappers} * From now on we recreate a kernel abstraction where substitutions are part of * the calculus *) val lift : substitution -> int -> Cic.term -> Cic.term val subst: substitution -> Cic.term -> Cic.term -> Cic.term val whd: substitution -> Cic.context -> Cic.term -> Cic.term val are_convertible: substitution -> Cic.context -> Cic.term -> Cic.term -> bool val type_of_aux': Cic.metasenv -> substitution -> Cic.context -> Cic.term -> Cic.term val tempi_type_of_aux : float ref val tempi_subst : float ref val tempi_type_of_aux_subst : float ref (*** delifting ***) val delift : int -> substitution -> Cic.context -> Cic.metasenv -> (Cic.term option) list -> Cic.term -> Cic.term * Cic.metasenv * substitution (** {2 Pretty printers} *) val ppsubst: substitution -> string val ppterm: substitution -> Cic.term -> string val ppcontext: ?sep: string -> substitution -> Cic.context -> string val ppterm_in_context: substitution -> Cic.term -> (Cic.name option) list -> string val ppmetasenv: ?sep: string -> Cic.metasenv -> substitution -> string (** {2 Format-like pretty printers} * As above with prototypes suitable for toplevel/ocamldebug printers. No * subsitutions are applied here since such printers are required to be invoked * with only one argument. *) val fppsubst: Format.formatter -> substitution -> unit val fppterm: Format.formatter -> Cic.term -> unit val fppmetasenv: Format.formatter -> Cic.metasenv -> unit (* (* DEBUG *) val print_counters: unit -> unit val reset_counters: unit -> unit *)