module Session_itp:sig..end
Proof sessions
A session contains a collection of files, a file contains a
collection of theories, a theory contains a collection of goals. The
structure of goals remain abstract, each goal being identified by
unique identifiers of type proofNodeId
type session
type file
type theory
type proofNodeID
val print_proofNodeID : Stdlib.Format.formatter -> proofNodeID -> unit
type transID
type proofAttemptID
val print_proofAttemptID : Stdlib.Format.formatter -> proofAttemptID -> unit
type fileID
module Hfile:Exthtbl.Swith type key = fileID
module Hpn:Exthtbl.Swith type key = proofNodeID
module Htn:Exthtbl.Swith type key = transID
module Hpan:Exthtbl.Swith type key = proofAttemptID
type any =
| |
AFile of |
| |
ATh of |
| |
ATn of |
| |
APn of |
| |
APa of |
val fprintf_any : Stdlib.Format.formatter -> any -> unit
typenotifier =any -> unit
Session
val get_files : session -> file Hfile.t
val get_dir : session -> string
val file_id : file -> fileIDFile
val file_path : file -> Sysutil.file_path
val file_format : file -> string
val file_theories : file -> theory list
val system_path : session -> file -> stringthe system-dependent absolute path associated to that file
val theory_name : theory -> Ident.identTheory
val theory_goals : theory -> proofNodeID list
val theory_parent : session -> theory -> file
type proof_attempt_node = private {
|
parent : |
|
mutable prover : |
|
limits : |
|
mutable proof_state : |
|
mutable proof_obsolete : |
|
mutable proof_script : |
}
val set_proof_script : proof_attempt_node -> Sysutil.file_path -> unit
val is_below : session -> any -> any -> bool
type proof_parent =
| |
Trans of |
| |
Theory of |
val get_task : session -> proofNodeID -> Task.task
val get_task_name_table : session ->
proofNodeID -> Task.task * Trans.naming_table
val get_transformations : session -> proofNodeID -> transID list
val get_proof_attempt_ids : session ->
proofNodeID -> proofAttemptID Whyconf.Hprover.t
exception BadID
val get_proof_attempt_node : session ->
proofAttemptID -> proof_attempt_node
val get_proof_attempt_parent : session -> proofAttemptID -> proofNodeID
val get_proof_attempts : session ->
proofNodeID -> proof_attempt_node list
val get_sub_tasks : session -> transID -> proofNodeID list
val get_transf_args : session -> transID -> string list
val get_transf_name : session -> transID -> string
val get_proof_name : session -> proofNodeID -> Ident.ident
val get_proof_expl : session -> proofNodeID -> string
val get_proof_parent : session -> proofNodeID -> proof_parent
val get_trans_parent : session -> transID -> proofNodeID
val find_th : session -> proofNodeID -> theory
val get_any_parent : session -> any -> any option
val is_detached : session -> any -> bool
val get_encapsulating_theory : session -> any -> theory
val get_encapsulating_file : session -> any -> file
val is_fatal : exn -> boolval goal_iter_proof_attempt : session ->
(proofAttemptID -> proof_attempt_node -> unit) ->
proofNodeID -> unit
val theory_iter_proof_attempt : session ->
(proofAttemptID -> proof_attempt_node -> unit) ->
theory -> unit
val file_iter_proof_attempt : session ->
(proofAttemptID -> proof_attempt_node -> unit) ->
file -> unit
val any_iter_proof_attempt : session ->
(proofAttemptID -> proof_attempt_node -> unit) ->
any -> unit
val session_iter_proof_attempt : (proofAttemptID -> proof_attempt_node -> unit) ->
session -> unit
val session_iter_proof_node_id : (proofNodeID -> unit) -> session -> unit
val fold_all_any : session ->
('a -> any -> 'a) -> 'a -> any -> 'afold_all_any s f acc any folds on all the subnodes of any
val fold_all_session : session -> ('a -> any -> 'a) -> 'a -> 'afold_all_session s f acc folds on the whole session
val empty_session : ?sum_shape_version:Termcode.sum_shape_version ->
?from:session -> string -> sessioncreate an empty_session in the directory specified by the
argument. If sum_shape_version is present it will record it for
the generated session, otherwise the current version is taken from
module Termcode. If from is present, the provers, sum-shape
version and global shapes are taken from it. It is forbidden to
pass both sum_shape_version and from arguments.
val add_file_section : session ->
Sysutil.file_path ->
file_is_detached:bool ->
Theory.theory list -> Env.fformat -> fileadd_file_section s fp ths adds a new
'file' section in session s, named fp, containing fresh theory
subsections corresponding to theories ths. The tasks of each
theory nodes generated are computed using Task.split_theory.
Note that this function does not read anything from the file
system. The file path fp is taken as is.
val read_file : Env.env -> ?format:Env.fformat -> string -> Theory.theory list * Env.fformat
val merge_files : ignore_shapes:bool ->
Env.env ->
session -> session -> exn list * bool * boolmerge_files env ses old_ses merges the file sections
of session s with file sections of the same name in old session
old_ses. Recursively, for each theory whose name is identical to
old theories, it is attempted to associate the old goals,
proof_attempts and transformations to the goals of the new theory.
Returns a triple (e,o,d) such that e is the list of parsing or
typing errors found, o is true when obsolete proof attempts
where found and d is true if detached theories, goals or
transformations were found.
val merge_files_gen : ignore_shapes:bool ->
reparse_file_fun:(session ->
Env.env -> file -> Theory.theory list) ->
Env.env ->
session -> session -> exn list * bool * boolsame as merge_files but takes the extra argument
~reparse_file_fun providing a customized method to reconstruct
the theories to attach to files. This extra function may raise an
exception Located _ to indicate the reload failed at some
point. In that case, the corresponding file section will be marked
as "detached" and the reported expection e which be added in the
result list.
val graft_proof_attempt : ?file:Sysutil.file_path ->
session ->
proofNodeID ->
Whyconf.prover ->
limits:Call_provers.resource_limits -> proofAttemptIDgraft_proof_attempt s id pr file l adds a proof attempt with prover
pr and limits l in the session s as a child of the task
id. If there already a proof attempt with the same prover, it
updates it with the limits. It returns the id of the
generated proof attempt.
For manual proofs, it has the same behaviour except that it adds a
proof_script field equal to file.
exception NoProgress
val apply_trans_to_goal : allow_no_effect:bool ->
session ->
Env.env -> string -> string list -> proofNodeID -> Task.task listapply_trans_to_goal s env tr args id applies the transformation
tr with arguments args to the goal id, and returns the
subtasks. Raises Session_itp.NoProgress if allow_no_effect is false and tr
returns the task unchanged
val graft_transf : session ->
proofNodeID ->
string -> string list -> Task.task list -> transIDgraft_transf s id name l tl adds the transformation name as a
child of the task id of the session s. l is the list of
arguments of the transformation, and tl is the list of subtasks.
val remove_proof_attempt : session -> proofNodeID -> Whyconf.prover -> unitremove_proof_attempt s id pr removes the proof attempt from the
prover pr from the proof node id of the session s
val remove_transformation : session -> transID -> unitremove_transformation s id removes the transformation id
from the session s
val mark_obsolete : session -> proofAttemptID -> unitmark_obsolete s id marks id as obsolete in s
val save_session : session -> unitsave_session s Save the session s
val export_as_zip : session -> stringexport_as_zip s produces a zip archive of the session
file. Returns the file name of the archive.
val load_session : string -> sessionload_session dir load a session in directory dir; all the
tasks are initialised to None
raises SessionFileError msg if the database file cannot be read
correctly.
raises ShapesFileError msg if the database extra file for shapes
cannot be read.
exception RemoveError
val remove_subtree : notification:notifier ->
removed:notifier ->
session -> any -> unitremove_subtree s a ~removed ~notification remove the subtree
originating from node a in session s. the notifier removed is
called on each removed node, and notifier notification on nodes
whose proved state changes.
Raises Session_itp.RemoveError when removal is forbidden, e.g. when called on
a file, a theory or a goal that is not detached
val pa_proved : session -> proofAttemptID -> bool
val th_proved : session -> theory -> bool
val pn_proved : session -> proofNodeID -> bool
val tn_proved : session -> transID -> bool
val file_proved : session -> file -> bool
val any_proved : session -> any -> bool
val update_goal_node : notifier ->
session -> proofNodeID -> unitupdates the proved status of the given goal node. If necessary,
propagates the update to ancestors. notifier is called on all
nodes whose status changes.
val update_trans_node : notifier -> session -> transID -> unitupdates the proved status of the given transformation node. If
necessary, propagates the update to ancestors. notifier is
called on all nodes whose status changes
val update_proof_attempt : ?obsolete:bool ->
notifier ->
session ->
proofNodeID ->
Whyconf.prover -> Call_provers.prover_result -> unitupdate_proof_attempt ?obsolete s id pr st update the status of the
corresponding proof attempt with st.
If obsolete is set to true, it marks the proof_attempt obsolete
directly (useful for interactive prover).
val change_prover : notifier ->
session ->
proofNodeID -> Whyconf.prover -> Whyconf.prover -> unitchange_prover s id opr npr changes the prover of the proof
attempt using prover opr by the new prover npr. Proof attempt
status is set to obsolete.
Extra session update operations
val find_file_from_path : session -> Sysutil.file_path -> fileraise Not_found of path does not appear in session
val rename_file : session ->
string -> string -> Sysutil.file_path * Sysutil.file_pathrename_file s from_file to_file renames the
file section in session s named from_file into to_file
why3session/why3session_update.