Module Evarconv
Unification for type inference.
type unify_flags= Evarsolve.unify_flags
val default_flags_of : ?subterm_ts:TransparentState.t -> TransparentState.t -> unify_flagsThe default subterm transparent state is no unfoldings
type unify_fun= unify_flags -> Environ.env -> Evd.evar_map -> Evd.conv_pb -> EConstr.constr -> EConstr.constr -> Evarsolve.unification_result
val conv_fun : unify_fun -> Evarsolve.unifier
exceptionUnableToUnify of Evd.evar_map * Pretype_errors.unification_error
Main unification algorithm for type inference.
val unify_delay : ?flags:unify_flags -> Environ.env -> Evd.evar_map -> EConstr.constr -> EConstr.constr -> Evd.evar_mapval unify_leq_delay : ?flags:unify_flags -> Environ.env -> Evd.evar_map -> EConstr.constr -> EConstr.constr -> Evd.evar_mapval unify : ?flags:unify_flags -> ?with_ho:bool -> Environ.env -> Evd.evar_map -> Evd.conv_pb -> EConstr.constr -> EConstr.constr -> Evd.evar_mapThis function also calls
solve_unif_constraints_with_heuristicsto 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
Unification heuristics.
val solve_unif_constraints_with_heuristics : Environ.env -> ?flags:unify_flags -> ?with_ho:bool -> Evd.evar_map -> Evd.evar_map
val check_problems_are_solved : Environ.env -> Evd.evar_map -> unit
val check_conv_record : Environ.env -> Evd.evar_map -> Reductionops.state -> Reductionops.state -> Evd.evar_map * (EConstr.constr * EConstr.constr) * EConstr.constr * EConstr.constr list * (EConstr.t list * EConstr.t list) * (EConstr.t list * EConstr.t list) * (Reductionops.Stack.t * Reductionops.Stack.t) * EConstr.constr * (int option * EConstr.constr)val compare_heads : Environ.env -> Evd.evar_map -> nargs:int -> EConstr.t -> EConstr.t -> Evarsolve.unification_resultCompares 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.
type occurrence_match_test= Environ.env -> Evd.evar_map -> EConstr.constr -> Environ.env -> Evd.evar_map -> int -> EConstr.constr -> EConstr.constr -> bool * Evd.evar_map
type occurrence_selection=|AtOccurrences of Locus.occurrences|Unspecified of Evd.Abstraction.abstraction
val default_occurrence_selection : occurrence_selectionBy default, unspecified, not preferring abstraction. This provides the most general solutions.
type occurrences_selection= occurrence_match_test * occurrence_selection list
val default_occurrence_test : allowed_evars:Evarsolve.AllowedEvars.t -> TransparentState.t -> occurrence_match_testval default_occurrences_selection : ?allowed_evars:Evarsolve.AllowedEvars.t -> TransparentState.t -> int -> occurrences_selectiondefault_occurrence_selection nGives the default test and occurrences fornarguments
val second_order_matching : unify_flags -> Environ.env -> Evd.evar_map -> EConstr.existential -> occurrences_selection -> EConstr.constr -> Evd.evar_map * bool
val set_solve_evars : (Environ.env -> Evd.evar_map -> EConstr.constr -> Evd.evar_map * EConstr.constr) -> unitval set_evar_conv : unify_fun -> unitOverride default
evar_conv_xalgorithm.
val evar_conv_x : unify_funThe default unification algorithm with evars and universes.
val evar_unify : Evarsolve.unifier
val coq_unit_judge : Environ.env -> Evd.evar_map -> Evd.evar_map * EConstr.unsafe_judgmentFunctions to deal with impossible cases