Module Logtk.Literals
Array of literals
val equal_com : t -> t -> boolval compare : t -> t -> intval compare_multiset : ord:Ordering.t -> t -> t -> Comparison.t
val variant : ?subst:Subst.t -> t Scoped.t -> t Scoped.t -> (Subst.t * Builtin.Tag.t list) Sequence.tVariant checking (alpha-equivalence). It can reorder literals to do its check, so that might be computationnally expensive (a bit like subsumption).
val matching : ?subst:Subst.t -> pattern:t Scoped.t -> t Scoped.t -> (Subst.t * Builtin.Tag.t list) Sequence.tval matches : t -> t -> boolval weight : t -> intval depth : t -> intval vars : t -> Type.t HVar.t listval is_ground : t -> boolall the literals are ground?
val to_form : t -> term SLiteral.t listMake a 'or' formula from literals
val apply_subst : Subst.Renaming.t -> Subst.t -> t Scoped.t -> tval of_unif_subst : Subst.Renaming.t -> Unif_subst.t -> tval map : (term -> term) -> t -> tval pos : t -> CCBV.tval neg : t -> CCBV.tval maxlits : ord:Ordering.t -> t -> CCBV.tBitvector of positions of maximal literals
val maxlits_l : ord:Ordering.t -> t -> (Literal.t * int) listList of maximal literals, with their index, among the array
val is_max : ord:Ordering.t -> t -> int -> boolIs the i-th literal maximal in the ordering?
val is_trivial : t -> boolTautology? (simple syntactic criterion only)
val is_absurd : t -> boolAll literals are false, or there are no literals
val apply_subst : Subst.Renaming.t -> Subst.t -> t Scoped.t -> t
module Seq : sig ... endHigh order combinators
module Pos : sig ... endmodule Conv : sig ... endmodule View : sig ... endval fold_lits : eligible:(int -> Literal.t -> bool) -> t -> (Literal.t * int) Sequence.tFold over literals who satisfy
eligible. The folded function is given the literal and its index.
val fold_eqn : ?both:bool -> ?sign:bool -> ord:Ordering.t -> eligible:(int -> Literal.t -> bool) -> t -> (term * term * bool * Position.t) Sequence.tfold f over all literals sides, with their positions. f is given
(left side, right side, sign, position of left side)ifordis present, then only the max side of an oriented equation will be visited, otherwise they will both be explored. ifboth = true, then both sides of a non-oriented equation will be visited, otherwise only one side. ifsign = true, then only positive equations are visited; if it'sfalse, only negative ones; if it's not defined, both.
val fold_arith : eligible:(int -> Literal.t -> bool) -> t -> Int_lit.t Position.With.t Sequence.tFold over eligible arithmetic literals
val fold_arith_terms : eligible:(int -> Literal.t -> bool) -> which:[< `Max | `All ] -> ord:Ordering.t -> t -> (term * Int_lit.Focus.t * Position.t) Sequence.tFold on terms under arithmetic literals, with the focus on the current term
val fold_rat : eligible:(int -> Literal.t -> bool) -> t -> Rat_lit.t Position.With.t Sequence.tFold over eligible arithmetic literals
val fold_rat_terms : eligible:(int -> Literal.t -> bool) -> which:[< `Max | `All ] -> ord:Ordering.t -> t -> (term * Rat_lit.Focus.t * Position.t) Sequence.tFold on terms under arithmetic literals, with the focus on the current term
val fold_terms : ?vars:bool -> ?ty_args:bool -> which:[< `Max | `All ] -> ord:Ordering.t -> subterms:bool -> eligible:(int -> Literal.t -> bool) -> t -> term Position.With.t Sequence.tSee
Literal.fold_terms, which is the same but for theeligibleargument
val symbols : ?init:Logtk.ID.Set.t -> t -> Logtk.ID.Set.t
IO
Special kinds of literal arrays
val is_RR_horn_clause : t -> boolRecognized whether the clause is a Range-Restricted Horn clause
val is_horn : t -> boolRecognizes Horn clauses (at most one positive literal)