package rocq-runtime

  1. Overview
  2. Docs
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.vernac/canonical.ml.html

Source file canonical.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
(************************************************************************)
(*         *      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 Libobject
open Structures

let open_canonical_structure i (o,_) =
  let env = Global.env () in
  let sigma = Evd.from_env env in
  if Int.equal i 1 then Instance.register env sigma ~warn:false o

let cache_canonical_structure (o,_) =
  let env = Global.env () in
  let sigma = Evd.from_env env in
  Instance.register ~warn:true env sigma o

let discharge_canonical_structure (x, local) =
  let gref = Instance.repr x in
  if local || (Globnames.isVarRef gref && Lib.is_in_section gref) then None
  else Some (x, local)

let canon_cat = create_category "canonicals"

let inCanonStruc : Instance.t * bool -> obj =
  declare_object {(default_object "CANONICAL-STRUCTURE") with
                  open_function = simple_open ~cat:canon_cat open_canonical_structure;
                  cache_function = cache_canonical_structure;
                  subst_function = (fun (subst,(c,local)) -> Instance.subst subst c, local);
                  classify_function = (fun x -> Substitute);
                  discharge_function = discharge_canonical_structure }

let add_canonical_structure x = Lib.add_leaf (inCanonStruc x)

let declare_canonical_structure ?(local=false) ref =
  let env = Global.env () in
  let sigma = Evd.from_env env in
  add_canonical_structure (Instance.make env sigma ref, local)
OCaml

Innovation. Community. Security.