Coercionops
type cl_typ =
| CL_SORT |
| CL_FUN |
| CL_SECVAR of Names.variable |
| CL_CONST of Names.Constant.t |
| CL_IND of Names.inductive |
| CL_PROJ of Names.Projection.Repr.t |
This is the type of class kinds
val subst_cl_typ : Environ.env -> Mod_subst.substitution -> cl_typ -> cl_typ
type coe_typ = Names.GlobRef.t
This is the type of coercion kinds
type coe_info_typ = {
coe_value : Names.GlobRef.t; |
coe_typ : Constr.t; |
coe_local : bool; |
coe_reversible : bool; |
coe_is_identity : bool; |
coe_is_projection : Names.Projection.Repr.t option; |
coe_source : cl_typ; |
coe_target : cl_typ; |
coe_param : int; |
}
This is the type of infos for declared coercions
type inheritance_path = coe_info_typ list
This is the type of paths from a class to another
val class_exists : cl_typ -> bool
val class_nparams : cl_typ -> int
val find_class_type : Environ.env -> Evd.evar_map -> EConstr.types -> cl_typ * EConstr.EInstance.t * EConstr.constr list
find_class_type env sigma c
returns the head reference of c
, its universe instance and its arguments
val class_of : Environ.env -> Evd.evar_map -> EConstr.types -> EConstr.types * cl_typ
raises Not_found
if not convertible to a class
val class_args_of : Environ.env -> Evd.evar_map -> EConstr.types -> EConstr.constr list
val subst_coercion : Mod_subst.substitution -> coe_info_typ -> coe_info_typ
val declare_coercion : Environ.env -> Evd.evar_map -> ?update:bool -> coe_info_typ -> unit
Set update
to update an already declared coercion (default false
).
val coercion_exists : coe_typ -> bool
Access to coercions infos
val coercion_info : coe_typ -> coe_info_typ
given one (or two) types these function also return the class (classes) of the type and its class_args_of
val lookup_path_between_class : (cl_typ * cl_typ) -> inheritance_path
val lookup_path_between : Environ.env -> Evd.evar_map -> src:EConstr.types -> tgt:EConstr.types -> inheritance_path
val lookup_path_to_fun_from : Environ.env -> Evd.evar_map -> EConstr.types -> inheritance_path
val lookup_path_to_sort_from : Environ.env -> Evd.evar_map -> EConstr.types -> inheritance_path
val lookup_pattern_path_between : Environ.env -> (Names.inductive * Names.inductive) -> (Names.constructor * int) list
val path_is_reversible : inheritance_path -> bool
val string_of_class : cl_typ -> string
This is for printing purpose
val inheritance_graph : unit -> ((cl_typ * cl_typ) * inheritance_path) list
val classes : unit -> cl_typ list
val coercions : unit -> coe_info_typ list
val hide_coercion : coe_typ -> int option
hide_coercion
returns the number of params to skip if the coercion must be hidden, None
otherwise; it raises Not_found
if not a coercion
val reachable_from : cl_typ -> ClTypSet.t