TermopsThis file defines various utilities for term manipulation that are not needed in the kernel.
val push_rel_assum :
(Names.Name.t EConstr.binder_annot * EConstr.types) ->
Environ.env ->
Environ.envabout contexts
val push_rels_assum :
(Names.Name.t Constr.binder_annot * Constr.types) list ->
Environ.env ->
Environ.envval lookup_rel_id :
Names.Id.t ->
('c, 't, 'r) Context.Rel.pt ->
int * 'c option * 'tAssociates the contents of an identifier in a rel_context. Raise Not_found if there is no such identifier.
val rel_vect : int -> int -> Constr.constr arrayFunctions that build argument lists matching a block of binders or a context. rel_vect n m builds |Rel (n+m);...;Rel(n+1)|
val rel_list : int -> int -> EConstr.constr listProd/Lambda/LetIn destructors on constr
val it_mkNamedProd_wo_LetIn :
Constr.types ->
Constr.named_context ->
Constr.typesval it_mkLambda_or_LetIn_from_no_LetIn :
Constr.constr ->
Constr.rel_context ->
Constr.constrval map_constr_with_binders_left_to_right :
Environ.env ->
Evd.evar_map ->
(EConstr.rel_declaration -> 'a -> 'a) ->
('a -> EConstr.constr -> EConstr.constr) ->
'a ->
EConstr.constr ->
EConstr.constrval map_constr_with_full_binders :
Environ.env ->
Evd.evar_map ->
(EConstr.rel_declaration -> 'a -> 'a) ->
('a -> EConstr.constr -> EConstr.constr) ->
'a ->
EConstr.constr ->
EConstr.constrval fold_constr_with_full_binders :
Environ.env ->
Evd.evar_map ->
(EConstr.rel_declaration -> 'a -> 'a) ->
('a -> 'b -> EConstr.constr -> 'b) ->
'a ->
'b ->
EConstr.constr ->
'bval strip_head_cast : Evd.evar_map -> EConstr.constr -> EConstr.constrval drop_extra_implicit_args : Evd.evar_map -> EConstr.constr -> EConstr.constroccur checks
val occur_meta : Evd.evar_map -> EConstr.constr -> boolval occur_existential : Evd.evar_map -> EConstr.constr -> boolval occur_meta_or_existential : Evd.evar_map -> EConstr.constr -> boolval occur_metavariable :
Evd.evar_map ->
Constr.metavariable ->
EConstr.constr ->
boolval occur_evar : Evd.evar_map -> Evar.t -> EConstr.constr -> boolval occur_var :
Environ.env ->
Evd.evar_map ->
Names.Id.t ->
EConstr.constr ->
boolval occur_var_indirectly :
Environ.env ->
Evd.evar_map ->
Names.Id.t ->
EConstr.constr ->
Names.GlobRef.t optionval occur_var_in_decl :
Environ.env ->
Evd.evar_map ->
Names.Id.t ->
EConstr.named_declaration ->
boolval occur_vars :
Environ.env ->
Evd.evar_map ->
Names.Id.Set.t ->
EConstr.constr ->
boolval occur_vars_in_decl :
Environ.env ->
Evd.evar_map ->
Names.Id.Set.t ->
EConstr.named_declaration ->
boolval local_occur_var : Evd.evar_map -> Names.Id.t -> EConstr.constr -> boolAs occur_var but assume the identifier not to be a section variable
val local_occur_var_in_decl :
Evd.evar_map ->
Names.Id.t ->
EConstr.named_declaration ->
boolval free_rels : Evd.evar_map -> EConstr.constr -> Int.Set.tval dependent : Evd.evar_map -> EConstr.constr -> EConstr.constr -> booldependent m t tests whether m is a subterm of t
val dependent_no_evar :
Evd.evar_map ->
EConstr.constr ->
EConstr.constr ->
boolval dependent_in_decl :
Evd.evar_map ->
EConstr.constr ->
EConstr.named_declaration ->
boolval count_occurrences : Evd.evar_map -> EConstr.constr -> EConstr.constr -> intval collect_metas : Evd.evar_map -> EConstr.constr -> int listval collect_vars : Evd.evar_map -> EConstr.constr -> Names.Id.Set.tfor visible vars only
type meta_value_map = (Constr.metavariable * Constr.constr) listval subst_meta : meta_value_map -> Constr.constr -> Constr.constrval isMetaOf : Evd.evar_map -> Constr.metavariable -> EConstr.constr -> booltype meta_type_map = (Constr.metavariable * Constr.types) listType assignment for metavariables
val pop : EConstr.constr -> EConstr.constrpop c lifts by -1 the positive indexes in c
Substitution of an arbitrary large term. Uses equality modulo reduction of let
val replace_term_gen :
Evd.evar_map ->
(Evd.evar_map -> int -> EConstr.constr -> bool) ->
int ->
EConstr.constr ->
EConstr.constr ->
EConstr.constrreplace_term_gen eq arity e c replaces matching subterms according to eq by e in c. If arity is non-zero applications of larger length are handled atomically.
val subst_term :
Evd.evar_map ->
EConstr.constr ->
EConstr.constr ->
EConstr.constrsubst_term d c replaces d by Rel 1 in c
val replace_term :
Evd.evar_map ->
EConstr.constr ->
EConstr.constr ->
EConstr.constr ->
EConstr.constrreplace_term d e c replaces d by e in c
val base_sort_cmp : Conversion.conv_pb -> Sorts.t -> Sorts.t -> boolAlternative term equalities
val compare_constr_univ :
Environ.env ->
Evd.evar_map ->
(Conversion.conv_pb -> EConstr.constr -> EConstr.constr -> bool) ->
Conversion.conv_pb ->
EConstr.constr ->
EConstr.constr ->
boolval constr_cmp :
Environ.env ->
Evd.evar_map ->
Conversion.conv_pb ->
EConstr.constr ->
EConstr.constr ->
boolval eq_constr :
Environ.env ->
Evd.evar_map ->
EConstr.constr ->
EConstr.constr ->
boolval eta_reduce_head : Evd.evar_map -> EConstr.constr -> EConstr.constrval eta_expand_instantiation :
?evars:CClosure.evar_handler ->
Environ.env ->
Constr.constr array ->
Constr.rel_context ->
Constr.constr arrayval prod_applist :
Evd.evar_map ->
EConstr.constr ->
EConstr.constr list ->
EConstr.constrprod_applist forall (x1:B1;...;xn:Bn), B a1...an
val prod_applist_decls :
Evd.evar_map ->
int ->
EConstr.constr ->
EConstr.constr list ->
EConstr.constrIn prod_applist_decls n c args, c is supposed to have the form ∀Γ.c with Γ of length m and possibly with let-ins; it returns c with the assumptions of Γ instantiated by args and the local definitions of Γ expanded. Note that n counts both let-ins and prods, while the length of args only counts prods. In other words, varying n changes how many trailing let-ins are expanded.
val strip_outer_cast : Evd.evar_map -> EConstr.constr -> EConstr.constrRemove recursively the casts around a term i.e. strip_outer_cast (Cast (Cast ... (Cast c, t) ... )) is c.
val nb_lam : Evd.evar_map -> EConstr.constr -> intnb_lam sigma t counts the number of head lambda abstractions in t, ignoring casts. For instance on fun x1 x2 x3 => c (where c is not itself a lambda abstraction) it returns 3.
val nb_prod : Evd.evar_map -> EConstr.constr -> intnb_prod sigma t counts the number of head products in t, ignoring casts.
val nb_prod_modulo_zeta : Evd.evar_map -> EConstr.constr -> intVariant of nb_prod which also does zeta-reduction (i.e. reduces let-ins) along the way.
val last_arg : Evd.evar_map -> EConstr.constr -> EConstr.constrlast_arg sigma t returns the last argument of t. Fails if t is not an application.
val adjust_app_list_size :
EConstr.constr ->
EConstr.constr list ->
EConstr.constr ->
EConstr.constr list ->
EConstr.constr * EConstr.constr list * EConstr.constr * EConstr.constr listval adjust_app_array_size :
EConstr.constr ->
EConstr.constr array ->
EConstr.constr ->
EConstr.constr array ->
EConstr.constr * EConstr.constr array * EConstr.constr * EConstr.constr arraytype names_context = Names.Name.t listname contexts
val add_name : Names.Name.t -> names_context -> names_contextval lookup_name_of_rel : int -> names_context -> Names.Name.tval lookup_rel_of_name : Names.Id.t -> names_context -> intval empty_names_context : names_contextval ids_of_rel_context : ('c, 't, 'r) Context.Rel.pt -> Names.Id.t listval ids_of_named_context : ('c, 't, 'r) Context.Named.pt -> Names.Id.t listval ids_of_context : Environ.env -> Names.Id.t listval names_of_rel_context : Environ.env -> names_contextval env_rel_context_chop :
int ->
Environ.env ->
Environ.env * EConstr.rel_contextval vars_of_env : Environ.env -> Names.Id.Set.tSet of local names
val add_vname : Names.Id.Set.t -> Names.Name.t -> Names.Id.Set.tval process_rel_context :
(EConstr.rel_declaration -> Environ.env -> Environ.env) ->
Environ.env ->
Environ.envother signature iterators
val assums_of_rel_context :
('c, 't, 'r) Context.Rel.pt ->
((Names.Name.t, 'r) Context.pbinder_annot * 't) listval map_rel_context_in_env :
(Environ.env -> Constr.constr -> Constr.constr) ->
Environ.env ->
Constr.rel_context ->
Constr.rel_contextval fold_named_context_both_sides :
('a -> Constr.named_declaration -> Constr.named_declaration list -> 'a) ->
Constr.named_context ->
init:'a ->
'aval mem_named_context_val : Names.Id.t -> Environ.named_context_val -> boolval clear_named_body : Names.Id.t -> Environ.env -> Environ.envval global_vars_set :
Environ.env ->
Evd.evar_map ->
EConstr.constr ->
Names.Id.Set.tval global_vars_set_of_decl :
Environ.env ->
Evd.evar_map ->
EConstr.named_declaration ->
Names.Id.Set.tval global_app_of_constr :
Environ.env ->
Evd.evar_map ->
EConstr.constr ->
(Names.GlobRef.t * EConstr.EInstance.t) * EConstr.constr optionval dependency_closure :
Environ.env ->
Evd.evar_map ->
EConstr.named_context ->
Names.Id.Set.t ->
Names.Id.t listGives an ordered list of hypotheses, closed by dependencies, containing a given set
val is_section_variable : Environ.env -> Names.Id.t -> boolThis tests if the ident is known in the given env, intended to be used with the global env.
val is_section_variable_sign :
?check:bool ->
Environ.named_context_val ->
Names.Id.t ->
boolCheck if the ident has SecVar status in this enviroment. By default check=true and produce anomaly if it is not bound. If check=false returns false if it is not bound.
val is_section_variable_env : ?check:bool -> Environ.env -> Names.Id.t -> boolval is_template_polymorphic_ref :
Environ.env ->
Evd.evar_map ->
EConstr.constr ->
boolval is_template_polymorphic_ind :
Environ.env ->
Evd.evar_map ->
EConstr.constr ->
boolval is_Prop : Evd.evar_map -> EConstr.constr -> boolval is_Set : Evd.evar_map -> EConstr.constr -> boolval is_Type : Evd.evar_map -> EConstr.constr -> boolval reference_of_level : Evd.evar_map -> Univ.Level.t -> Libnames.qualid optionval pr_global_env : Environ.env -> Names.GlobRef.t -> Pp.tval pr_existential_key : Environ.env -> Evd.evar_map -> Evar.t -> Pp.tval evar_string : Environ.env -> Evd.evar_map -> Evar.t -> stringval evar_suggested_name : Environ.env -> Evd.evar_map -> Evar.t -> Names.Id.tval pr_evar_info : Environ.env -> Evd.evar_map -> 'a Evd.evar_info -> Pp.tval pr_evar_constraints : Evd.evar_map -> Evd.evar_constraint list -> Pp.tval pr_evar_map :
?with_univs:bool ->
int option ->
Environ.env ->
Evd.evar_map ->
Pp.tval pr_evar_map_filter :
?with_univs:bool ->
(Evar.t -> Evd.any_evar_info -> bool) ->
Environ.env ->
Evd.evar_map ->
Pp.tval pr_evd_level : Evd.evar_map -> Univ.Level.t -> Pp.tval pr_evd_qglobal : Evd.evar_map -> Sorts.QGlobal.t -> Pp.tval pr_evd_qvar : Evd.evar_map -> Sorts.QVar.t -> Pp.tval pr_evd_quality : Evd.evar_map -> Sorts.Quality.t -> Pp.tmodule ConstrData : sig ... endmodule Internal : sig ... endNOTE: to print terms you always want to use functions in Printer, not these ones which are for very special cases.