sidekick/src/base/Proof.mli
2021-10-21 20:42:12 -04:00

80 lines
1.7 KiB
OCaml

(** Proof representation *)
open Base_types
(** Configuration of proofs *)
module Config : sig
type t
val pp : t Fmt.printer
val default : t
(** Default proof config, enabled *)
val empty : t
(** Disabled proof, without storage *)
val enable : bool -> t -> t
(** Enable/disable proof storage *)
val store_in_memory : t -> t
(** Store proof in memory *)
val store_on_disk_at : string -> t -> t
(** [store_on_disk_at file] stores temporary proof in file [file] *)
val no_store : t -> t
end
(** {2 Main Proof API} *)
type t
(** A container for the whole proof *)
type proof_step
(** A proof step in the trace.
The proof will store all steps, and at the end when we find the empty clause
we can filter them to keep only the relevant ones. *)
include Sidekick_core.PROOF
with type t := t
and type proof_step := proof_step
and type lit = Lit.t
and type term = Term.t
val lemma_lra : Lit.t Iter.t -> proof_rule
include Sidekick_th_data.PROOF
with type proof := t
and type proof_step := proof_step
and type lit := Lit.t
and type term := Term.t
include Sidekick_th_bool_static.PROOF
with type proof := t
and type proof_step := proof_step
and type lit := Lit.t
and type term := Term.t
(** {2 Creation} *)
val create : ?config:Config.t -> unit -> t
(** Create new proof.
@param config modifies the proof behavior *)
val empty : t
(** Empty proof, stores nothing *)
val disable : t -> unit
(** Disable proof, even if the config would enable it *)
(** {2 Use the proof} *)
val iter_steps_backward : t -> Proof_ser.Step.t Iter.t
(** Iterates on all the steps of the proof, from the end.
This will yield nothing if the proof was disabled or used
a dummy backend. *)