(************************************************************************) (* * The Rocq Prover / The Rocq Development Team *) (* v * Copyright INRIA, CNRS and contributors *) (* <O___,, * (see version control and CREDITS file for authors & dates) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (* * (see LICENSE file for the text of the license) *) (************************************************************************)
open EConstr open Environ open Reductionops open Evd open Locus
(** {4 Unification for type inference. } *)
type unify_flags = Evarsolve.unify_flags
(** The default subterm transparent state is no unfoldings *) val default_flags_of : ?subterm_ts:TransparentState.t -> TransparentState.t -> unify_flags
exception UnableToUnify of evar_map * Pretype_errors.unification_error
(** {6 Main unification algorithm for type inference. } *)
(** There are two variants for unification: one that delays constraints outside its capabilities ([unify_delay]) and another that tries to solve such remaining constraints using
heuristics ([unify]). *)
(** These functions allow to pass arbitrary flags to the unifier and can delay constraints. In case the flags are not specified, they default to [default_flags_of TransparentState.full] currently.
In case of success, the two terms are hence unifiable only if the remaining constraints can be solved or [check_problems_are_solved] is true.
@raises UnableToUnify in case the two terms do not unify *)
(** This function also calls [solve_unif_constraints_with_heuristics] to resolve any remaining constraints. In case of success the two terms are unified without condition.
The with_ho option tells if higher-order unification should be tried to resolve the constraints.
@raises a PretypeError if it cannot unify *) val unify : ?flags:unify_flags -> ?with_ho:bool ->
env -> evar_map -> conv_pb -> constr -> constr -> evar_map
(** {6 Unification heuristics. } *)
(** Try heuristics to solve pending unification problems and to solve evars with candidates.
The with_ho option tells if higher-order unification should be tried to resolve the constraints.
@raises a PretypeError if it fails to resolve some problem *)
(** Compares two constants/inductives/constructors unifying their universes. It required the number of arguments applied to the c/i/c in order to decided
the kind of check it must perform. *) val compare_heads : env -> evar_map ->
nargs:int -> EConstr.t -> EConstr.t -> Evarsolve.unification_result
(** Try to solve problems of the form ?x[args] = c by second-order
matching, using typing to select occurrences *)
(** When given the choice of abstracting an occurrence or leaving it,
force abstration. *)
type occurrence_selection =
| AtOccurrences of occurrences
| Unspecified of Abstraction.abstraction
(** By default, unspecified, not preferring abstraction.
This provides the most general solutions. *) val default_occurrence_selection : occurrence_selection
type occurrences_selection =
occurrence_match_test * occurrence_selection list
val default_occurrence_test : allowed_evars:Evarsolve.AllowedEvars.t -> TransparentState.t -> occurrence_match_test
(** [default_occurrence_selection n]
Gives the default test and occurrences for [n] arguments *) val default_occurrences_selection : ?allowed_evars:Evarsolve.AllowedEvars.t (* By default, all *) ->
TransparentState.t -> int -> occurrences_selection
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.