package rocq-runtime
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
The Rocq Prover -- Core Binaries and Tools
Install
dune-project
Dependency
Authors
Maintainers
Sources
rocq-9.3.0.tar.gz
sha256=3f0fc283e8644394aa9c7a6e3995b6d9ebbe1e6dda712bf431f9c372dcef95ad
doc/src/rocq-runtime.interp/genintern.ml.html
Source file genintern.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151(************************************************************************) (* * The Rocq Prover / The Rocq Development Team *) (* v * Copyright INRIA, CNRS and contributors *) (* <O___,, * (see version control and CREDITS file for authors & dates) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (* * (see LICENSE file for the text of the license) *) (************************************************************************) open Names open Genarg module Store = Store.Make () type ntnvar_status = { mutable ntnvar_used : bool list; mutable ntnvar_used_as_binder : bool; mutable ntnvar_scopes : Notation_term.subscopes option; mutable ntnvar_binding_ids : Notation_term.notation_var_binders option; ntnvar_typ : Notation_term.notation_var_internalization_type; } type intern_variable_status = { intern_ids : Id.Set.t; intern_univs : UnivNames.universe_binders; notation_variable_status : ntnvar_status Id.Map.t; } type glob_sign = { ltacvars : Id.Set.t; genv : Environ.env; extra : Store.t; intern_sign : intern_variable_status; strict_check : bool; } let empty_intern_sign univs = { intern_ids = Id.Set.empty; intern_univs = univs; notation_variable_status = Id.Map.empty; } let empty_glob_sign ~strict env univs = { ltacvars = Id.Set.empty; genv = env; extra = Store.empty; intern_sign = empty_intern_sign univs; strict_check = strict; } (** In globalize tactics, we need to keep the initial [constr_expr] to recompute in the environment by the effective calls to Intro, Inversion, etc The [constr_expr] field is [None] in TacDef though *) type glob_constr_and_expr = Glob_term.glob_constr * Constrexpr.constr_expr option type glob_constr_pattern_and_expr = Id.Set.t * glob_constr_and_expr * Pattern.uninstantiated_pattern type ('raw, 'glb) intern_fun = glob_sign -> 'raw -> glob_sign * 'glb type 'glb ntn_subst_fun = ntnvar_status Id.Map.t -> (Id.t -> Glob_term.glob_constr option) -> 'glb -> 'glb module InternObj = struct type ('raw, 'glb, 'top) obj = ('raw, 'glb) intern_fun let name = "intern" let default _ = None end type ('raw, 'glb) constr_intern_fun = ?loc:Loc.t -> glob_sign -> 'raw -> 'glb module CInternObj = struct type ('r, 'g) t = ('r, 'g) constr_intern_fun end module NtnSubstObj = struct type (_, 'glb) t = 'glb ntn_subst_fun end module Intern = Register (InternObj) module CIntern = GenConstr.Register (CInternObj) module NtnSubst = GenConstr.Register (NtnSubstObj) let intern = Intern.obj let register_intern0 = Intern.register0 let register_intern_constr = CIntern.register let generic_intern ist (GenArg (Rawwit wit, v)) = let (ist, v) = intern wit ist v in (ist, in_gen (glbwit wit) v) let generic_intern_constr ?loc ist (GenConstr.Raw (tag, v)) = let internf = CIntern.get tag in GenConstr.Glb (tag, internf ?loc ist v) module InternPatObj = struct type ('raw, 'glb) t = ('raw, 'glb) constr_intern_fun end module InternPat = GenConstr.Register (InternPatObj) let register_intern_pat = InternPat.register let generic_intern_pat ?loc ist (GenConstr.Raw (tag, v)) = match InternPat.find_opt tag with | None -> let name = GenConstr.repr tag in CErrors.user_err ?loc Pp.(str "This quotation is not supported in tactic patterns (" ++ str name ++ str ").") | Some internf -> let v = internf ?loc ist v in GenConstr.Glb (tag, v) (** Notation substitution *) let substitute_notation = NtnSubst.get let register_ntn_subst0 = NtnSubst.register let generic_substitute_notation avoid env (GenConstr.Glb (tag, v) as orig) = let v' = substitute_notation tag avoid env v in if v' == v then orig else Glb (tag, v') let with_used_ntnvars ntnvars f = let () = Id.Map.iter (fun _ status -> status.ntnvar_used <- false:: status.ntnvar_used) ntnvars in match f () with | v -> let used = Id.Map.fold (fun id status acc -> match status.ntnvar_used with | [] -> assert false | false :: rest -> status.ntnvar_used <- rest; acc | true :: rest -> let rest = match rest with | [] | true :: _ -> rest | false :: rest -> true :: rest in status.ntnvar_used <- rest; Id.Set.add id acc) ntnvars Id.Set.empty in used, v | exception e -> let e = Exninfo.capture e in let () = Id.Map.iter (fun _ status -> status.ntnvar_used <- List.tl status.ntnvar_used) ntnvars in Exninfo.iraise e let create_uniform_genconstr name = let tag = GenConstr.create name in let () = register_intern_constr tag (fun ?loc _ v -> v) in let () = Gensubst.register_constr_subst tag (fun _ v -> v) in tag
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>