package rocq-runtime
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page
The Rocq Prover -- Core Binaries and Tools
Install
dune-project
Dependency
Authors
Maintainers
Sources
rocq-9.1.0.tar.gz
sha256=b236dc44f92e1eeca6877c7ee188a90c2303497fe7beb99df711ed5a7ce0d824
doc/rocq-runtime.kernel/Mod_declarations/index.html
Module Mod_declarationsSource
For a module, there are five possible situations:
Declare Module M : Tthenmod_expr = Abstract; mod_type_alg = Some TModule M := Ethenmod_expr = Algebraic E; mod_type_alg = NoneModule M : T := Ethenmod_expr = Algebraic E; mod_type_alg = Some TModule M. ... End Mthenmod_expr = FullStruct; mod_type_alg = NoneModule M : T. ... End Mthenmod_expr = Struct; mod_type_alg = Some TAnd of course, all these situations may be functors or not.
A module_type_body is just a module_body with no implementation and also an empty mod_retroknowledge. Its mod_type_alg contains the algebraic definition of this module type, or None if it has been built interactively.
A module signature is a structure, with possibly functors on top of it
Source
type module_implementation = | Abstract(*no accessible implementation
*)| Algebraic of Declarations.module_expression(*non-interactive algebraic expression
*)| Struct of structure_body(*interactive body living in the parameter context of
*)mod_type| FullStruct(*special case of
*)Struct: the body is exactlymod_type
Extra invariants :
- No
MEwithinside amod_exprimplementation : the 'with' syntax is only supported for module types
- A module application is atomic, for instance ((M N) P) : * the head of
MEapplycan only be anotherMEapplyor aMEident* the argument ofMEapplyis now directly forced to be aModPath.t.
Accessors
None if the argument is a functor, mod_delta otherwise
Builders
Source
val make_module_body :
module_signature ->
Mod_subst.delta_resolver ->
Retroknowledge.action list ->
module_bodySource
val strengthen_module_body :
src:Names.ModPath.t ->
module_signature ->
Mod_subst.delta_resolver ->
module_body ->
module_bodySource
val strengthen_module_type :
structure_body ->
Mod_subst.delta_resolver ->
module_type_body ->
module_type_bodySource
val replace_module_body :
structure_body ->
Mod_subst.delta_resolver ->
module_body ->
module_bodySetters
Source
val set_algebraic_type :
module_type_body ->
Declarations.module_expression ->
module_type_bodySubstitution
Source
val subst_signature :
subst_kind ->
Mod_subst.substitution ->
Names.ModPath.t ->
module_signature ->
module_signatureSource
val subst_structure :
subst_kind ->
Mod_subst.substitution ->
Names.ModPath.t ->
structure_body ->
structure_bodySource
val subst_module :
subst_kind ->
Mod_subst.substitution ->
Names.ModPath.t ->
module_body ->
module_bodySource
val subst_modtype :
subst_kind ->
Mod_subst.substitution ->
Names.ModPath.t ->
module_type_body ->
module_type_bodyHashconsing
Cleaning a module expression from bounded parts
For instance: functor(X:T)->struct module M:=X end) becomes: functor(X:T)->struct module M:=<content of T> end)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page