Module Structures.Structure

A structure S is a non recursive inductive type with a single constructor

type projection = {
proj_name : Names.Name.t;(*

field name

*)
proj_true : bool;(*

false = projection for a defined field (letin)

*)
proj_canonical : bool;(*

false = not to be used for CS inference

*)
proj_body : Names.Constant.t option;(*

the projection function

*)
}

A projection to a structure field

type t = {
name : Names.inductive;
projections : projection list;
nparams : int;
}
val make : Environ.env -> Names.inductive -> projection list -> t
val register : t -> unit
val subst : Mod_subst.substitution -> t -> t
val rebuild : Environ.env -> t -> t

refreshes nparams, e.g. after section discharging

val find : Names.inductive -> t

find isp returns the Structure.t associated to the inductive path isp if it corresponds to a structure, otherwise it fails with Not_found

val find_from_projection : Names.Constant.t -> t

raise Not_found if not a structure projection

val find_projections : Names.inductive -> Names.Constant.t option list

lookup_projections isp returns the projections associated to the inductive path isp if it corresponds to a structure, otherwise it fails with Not_found

val projection_nparams : Names.Constant.t -> int

raise Not_found if not a projection

val is_projection : Names.Constant.t -> bool