Structure mlibClause
(* ========================================================================= *)
(* CLAUSE = ID + THEOREM + CONSTRAINTS *)
(* Copyright (c) 2002-2004 Joe Hurd. *)
(* ========================================================================= *)
signature mlibClause =
sig
type ('a,'b) maplet = ('a,'b) mlibUseful.maplet
type 'a pp = 'a mlibUseful.pp
type term = mlibTerm.term
type formula = mlibTerm.formula
type subst = mlibSubst.subst
type thm = mlibThm.thm
type termorder = mlibTermorder.termorder
type parameters =
{term_order : bool,
literal_order : bool,
order_stickiness : int, (* Stickiness of ordering constraints: 0..3 *)
termorder_parm : mlibTermorder.parameters}
type 'a parmupdate = ('a -> 'a) -> parameters -> parameters
val defaults : parameters
val update_term_order : bool parmupdate
val update_literal_order : bool parmupdate
val update_order_stickiness : int parmupdate
val update_termorder_parm : mlibTermorder.parameters parmupdate
type clause
(* Basic operations *)
type bits = {parm : parameters, id : int, thm : thm, order : termorder}
val mk_clause : parameters -> thm -> clause
val dest_clause : clause -> bits
val literals : clause -> formula list
val is_empty : clause -> bool
val dest_rewr : clause -> int * thm
val is_rewr : clause -> bool
val rebrand : parameters -> clause -> clause
(* Using ordering constraints to cut down the set of possible inferences *)
val largest_lits : clause -> (clause * int, formula) maplet list
val largest_eqs : clause -> (clause * int * bool, term) maplet list
val largest_tms : clause -> (clause * int * int list, term) maplet list
val drop_order : clause -> clause
(* Subsumption *)
val subsumes : clause -> clause -> bool
(* mlibClause rewriting *)
type rewrs
val empty : parameters -> rewrs
val size : rewrs -> int
val peek : rewrs -> int -> ((term * term) * mlibRewrite.orient) option
val add : clause -> rewrs -> rewrs
val reduce : rewrs -> rewrs * int list
val reduced : rewrs -> bool
val pp_rewrs : rewrs pp
(* Simplifying rules: these preserve the clause id *)
val INST : subst -> clause -> clause
val FRESH_VARS : clause -> clause
val NEQ_VARS : clause -> clause
val DEMODULATE : mlibUnits.units -> clause -> clause
val QREWRITE : rewrs -> clause -> clause
val REWRITE : rewrs -> clause -> clause
(* Ordered resolution and paramodulation: these generate new clause ids *)
val FACTOR : clause -> clause list
val RESOLVE : clause * int -> clause * int -> clause
val PARAMODULATE : clause * int * bool -> clause * int * int list -> clause
(* mlibClause derivations *)
datatype derivation =
Axiom
| mlibResolution of clause * clause
| Paramodulation of clause * clause
| Factor of clause
val derivation : clause -> derivation
(* Pretty printing *)
val show_id : bool ref
val show_constraint : bool ref
val pp_clause : clause pp
end
HOL 4, Kananaskis-14