diff --git a/dev/sidekick-base/Sidekick_base/Base_types/Cstor/index.html b/dev/sidekick-base/Sidekick_base/Base_types/Cstor/index.html index ee1c6fb0..3a8f38dc 100644 --- a/dev/sidekick-base/Sidekick_base/Base_types/Cstor/index.html +++ b/dev/sidekick-base/Sidekick_base/Base_types/Cstor/index.html @@ -1,2 +1,2 @@ -
Base_types.CstorBase_types.CstorDatatype constructors.
A datatype has one or more constructors, each of which is a special kind of function symbol. Constructors are injective and pairwise distinct.
Base_types.Datatype t = data = {data_id : ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}val pp : CCFormat.t -> t -> unitBase_types.DataDatatypes
type t = data = {data_id : ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}val pp : CCFormat.t -> t -> unitBase_types.Funtype view = fun_view = | Fun_undef of fun_ty | ||||||
| Fun_select of select | ||||||
| Fun_cstor of cstor | ||||||
| Fun_is_a of cstor | ||||||
| Fun_def of {
} |
type t = fun_ = {fun_id : ID.t; |
fun_view : fun_view; |
}val id : t -> ID.tval view : t -> viewval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval as_undefined : t -> (t * Ty.Fun.t) optionval as_undefined_exn : t -> t * Ty.Fun.tval is_undefined : t -> boolval select : select -> tval select_idx : cstor -> int -> tval cstor : cstor -> tval is_a : cstor -> tval do_cc : t -> boolval mk_undef : ID.t -> Ty.Fun.t -> tval mk_undef' : ID.t -> Ty.t list -> Ty.t -> tval mk_undef_const : ID.t -> Ty.t -> tval pp : t CCFormat.printerBase_types.FunFunction symbols
type view = fun_view = | Fun_undef of fun_ty | ||||||
| Fun_select of select | ||||||
| Fun_cstor of cstor | ||||||
| Fun_is_a of cstor | ||||||
| Fun_def of {
} |
type t = fun_ = {fun_id : ID.t; |
fun_view : fun_view; |
}val id : t -> ID.tval view : t -> viewval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval as_undefined : t -> (t * Ty.Fun.t) optionval as_undefined_exn : t -> t * Ty.Fun.tval is_undefined : t -> boolval select : select -> tval select_idx : cstor -> int -> tval cstor : cstor -> tval is_a : cstor -> tval do_cc : t -> boolval mk_undef : ID.t -> Ty.Fun.t -> tval mk_undef' : ID.t -> Ty.t list -> Ty.t -> tval mk_undef_const : ID.t -> Ty.t -> tval pp : t CCFormat.printerBase_types.SelectBase_types.SelectDatatype selectors.
A selector is a kind of function that allows to obtain an argument of a given constructor.
Base_types.Statementtype t = statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of ID.t * int |
| Stmt_decl of ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
Base_types.StatementStatements.
A statement is an instruction for the SMT solver to do something, like asserting that a formula is true, declaring a new constant, or checking satisfiabilty of the current set of assertions.
type t = statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of ID.t * int |
| Stmt_decl of ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
Base_types.Termtype t = term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : t term_view; |
}type 'a view = 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
val id : t -> intval view : t -> term viewval ty : t -> Ty.tval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval create : ?size:int -> unit -> stateval make : state -> t view -> tval true_ : state -> tval false_ : state -> tval bool : state -> bool -> tval const : state -> fun_ -> tval app_fun : state -> fun_ -> t Sidekick_util.IArray.t -> tval eq : state -> t -> t -> tval not_ : state -> t -> tval ite : state -> t -> t -> t -> tval select : state -> select -> t -> tval app_cstor : state -> cstor -> t Sidekick_util.IArray.t -> tval is_a : state -> cstor -> t -> tval lra : state -> (Q.t, t) lra_view -> tval abs : state -> t -> t * boolObtain unsigned version of t, + the sign as a boolean
module Iter_dag : sig ... endval iter_dag_with : order:Iter_dag.order -> t -> t Iter.tval iter_dag : t -> t Iter.tval map_shallow : state -> (t -> t) -> t -> tval pp : t Fmt.printerBase_types.TermTerm creation and manipulation
type t = term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : t term_view; |
}type 'a view = 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
val id : t -> intval view : t -> term viewval ty : t -> Ty.tval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval create : ?size:int -> unit -> stateval make : state -> t view -> tval true_ : state -> tval false_ : state -> tval bool : state -> bool -> tval const : state -> fun_ -> tval app_fun : state -> fun_ -> t Sidekick_util.IArray.t -> tval eq : state -> t -> t -> tval not_ : state -> t -> tval ite : state -> t -> t -> t -> tval select : state -> select -> t -> tval app_cstor : state -> cstor -> t Sidekick_util.IArray.t -> tval is_a : state -> cstor -> t -> tval lra : state -> (Q.t, t) lra_view -> tval abs : state -> t -> t * boolObtain unsigned version of t, + the sign as a boolean
module Iter_dag : sig ... endval iter_dag_with : order:Iter_dag.order -> t -> t Iter.tval iter_dag : t -> t Iter.tval map_shallow : state -> (t -> t) -> t -> tval pp : t Fmt.printerBase_types.Tytype t = tytype state = unittype view = ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
type def = ty_def = | Ty_uninterpreted of ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
val id : t -> intval view : t -> viewval bool : state -> tval real : state -> tval atomic : def -> t list -> tval id_of_def : def -> ID.tval atomic_uninterpreted : ID.t -> tval finite : t -> boolval set_finite : t -> bool -> unitval is_bool : t -> boolval is_uninterpreted : t -> boolval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval pp : t CCFormat.printermodule Fun : sig ... endBase_types.TyTypes
type t = tytype state = unittype view = ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
type def = ty_def = | Ty_uninterpreted of ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
val id : t -> intval view : t -> viewval bool : state -> tval real : state -> tval atomic : def -> t list -> tval id_of_def : def -> ID.tval atomic_uninterpreted : ID.t -> tval finite : t -> boolval set_finite : t -> bool -> unitval is_bool : t -> boolval is_uninterpreted : t -> boolval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval pp : t CCFormat.printermodule Fun : sig ... endBase_types.Valuetype t = value = | V_bool of bool | ||||
| V_element of {
} | ||||
| V_cstor of {
} | ||||
| V_custom of {
} | ||||
| V_real of Q.t |
val true_ : tval false_ : tval bool : bool -> tval real : Q.t -> tval real_of_string : string -> tval mk_elt : ID.t -> Ty.t -> tval is_bool : t -> boolval is_true : t -> boolval is_false : t -> boolval cstor_app : cstor -> t list -> tval fresh : Term.t -> tval hash : t -> intval equal : t -> t -> boolval pp : t Fmt.printerBase_types.ValueValues (used in models)
type t = value = | V_bool of bool | ||||
| V_element of {
} | ||||
| V_cstor of {
} | ||||
| V_custom of {
} | ||||
| V_real of Q.t |
val true_ : tval false_ : tval bool : bool -> tval real : Q.t -> tval real_of_string : string -> tval mk_elt : ID.t -> Ty.t -> tval is_bool : t -> boolval is_true : t -> boolval is_false : t -> boolval cstor_app : cstor -> t list -> tval fresh : Term.t -> tval hash : t -> intval equal : t -> t -> boolval pp : t Fmt.printerSidekick_base.Base_typesmodule CC_view = Sidekick_core.CC_viewtype lra_pred = Sidekick_arith_lra.Predicate.t = | Leq |
| Geq |
| Lt |
| Gt |
| Eq |
| Neq |
type lra_op = Sidekick_arith_lra.op = | Plus |
| Minus |
type ('num, 'a) lra_view = ('num, 'a) Sidekick_arith_lra.lra_view = | LRA_pred of lra_pred * 'a * 'a |
| LRA_op of lra_op * 'a * 'a |
| LRA_mult of 'num * 'a |
| LRA_const of 'num |
| LRA_simplex_var of 'a |
| LRA_simplex_pred of 'a * Sidekick_arith_lra.S_op.t * 'num |
| LRA_other of 'a |
type term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : term term_view; |
}and 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
and fun_ = {fun_id : ID.t; |
fun_view : fun_view; |
}and fun_view = | Fun_undef of fun_ty | |||||||
| Fun_select of select | |||||||
| Fun_cstor of cstor | |||||||
| Fun_is_a of cstor | |||||||
| Fun_def of {
} | Methods on the custom term view whose arguments are
|
and fun_ty = {fun_ty_args : ty list; |
fun_ty_ret : ty; |
}Function type
and ty = {mutable ty_id : int; |
ty_view : ty_view; |
}Hashconsed type
and ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
and ty_def = | Ty_uninterpreted of ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
and data = {data_id : ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}and cstor = {cstor_id : ID.t; |
cstor_is_a : ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}and select = {select_id : ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}and value = | V_bool of bool | |||||
| V_element of {
} | a named constant, distinct from any other constant | ||||
| V_cstor of {
} | |||||
| V_custom of {
} | Custom value | ||||
| V_real of Q.t |
Semantic values, used for models (and possibly model-constructing calculi)
and value_custom_view = ..type definition = ID.t * ty * termtype statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of ID.t * int |
| Stmt_decl of ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
val term_equal_ : term -> term -> boolval term_hash_ : term -> intval term_cmp_ : term -> term -> intval fun_compare : fun_ -> fun_ -> intval pp_fun : CCFormat.t -> fun_ -> unitval id_of_fun : fun_ -> ID.tval eq_ty : ty -> ty -> boolval eq_cstor : cstor -> cstor -> boolval eq_value : value -> value -> boolval hash_value : value Sidekick_util.Hash.tval pp_value : value Sidekick_util.Util.printerval pp_db : Stdlib.Format.formatter -> (int * 'a) -> unitval pp_ty : ty Sidekick_util.Util.printerval string_of_lra_pred : lra_pred -> stringval pp_pred : Fmt.t -> lra_pred -> unitval string_of_lra_op : lra_op -> stringval pp_lra_op : Fmt.t -> lra_op -> unitval pp_term_view_gen : pp_id:(Fmt.t -> ID.t -> unit) -> pp_t:'a Fmt.printer -> Fmt.t -> 'a term_view -> unitval pp_term_top : ids:bool -> Fmt.t -> term -> unitval pp_term : Fmt.t -> term -> unitval pp_term_view : Fmt.t -> term term_view -> unitmodule Ty : sig ... endmodule Fun : sig ... endmodule Term_cell : sig ... endmodule Term : sig ... endmodule Value : sig ... endmodule Data : sig ... endmodule Select : sig ... endmodule Cstor : sig ... endmodule Statement : sig ... endSidekick_base.Base_typesBasic type definitions for Sidekick_base
module CC_view = Sidekick_core.CC_viewtype lra_pred = Sidekick_arith_lra.Predicate.t = | Leq |
| Geq |
| Lt |
| Gt |
| Eq |
| Neq |
type lra_op = Sidekick_arith_lra.op = | Plus |
| Minus |
type ('num, 'a) lra_view = ('num, 'a) Sidekick_arith_lra.lra_view = | LRA_pred of lra_pred * 'a * 'a |
| LRA_op of lra_op * 'a * 'a |
| LRA_mult of 'num * 'a |
| LRA_const of 'num |
| LRA_simplex_var of 'a |
| LRA_simplex_pred of 'a * Sidekick_arith_lra.S_op.t * 'num |
| LRA_other of 'a |
type term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : term term_view; |
}Term.
A term, with its own view, type, and a unique identifier. Do not create directly, see Term.
and 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
Shallow structure of a term.
A term is a DAG (direct acyclic graph) of nodes, each of which has a term view.
and fun_view = | Fun_undef of fun_ty | |||||||
| Fun_select of select | |||||||
| Fun_cstor of cstor | |||||||
| Fun_is_a of cstor | |||||||
| Fun_def of {
} | Methods on the custom term view whose arguments are
|
and fun_ty = {fun_ty_args : ty list; |
fun_ty_ret : ty; |
}Function type
and ty = {mutable ty_id : int; |
ty_view : ty_view; |
}Hashconsed type
and ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
and ty_def = | Ty_uninterpreted of ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
and data = {data_id : ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}and cstor = {cstor_id : ID.t; |
cstor_is_a : ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}and select = {select_id : ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}and value = | V_bool of bool | |||||
| V_element of {
} | a named constant, distinct from any other constant | ||||
| V_cstor of {
} | |||||
| V_custom of {
} | Custom value | ||||
| V_real of Q.t |
Semantic values, used for models (and possibly model-constructing calculi)
and value_custom_view = ..type definition = ID.t * ty * termtype statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of ID.t * int |
| Stmt_decl of ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
val term_equal_ : term -> term -> boolval term_hash_ : term -> intval term_cmp_ : term -> term -> intval fun_compare : fun_ -> fun_ -> intval pp_fun : CCFormat.t -> fun_ -> unitval id_of_fun : fun_ -> ID.tval eq_ty : ty -> ty -> boolval eq_cstor : cstor -> cstor -> boolval eq_value : value -> value -> boolval hash_value : value Sidekick_util.Hash.tval pp_value : value Sidekick_util.Util.printerval pp_db : Stdlib.Format.formatter -> (int * 'a) -> unitval pp_ty : ty Sidekick_util.Util.printerval string_of_lra_pred : lra_pred -> stringval pp_pred : Fmt.t -> lra_pred -> unitval string_of_lra_op : lra_op -> stringval pp_lra_op : Fmt.t -> lra_op -> unitval pp_term_view_gen : pp_id:(Fmt.t -> ID.t -> unit) -> pp_t:'a Fmt.printer -> Fmt.t -> 'a term_view -> unitval pp_term_top : ids:bool -> Fmt.t -> term -> unitval pp_term : Fmt.t -> term -> unitval pp_term_view : Fmt.t -> term term_view -> unitmodule Ty : sig ... endTypes
module Fun : sig ... endFunction symbols
module Term_cell : sig ... endmodule Term : sig ... endTerm creation and manipulation
module Value : sig ... endValues (used in models)
module Data : sig ... endDatatypes
module Select : sig ... endDatatype selectors.
module Cstor : sig ... endDatatype constructors.
module Statement : sig ... endStatements.
Sidekick_base.IDval make : string -> tval makef : ('a, Stdlib.Format.formatter, unit, t) Stdlib.format4 -> 'aval copy : t -> tval id : t -> intval to_string : t -> stringval to_string_full : t -> stringval pp_name : t CCFormat.printermodule B : sig ... endSidekick_base.IDUnique Identifiers
val make : string -> tmake s creates a new identifier with name s and some internal information. It is different than any other identifier created before or after, even with the same name.
val makef : ('a, Stdlib.Format.formatter, unit, t) Stdlib.format4 -> 'amakef "foo %d bar %b" 42 true is like make (Format.asprintf "foo %d bar %b" 42 true).
val id : t -> intUnique integer counter for this identifier.
val to_string : t -> stringPrint identifier.
val to_string_full : t -> stringPrinter name and unique counter for this ID.
val pp_name : t CCFormat.printerModel.Fun_interpretationtype t = {cases : Base_types.Value.t Val_map.t; |
default : Base_types.Value.t; |
}val default : t -> Base_types.Value.tval cases_list : t -> (Base_types.Value.t list * Base_types.Value.t) listval make : default:Base_types.Value.t -> (Base_types.Value.t list * Base_types.Value.t) list -> tModel.Fun_interpretationModel for function symbols.
Function models are a finite map from argument tuples to values, accompanied with a default value that every other argument tuples map to. In other words, it's of the form:
lambda x y. if (x=vx1,y=vy1) then v1 else if … then … else vdefault
type t = {cases : Base_types.Value.t Val_map.t; |
default : Base_types.Value.t; |
}val default : t -> Base_types.Value.tval cases_list : t -> (Base_types.Value.t list * Base_types.Value.t) listval make : default:Base_types.Value.t -> (Base_types.Value.t list * Base_types.Value.t) list -> tSidekick_base.Modelmodule Val_map : sig ... endmodule Fun_interpretation : sig ... endtype t = {values : Base_types.Value.t Sidekick_base__.Base_types.Term.Map.t; |
funs : Fun_interpretation.t Sidekick_base__.Base_types.Fun.Map.t; |
}val empty : tval add : Base_types.Term.t -> Base_types.Value.t -> t -> tval mem : Base_types.Term.t -> t -> boolval find : Base_types.Term.t -> t -> Base_types.Value.t optionval merge : t -> t -> tval pp : t CCFormat.printerval eval : t -> Base_types.Term.t -> Base_types.Value.t optionSidekick_base.ModelModels
A model is a solution to the satisfiability question, created by the SMT solver when it proves the formula to be satisfiable.
A model gives a value to each term of the original formula(s), in such a way that the formula(s) is true when the term is replaced by its value.
module Val_map : sig ... endmodule Fun_interpretation : sig ... endModel for function symbols.
type t = {values : Base_types.Value.t Sidekick_base__.Base_types.Term.Map.t; |
funs : Fun_interpretation.t Sidekick_base__.Base_types.Fun.Map.t; |
}Model
val empty : tEmpty model
val add : Base_types.Term.t -> Base_types.Value.t -> t -> tval mem : Base_types.Term.t -> t -> boolval find : Base_types.Term.t -> t -> Base_types.Value.t optionval merge : t -> t -> tval pp : t CCFormat.printerval eval : t -> Base_types.Term.t -> Base_types.Value.t optioneval m t tries to evaluate term t in the model. If it succeeds, the value is returned, otherwise None is.
Sidekick_base.Proofinclude Sidekick_core.PROOF with type term = Base_types.Term.t and type ty = Base_types.Ty.ttype term = Base_types.Term.ttype ty = Base_types.Ty.ttype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endval isa_split : ty -> term Iter.t -> tval isa_disj : ty -> term -> term -> tval cstor_inj : Base_types.Cstor.t -> int -> term list -> term list -> tval bool_eq : term -> term -> tval bool_c : string -> term list -> tval ite_true : term -> tval ite_false : term -> tval lra : lit Iter.t -> tval lra_l : lit list -> tSidekick_base.ProofProofs of unsatisfiability
Proofs are used in sidekick when the problem is found unsatisfiable. A proof collects inferences made by the solver into a list of steps, each with its own kind of justification (e.g. "by congruence"), and outputs it in some kind of format.
Currently we target Quip as an experimental proof backend.
include Sidekick_core.PROOF with type term = Base_types.Term.t and type ty = Base_types.Ty.ttype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = Base_types.Term.ttype ty = Base_types.Ty.ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endval isa_split : ty -> term Iter.t -> tval isa_disj : ty -> term -> term -> tval cstor_inj : Base_types.Cstor.t -> int -> term list -> term list -> tval bool_eq : term -> term -> tval bool_c : string -> term list -> tval ite_true : term -> tval ite_false : term -> tval lra : lit Iter.t -> tval lra_l : lit list -> tSidekick_baseThis library is a starting point for writing concrete implementations of SMT solvers with Sidekick.
It provides a representation of terms, boolean formulas, linear arithmetic expressions, datatypes for the functors in Sidekick.
In addition, it has a notion of Statement. Statements are instructions for the SMT solver to do something, such as: define a new constant, declare a new constant, assert a formula as being true, set an option, check satisfiability of the set of statements added so far, etc. Logic formats such as SMT-LIB 2.6 are in fact based on a similar notion of statements, and a .smt2 files contains a list of statements.
module Base_types : sig ... endmodule ID : sig ... endmodule Fun = Base_types.Funmodule Stat = Sidekick_util.Statmodule Model : sig ... endmodule Term = Base_types.Termmodule Value = Base_types.Valuemodule Term_cell = Base_types.Term_cellmodule Ty = Base_types.Tymodule Statement = Base_types.Statementmodule Data = Base_types.Datamodule Select = Base_types.Selectmodule Proof : sig ... endmodule Arg : Sidekick_core.TERM with type Term.t = Term.t and type Fun.t = Fun.t and type Ty.t = Ty.t and type Term.state = Term.stateSidekick_baseThis library is a starting point for writing concrete implementations of SMT solvers with Sidekick.
It provides a representation of terms, boolean formulas, linear arithmetic expressions, datatypes for the functors in Sidekick.
In addition, it has a notion of Statement. Statements are instructions for the SMT solver to do something, such as: define a new constant, declare a new constant, assert a formula as being true, set an option, check satisfiability of the set of statements added so far, etc. Logic formats such as SMT-LIB 2.6 are in fact based on a similar notion of statements, and a .smt2 files contains a list of statements.
module Base_types : sig ... endBasic type definitions for Sidekick_base
module ID : sig ... endUnique Identifiers
module Fun = Base_types.Funmodule Stat = Sidekick_util.Statmodule Model : sig ... endModels
module Term = Base_types.Termmodule Value = Base_types.Valuemodule Term_cell = Base_types.Term_cellmodule Ty = Base_types.Tymodule Statement = Base_types.Statementmodule Data = Base_types.Datamodule Select = Base_types.Selectmodule Proof : sig ... endProofs of unsatisfiability
module Arg : Sidekick_core.TERM with type Term.t = Term.t and type Fun.t = Fun.t and type Ty.t = Ty.t and type Term.state = Term.stateBase_types.Cstortype t = cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}Base_types.CstorDatatype constructors.
A datatype has one or more constructors, each of which is a special kind of function symbol. Constructors are injective and pairwise distinct.
type t = cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}Base_types.Datatype t = data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}val pp : CCFormat.t -> t -> unitBase_types.DataDatatypes
type t = data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}val pp : CCFormat.t -> t -> unitBase_types.Funtype view = fun_view = | Fun_undef of fun_ty | ||||||
| Fun_select of select | ||||||
| Fun_cstor of cstor | ||||||
| Fun_is_a of cstor | ||||||
| Fun_def of {
} |
type t = fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}val id : t -> Sidekick_base.ID.tval view : t -> viewval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval as_undefined : t -> (t * Ty.Fun.t) optionval as_undefined_exn : t -> t * Ty.Fun.tval is_undefined : t -> boolval select : select -> tval select_idx : cstor -> int -> tval cstor : cstor -> tval is_a : cstor -> tval do_cc : t -> boolval mk_undef : Sidekick_base.ID.t -> Ty.Fun.t -> tval mk_undef' : Sidekick_base.ID.t -> Ty.t list -> Ty.t -> tval mk_undef_const : Sidekick_base.ID.t -> Ty.t -> tval pp : t CCFormat.printerBase_types.FunFunction symbols
type view = fun_view = | Fun_undef of fun_ty | ||||||
| Fun_select of select | ||||||
| Fun_cstor of cstor | ||||||
| Fun_is_a of cstor | ||||||
| Fun_def of {
} |
type t = fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}val id : t -> Sidekick_base.ID.tval view : t -> viewval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval as_undefined : t -> (t * Ty.Fun.t) optionval as_undefined_exn : t -> t * Ty.Fun.tval is_undefined : t -> boolval select : select -> tval select_idx : cstor -> int -> tval cstor : cstor -> tval is_a : cstor -> tval do_cc : t -> boolval mk_undef : Sidekick_base.ID.t -> Ty.Fun.t -> tval mk_undef' : Sidekick_base.ID.t -> Ty.t list -> Ty.t -> tval mk_undef_const : Sidekick_base.ID.t -> Ty.t -> tval pp : t CCFormat.printerBase_types.Selecttype t = select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}Base_types.SelectDatatype selectors.
A selector is a kind of function that allows to obtain an argument of a given constructor.
type t = select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}Base_types.Statementtype t = statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
Base_types.StatementStatements.
A statement is an instruction for the SMT solver to do something, like asserting that a formula is true, declaring a new constant, or checking satisfiabilty of the current set of assertions.
type t = statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
Base_types.Termtype t = term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : t term_view; |
}type 'a view = 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
val id : t -> intval view : t -> term viewval ty : t -> Ty.tval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval create : ?size:int -> unit -> stateval make : state -> t view -> tval true_ : state -> tval false_ : state -> tval bool : state -> bool -> tval const : state -> fun_ -> tval app_fun : state -> fun_ -> t Sidekick_util.IArray.t -> tval eq : state -> t -> t -> tval not_ : state -> t -> tval ite : state -> t -> t -> t -> tval select : state -> select -> t -> tval app_cstor : state -> cstor -> t Sidekick_util.IArray.t -> tval is_a : state -> cstor -> t -> tval lra : state -> (Q.t, t) lra_view -> tval abs : state -> t -> t * boolObtain unsigned version of t, + the sign as a boolean
module Iter_dag : sig ... endval iter_dag_with : order:Iter_dag.order -> t -> t Iter.tval iter_dag : t -> t Iter.tval map_shallow : state -> (t -> t) -> t -> tval pp : t Fmt.printerBase_types.TermTerm creation and manipulation
type t = term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : t term_view; |
}type 'a view = 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
val id : t -> intval view : t -> term viewval ty : t -> Ty.tval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval create : ?size:int -> unit -> stateval make : state -> t view -> tval true_ : state -> tval false_ : state -> tval bool : state -> bool -> tval const : state -> fun_ -> tval app_fun : state -> fun_ -> t Sidekick_util.IArray.t -> tval eq : state -> t -> t -> tval not_ : state -> t -> tval ite : state -> t -> t -> t -> tval select : state -> select -> t -> tval app_cstor : state -> cstor -> t Sidekick_util.IArray.t -> tval is_a : state -> cstor -> t -> tval lra : state -> (Q.t, t) lra_view -> tval abs : state -> t -> t * boolObtain unsigned version of t, + the sign as a boolean
module Iter_dag : sig ... endval iter_dag_with : order:Iter_dag.order -> t -> t Iter.tval iter_dag : t -> t Iter.tval map_shallow : state -> (t -> t) -> t -> tval pp : t Fmt.printerBase_types.Tytype t = tytype state = unittype view = ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
type def = ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
val id : t -> intval view : t -> viewval bool : state -> tval real : state -> tval atomic : def -> t list -> tval id_of_def : def -> Sidekick_base.ID.tval atomic_uninterpreted : Sidekick_base.ID.t -> tval finite : t -> boolval set_finite : t -> bool -> unitval is_bool : t -> boolval is_uninterpreted : t -> boolval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval pp : t CCFormat.printermodule Fun : sig ... endBase_types.TyTypes
type t = tytype state = unittype view = ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
type def = ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
val id : t -> intval view : t -> viewval bool : state -> tval real : state -> tval atomic : def -> t list -> tval id_of_def : def -> Sidekick_base.ID.tval atomic_uninterpreted : Sidekick_base.ID.t -> tval finite : t -> boolval set_finite : t -> bool -> unitval is_bool : t -> boolval is_uninterpreted : t -> boolval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval pp : t CCFormat.printermodule Fun : sig ... endBase_types.Valuetype t = value = | V_bool of bool | ||||
| V_element of {
} | ||||
| V_cstor of {
} | ||||
| V_custom of {
} | ||||
| V_real of Q.t |
val true_ : tval false_ : tval bool : bool -> tval real : Q.t -> tval real_of_string : string -> tval mk_elt : Sidekick_base.ID.t -> Ty.t -> tval is_bool : t -> boolval is_true : t -> boolval is_false : t -> boolval cstor_app : cstor -> t list -> tval fresh : Term.t -> tval hash : t -> intval equal : t -> t -> boolval pp : t Fmt.printerBase_types.ValueValues (used in models)
type t = value = | V_bool of bool | ||||
| V_element of {
} | ||||
| V_cstor of {
} | ||||
| V_custom of {
} | ||||
| V_real of Q.t |
val true_ : tval false_ : tval bool : bool -> tval real : Q.t -> tval real_of_string : string -> tval mk_elt : Sidekick_base.ID.t -> Ty.t -> tval is_bool : t -> boolval is_true : t -> boolval is_false : t -> boolval cstor_app : cstor -> t list -> tval fresh : Term.t -> tval hash : t -> intval equal : t -> t -> boolval pp : t Fmt.printerSidekick_base__.Base_typesmodule CC_view = Sidekick_core.CC_viewtype lra_pred = Sidekick_arith_lra.Predicate.t = | Leq |
| Geq |
| Lt |
| Gt |
| Eq |
| Neq |
type lra_op = Sidekick_arith_lra.op = | Plus |
| Minus |
type ('num, 'a) lra_view = ('num, 'a) Sidekick_arith_lra.lra_view = | LRA_pred of lra_pred * 'a * 'a |
| LRA_op of lra_op * 'a * 'a |
| LRA_mult of 'num * 'a |
| LRA_const of 'num |
| LRA_simplex_var of 'a |
| LRA_simplex_pred of 'a * Sidekick_arith_lra.S_op.t * 'num |
| LRA_other of 'a |
type term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : term term_view; |
}and 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
and fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}and fun_view = | Fun_undef of fun_ty | |||||||
| Fun_select of select | |||||||
| Fun_cstor of cstor | |||||||
| Fun_is_a of cstor | |||||||
| Fun_def of {
} | Methods on the custom term view whose arguments are
|
and fun_ty = {fun_ty_args : ty list; |
fun_ty_ret : ty; |
}Function type
and ty = {mutable ty_id : int; |
ty_view : ty_view; |
}Hashconsed type
and ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
and ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
and data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}and cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}and select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}and value = | V_bool of bool | |||||
| V_element of {
} | a named constant, distinct from any other constant | ||||
| V_cstor of {
} | |||||
| V_custom of {
} | Custom value | ||||
| V_real of Q.t |
Semantic values, used for models (and possibly model-constructing calculi)
and value_custom_view = ..type definition = Sidekick_base.ID.t * ty * termtype statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
val term_equal_ : term -> term -> boolval term_hash_ : term -> intval term_cmp_ : term -> term -> intval fun_compare : fun_ -> fun_ -> intval pp_fun : CCFormat.t -> fun_ -> unitval id_of_fun : fun_ -> Sidekick_base.ID.tval eq_ty : ty -> ty -> boolval eq_cstor : cstor -> cstor -> boolval eq_value : value -> value -> boolval hash_value : value Sidekick_util.Hash.tval pp_value : value Sidekick_util.Util.printerval pp_db : Stdlib.Format.formatter -> (int * 'a) -> unitval pp_ty : ty Sidekick_util.Util.printerval string_of_lra_pred : lra_pred -> stringval pp_pred : Fmt.t -> lra_pred -> unitval string_of_lra_op : lra_op -> stringval pp_lra_op : Fmt.t -> lra_op -> unitval pp_term_view_gen : pp_id:(Fmt.t -> Sidekick_base.ID.t -> unit) -> pp_t:'a Fmt.printer -> Fmt.t -> 'a term_view -> unitval pp_term_top : ids:bool -> Fmt.t -> term -> unitval pp_term : Fmt.t -> term -> unitval pp_term_view : Fmt.t -> term term_view -> unitmodule Ty : sig ... endmodule Fun : sig ... endmodule Term_cell : sig ... endmodule Term : sig ... endmodule Value : sig ... endmodule Data : sig ... endmodule Select : sig ... endmodule Cstor : sig ... endmodule Statement : sig ... endSidekick_base__.Base_typesmodule CC_view = Sidekick_core.CC_viewtype lra_pred = Sidekick_arith_lra.Predicate.t = | Leq |
| Geq |
| Lt |
| Gt |
| Eq |
| Neq |
type lra_op = Sidekick_arith_lra.op = | Plus |
| Minus |
type ('num, 'a) lra_view = ('num, 'a) Sidekick_arith_lra.lra_view = | LRA_pred of lra_pred * 'a * 'a |
| LRA_op of lra_op * 'a * 'a |
| LRA_mult of 'num * 'a |
| LRA_const of 'num |
| LRA_simplex_var of 'a |
| LRA_simplex_pred of 'a * Sidekick_arith_lra.S_op.t * 'num |
| LRA_other of 'a |
type term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : term term_view; |
}Term.
A term, with its own view, type, and a unique identifier. Do not create directly, see Term.
and 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
Shallow structure of a term.
A term is a DAG (direct acyclic graph) of nodes, each of which has a term view.
and fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}type of function symbols
and fun_view = | Fun_undef of fun_ty | |||||||
| Fun_select of select | |||||||
| Fun_cstor of cstor | |||||||
| Fun_is_a of cstor | |||||||
| Fun_def of {
} | Methods on the custom term view whose arguments are
|
and fun_ty = {fun_ty_args : ty list; |
fun_ty_ret : ty; |
}Function type
and ty = {mutable ty_id : int; |
ty_view : ty_view; |
}Hashconsed type
and ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
and ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
and data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}and cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}and select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}and value = | V_bool of bool | |||||
| V_element of {
} | a named constant, distinct from any other constant | ||||
| V_cstor of {
} | |||||
| V_custom of {
} | Custom value | ||||
| V_real of Q.t |
Semantic values, used for models (and possibly model-constructing calculi)
and value_custom_view = ..type definition = Sidekick_base.ID.t * ty * termtype statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
val term_equal_ : term -> term -> boolval term_hash_ : term -> intval term_cmp_ : term -> term -> intval fun_compare : fun_ -> fun_ -> intval pp_fun : CCFormat.t -> fun_ -> unitval id_of_fun : fun_ -> Sidekick_base.ID.tval eq_ty : ty -> ty -> boolval eq_cstor : cstor -> cstor -> boolval eq_value : value -> value -> boolval hash_value : value Sidekick_util.Hash.tval pp_value : value Sidekick_util.Util.printerval pp_db : Stdlib.Format.formatter -> (int * 'a) -> unitval pp_ty : ty Sidekick_util.Util.printerval string_of_lra_pred : lra_pred -> stringval pp_pred : Fmt.t -> lra_pred -> unitval string_of_lra_op : lra_op -> stringval pp_lra_op : Fmt.t -> lra_op -> unitval pp_term_view_gen : pp_id:(Fmt.t -> Sidekick_base.ID.t -> unit) -> pp_t:'a Fmt.printer -> Fmt.t -> 'a term_view -> unitval pp_term_top : ids:bool -> Fmt.t -> term -> unitval pp_term : Fmt.t -> term -> unitval pp_term_view : Fmt.t -> term term_view -> unitmodule Ty : sig ... endTypes
module Fun : sig ... endFunction symbols
module Term_cell : sig ... endmodule Term : sig ... endTerm creation and manipulation
module Value : sig ... endValues (used in models)
module Data : sig ... endDatatypes
module Select : sig ... endDatatype selectors.
module Cstor : sig ... endDatatype constructors.
module Statement : sig ... endStatements.
Sidekick_base__.IDval make : string -> tval makef : ('a, Stdlib.Format.formatter, unit, t) Stdlib.format4 -> 'aval copy : t -> tval id : t -> intval to_string : t -> stringval to_string_full : t -> stringval pp_name : t CCFormat.printermodule B : sig ... endSidekick_base__.IDval make : string -> tmake s creates a new identifier with name s and some internal information. It is different than any other identifier created before or after, even with the same name.
val makef : ('a, Stdlib.Format.formatter, unit, t) Stdlib.format4 -> 'amakef "foo %d bar %b" 42 true is like make (Format.asprintf "foo %d bar %b" 42 true).
val id : t -> intUnique integer counter for this identifier.
val to_string : t -> stringPrint identifier.
val to_string_full : t -> stringPrinter name and unique counter for this ID.
val pp_name : t CCFormat.printerModel.Fun_interpretationtype t = {cases : Sidekick_base.Base_types.Value.t Val_map.t; |
default : Sidekick_base.Base_types.Value.t; |
}val default : t -> Sidekick_base.Base_types.Value.tval cases_list : t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) listval make : default:Sidekick_base.Base_types.Value.t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) list -> tModel.Fun_interpretationModel for function symbols.
Function models are a finite map from argument tuples to values, accompanied with a default value that every other argument tuples map to. In other words, it's of the form:
lambda x y. if (x=vx1,y=vy1) then v1 else if … then … else vdefault
type t = {cases : Sidekick_base.Base_types.Value.t Val_map.t; |
default : Sidekick_base.Base_types.Value.t; |
}val default : t -> Sidekick_base.Base_types.Value.tval cases_list : t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) listval make : default:Sidekick_base.Base_types.Value.t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) list -> tSidekick_base__.Modelmodule Val_map : sig ... endmodule Fun_interpretation : sig ... endtype t = {values : Sidekick_base.Base_types.Value.t Sidekick_base__.Base_types.Term.Map.t; |
funs : Fun_interpretation.t Sidekick_base__.Base_types.Fun.Map.t; |
}val empty : tval add : Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t -> t -> tval mem : Sidekick_base.Base_types.Term.t -> t -> boolval find : Sidekick_base.Base_types.Term.t -> t -> Sidekick_base.Base_types.Value.t optionval merge : t -> t -> tval pp : t CCFormat.printerval eval : t -> Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t optionSidekick_base__.Modelmodule Val_map : sig ... endmodule Fun_interpretation : sig ... endModel for function symbols.
type t = {values : Sidekick_base.Base_types.Value.t Sidekick_base__.Base_types.Term.Map.t; |
funs : Fun_interpretation.t Sidekick_base__.Base_types.Fun.Map.t; |
}Model
val empty : tEmpty model
val add : Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t -> t -> tval mem : Sidekick_base.Base_types.Term.t -> t -> boolval find : Sidekick_base.Base_types.Term.t -> t -> Sidekick_base.Base_types.Value.t optionval merge : t -> t -> tval pp : t CCFormat.printerval eval : t -> Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t optioneval m t tries to evaluate term t in the model. If it succeeds, the value is returned, otherwise None is.
Sidekick_base__.Proofinclude Sidekick_core.PROOF with type term = Sidekick_base.Base_types.Term.t and type ty = Sidekick_base.Base_types.Ty.ttype term = Sidekick_base.Base_types.Term.ttype ty = Sidekick_base.Base_types.Ty.ttype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endval isa_split : ty -> term Iter.t -> tval isa_disj : ty -> term -> term -> tval cstor_inj : Sidekick_base.Base_types.Cstor.t -> int -> term list -> term list -> tval bool_eq : term -> term -> tval bool_c : string -> term list -> tval ite_true : term -> tval ite_false : term -> tval lra : lit Iter.t -> tval lra_l : lit list -> tSidekick_base__.Proofinclude Sidekick_core.PROOF with type term = Sidekick_base.Base_types.Term.t and type ty = Sidekick_base.Base_types.Ty.ttype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = Sidekick_base.Base_types.Term.ttype ty = Sidekick_base.Base_types.Ty.ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endval isa_split : ty -> term Iter.t -> tval isa_disj : ty -> term -> term -> tval cstor_inj : Sidekick_base.Base_types.Cstor.t -> int -> term list -> term list -> tval bool_eq : term -> term -> tval bool_c : string -> term list -> tval ite_true : term -> tval ite_false : term -> tval lra : lit Iter.t -> tval lra_l : lit list -> tSidekick_base__Base_types.Cstortype t = cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}Sidekick_base__Base_types.CstorDatatype constructors.
A datatype has one or more constructors, each of which is a special kind of function symbol. Constructors are injective and pairwise distinct.
type t = cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}Sidekick_base__Base_types.Datatype t = data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}val pp : CCFormat.t -> t -> unitSidekick_base__Base_types.DataDatatypes
type t = data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}val pp : CCFormat.t -> t -> unitSidekick_base__Base_types.Funtype view = fun_view = | Fun_undef of fun_ty | ||||||
| Fun_select of select | ||||||
| Fun_cstor of cstor | ||||||
| Fun_is_a of cstor | ||||||
| Fun_def of {
} |
type t = fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}val id : t -> Sidekick_base.ID.tval view : t -> viewval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval as_undefined : t -> (t * Ty.Fun.t) optionval as_undefined_exn : t -> t * Ty.Fun.tval is_undefined : t -> boolval select : select -> tval select_idx : cstor -> int -> tval cstor : cstor -> tval is_a : cstor -> tval do_cc : t -> boolval mk_undef : Sidekick_base.ID.t -> Ty.Fun.t -> tval mk_undef' : Sidekick_base.ID.t -> Ty.t list -> Ty.t -> tval mk_undef_const : Sidekick_base.ID.t -> Ty.t -> tval pp : t CCFormat.printerSidekick_base__Base_types.FunFunction symbols
type view = fun_view = | Fun_undef of fun_ty | ||||||
| Fun_select of select | ||||||
| Fun_cstor of cstor | ||||||
| Fun_is_a of cstor | ||||||
| Fun_def of {
} |
type t = fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}val id : t -> Sidekick_base.ID.tval view : t -> viewval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval as_undefined : t -> (t * Ty.Fun.t) optionval as_undefined_exn : t -> t * Ty.Fun.tval is_undefined : t -> boolval select : select -> tval select_idx : cstor -> int -> tval cstor : cstor -> tval is_a : cstor -> tval do_cc : t -> boolval mk_undef : Sidekick_base.ID.t -> Ty.Fun.t -> tval mk_undef' : Sidekick_base.ID.t -> Ty.t list -> Ty.t -> tval mk_undef_const : Sidekick_base.ID.t -> Ty.t -> tval pp : t CCFormat.printerSidekick_base__Base_types.Selecttype t = select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}Sidekick_base__Base_types.SelectDatatype selectors.
A selector is a kind of function that allows to obtain an argument of a given constructor.
type t = select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}Sidekick_base__Base_types.Statementtype t = statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
Sidekick_base__Base_types.StatementStatements.
A statement is an instruction for the SMT solver to do something, like asserting that a formula is true, declaring a new constant, or checking satisfiabilty of the current set of assertions.
type t = statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
Sidekick_base__Base_types.Termtype t = term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : t term_view; |
}type 'a view = 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
val id : t -> intval view : t -> term viewval ty : t -> Ty.tval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval create : ?size:int -> unit -> stateval make : state -> t view -> tval true_ : state -> tval false_ : state -> tval bool : state -> bool -> tval const : state -> fun_ -> tval app_fun : state -> fun_ -> t Sidekick_util.IArray.t -> tval eq : state -> t -> t -> tval not_ : state -> t -> tval ite : state -> t -> t -> t -> tval select : state -> select -> t -> tval app_cstor : state -> cstor -> t Sidekick_util.IArray.t -> tval is_a : state -> cstor -> t -> tval lra : state -> (Q.t, t) lra_view -> tval abs : state -> t -> t * boolObtain unsigned version of t, + the sign as a boolean
module Iter_dag : sig ... endval iter_dag_with : order:Iter_dag.order -> t -> t Iter.tval iter_dag : t -> t Iter.tval map_shallow : state -> (t -> t) -> t -> tval pp : t Fmt.printerSidekick_base__Base_types.TermTerm creation and manipulation
type t = term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : t term_view; |
}type 'a view = 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
val id : t -> intval view : t -> term viewval ty : t -> Ty.tval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval create : ?size:int -> unit -> stateval make : state -> t view -> tval true_ : state -> tval false_ : state -> tval bool : state -> bool -> tval const : state -> fun_ -> tval app_fun : state -> fun_ -> t Sidekick_util.IArray.t -> tval eq : state -> t -> t -> tval not_ : state -> t -> tval ite : state -> t -> t -> t -> tval select : state -> select -> t -> tval app_cstor : state -> cstor -> t Sidekick_util.IArray.t -> tval is_a : state -> cstor -> t -> tval lra : state -> (Q.t, t) lra_view -> tval abs : state -> t -> t * boolObtain unsigned version of t, + the sign as a boolean
module Iter_dag : sig ... endval iter_dag_with : order:Iter_dag.order -> t -> t Iter.tval iter_dag : t -> t Iter.tval map_shallow : state -> (t -> t) -> t -> tval pp : t Fmt.printerSidekick_base__Base_types.Tytype t = tytype state = unittype view = ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
type def = ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
val id : t -> intval view : t -> viewval bool : state -> tval real : state -> tval atomic : def -> t list -> tval id_of_def : def -> Sidekick_base.ID.tval atomic_uninterpreted : Sidekick_base.ID.t -> tval finite : t -> boolval set_finite : t -> bool -> unitval is_bool : t -> boolval is_uninterpreted : t -> boolval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval pp : t CCFormat.printermodule Fun : sig ... endSidekick_base__Base_types.TyTypes
type t = tytype state = unittype view = ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
type def = ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
val id : t -> intval view : t -> viewval bool : state -> tval real : state -> tval atomic : def -> t list -> tval id_of_def : def -> Sidekick_base.ID.tval atomic_uninterpreted : Sidekick_base.ID.t -> tval finite : t -> boolval set_finite : t -> bool -> unitval is_bool : t -> boolval is_uninterpreted : t -> boolval equal : t -> t -> boolval compare : t -> t -> intval hash : t -> intval pp : t CCFormat.printermodule Fun : sig ... endSidekick_base__Base_types.Valuetype t = value = | V_bool of bool | ||||
| V_element of {
} | ||||
| V_cstor of {
} | ||||
| V_custom of {
} | ||||
| V_real of Q.t |
val true_ : tval false_ : tval bool : bool -> tval real : Q.t -> tval real_of_string : string -> tval mk_elt : Sidekick_base.ID.t -> Ty.t -> tval is_bool : t -> boolval is_true : t -> boolval is_false : t -> boolval cstor_app : cstor -> t list -> tval fresh : Term.t -> tval hash : t -> intval equal : t -> t -> boolval pp : t Fmt.printerSidekick_base__Base_types.ValueValues (used in models)
type t = value = | V_bool of bool | ||||
| V_element of {
} | ||||
| V_cstor of {
} | ||||
| V_custom of {
} | ||||
| V_real of Q.t |
val true_ : tval false_ : tval bool : bool -> tval real : Q.t -> tval real_of_string : string -> tval mk_elt : Sidekick_base.ID.t -> Ty.t -> tval is_bool : t -> boolval is_true : t -> boolval is_false : t -> boolval cstor_app : cstor -> t list -> tval fresh : Term.t -> tval hash : t -> intval equal : t -> t -> boolval pp : t Fmt.printerSidekick_base__Base_typesmodule CC_view = Sidekick_core.CC_viewtype lra_pred = Sidekick_arith_lra.Predicate.t = | Leq |
| Geq |
| Lt |
| Gt |
| Eq |
| Neq |
type lra_op = Sidekick_arith_lra.op = | Plus |
| Minus |
type ('num, 'a) lra_view = ('num, 'a) Sidekick_arith_lra.lra_view = | LRA_pred of lra_pred * 'a * 'a |
| LRA_op of lra_op * 'a * 'a |
| LRA_mult of 'num * 'a |
| LRA_const of 'num |
| LRA_simplex_var of 'a |
| LRA_simplex_pred of 'a * Sidekick_arith_lra.S_op.t * 'num |
| LRA_other of 'a |
type term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : term term_view; |
}and 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
and fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}and fun_view = | Fun_undef of fun_ty | |||||||
| Fun_select of select | |||||||
| Fun_cstor of cstor | |||||||
| Fun_is_a of cstor | |||||||
| Fun_def of {
} | Methods on the custom term view whose arguments are
|
and fun_ty = {fun_ty_args : ty list; |
fun_ty_ret : ty; |
}Function type
and ty = {mutable ty_id : int; |
ty_view : ty_view; |
}Hashconsed type
and ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
and ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
and data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}and cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}and select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}and value = | V_bool of bool | |||||
| V_element of {
} | a named constant, distinct from any other constant | ||||
| V_cstor of {
} | |||||
| V_custom of {
} | Custom value | ||||
| V_real of Q.t |
Semantic values, used for models (and possibly model-constructing calculi)
and value_custom_view = ..type definition = Sidekick_base.ID.t * ty * termtype statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
val term_equal_ : term -> term -> boolval term_hash_ : term -> intval term_cmp_ : term -> term -> intval fun_compare : fun_ -> fun_ -> intval pp_fun : CCFormat.t -> fun_ -> unitval id_of_fun : fun_ -> Sidekick_base.ID.tval eq_ty : ty -> ty -> boolval eq_cstor : cstor -> cstor -> boolval eq_value : value -> value -> boolval hash_value : value Sidekick_util.Hash.tval pp_value : value Sidekick_util.Util.printerval pp_db : Stdlib.Format.formatter -> (int * 'a) -> unitval pp_ty : ty Sidekick_util.Util.printerval string_of_lra_pred : lra_pred -> stringval pp_pred : Fmt.t -> lra_pred -> unitval string_of_lra_op : lra_op -> stringval pp_lra_op : Fmt.t -> lra_op -> unitval pp_term_view_gen : pp_id:(Fmt.t -> Sidekick_base.ID.t -> unit) -> pp_t:'a Fmt.printer -> Fmt.t -> 'a term_view -> unitval pp_term_top : ids:bool -> Fmt.t -> term -> unitval pp_term : Fmt.t -> term -> unitval pp_term_view : Fmt.t -> term term_view -> unitmodule Ty : sig ... endmodule Fun : sig ... endmodule Term_cell : sig ... endmodule Term : sig ... endmodule Value : sig ... endmodule Data : sig ... endmodule Select : sig ... endmodule Cstor : sig ... endmodule Statement : sig ... endSidekick_base__Base_typesBasic type definitions for Sidekick_base
module CC_view = Sidekick_core.CC_viewtype lra_pred = Sidekick_arith_lra.Predicate.t = | Leq |
| Geq |
| Lt |
| Gt |
| Eq |
| Neq |
type lra_op = Sidekick_arith_lra.op = | Plus |
| Minus |
type ('num, 'a) lra_view = ('num, 'a) Sidekick_arith_lra.lra_view = | LRA_pred of lra_pred * 'a * 'a |
| LRA_op of lra_op * 'a * 'a |
| LRA_mult of 'num * 'a |
| LRA_const of 'num |
| LRA_simplex_var of 'a |
| LRA_simplex_pred of 'a * Sidekick_arith_lra.S_op.t * 'num |
| LRA_other of 'a |
type term = {mutable term_id : int; |
mutable term_ty : ty; |
term_view : term term_view; |
}Term.
A term, with its own view, type, and a unique identifier. Do not create directly, see Term.
and 'a term_view = | Bool of bool |
| App_fun of fun_ * 'a Sidekick_util.IArray.t |
| Eq of 'a * 'a |
| Not of 'a |
| Ite of 'a * 'a * 'a |
| LRA of (Q.t, 'a) lra_view |
Shallow structure of a term.
A term is a DAG (direct acyclic graph) of nodes, each of which has a term view.
and fun_ = {fun_id : Sidekick_base.ID.t; |
fun_view : fun_view; |
}type of function symbols
and fun_view = | Fun_undef of fun_ty | |||||||
| Fun_select of select | |||||||
| Fun_cstor of cstor | |||||||
| Fun_is_a of cstor | |||||||
| Fun_def of {
} | Methods on the custom term view whose arguments are
|
and fun_ty = {fun_ty_args : ty list; |
fun_ty_ret : ty; |
}Function type
and ty = {mutable ty_id : int; |
ty_view : ty_view; |
}Hashconsed type
and ty_view = | Ty_bool | |||
| Ty_real | |||
| Ty_atomic of {
} |
and ty_def = | Ty_uninterpreted of Sidekick_base.ID.t | |||
| Ty_data of {
} | |||
| Ty_def of {
} |
and data = {data_id : Sidekick_base.ID.t; |
data_cstors : cstor Sidekick_base__.ID.Map.t lazy_t; |
data_as_ty : ty lazy_t; |
}and cstor = {cstor_id : Sidekick_base.ID.t; |
cstor_is_a : Sidekick_base.ID.t; |
mutable cstor_arity : int; |
cstor_args : select list lazy_t; |
cstor_ty_as_data : data; |
cstor_ty : ty lazy_t; |
}and select = {select_id : Sidekick_base.ID.t; |
select_cstor : cstor; |
select_ty : ty lazy_t; |
select_i : int; |
}and value = | V_bool of bool | |||||
| V_element of {
} | a named constant, distinct from any other constant | ||||
| V_cstor of {
} | |||||
| V_custom of {
} | Custom value | ||||
| V_real of Q.t |
Semantic values, used for models (and possibly model-constructing calculi)
and value_custom_view = ..type definition = Sidekick_base.ID.t * ty * termtype statement = | Stmt_set_logic of string |
| Stmt_set_option of string list |
| Stmt_set_info of string * string |
| Stmt_data of data list |
| Stmt_ty_decl of Sidekick_base.ID.t * int |
| Stmt_decl of Sidekick_base.ID.t * ty list * ty |
| Stmt_define of definition list |
| Stmt_assert of term |
| Stmt_assert_clause of term list |
| Stmt_check_sat of (bool * term) list |
| Stmt_exit |
val term_equal_ : term -> term -> boolval term_hash_ : term -> intval term_cmp_ : term -> term -> intval fun_compare : fun_ -> fun_ -> intval pp_fun : CCFormat.t -> fun_ -> unitval id_of_fun : fun_ -> Sidekick_base.ID.tval eq_ty : ty -> ty -> boolval eq_cstor : cstor -> cstor -> boolval eq_value : value -> value -> boolval hash_value : value Sidekick_util.Hash.tval pp_value : value Sidekick_util.Util.printerval pp_db : Stdlib.Format.formatter -> (int * 'a) -> unitval pp_ty : ty Sidekick_util.Util.printerval string_of_lra_pred : lra_pred -> stringval pp_pred : Fmt.t -> lra_pred -> unitval string_of_lra_op : lra_op -> stringval pp_lra_op : Fmt.t -> lra_op -> unitval pp_term_view_gen : pp_id:(Fmt.t -> Sidekick_base.ID.t -> unit) -> pp_t:'a Fmt.printer -> Fmt.t -> 'a term_view -> unitval pp_term_top : ids:bool -> Fmt.t -> term -> unitval pp_term : Fmt.t -> term -> unitval pp_term_view : Fmt.t -> term term_view -> unitmodule Ty : sig ... endTypes
module Fun : sig ... endFunction symbols
module Term_cell : sig ... endmodule Term : sig ... endTerm creation and manipulation
module Value : sig ... endValues (used in models)
module Data : sig ... endDatatypes
module Select : sig ... endDatatype selectors.
module Cstor : sig ... endDatatype constructors.
module Statement : sig ... endStatements.
Sidekick_base__IDval make : string -> tval makef : ('a, Stdlib.Format.formatter, unit, t) Stdlib.format4 -> 'aval copy : t -> tval id : t -> intval to_string : t -> stringval to_string_full : t -> stringval pp_name : t CCFormat.printermodule B : sig ... endSidekick_base__IDUnique Identifiers
val make : string -> tmake s creates a new identifier with name s and some internal information. It is different than any other identifier created before or after, even with the same name.
val makef : ('a, Stdlib.Format.formatter, unit, t) Stdlib.format4 -> 'amakef "foo %d bar %b" 42 true is like make (Format.asprintf "foo %d bar %b" 42 true).
val id : t -> intUnique integer counter for this identifier.
val to_string : t -> stringPrint identifier.
val to_string_full : t -> stringPrinter name and unique counter for this ID.
val pp_name : t CCFormat.printerSidekick_base__Model.Fun_interpretationtype t = {cases : Sidekick_base.Base_types.Value.t Val_map.t; |
default : Sidekick_base.Base_types.Value.t; |
}val default : t -> Sidekick_base.Base_types.Value.tval cases_list : t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) listval make : default:Sidekick_base.Base_types.Value.t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) list -> tSidekick_base__Model.Fun_interpretationModel for function symbols.
Function models are a finite map from argument tuples to values, accompanied with a default value that every other argument tuples map to. In other words, it's of the form:
lambda x y. if (x=vx1,y=vy1) then v1 else if … then … else vdefault
type t = {cases : Sidekick_base.Base_types.Value.t Val_map.t; |
default : Sidekick_base.Base_types.Value.t; |
}val default : t -> Sidekick_base.Base_types.Value.tval cases_list : t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) listval make : default:Sidekick_base.Base_types.Value.t -> (Sidekick_base.Base_types.Value.t list * Sidekick_base.Base_types.Value.t) list -> tSidekick_base__Modelmodule Val_map : sig ... endmodule Fun_interpretation : sig ... endtype t = {values : Sidekick_base.Base_types.Value.t Sidekick_base__.Base_types.Term.Map.t; |
funs : Fun_interpretation.t Sidekick_base__.Base_types.Fun.Map.t; |
}val empty : tval add : Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t -> t -> tval mem : Sidekick_base.Base_types.Term.t -> t -> boolval find : Sidekick_base.Base_types.Term.t -> t -> Sidekick_base.Base_types.Value.t optionval merge : t -> t -> tval pp : t CCFormat.printerval eval : t -> Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t optionSidekick_base__ModelModels
A model is a solution to the satisfiability question, created by the SMT solver when it proves the formula to be satisfiable.
A model gives a value to each term of the original formula(s), in such a way that the formula(s) is true when the term is replaced by its value.
module Val_map : sig ... endmodule Fun_interpretation : sig ... endModel for function symbols.
type t = {values : Sidekick_base.Base_types.Value.t Sidekick_base__.Base_types.Term.Map.t; |
funs : Fun_interpretation.t Sidekick_base__.Base_types.Fun.Map.t; |
}Model
val empty : tEmpty model
val add : Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t -> t -> tval mem : Sidekick_base.Base_types.Term.t -> t -> boolval find : Sidekick_base.Base_types.Term.t -> t -> Sidekick_base.Base_types.Value.t optionval merge : t -> t -> tval pp : t CCFormat.printerval eval : t -> Sidekick_base.Base_types.Term.t -> Sidekick_base.Base_types.Value.t optioneval m t tries to evaluate term t in the model. If it succeeds, the value is returned, otherwise None is.
Sidekick_base__Proofinclude Sidekick_core.PROOF with type term = Sidekick_base.Base_types.Term.t and type ty = Sidekick_base.Base_types.Ty.ttype term = Sidekick_base.Base_types.Term.ttype ty = Sidekick_base.Base_types.Ty.ttype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endval isa_split : ty -> term Iter.t -> tval isa_disj : ty -> term -> term -> tval cstor_inj : Sidekick_base.Base_types.Cstor.t -> int -> term list -> term list -> tval bool_eq : term -> term -> tval bool_c : string -> term list -> tval ite_true : term -> tval ite_false : term -> tval lra : lit Iter.t -> tval lra_l : lit list -> tSidekick_base__ProofProofs of unsatisfiability
Proofs are used in sidekick when the problem is found unsatisfiable. A proof collects inferences made by the solver into a list of steps, each with its own kind of justification (e.g. "by congruence"), and outputs it in some kind of format.
Currently we target Quip as an experimental proof backend.
include Sidekick_core.PROOF with type term = Sidekick_base.Base_types.Term.t and type ty = Sidekick_base.Base_types.Ty.ttype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = Sidekick_base.Base_types.Term.ttype ty = Sidekick_base.Base_types.Ty.ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endval isa_split : ty -> term Iter.t -> tval isa_disj : ty -> term -> term -> tval cstor_inj : Sidekick_base.Base_types.Cstor.t -> int -> term list -> term list -> tval bool_eq : term -> term -> tval bool_c : string -> term list -> tval ite_true : term -> tval ite_false : term -> tval lra : lit Iter.t -> tval lra_l : lit list -> tSolver.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSolver.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSolver.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSolver.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSolver.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSolver.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... end1-A.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... end1-A.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSI.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSI.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSidekick_coreTheories and concrete solvers rely on an environment that defines several important types:
In this module we define most of the main signatures used throughout Sidekick.
module CC_view : sig ... endView terms through the lens of the Congruence Closure
module type TERM = sig ... endMain representation of Terms and Types
module type PROOF = sig ... endmodule type LIT = sig ... endLiterals
module type CC_ACTIONS = sig ... endActions provided to the congruence closure.
module type CC_ARG = sig ... endArguments to a congruence closure's implementation
module type CC_S = sig ... endSignature of the congruence closure
module type SOLVER_INTERNAL = sig ... endA view of the solver from a theory's point of view.
module type SOLVER = sig ... endUser facing view of the solver
module type MONOID_ARG = sig ... endHelper for the congruence closure
module Monoid_of_repr : functor (M : MONOID_ARG) -> sig ... endState for a per-equivalence-class monoid.
Sidekick_coreTheories and concrete solvers rely on an environment that defines several important types:
In this module we define most of the main signatures used throughout Sidekick.
module CC_view : sig ... endView terms through the lens of the Congruence Closure
module type TERM = sig ... endMain representation of Terms and Types
module type PROOF = sig ... endProofs of unsatisfiability
module type LIT = sig ... endLiterals
module type CC_ACTIONS = sig ... endActions provided to the congruence closure.
module type CC_ARG = sig ... endArguments to a congruence closure's implementation
module type CC_S = sig ... endSignature of the congruence closure
module type SOLVER_INTERNAL = sig ... endA view of the solver from a theory's point of view.
module type SOLVER = sig ... endUser facing view of the solver
module type MONOID_ARG = sig ... endHelper for the congruence closure
module Monoid_of_repr : functor (M : MONOID_ARG) -> sig ... endState for a per-equivalence-class monoid.
CC_ACTIONS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endCC_ACTIONS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endCC_ARG.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endCC_ARG.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endCC_S.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endCC_S.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSI.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSI.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSidekick_core.PROOFtype termtype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSidekick_core.PROOFProofs of unsatisfiability
type tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type termtype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSOLVER.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSOLVER.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSOLVER_INTERNAL.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endSOLVER_INTERNAL.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... end1-A.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... end1-A.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endARG.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endARG.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype term = T.Term.ttype tytype ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endS.Ptype tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term = T.Term.ttype tytype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> boolval stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of |- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting using refl t is useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... end