123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305(* This file is free software, part of Zipperposition. See file "license" for more details. *)openLogtktypeproof_step=Proof.Step.ttypeproof=Proof.S.tmoduletypeS=sigmoduleCtx:Ctx.Stypettypeclause=t(** {2 Flags} *)typeflag=SClause.flagvalset_flag:flag->t->bool->unit(** set boolean flag *)valget_flag:flag->t->bool(** get value of boolean flag *)valmark_redundant:t->unitvalis_redundant:t->boolvalmark_backward_simplified:t->unitvalis_backward_simplified:t->boolvalis_orphaned:t->bool(** {2 Basics} *)includeInterfaces.EQwithtypet:=tincludeInterfaces.HASHwithtypet:=tvalcompare:t->t->intvalid:t->intvallits:t->Literal.tarrayvalis_ground:t->boolvalweight:t->int(* cached weight in terms *)valho_weight:t->intmoduleTbl:CCHashtbl.Swithtypekey=tvalis_goal:t->bool(** Looking at the clause's proof, return [true] iff the clause is an
initial (negated) goal from the problem *)valdistance_to_goal:t->intoption(** See {!Proof.distance_to_goal}, applied to the clause's proof *)valcomes_from_goal:t->bool(** [true] iff the clause is (indirectly) deduced from a goal or lemma *)(** {2 Boolean Abstraction} *)valpp_trail:Trail.tCCFormat.printer(** Printer for boolean trails, that uses {!Ctx} to display boxes *)valhas_trail:t->bool(** Has a non-empty trail? *)valtrail:t->Trail.t(** Get the clause's trail *)valtrail_l:tlist->Trail.t(** Merge the trails of several clauses *)valupdate_trail:(Trail.t->Trail.t)->t->t(** Change the trail. The resulting clause has same parents, proof
and literals as the input one *)valtrail_subsumes:t->t->bool(** [trail_subsumes c1 c2 = Trail.subsumes (get_trail c1) (get_trail c2)] *)valis_active:t->v:Trail.valuation->bool(** True if the clause's trail is active in this valuation *)valis_inj_axiom:t->(ID.t*int)option(** Returns Some (sym,i) if clause is injectivity axiom for ith argument
of symbol sym. *)(** {2 Constructors} *)valcreate:penalty:int->trail:Trail.t->Literal.tlist->proof_step->t(** Build a new clause from the given literals.
@param trail boolean trail
@param penalty heuristic penalty due to history of the clause
(the higher, the less likely the clause is to be picked soon)
also takes a list of literals and a proof builder *)valcreate_a:penalty:int->trail:Trail.t->Literal.tarray->proof_step->t(** Build a new clause from the given literals. *)valof_sclause:?penalty:int->SClause.t->proof_step->tvalof_forms:?penalty:int->trail:Trail.t->Term.tSLiteral.tlist->proof_step->t(** Directly from list of formulas *)valof_forms_axiom:?penalty:int->file:string->name:string->Term.tSLiteral.tlist->t(** Construction from formulas as axiom (initial clause) *)valof_statement:?convert_defs:bool->Statement.clause_t->tlist(** Extract a clause from a statement, if any *)valproof_step:t->proof_step(** Extract its proof from the clause *)valproof:t->proof(** Obtain the pair [conclusion, step] *)valproof_parent:t->Proof.Parent.tvalproof_parent_subst:Subst.Renaming.t->tScoped.t->Subst.t->Proof.Parent.tvalupdate_proof:t->(proof_step->proof_step)->t(** [update_proof c f] creates a new clause that is
similar to [c] in all aspects, but with
the proof [f (proof_step c)] *)valproof_depth:t->intvalis_empty:t->bool(** Is the clause an empty clause? *)vallength:t->int(** Number of literals *)valmaxlits:tScoped.t->Subst.t->CCBV.t(** List of maximal literals *)valis_maxlit:tScoped.t->Subst.t->idx:int->bool(** Is the i-th literal maximal in subst(clause)? Equivalent to
Bitvector.get (maxlits ~ord c subst) i *)valeligible_res:tScoped.t->Subst.t->CCBV.t(** Bitvector that indicates which of the literals of [subst(clause)]
are eligible for resolution. THe literal has to be either maximal
among selected literals of the same sign, if some literal is selected,
or maximal if none is selected. *)valeligible_res_no_subst:t->CCBV.t(** More efficient version of {!eligible_res} with [Subst.empty] *)valeligible_param:tScoped.t->Subst.t->CCBV.t(** Bitvector that indicates which of the literals of [subst(clause)]
are eligible for paramodulation. That means the literal
is positive, no literal is selecteed, and the literal
is maximal among literals of [subst(clause)]. *)valis_eligible_param:tScoped.t->Subst.t->idx:int->bool(** Check whether the [idx]-th literal is eligible for paramodulation *)valhas_selected_lits:t->bool(** does the clause have some selected literals? *)valis_selected:t->int->bool(** check whether a literal is selected *)valselected_lits:t->(Literal.t*int)list(** get the list of selected literals *)valpenalty:t->intvalinc_penalty:t->int->unitvalis_unit_clause:t->bool(** is the clause a unit clause? *)valis_oriented_rule:t->bool(** Is the clause a positive oriented clause? *)valsymbols:?init:ID.Set.t->?include_types:bool->tIter.t->ID.Set.t(** symbols that occur in the clause *)valto_sclause:t->SClause.tvalto_forms:t->Term.tSLiteral.tlist(** Easy iteration on an abstract view of literals *)valto_s_form:t->TypedSTerm.Form.tvalground_clause:t->tvaleta_reduce:t->toption(** {2 Iterators} *)moduleSeq:sigvallits:t->Literal.tIter.tvalterms:t->Term.tIter.tvalvars:t->Type.tHVar.tIter.tendvalapply_subst:?renaming:Subst.Renaming.t->?proof:Proof.Step.toption->?penalty_inc:intoption->tScoped.t->Subst.FO.t->t(** {2 Filter literals} *)moduleEligible:sigtypet=int->Literal.t->bool(** Eligibility criterion for a literal *)valres:clause->t(** Only literals that are eligible for resolution *)valparam:clause->t(** Only literals that are eligible for paramodulation *)valeq:t(** Equations *)valfilter:(Literal.t->bool)->tvalmax:clause->t(** Maximal literals of the clause *)valpos:t(** Only positive literals *)valpos_eq:t(** Only positive equational literals *)valneg:t(** Only negative literals *)valalways:t(** All literals *)valcombine:tlist->t(** Logical "and" of the given eligibility criteria. A literal is
eligible only if all elements of the list say so. *)val(**):t->t->t(** Logical "and" *)val(++):t->t->t(** Logical "or" *)val(~~):t->t(** Logical "not" *)end(** {2 Set of clauses} *)(** Simple set *)moduleClauseSet:CCSet.Swithtypeelt=t(** {2 Position} *)modulePos:sigvalat:t->Position.t->Term.tend(** {2 Clauses with more data} *)(** Clause within which a subterm (and its position) are highlighted *)moduleWithPos:sigtypet={clause:clause;pos:Position.t;term:Term.t;}valcompare:t->t->intvalpp:tCCFormat.printerend(** {2 IO} *)valpp:tCCFormat.printervalpp_tstp:tCCFormat.printervalpp_tstp_full:tCCFormat.printer(** Print in a cnf() statement *)valto_string:t->string(** Debug printing to a string *)valpp_set:ClauseSet.tCCFormat.printervalpp_set_tstp:ClauseSet.tCCFormat.printer(**/**)valcheck_types:t->unit(**/**)end