Module Logtk.Statement
Statement
type 'ty data={data_id : ID.t;Name of the type
data_args : 'ty Var.t list;type parameters
data_ty : 'ty;type of Id, that is,
type -> type -> ... -> typedata_cstors : (ID.t * 'ty * ('ty * (ID.t * 'ty)) list) list;Each constructor is
id, ty, args.tymust be of the formty1 -> ty2 -> ... -> id args.argshas the form(ty1, p1), (ty2,p2), …where eachpis a projector.}A datatype declaration
type attr=|A_AC|A_infix of string|A_prefix of string|A_sosset of support
type attrs= attr listtype 'ty skolem= ID.t * 'tytype polarity=[|`Equiv|`Imply]polarity for rewrite rules
type ('f, 't, 'ty) def_rule=|Def_term of{vars : 'ty Var.t list;id : ID.t;ty : 'ty;args : 't list;rhs : 't;as_form : 'f;}forall vars, id args = rhs|Def_form of{vars : 'ty Var.t list;lhs : 't SLiteral.t;rhs : 'f list;polarity : polarity;as_form : 'f list;}forall vars, lhs op bigand rhswhereopdepends onpolarity(in{=>, <=>, <=})type ('f, 't, 'ty) def={def_id : ID.t;def_ty : 'ty;def_rules : ('f, 't, 'ty) def_rule list;def_rewrite : bool;}type ('f, 't, 'ty) view=|TyDecl of ID.t * 'tyid: ty
|Data of 'ty data list|Def of ('f, 't, 'ty) def list|Rewrite of ('f, 't, 'ty) def_rule|Assert of 'fassert form
|Lemma of 'f listlemma to prove and use, using Avatar cut
|Goal of 'fgoal to prove
|NegatedGoal of 'ty skolem list * 'f listgoal after negation, with skolems
type lit= Term.t SLiteral.ttype formula= TypedSTerm.ttype input_def= (TypedSTerm.t, TypedSTerm.t, TypedSTerm.t) deftype clause= lit listtype ('f, 't, 'ty) t= private{id : int;view : ('f, 't, 'ty) view;attrs : attrs;proof : proof;mutable name : string option;}and proof= Proof.Step.tand input_t= (TypedSTerm.t, TypedSTerm.t, TypedSTerm.t) tand clause_t= (clause, Term.t, Type.t) t
val compare : (_, _, _) t -> (_, _, _) t -> intval view : ('f, 't, 'ty) t -> ('f, 't, 'ty) viewval attrs : (_, _, _) t -> attrsval proof_step : (_, _, _) t -> proofval name : (_, _, _) t -> stringRetrieve a name from the proof, or generate+save a new one
val as_proof_i : input_t -> Proof.tval res_tc_i : input_t Proof.result_tcval as_proof_c : clause_t -> Proof.tval res_tc_c : clause_t Proof.result_tcval mk_data : ID.t -> args:'ty Var.t list -> 'ty -> (ID.t * 'ty * ('ty * (ID.t * 'ty)) list) list -> 'ty dataval mk_def : ?rewrite:bool -> ID.t -> 'ty -> ('f, 't, 'ty) def_rule list -> ('f, 't, 'ty) defval attrs_ua : (_, _, _) t -> UntypedAST.attrsAll attributes, included these in the proof
val ty_decl : ?attrs:attrs -> proof:proof -> ID.t -> 'ty -> (_, _, 'ty) tval def : ?attrs:attrs -> proof:proof -> ('f, 't, 'ty) def list -> ('f, 't, 'ty) tval rewrite : ?attrs:attrs -> proof:proof -> ('f, 't, 'ty) def_rule -> ('f, 't, 'ty) tval data : ?attrs:attrs -> proof:proof -> 'ty data list -> (_, _, 'ty) tval assert_ : ?attrs:attrs -> proof:proof -> 'f -> ('f, _, _) tval lemma : ?attrs:attrs -> proof:proof -> 'f list -> ('f, _, _) tval goal : ?attrs:attrs -> proof:proof -> 'f -> ('f, _, _) tval neg_goal : ?attrs:attrs -> proof:proof -> skolems:'ty skolem list -> 'f list -> ('f, _, 'ty) tval signature : ?init:Signature.t -> ?conj_syms:ID.t Iter.t -> (_, _, Type.t) t Iter.t -> Signature.tCompute signature when the types are using
Type
val conv_attrs : UntypedAST.attrs -> attrsval attr_to_ua : attr -> UntypedAST.attrval map_data : ty:('ty1 -> 'ty2) -> 'ty1 data -> 'ty2 dataval map_def : form:('f1 -> 'f2) -> term:('t1 -> 't2) -> ty:('ty1 -> 'ty2) -> ('f1, 't1, 'ty1) def -> ('f2, 't2, 'ty2) defval map_def_rule : form:('a -> 'b) -> term:('c -> 'd) -> ty:('e -> 'f) -> ('a, 'c, 'e) def_rule -> ('b, 'd, 'f) def_ruleval map : form:('f1 -> 'f2) -> term:('t1 -> 't2) -> ty:('ty1 -> 'ty2) -> ('f1, 't1, 'ty1) t -> ('f2, 't2, 'ty2) t
Defined Constants
type definition= Rewrite.rule_set
val as_defined_cst : ID.t -> (int * definition) optionas_defined_cst idreturnsSome levelifidis a constant defined at stratification levellevel,Noneotherwise
val as_defined_cst_level : ID.t -> int optionval is_defined_cst : ID.t -> boolval declare_defined_cst : ID.t -> level:int -> definition -> unitdeclare_defined_cst id ~levelstates thatidis a defined constant of givenlevel. It means that it is defined based only on constants of strictly lower levels
val scan_stmt_for_defined_cst : clause_t -> unitTry and declare defined constants in the given statement
val scan_tst_rewrite : input_t -> unit
Inductive Types
val scan_stmt_for_ind_ty : clause_t -> unitscan_stmt_for_ind_ty stmtexaminesstmt, and, if the statement is a declaration of inductive types or constants, it declares them usingdeclare_tyordeclare_inductive_constant.
val scan_simple_stmt_for_ind_ty : input_t -> unitSame as
scan_stmtbut on earlier statements
val get_rw_rule : ?weight_incr:int -> clause_t -> (Logtk.ID.Set.elt * Rewrite.rule) optionval get_formulas_from_defs : ('a, _, _) t -> 'a CCList.tval sine_axiom_selector : ?ignore_k_most_common_symbols:int option -> ?take_conj_defs:bool -> ?take_only_defs:bool -> ?trim_implications:bool -> ?depth_start:int -> ?depth_end:int -> ?tolerance:float -> input_t Iter.t -> input_t Iter.tImplementation of SinE algorithm with the usual parameters described in Hoder and Voronkov Sine Qua Non paper
Iterators
module Seq : sig ... endIO
val pp_def_rule : 'a CCFormat.printer -> 'b CCFormat.printer -> 'c CCFormat.printer -> ('a, 'b, 'c) def_rule CCFormat.printerval pp_def : 'a CCFormat.printer -> 'b CCFormat.printer -> 'c CCFormat.printer -> ('a, 'b, 'c) def CCFormat.printerval pp : 'a CCFormat.printer -> 'b CCFormat.printer -> 'c CCFormat.printer -> ('a, 'b, 'c) t CCFormat.printerval to_string : 'a CCFormat.printer -> 'b CCFormat.printer -> 'c CCFormat.printer -> ('a, 'b, 'c) t -> stringval pp_clause : clause_t CCFormat.printerval pp_input : input_t CCFormat.printer
module ZF : sig ... endmodule TPTP : sig ... endval pp_clause_in : Output_format.t -> clause_t CCFormat.printerval pp_input_in : Output_format.t -> input_t CCFormat.printer