aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaƫtan Gilbert2020-07-08 14:06:19 +0200
committerEmilio Jesus Gallego Arias2020-07-08 15:12:46 +0200
commit3ef2bd35926a83fbcfd34d03e1fb1db894a39627 (patch)
tree5f7bfcaa3f191defa918ff4bcf4e07e1d280f740
parent22e2ab01dd9fe4d6b6afb6d1bb171cbf11db4a3f (diff)
declare: Add [save_regular] API for obligation-ignoring proofs
-rw-r--r--plugins/funind/functional_principles_proofs.ml5
-rw-r--r--plugins/funind/gen_principle.ml14
-rw-r--r--plugins/funind/recdef.ml15
-rw-r--r--vernac/declare.ml8
-rw-r--r--vernac/declare.mli7
5 files changed, 29 insertions, 20 deletions
diff --git a/plugins/funind/functional_principles_proofs.ml b/plugins/funind/functional_principles_proofs.ml
index b743329e7d..743afe4177 100644
--- a/plugins/funind/functional_principles_proofs.ml
+++ b/plugins/funind/functional_principles_proofs.ml
@@ -863,9 +863,8 @@ let generate_equation_lemma evd fnames f fun_num nb_params nb_args rec_args_num
let lemma, _ =
Declare.Proof.by (Proofview.V82.tactic prove_replacement) lemma
in
- let pm = Declare.OblState.empty in
- let _pm, _ =
- Declare.Proof.save ~pm ~proof:lemma ~opaque:Vernacexpr.Transparent
+ let (_ : _ list) =
+ Declare.Proof.save_regular ~proof:lemma ~opaque:Vernacexpr.Transparent
~idopt:None
in
evd
diff --git a/plugins/funind/gen_principle.ml b/plugins/funind/gen_principle.ml
index 730cf42fe8..45b1713441 100644
--- a/plugins/funind/gen_principle.ml
+++ b/plugins/funind/gen_principle.ml
@@ -1526,10 +1526,9 @@ let derive_correctness (funs : Constr.pconstant list) (graphs : inductive list)
let lemma =
fst @@ Declare.Proof.by (Proofview.V82.tactic (proving_tac i)) lemma
in
- let pm = Declare.OblState.empty in
- let _pm, _ =
- Declare.Proof.save ~pm ~proof:lemma ~opaque:Vernacexpr.Transparent
- ~idopt:None
+ let (_ : _ list) =
+ Declare.Proof.save_regular ~proof:lemma
+ ~opaque:Vernacexpr.Transparent ~idopt:None
in
let finfo =
match find_Function_infos (fst f_as_constant) with
@@ -1599,10 +1598,9 @@ let derive_correctness (funs : Constr.pconstant list) (graphs : inductive list)
(proving_tac i)))
lemma)
in
- let pm = Declare.OblState.empty in
- let _pm, _ =
- Declare.Proof.save ~pm ~proof:lemma ~opaque:Vernacexpr.Transparent
- ~idopt:None
+ let (_ : _ list) =
+ Declare.Proof.save_regular ~proof:lemma
+ ~opaque:Vernacexpr.Transparent ~idopt:None
in
let finfo =
match find_Function_infos (fst f_as_constant) with
diff --git a/plugins/funind/recdef.ml b/plugins/funind/recdef.ml
index 7b00191026..253c95fa67 100644
--- a/plugins/funind/recdef.ml
+++ b/plugins/funind/recdef.ml
@@ -58,9 +58,8 @@ let declare_fun name kind ?univs value =
(Declare.declare_constant ~name ~kind (Declare.DefinitionEntry ce))
let defined lemma =
- let pm = Declare.OblState.empty in
- let _pm, _ =
- Declare.Proof.save ~pm ~proof:lemma ~opaque:Vernacexpr.Transparent
+ let (_ : _ list) =
+ Declare.Proof.save_regular ~proof:lemma ~opaque:Vernacexpr.Transparent
~idopt:None
in
()
@@ -1504,9 +1503,8 @@ let open_new_goal ~lemma build_proof sigma using_lemmas ref_ goal_name
[Hints.Hint_db.empty TransparentState.empty false] ]))
in
let lemma = build_proof env (Evd.from_env env) start_tac end_tac in
- let pm = Declare.OblState.empty in
- let _pm, _ =
- Declare.Proof.save ~pm ~proof:lemma ~opaque:opacity ~idopt:None
+ let (_ : _ list) =
+ Declare.Proof.save_regular ~proof:lemma ~opaque:opacity ~idopt:None
in
()
in
@@ -1666,9 +1664,8 @@ let com_eqn uctx nb_arg eq_name functional_ref f_ref terminate_ref
let _ =
Flags.silently
(fun () ->
- let pm = Declare.OblState.empty in
- let _pm =
- Declare.Proof.save ~pm ~proof:lemma ~opaque:opacity ~idopt:None
+ let (_ : _ list) =
+ Declare.Proof.save_regular ~proof:lemma ~opaque:opacity ~idopt:None
in
())
()
diff --git a/vernac/declare.ml b/vernac/declare.ml
index e19eca9a1c..df75e121d8 100644
--- a/vernac/declare.ml
+++ b/vernac/declare.ml
@@ -2068,6 +2068,14 @@ let save ~pm ~proof ~opaque ~idopt =
let proof_info = process_idopt_for_save ~idopt proof.pinfo in
finalize_proof ~pm proof_obj proof_info
+let save_regular ~proof ~opaque ~idopt =
+ let open Proof_ending in
+ match CEphemeron.default proof.pinfo.Proof_info.proof_ending Regular with
+ | Regular ->
+ let (_, grs) : Obls_.State.t * _ = save ~pm:Obls_.State.empty ~proof ~opaque ~idopt in
+ grs
+ | _ -> CErrors.anomaly Pp.(str "save_regular: unexpected proof ending")
+
(***********************************************************************)
(* Special case to close a lemma without forcing a proof *)
(***********************************************************************)
diff --git a/vernac/declare.mli b/vernac/declare.mli
index d302f68153..adb5bd026f 100644
--- a/vernac/declare.mli
+++ b/vernac/declare.mli
@@ -214,6 +214,13 @@ module Proof : sig
-> idopt:Names.lident option
-> OblState.t * GlobRef.t list
+ (** For proofs known to have [Regular] ending, no need to touch program state. *)
+ val save_regular
+ : proof:t
+ -> opaque:Vernacexpr.opacity_flag
+ -> idopt:Names.lident option
+ -> GlobRef.t list
+
(** Admit a proof *)
val save_admitted : pm:OblState.t -> proof:t -> OblState.t