Logtk.StatementSourceThe input problem is made of statements. Each statement can declare a type, assert a formula, or a conjecture, define a term, add a rewrite rule, etc.
Those statements do not necessarily reflect exactly statements in the input language(s) (e.g., TPTP).
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 -> ... -> type
data_cstors : (ID.t * 'ty * ('ty * (ID.t * 'ty)) list) list;Each constructor is id, ty, args. ty must be of the form ty1 -> ty2 -> ... -> id args. args has the form (ty1, p1), (ty2,p2), … where each p is a projector.
}A datatype declaration
polarity for rewrite rules
type ('f, 't, 'ty) def_rule = | Def_term of {}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 rhs where op depends on polarity (in {=>, <=>, <=})
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
*)All attributes, included these in the proof
Compute signature when the types are using Type
as_defined_cst id returns Some level if id is a constant defined at stratification level level, None otherwise
declare_defined_cst id ~level states that id is a defined constant of given level. It means that it is defined based only on constants of strictly lower levels
Try and declare defined constants in the given statement
scan_stmt_for_ind_ty stmt examines stmt, and, if the statement is a declaration of inductive types or constants, it declares them using declare_ty or declare_inductive_constant.
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 ->
string