(*
This file is part of the dpll(t) engine sammy
Copyright (C) 2004  The University of Iowa
George Hagen
                                                                                
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
                                                                                
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
                                                                                
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*)
                                                                                


(** Global data structures including the predicate database, constraint store, and "meta-states" used in backtracking assertions *)

val pred_db : Pred_db.pred_db
(** The system's predicate database *)

val cstore : Cstore.cstore
(** The system's constraint store *)

val add_base_state : Pred.pred list -> int -> unit 
(** Add a new base state to the system.  This should be called prior to 
adding any new clauses or assigning any predicates. *)

val augment_base_state : Pred.pred list -> int -> unit 
(** Augments the current base state with additional new predicates or clauses *)

val get_top_base_state : unit -> 
  (Pred.pred list * int * State.state)
(** Return the current base state information *)

val backtrack_base_state : int -> unit
(** Retract [n] [add_base_state] calls, removing any clauses or predicates that
were associated with those base states. *)

val backtrack_base_state_to_level : int -> unit
(** Retract [add_base_state] calls until the current level reaches [n], 
removing any clauses or predicates that were associated with those base states. *)

val clear_base_states : unit -> unit
(** Retract all [add_base_state] calls, remioving ant clauses or predicates
that were associated with those base states. *)
