package rocq-runtime
Install
Dune Dependency
Authors
Maintainers
Sources
md5=8d522602d23e7a665631826dab9aa92b
sha512=f4f76a6a178e421c99ee7a331a2fd97a06e9c5d0168d7e60c44e3820d8e1a124370ea104ad90c7f87a9a1e9d87b2d0d7d2d387c998feeaed4a75ed04e176a4be
doc/rocq-runtime.pretyping/Typeclasses/index.html
Module Typeclasses
Source
type class_method = {
meth_name : Names.Name.t;
meth_info : hint_info option;
meth_const : Names.Constant.t option;
}
type typeclass = {
cl_univs : UVars.AbstractContext.t;
(*The toplevel universe quantification in which the typeclass lives. In particular,
*)cl_props
andcl_context
are quantified over it.cl_impl : Names.GlobRef.t;
(*The class implementation: a record parameterized by the context with defs in it or a definition if the class is a singleton. This acts as the class' global identifier.
*)cl_context : Constr.rel_context;
(*Context in which the definitions are typed. Includes both typeclass parameters and superclasses.
*)cl_props : Constr.rel_context;
(*Context of definitions and properties on defs, will not be shared
*)cl_projs : class_method list;
(*The methods implementations of the typeclass as projections. Some may be undefinable due to sorting restrictions or simply undefined if no name is provided. The
*)int option option
indicates subclasses whose hint has the given priority.cl_strict : bool;
(*Whether we use matching or full unification during resolution
*)cl_unique : bool;
(*Whether we can assume that instances are unique, which allows no backtracking and sharing of resolution.
*)
}
This module defines type-classes
None
if not a class
raise TypeClassError
if not a class
None
if not a class
raise TypeClassError
if not a class
val dest_class_app :
Environ.env ->
Evd.evar_map ->
EConstr.constr ->
(typeclass * EConstr.EInstance.t) * Constr.constr list
These raise a UserError if not a class. Caution: the typeclass structures is not instantiated w.r.t. the universe instance. This is done separately by typeclass_univ_instance.
Get the instantiated typeclass structure for a given universe instance.
val class_of_constr :
Environ.env ->
Evd.evar_map ->
EConstr.constr ->
(EConstr.rel_context
* ((typeclass * EConstr.EInstance.t) * Constr.constr list))
option
Just return None if not a class
Returns the term and type for the given instance of the parameters and fields of the type class.
Filter which evars to consider for resolution.
Resolvability. Only undefined evars can be marked or checked for resolvability. They represent type-class search roots.
A resolvable evar is an evar the type-class engine may try to solve An unresolvable evar is an evar the type-class engine will NOT try to solve
val resolve_typeclasses :
?filter:evar_filter ->
?unique:bool ->
?fail:bool ->
Environ.env ->
Evd.evar_map ->
Evd.evar_map
val set_solve_all_instances :
(Environ.env -> Evd.evar_map -> evar_filter -> bool -> bool -> Evd.evar_map) ->
unit
A plugin can override the TC resolution engine by calling these two APIs. Beware this action is not registed in the summary (the Undo system) so it is up to the plugin to do so.
val resolve_one_typeclass :
?unique:bool ->
Environ.env ->
Evd.evar_map ->
EConstr.types ->
Evd.evar_map * EConstr.constr
val set_solve_one_instance :
(Environ.env ->
Evd.evar_map ->
EConstr.types ->
Evd.evar_map * EConstr.constr) ->
unit