module Make:functor (
Seq
:
Sigs.SEQUENT
) ->
Sigs.PROOFRULE
with type seq_t = Seq.t
with type proof_t = Proof.Make(Seq).t
Parameters: |
|
type
seq_t
type
proof_t
typeaxiom_f =
seq_t -> string option
typeinfrule_app =
(seq_t * Tagpairs.t * Tagpairs.t) list * string
typeinfrule_f =
seq_t -> infrule_app list
typebackrule_f =
seq_t -> seq_t -> (Tagpairs.t * string) list
typeselect_f =
int -> proof_t -> int list
typet =
int -> proof_t -> (int list * proof_t) Blist.t
val mk_axiom : axiom_f -> t
Some string
when the
input sequent is an instance of an axiom described by string
, else
None
.val mk_infrule : infrule_f -> t
val mk_backrule : bool ->
select_f -> backrule_f -> t
eager
s
m
The selection function is applied on the current subgoal and proof, and
a list of goal indices is returned that represents possible back-link
targets. This allows flexibility e.g., in changing from ancestral-only
back-links to general ones. m
is applied to every pair consisting of the current subgoal
and a goal returned from the selection function. m
returns a list of
tag information and string descriptions, each describing a different
way to form a back-link.
If eager
is true then the first result in this iteration will be chosen
and no back-tracking will even happen over later possible matches.
Otherwise all possible matches are returned as different choices.
val all_nodes : select_f
val closed_nodes : select_f
val ancestor_nodes : select_f
val syntactically_equal_nodes : select_f
val fail : t
Return current subgoal and proof as application.
val identity : t
val attempt : t -> t
identity
.
Apply the second rule on all premises generated by applying the first.
val compose : t -> t -> t
val compose_pairwise : t -> t list -> t
val choice : t list -> t
Try rules from a list until the first rule is found that has some
applications on current sugboal and return only those.
val first : t list -> t
compose
.val sequence : t list -> t
val conditional : (seq_t -> bool) -> t -> t
val combine_axioms : t -> t -> t