123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293(* This file is free software, part of Zipperposition. See file "license" for more details. *)openLogtkopenLibzipperpositionmoduletypeS=sigmoduleEnv:Env.SmoduleC:moduletypeofEnv.Cwithtypet=Env.C.tmodulePS:moduletypeofEnv.ProofStatewithtypeC.t=Env.C.tmoduleStm:Stream.SwithmoduleC=Env.CmoduleStmQ:StreamQueue.SwithmoduleStm=Stm(** {5 Term Indices} *)validx_sup_into:unit->PS.TermIndex.t(** index for superposition into the set *)validx_sup_from:unit->PS.TermIndex.t(** index for superposition from the set *)validx_fv:unit->PS.SubsumptionIndex.t(** index for subsumption *)(** {5 Inference Rules} *)valinfer_active:Env.binary_inf_rule(** superposition where given clause is active *)valinfer_passive:Env.binary_inf_rule(** superposition where given clause is passive *)valinfer_equality_resolution:Env.unary_inf_rulevalinfer_equality_factoring:Env.unary_inf_rule(** {5 Extraction of clauses from the queue (HO feature)} *)valextract_from_stream_queue:Env.generate_rule(** Extracts at most as many clauses from the stream queue as there are
streams in the queue. If called with [~full=true] extracts only one clause
but may loop forever. *)valextract_from_stream_queue_fix_stm:Env.generate_rule(** Same as [extract_from_stream_queue] with a different extraction heuristic
If possible, all clauses are taken from the first stream *)(** {5 Simplifications rules} *)valis_tautology:C.t->bool(** Check whether the clause is a (syntactic) tautology, ie whether
it contains true or "A" and "not A" *)valis_semantic_tautology:C.t->bool(** semantic tautology deletion, using a congruence closure algorithm
to see if negative literals imply some positive Literal.t *)valhandle_distinct_constants:Env.lit_rewrite_rule(** Decide on "quoted" "symbols" (which are all distinct) *)valbasic_simplify:Env.simplify_rule(** basic simplifications (remove duplicate literals, trivial literals,
destructive equality resolution...) *)valsubsumes:Literal.tarray->Literal.tarray->bool(** subsumes c1 c2 iff c1 subsumes c2 *)valsubsumes_with:Literals.tScoped.t->Literals.tScoped.t->(Subst.FO.t*Proof.taglist)option(** returns subsuming subst if the first clause subsumes the second one *)valeq_subsumes:Literal.tarray->Literal.tarray->bool(** equality subsumption *)valsubsumed_by_active_set:C.t->bool(** check whether the clause is subsumed by any clause in the set *)valsubsumed_in_active_set:Env.backward_redundant_rule(** list of clauses in the active set that are subsumed by the clause *)valcontextual_literal_cutting:Env.simplify_rule(** contextual Literal.t cutting of the given clause by the active set *)valcondensation:Env.simplify_rule(** condensation *)(** {5 Registration} *)valregister:unit->unit(** Register rules in the environment *)end