package rocq-runtime
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=b236dc44f92e1eeca6877c7ee188a90c2303497fe7beb99df711ed5a7ce0d824
doc/rocq-runtime.kernel/Mod_subst/index.html
Module Mod_substSource
Mod_subst
Delta resolver
A delta resolver is a renaming of kernames and modpaths. Objects on which the resolver acts non-trivially must share a common modpath prefix called the root of the resolver.
Given a root, build a resolver.
val add_mp_delta_resolver :
Names.ModPath.t ->
Names.ModPath.t ->
delta_resolver ->
delta_resolveradd_mp_delta_resolver mp v reso assumes that root(reso) ⊆ mp.
val add_kn_delta_resolver :
Names.KerName.t ->
Names.KerName.t ->
delta_resolver ->
delta_resolveradd_kn_delta_resolver kn v reso assumes that root(reso) ⊆ modpath(kn).
val add_inline_delta_resolver :
Names.KerName.t ->
(int * Constr.constr UVars.univ_abstracted option) ->
delta_resolver ->
delta_resolveradd_inline_delta_resolver kn v reso assumes that root(reso) ⊆ modpath(kn).
add_delta_resolver reso1 reso2 merges two renamings, assuming that root(reso2) ⊆ root(reso1). Note that this is asymmetrical. The root of the result is root(reso2).
Assuming mp ⊆ root(delta), upcast_delta_resolver mp delta allows seeing delta as a resolver with root = mp.
Effect of a delta_resolver on a module path, on a kernel name
Build a constant whose canonical part is obtained via a resolver
Same for inductive names
Extract the set of inlined constant in the resolver
Does a delta_resolver contains a mp?
Substitution
val add_mbid :
Names.MBId.t ->
Names.ModPath.t ->
delta_resolver ->
substitution ->
substitutionadd_* add arg2/arg1{arg3} to the substitution with no sequential composition. Most often this is not what you want. For sequential composition, try join (map_mbid mp delta) subs *
val add_mp :
Names.ModPath.t ->
Names.ModPath.t ->
delta_resolver ->
substitution ->
substitutionmap_* create a new substitution arg2/arg1{arg3}
sequential composition: substitute (join sub1 sub2) t = substitute sub2 (substitute sub1 t)
Apply the substitution on the domain of the resolver
Apply the substitution on the codomain of the resolver
subst_mp sub mp guarantees that whenever the result of the substitution is structutally equal mp, it is equal by pointers as well ==
val subst_con :
substitution ->
Names.Constant.t ->
Names.Constant.t * Constr.constr UVars.univ_abstracted optionval replace_mp_in_kn :
Names.ModPath.t ->
Names.ModPath.t ->
Names.KerName.t ->
Names.KerName.treplace_mp_in_con mp mp' con replaces mp with mp' in con
subst_mps sub c performs the substitution sub on all kernel names appearing in c