Evarconvtype unify_flags = Evarsolve.unify_flagsval 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_resultval conv_fun : unify_fun -> Evarsolve.unifierexception UnableToUnify of Evd.evar_map * Pretype_errors.unification_errorThere 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.
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_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.
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.
val solve_unif_constraints_with_heuristics : Environ.env -> ?flags:unify_flags -> ?with_ho:bool -> Evd.evar_map -> Evd.evar_mapCheck all pending unification problems are solved and raise a PretypeError otherwise
val check_problems_are_solved : Environ.env -> Evd.evar_map -> unitCheck if a canonical structure is applicable
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.
Try to solve problems of the form ?xargs = c by second-order matching, using typing to select occurrences
type occurrence_match_test = Environ.env -> Evd.evar_map -> EConstr.constr -> EConstr.constr -> bool * Evd.evar_mapWhen given the choice of abstracting an occurrence or leaving it, force abstration.
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 listval 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 n Gives the default test and occurrences for n arguments
val second_order_matching : unify_flags -> Environ.env -> Evd.evar_map -> EConstr.existential -> occurrences_selection -> EConstr.constr -> Evd.evar_map * boolDeclare function to enforce evars resolution by using typing constraints
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_x algorithm.
val evar_conv_x : unify_funThe default unification algorithm with evars and universes.
val evar_unify : Evarsolve.unifierval coq_unit_judge : Environ.env -> Evd.evar_map -> Evd.evar_map * EConstr.unsafe_judgmentFunctions to deal with impossible cases