Logtk.STerm.
Simple terms, that are not hashconsed, nor typed.
Those do not use De Bruijn indices for variable binding, but simply names (scoping is done later). Their simplicity make them good for heavy AST transformations, output of parsing, etc.
Terms are only compared, hashsed, etc. by their "term" component (the algebraic variant). Additional fields (location…) are ignored for almost every operation.
type location = ParseLocation.tand view = | Var of varvariable
*)| Const of stringconstant
*)| AppBuiltin of Builtin.t * t list| App of t * t listapply term
*)| Ite of t * t * t| Match of t * match_branch list| Let of (var * t) list * t| Bind of Binder.t * typed_var list * tbind n variables
*)| List of t listspecial constructor for lists
*)| Record of (string * t) list * var optionextensible record
*)type term = tinclude Interfaces.ORD with type t := tval v_wild : twildcard
val match_ : ?loc:location -> t -> match_branch list -> tval nil : tval wildcard : tval is_app : t -> boolval is_var : t -> boolval true_ : tval false_ : tval of_int : int -> tval real : string -> tval tType : tval term : tval prop : tval ty_int : tval ty_rat : tval ty_real : tmodule Tbl : CCHashtbl.S with type key = termmodule Seq : sig ... endval ground : t -> boolval pp_typed_var : typed_var CCFormat.printerval pp_var : var CCFormat.printermodule TPTP : sig ... endmodule TPTP_THF : sig ... endmodule ZF : sig ... endval pp_in : Output_format.t -> t CCFormat.printerval empty_subst : substmerge a b merges a into b, but favors b in case of conflict