package rocq-runtime
The Rocq Prover -- Core Binaries and Tools
Install
Dune Dependency
Authors
Maintainers
Sources
rocq-9.0.0.tar.gz
md5=8d522602d23e7a665631826dab9aa92b
sha512=f4f76a6a178e421c99ee7a331a2fd97a06e9c5d0168d7e60c44e3820d8e1a124370ea104ad90c7f87a9a1e9d87b2d0d7d2d387c998feeaed4a75ed04e176a4be
doc/src/rocq-runtime.library/rocqlib.ml.html
Source file rocqlib.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
(************************************************************************) (* * 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 Util open Names let make_dir l = DirPath.make (List.rev_map Id.of_string l) (************************************************************************) (* Rocq reference API *) (************************************************************************) let rocq = Libnames.rocq_init_string (* "Corelib" *) let init_dir = [ rocq; "Init"] let jmeq_module_name = ["Stdlib";"Logic";"JMeq"] let table : GlobRef.t CString.Map.t ref = Summary.ref ~name:"rocqlib_registered" CString.Map.empty let get_lib_refs () = CString.Map.bindings !table let has_ref s = CString.Map.mem s !table let check_ref s gr = match CString.Map.find s !table with | r -> GlobRef.UserOrd.equal r gr | exception Not_found -> false let check_ind_ref s ind = check_ref s (GlobRef.IndRef ind) exception NotFoundRef of string let () = CErrors.register_handler (function | NotFoundRef s -> Some Pp.(str "not found in table: " ++ str s) | _ -> None) let lib_ref s = try CString.Map.find s !table with Not_found -> raise (NotFoundRef s) let lib_ref_opt s = CString.Map.find_opt s !table let add_ref s c = table := CString.Map.add s c !table let cache_ref (s,c) = add_ref s c let (inRocqlibRef : Libobject.locality * (string * GlobRef.t) -> Libobject.obj) = let open Libobject in declare_object @@ object_with_locality "COQLIBREF" ~cache:cache_ref ~subst:(Some ident_subst_function) ~discharge:(fun x -> x) (** Replaces a binding ! *) let register_ref local s c = Lib.add_leaf @@ inRocqlibRef (local,(s,c)) (************************************************************************) (* Generic functions to find Rocq objects *) (* For tactics/commands requiring vernacular libraries *) let check_required_library d = let dir = make_dir d in try let _ : Declarations.module_body = Global.lookup_module (ModPath.MPfile dir) in () with Not_found -> let in_current_dir = match Lib.current_mp () with | MPfile dp -> DirPath.equal dir dp | _ -> false in if not in_current_dir then CErrors.user_err Pp.(str "Library " ++ DirPath.print dir ++ str " has to be required first.") (************************************************************************) (* Specific Rocq objects *) (************************************************************************) let logic_module_name = init_dir@["Logic"] let datatypes_module_name = init_dir@["Datatypes"] (** Identity *) (* Sigma data *) type rocq_sigma_data = { proj1 : GlobRef.t; proj2 : GlobRef.t; elim : GlobRef.t; intro : GlobRef.t; typ : GlobRef.t } let build_sigma_gen str = { typ = lib_ref ("core." ^ str ^ ".type"); elim = lib_ref ("core." ^ str ^ ".rect"); intro = lib_ref ("core." ^ str ^ ".intro"); proj1 = lib_ref ("core." ^ str ^ ".proj1"); proj2 = lib_ref ("core." ^ str ^ ".proj2"); } let build_prod () = build_sigma_gen "prod" let build_sigma () = build_sigma_gen "sig" let build_sigma_type () = build_sigma_gen "sigT" (* Equalities *) type rocq_eq_data = { eq : GlobRef.t; ind : GlobRef.t; refl : GlobRef.t; sym : GlobRef.t; trans: GlobRef.t; congr: GlobRef.t } (* Leibniz equality on Type *) let build_eqdata_gen str = { eq = lib_ref ("core." ^ str ^ ".type"); ind = lib_ref ("core." ^ str ^ ".ind"); refl = lib_ref ("core." ^ str ^ ".refl"); sym = lib_ref ("core." ^ str ^ ".sym"); trans = lib_ref ("core." ^ str ^ ".trans"); congr = lib_ref ("core." ^ str ^ ".congr"); } let build_rocq_eq_data () = build_eqdata_gen "eq" let build_rocq_jmeq_data () = build_eqdata_gen "JMeq" let build_rocq_identity_data () = build_eqdata_gen "identity"
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>