summaryrefslogtreecommitdiff
path: root/src/compat/cvc3_compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/compat/cvc3_compat.h')
-rw-r--r--src/compat/cvc3_compat.h1568
1 files changed, 0 insertions, 1568 deletions
diff --git a/src/compat/cvc3_compat.h b/src/compat/cvc3_compat.h
deleted file mode 100644
index c9bde2fa0..000000000
--- a/src/compat/cvc3_compat.h
+++ /dev/null
@@ -1,1568 +0,0 @@
-/********************* */
-/*! \file cvc3_compat.h
- ** \verbatim
- ** Top contributors (to current version):
- ** Morgan Deters, Tim King, Aina Niemetz
- ** This file is part of the CVC4 project.
- ** Copyright (c) 2009-2018 by the authors listed in the file AUTHORS
- ** in the top-level source directory) and their institutional affiliations.
- ** All rights reserved. See the file COPYING in the top-level source
- ** directory for licensing information.\endverbatim
- **
- ** \brief CVC3 compatibility layer for CVC4
- **
- ** CVC3 compatibility layer for CVC4. This version was derived from
- ** the following CVS revisions of the following files in CVC3. If
- ** those files have a later revision, then this file might be out of
- ** date. Note that this compatibility layer is not safe for use in
- ** multithreaded contexts where multiple threads are accessing this
- ** compatibility layer functionality.
- **
- ** src/include/vc.h 1.36
- ** src/include/expr.h 1.39
- ** src/include/command_line_flags.h 1.3
- ** src/include/queryresult.h 1.2
- ** src/include/formula_value.h 1.1
- **/
-
-#include "cvc4_public.h"
-
-#ifndef __CVC4__CVC3_COMPAT_H
-#define __CVC4__CVC3_COMPAT_H
-
-// keep the CVC3 include guard also
-#if defined(_cvc3__include__vc_h_) || \
- defined(_cvc3__expr_h_) || \
- defined(_cvc3__command_line_flags_h_) || \
- defined(_cvc3__include__queryresult_h_) || \
- defined(_cvc3__include__formula_value_h_)
-
-#error "A CVC3 header file was included before CVC4's cvc3_compat.h header. Please include cvc3_compat.h rather than any CVC3 headers."
-
-#else
-
-// define these so the files are skipped if the user #includes them too
-#define _cvc3__expr_h_
-#define _cvc3__include__vc_h_
-#define _cvc3__command_line_flags_h_
-#define _cvc3__include__queryresult_h_
-#define _cvc3__include__formula_value_h_
-
-#include <stdlib.h>
-
-#include <map>
-#include <string>
-#include <unordered_map>
-#include <utility>
-
-#include "base/exception.h"
-#include "expr/expr.h"
-#include "expr/expr_manager.h"
-#include "expr/type.h"
-#include "parser/parser.h"
-#include "smt/smt_engine.h"
-#include "util/integer.h"
-#include "util/rational.h"
-
-//class CInterface;
-
-namespace CVC3 {
-
-const CVC4::Kind EQ = CVC4::kind::EQUAL;
-const CVC4::Kind LE = CVC4::kind::LEQ;
-const CVC4::Kind GE = CVC4::kind::GEQ;
-const CVC4::Kind DIVIDE = CVC4::kind::DIVISION;
-const CVC4::Kind BVLT = CVC4::kind::BITVECTOR_ULT;
-const CVC4::Kind BVLE = CVC4::kind::BITVECTOR_ULE;
-const CVC4::Kind BVGT = CVC4::kind::BITVECTOR_UGT;
-const CVC4::Kind BVGE = CVC4::kind::BITVECTOR_UGE;
-const CVC4::Kind BVPLUS = CVC4::kind::BITVECTOR_PLUS;
-const CVC4::Kind BVSUB = CVC4::kind::BITVECTOR_SUB;
-const CVC4::Kind BVCONST = CVC4::kind::CONST_BITVECTOR;
-const CVC4::Kind EXTRACT = CVC4::kind::BITVECTOR_EXTRACT;
-const CVC4::Kind CONCAT = CVC4::kind::BITVECTOR_CONCAT;
-
-std::string int2string(int n) CVC4_PUBLIC;
-
-//! Different types of command line flags
-typedef enum CVC4_PUBLIC {
- CLFLAG_NULL,
- CLFLAG_BOOL,
- CLFLAG_INT,
- CLFLAG_STRING,
- CLFLAG_STRVEC //!< Vector of pair<string, bool>
-} CLFlagType;
-
-std::ostream& operator<<(std::ostream& out, CLFlagType clft) CVC4_PUBLIC;
-
-/*!
- Class CLFlag (for Command Line Flag)
-
- Author: Sergey Berezin
-
- Date: Fri May 30 14:10:48 2003
-
- This class implements a data structure to hold a value of a single
- command line flag.
-*/
-class CVC4_PUBLIC CLFlag {
- //! Type of the argument
- CLFlagType d_tp;
- //! The argument
- union {
- bool b;
- int i;
- std::string* s;
- std::vector<std::pair<std::string,bool> >* sv;
- } d_data;
-
-public:
-
- //! Constructor for a boolean flag
- CLFlag(bool b, const std::string& help, bool display = true);
- //! Constructor for an integer flag
- CLFlag(int i, const std::string& help, bool display = true);
- //! Constructor for a string flag
- CLFlag(const std::string& s, const std::string& help, bool display = true);
- //! Constructor for a string flag from char*
- CLFlag(const char* s, const std::string& help, bool display = true);
- //! Constructor for a vector flag
- CLFlag(const std::vector<std::pair<std::string,bool> >& sv,
- const std::string& help, bool display = true);
- //! Default constructor
- CLFlag();
- //! Copy constructor
- CLFlag(const CLFlag& f);
- //! Destructor
- ~CLFlag();
-
- //! Assignment from another flag
- CLFlag& operator=(const CLFlag& f);
- //! Assignment of a boolean value
- /*! The flag must already have the right type */
- CLFlag& operator=(bool b);
- //! Assignment of an integer value
- /*! The flag must already have the right type */
- CLFlag& operator=(int i);
- //! Assignment of a string value
- /*! The flag must already have a string type. */
- CLFlag& operator=(const std::string& s);
- //! Assignment of an string value from char*
- /*! The flag must already have a string type. */
- CLFlag& operator=(const char* s);
- //! Assignment of a string value with a boolean tag to a vector flag
- /*! The flag must already have a vector type. The pair of
- <string,bool> will be appended to the vector. */
- CLFlag& operator=(const std::pair<std::string,bool>& p);
- //! Assignment of a vector value
- /*! The flag must already have a vector type. */
- CLFlag& operator=(const std::vector<std::pair<std::string,bool> >& sv);
-
- // Accessor methods
- //! Return the type of the flag
- CLFlagType getType() const;
- /*! @brief Return true if the flag was modified from the default
- value (e.g. set on the command line) */
- bool modified() const;
- //! Return true if flag should be displayed in regular help
- bool display() const;
-
- // The value accessors return a reference. For the system-wide
- // flags, this reference will remain valid throughout the run of the
- // program, even if the flag's value changes. So, the reference can
- // be cached, and the value can be checked directly (which is more
- // efficient).
- const bool& getBool() const;
-
- const int& getInt() const;
-
- const std::string& getString() const;
-
- const std::vector<std::pair<std::string,bool> >& getStrVec() const;
-
- const std::string& getHelp() const;
-
-};/* class CLFlag */
-
-///////////////////////////////////////////////////////////////////////
-// Class CLFlag (for Command Line Flag)
-//
-// Author: Sergey Berezin
-// Date: Fri May 30 14:10:48 2003
-//
-// Database of command line flags.
-///////////////////////////////////////////////////////////////////////
-
-class CVC4_PUBLIC CLFlags {
- typedef std::map<std::string, CLFlag> FlagMap;
- FlagMap d_map;
-
-public:
- // Public methods
- // Add a new flag. The name must be a complete flag name.
- void addFlag(const std::string& name, const CLFlag& f);
- // Count how many flags match the name prefix
- size_t countFlags(const std::string& name) const;
- // Match the name prefix and add all the matching names to the vector
- size_t countFlags(const std::string& name,
- std::vector<std::string>& names) const;
- // Retrieve an existing flag. The 'name' must be a full name of an
- // existing flag.
- const CLFlag& getFlag(const std::string& name) const;
-
- const CLFlag& operator[](const std::string& name) const;
-
- // Setting the flag to a new value, but preserving the help string.
- // The 'name' prefix must uniquely resolve to an existing flag.
- void setFlag(const std::string& name, const CLFlag& f);
-
- // Variants of setFlag for all the types
- void setFlag(const std::string& name, bool b);
- void setFlag(const std::string& name, int i);
- void setFlag(const std::string& name, const std::string& s);
- void setFlag(const std::string& name, const char* s);
- void setFlag(const std::string& name, const std::pair<std::string, bool>& p);
- void setFlag(const std::string& name,
- const std::vector<std::pair<std::string, bool> >& sv);
-
-};/* class CLFlags */
-
-class CVC4_PUBLIC ExprManager;
-class CVC4_PUBLIC Context;
-class CVC4_PUBLIC Proof {};
-class CVC4_PUBLIC Theorem {};
-
-namespace api {
-class CVC4_PUBLIC Solver;
-}
-using CVC4::InputLanguage;
-using CVC4::Integer;
-using CVC4::Rational;
-using CVC4::Exception;
-using CVC4::Cardinality;
-using namespace CVC4::kind;
-
-typedef size_t ExprIndex;
-typedef CVC4::TypeCheckingException TypecheckException;
-typedef size_t Unsigned;
-
-static const int READ = ::CVC4::kind::SELECT;
-static const int WRITE = ::CVC4::kind::STORE;
-
-// CVC4 has a more sophisticated Cardinality type;
-// but we can support comparison against CVC3's more
-// coarse-grained Cardinality.
-enum CVC4_PUBLIC CVC3CardinalityKind {
- CARD_FINITE,
- CARD_INFINITE,
- CARD_UNKNOWN
-};/* enum CVC3CardinalityKind */
-
-std::ostream& operator<<(std::ostream& out, CVC3CardinalityKind c) CVC4_PUBLIC;
-
-bool operator==(const Cardinality& c, CVC3CardinalityKind d) CVC4_PUBLIC;
-bool operator==(CVC3CardinalityKind d, const Cardinality& c) CVC4_PUBLIC;
-bool operator!=(const Cardinality& c, CVC3CardinalityKind d) CVC4_PUBLIC;
-bool operator!=(CVC3CardinalityKind d, const Cardinality& c) CVC4_PUBLIC;
-
-class CVC4_PUBLIC Expr;
-
-template <class T>
-class CVC4_PUBLIC ExprMap : public std::map<Expr, T> {
-};/* class ExprMap<T> */
-
-template <class T>
-class CVC4_PUBLIC ExprHashMap : public std::unordered_map<Expr, T, CVC4::ExprHashFunction> {
-public:
- void insert(Expr a, Expr b);
-};/* class ExprHashMap<T> */
-
-class CVC4_PUBLIC Type : public CVC4::Type {
-public:
- Type();
- Type(const CVC4::Type& type);
- Type(const Type& type);
- Expr getExpr() const;
-
- // Reasoning about children
- int arity() const;
- Type operator[](int i) const;
-
- // Core testers
- bool isBool() const;
- bool isSubtype() const;
- //! Return cardinality of type
- Cardinality card() const;
- //! Return nth (starting with 0) element in a finite type
- /*! Returns NULL Expr if unable to compute nth element
- */
- Expr enumerateFinite(Unsigned n) const;
- //! Return size of a finite type; returns 0 if size cannot be determined
- Unsigned sizeFinite() const;
-
- // Core constructors
- static Type typeBool(ExprManager* em);
- static Type funType(const std::vector<Type>& typeDom, const Type& typeRan);
- Type funType(const Type& typeRan) const;
-
-};/* class CVC3::Type */
-
-class CVC4_PUBLIC Expr;
-typedef Expr Op;
-
-/**
- * Expr class for CVC3 compatibility layer.
- *
- * This class is identical to (and convertible to/from) a CVC4 Expr,
- * except that a few additional functions are supported to provide
- * naming compatibility with CVC3.
- */
-class CVC4_PUBLIC Expr : public CVC4::Expr {
-public:
- typedef CVC4::Expr::const_iterator iterator;
-
- Expr();
- Expr(const Expr& e);
- Expr(const CVC4::Expr& e);
- Expr(ExprManager* em, CVC4::Kind k);
-
- // Compound expression constructors
- Expr eqExpr(const Expr& right) const;
- Expr notExpr() const;
- Expr negate() const; // avoid double-negatives
- Expr andExpr(const Expr& right) const;
- Expr orExpr(const Expr& right) const;
- Expr iteExpr(const Expr& thenpart, const Expr& elsepart) const;
- Expr iffExpr(const Expr& right) const;
- Expr impExpr(const Expr& right) const;
- Expr xorExpr(const Expr& right) const;
-
- Expr substExpr(const std::vector<Expr>& oldTerms,
- const std::vector<Expr>& newTerms) const;
- Expr substExpr(const ExprHashMap<Expr>& oldToNew) const;
-
- Expr operator!() const;
- Expr operator&&(const Expr& right) const;
- Expr operator||(const Expr& right) const;
-
- static size_t hash(const Expr& e);
-
- size_t hash() const;
-
- // Core expression testers
-
- bool isFalse() const;
- bool isTrue() const;
- bool isBoolConst() const;
- bool isVar() const;
- bool isBoundVar() const;
- bool isString() const;
- bool isSymbol() const;
- bool isTerm() const;
- bool isType() const;
- bool isClosure() const;
- bool isQuantifier() const;
- bool isForall() const;
- bool isExists() const;
- bool isLambda() const;
- bool isApply() const;
- bool isTheorem() const;
- bool isConstant() const;
- bool isRawList() const;
-
- bool isAtomic() const;
- bool isAtomicFormula() const;
- bool isAbsAtomicFormula() const;
- bool isLiteral() const;
- bool isAbsLiteral() const;
- bool isBoolConnective() const;
- bool isPropLiteral() const;
- bool isPropAtom() const;
-
- std::string getName() const;
- std::string getUid() const;
-
- std::string getString() const;
- std::vector<Expr> getVars() const;
- Expr getExistential() const;
- int getBoundIndex() const;
- Expr getBody() const;
- Theorem getTheorem() const;
-
- bool isEq() const;
- bool isNot() const;
- bool isAnd() const;
- bool isOr() const;
- bool isITE() const;
- bool isIff() const;
- bool isImpl() const;
- bool isXor() const;
-
- bool isRational() const;
- bool isSkolem() const;
-
- const Rational& getRational() const;
-
- Op mkOp() const;
- Op getOp() const;
- Expr getOpExpr() const;
- int getOpKind() const;
- Expr getExpr() const;// since people are used to doing getOp().getExpr() in CVC3
-
- //! Get the manual triggers of the closure Expr
- std::vector< std::vector<Expr> > getTriggers() const;
-
- // Get the expression manager. The expression must be non-null.
- ExprManager* getEM() const;
-
- // Return a ref to the vector of children.
- std::vector<Expr> getKids() const;
-
- // Get the index field
- ExprIndex getIndex() const;
-
- // Return the number of children. Note, that an application of a
- // user-defined function has the arity of that function (the number
- // of arguments), and the function name itself is part of the
- // operator.
- int arity() const;
-
- // Return the ith child. As with arity, it's also the ith argument
- // in function application.
- Expr operator[](int i) const;
-
- //! Remove leading NOT if any
- Expr unnegate() const;
-
- // Check if Expr is not Null
- bool isInitialized() const;
-
- //! Get the type. Recursively compute if necessary
- Type getType() const;
- //! Look up the current type. Do not recursively compute (i.e. may be NULL)
- Type lookupType() const;
-
- //! Pretty-print the expression
- void pprint() const;
- //! Pretty-print without dagifying
- void pprintnodag() const;
-
-};/* class CVC3::Expr */
-
-bool isArrayLiteral(const Expr&) CVC4_PUBLIC;
-
-class CVC4_PUBLIC ExprManager : public CVC4::ExprManager {
-public:
- std::string getKindName(int kind);
- //! Get the input language for printing
- InputLanguage getInputLang() const;
- //! Get the output language for printing
- InputLanguage getOutputLang() const;
-};/* class CVC3::ExprManager */
-
-typedef CVC4::Statistics Statistics;
-
-#define PRESENTATION_LANG ::CVC4::language::input::LANG_CVC4
-#define SMTLIB_LANG ::CVC4::language::input::LANG_SMTLIB_V1
-#define SMTLIB_V2_LANG ::CVC4::language::input::LANG_SMTLIB_V2
-#define TPTP_LANG ::CVC4::language::input::LANG_TPTP
-#define AST_LANG ::CVC4::language::input::LANG_AST
-
-/*****************************************************************************/
-/*
- * Type for result of queries. VALID and UNSATISFIABLE are treated as
- * equivalent, as are SATISFIABLE and INVALID.
- */
-/*****************************************************************************/
-typedef enum CVC4_PUBLIC QueryResult {
- SATISFIABLE = 0,
- INVALID = 0,
- VALID = 1,
- UNSATISFIABLE = 1,
- ABORT,
- UNKNOWN
-} QueryResult;
-
-std::ostream& operator<<(std::ostream& out, QueryResult qr);
-std::string QueryResultToString(QueryResult query_result);
-
-/*****************************************************************************/
-/*
- * Type for truth value of formulas.
- */
-/*****************************************************************************/
-typedef enum CVC4_PUBLIC FormulaValue {
- TRUE_VAL,
- FALSE_VAL,
- UNKNOWN_VAL
-} FormulaValue;
-
-std::ostream& operator<<(std::ostream& out, FormulaValue fv) CVC4_PUBLIC;
-
-/*****************************************************************************/
-/*!
- *\class ValidityChecker
- *\brief CVC3 API (compatibility layer for CVC4)
- *
- * All terms and formulas are represented as expressions using the Expr class.
- * The notion of a context is also important. A context is a "background" set
- * of formulas which are assumed to be true or false. Formulas can be added to
- * the context explicitly, using assertFormula, or they may be added as part of
- * processing a query command. At any time, the current set of formulas making
- * up the context can be retrieved using getAssumptions.
- */
-/*****************************************************************************/
-class CVC4_PUBLIC ValidityChecker {
-
- CLFlags* d_clflags;
- CVC4::Options d_options;
- std::unique_ptr<CVC4::api::Solver> d_solver;
- CVC3::ExprManager* d_em;
- std::map<CVC4::ExprManager*, CVC4::ExprManagerMapCollection> d_emmc;
- std::set<ValidityChecker*> d_reverseEmmc;
- CVC4::SmtEngine* d_smt;
- CVC4::parser::Parser* d_parserContext;
- std::vector<Expr> d_exprTypeMapRemove;
- unsigned d_stackLevel;
-
- friend class Type; // to reach in to d_exprTypeMapRemove
-
- typedef std::unordered_map<std::string, const CVC4::Datatype*> ConstructorMap;
- typedef std::unordered_map<std::string, std::pair<const CVC4::Datatype*, std::string>> SelectorMap;
-
- ConstructorMap d_constructors;
- SelectorMap d_selectors;
-
- ValidityChecker(const CLFlags& clflags);
-
- void setUpOptions(CVC4::Options& options, const CLFlags& clflags);
-
- // helper function for bitvectors
- Expr bvpad(int len, const Expr& e);
-
-public:
- //! Constructor
- ValidityChecker();
- //! Destructor
- virtual ~ValidityChecker();
-
- //! Return the set of command-line flags
- /*! The flags are returned by reference, and if modified, will have an
- immediate effect on the subsequent commands. Note that not all flags will
- have such an effect; some flags are used only at initialization time (like
- "sat"), and therefore, will not take effect if modified after
- ValidityChecker is created.
- */
- virtual CLFlags& getFlags() const;
- //! Force reprocessing of all flags
- virtual void reprocessFlags();
-
- /***************************************************************************/
- /*
- * Static methods
- */
- /***************************************************************************/
-
- //! Create the set of command line flags with default values;
- /*!
- \return the set of flags by value
- */
- static CLFlags createFlags();
- //! Create an instance of ValidityChecker
- /*!
- \param flags is the set of command line flags.
- */
- static ValidityChecker* create(const CLFlags& flags);
- //! Create an instance of ValidityChecker using default flag values.
- static ValidityChecker* create();
-
- /***************************************************************************/
- /*!
- *\name Type-related methods
- * Methods for creating and looking up types
- *\sa class Type
- *@{
- */
- /***************************************************************************/
-
- // Basic types
- virtual Type boolType(); //!< Create type BOOLEAN
-
- virtual Type realType(); //!< Create type REAL
-
- virtual Type intType(); //!< Create type INT
-
- //! Create a subrange type [l..r]
- /*! l and r can be Null; l=Null represents minus infinity, r=Null is
- * plus infinity.
- */
- virtual Type subrangeType(const Expr& l, const Expr& r);
-
- //! Creates a subtype defined by the given predicate
- /*!
- * \param pred is a predicate taking one argument of type T and returning
- * Boolean. The resulting type is a subtype of T whose elements x are those
- * satisfying the predicate pred(x).
- *
- * \param witness is an expression of type T for which pred holds (if a Null
- * expression is passed as a witness, cvc will try to prove \f$\exists x. pred(x))\f$.
- * if the witness check fails, a TypecheckException is thrown.
- */
- virtual Type subtypeType(const Expr& pred, const Expr& witness);
-
- // Tuple types
- //! 2-element tuple
- virtual Type tupleType(const Type& type0, const Type& type1);
-
- //! 3-element tuple
- virtual Type tupleType(const Type& type0, const Type& type1,
- const Type& type2);
- //! n-element tuple (from a vector of types)
- virtual Type tupleType(const std::vector<Type>& types);
-
- // Record types
- //! 1-element record
- virtual Type recordType(const std::string& field, const Type& type);
-
- //! 2-element record
- /*! Fields will be sorted automatically */
- virtual Type recordType(const std::string& field0, const Type& type0,
- const std::string& field1, const Type& type1);
- //! 3-element record
- /*! Fields will be sorted automatically */
- virtual Type recordType(const std::string& field0, const Type& type0,
- const std::string& field1, const Type& type1,
- const std::string& field2, const Type& type2);
- //! n-element record (fields and types must be of the same length)
- /*! Fields will be sorted automatically */
- virtual Type recordType(const std::vector<std::string>& fields,
- const std::vector<Type>& types);
-
- // Datatypes
-
- //! Single datatype, single constructor
- /*! The types are either type exressions (obtained from a type with
- * getExpr()) or string expressions containing the name of (one of) the
- * dataType(s) being defined. */
- virtual Type dataType(const std::string& name,
- const std::string& constructor,
- const std::vector<std::string>& selectors,
- const std::vector<Expr>& types);
-
- //! Single datatype, multiple constructors
- /*! The types are either type exressions (obtained from a type with
- * getExpr()) or string expressions containing the name of (one of) the
- * dataType(s) being defined. */
- virtual Type dataType(const std::string& name,
- const std::vector<std::string>& constructors,
- const std::vector<std::vector<std::string> >& selectors,
- const std::vector<std::vector<Expr> >& types);
-
- //! Multiple datatypes
- /*! The types are either type exressions (obtained from a type with
- * getExpr()) or string expressions containing the name of (one of) the
- * dataType(s) being defined. */
- virtual void dataType(const std::vector<std::string>& names,
- const std::vector<std::vector<std::string> >& constructors,
- const std::vector<std::vector<std::vector<std::string> > >& selectors,
- const std::vector<std::vector<std::vector<Expr> > >& types,
- std::vector<Type>& returnTypes);
-
- //! Create an array type (ARRAY typeIndex OF typeData)
- virtual Type arrayType(const Type& typeIndex, const Type& typeData);
-
- //! Create a bitvector type of length n
- virtual Type bitvecType(int n);
-
- //! Create a function type typeDom -> typeRan
- virtual Type funType(const Type& typeDom, const Type& typeRan);
-
- //! Create a function type (t1,t2,...,tn) -> typeRan
- virtual Type funType(const std::vector<Type>& typeDom, const Type& typeRan);
-
- //! Create named user-defined uninterpreted type
- virtual Type createType(const std::string& typeName);
-
- //! Create named user-defined interpreted type (type abbreviation)
- virtual Type createType(const std::string& typeName, const Type& def);
-
- //! Lookup a user-defined (uninterpreted) type by name. Returns Null if none.
- virtual Type lookupType(const std::string& typeName);
-
- /*@}*/ // End of Type-related methods
-
- /***************************************************************************/
- /*!
- *\name General Expr methods
- *\sa class Expr
- *\sa class ExprManager
- *@{
- */
- /***************************************************************************/
-
- //! Return the ExprManager
- virtual ExprManager* getEM();
-
- //! Create a variable with a given name and type
- /*!
- \param name is the name of the variable
- \param type is its type. The type cannot be a function type.
- \return an Expr representation of a new variable
- */
- virtual Expr varExpr(const std::string& name, const Type& type);
-
- //! Create a variable with a given name, type, and value
- virtual Expr varExpr(const std::string& name, const Type& type,
- const Expr& def);
-
- //! Get the variable associated with a name, and its type
- /*!
- \param name is the variable name
- \param type is where the type value is returned
-
- \return a variable by the name. If there is no such Expr, a NULL \
- Expr is returned.
- */
- virtual Expr lookupVar(const std::string& name, Type* type);
-
- //! Get the type of the Expr.
- virtual Type getType(const Expr& e);
-
- //! Get the largest supertype of the Expr.
- virtual Type getBaseType(const Expr& e);
-
- //! Get the largest supertype of the Type.
- virtual Type getBaseType(const Type& t);
-
- //! Get the subtype predicate
- virtual Expr getTypePred(const Type&t, const Expr& e);
-
- //! Create a string Expr
- virtual Expr stringExpr(const std::string& str);
-
- //! Create an ID Expr
- virtual Expr idExpr(const std::string& name);
-
- //! Create a list Expr
- /*! Intermediate representation for DP-specific expressions.
- * Normally, the first element of the list is a string Expr
- * representing an operator, and the rest of the list are the
- * arguments. For example,
- *
- * kids.push_back(vc->stringExpr("PLUS"));
- * kids.push_back(x); // x and y are previously created Exprs
- * kids.push_back(y);
- * Expr lst = vc->listExpr(kids);
- *
- * Or, alternatively (using its overloaded version):
- *
- * Expr lst = vc->listExpr("PLUS", x, y);
- *
- * or
- *
- * vector<Expr> summands;
- * summands.push_back(x); summands.push_back(y); ...
- * Expr lst = vc->listExpr("PLUS", summands);
- */
- virtual Expr listExpr(const std::vector<Expr>& kids);
-
- //! Overloaded version of listExpr with one argument
- virtual Expr listExpr(const Expr& e1);
-
- //! Overloaded version of listExpr with two arguments
- virtual Expr listExpr(const Expr& e1, const Expr& e2);
-
- //! Overloaded version of listExpr with three arguments
- virtual Expr listExpr(const Expr& e1, const Expr& e2, const Expr& e3);
-
- //! Overloaded version of listExpr with string operator and many arguments
- virtual Expr listExpr(const std::string& op,
- const std::vector<Expr>& kids);
-
- //! Overloaded version of listExpr with string operator and one argument
- virtual Expr listExpr(const std::string& op, const Expr& e1);
-
- //! Overloaded version of listExpr with string operator and two arguments
- virtual Expr listExpr(const std::string& op, const Expr& e1,
- const Expr& e2);
-
- //! Overloaded version of listExpr with string operator and three arguments
- virtual Expr listExpr(const std::string& op, const Expr& e1,
- const Expr& e2, const Expr& e3);
-
- //! Prints e to the standard output
- virtual void printExpr(const Expr& e);
-
- //! Prints e to the given ostream
- virtual void printExpr(const Expr& e, std::ostream& os);
-
- //! Parse an expression using a Theory-specific parser
- virtual Expr parseExpr(const Expr& e);
-
- //! Parse a type expression using a Theory-specific parser
- virtual Type parseType(const Expr& e);
-
- //! Import the Expr from another instance of ValidityChecker
- /*! When expressions need to be passed among several instances of
- * ValidityChecker, they need to be explicitly imported into the
- * corresponding instance using this method. The return result is
- * an identical expression that belongs to the current instance of
- * ValidityChecker, and can be safely used as part of more complex
- * expressions from the same instance.
- */
- virtual Expr importExpr(const Expr& e);
-
- //! Import the Type from another instance of ValidityChecker
- /*! \sa getType() */
- virtual Type importType(const Type& t);
-
- //! Parse a sequence of commands from a presentation language string
- virtual void cmdsFromString(const std::string& s,
- InputLanguage lang = PRESENTATION_LANG);
-
- //! Parse an expression from a presentation language string
- /*! Only PRESENTATION_LANG and SMTLIB_V2_LANG are supported. Any other
- * value for lang will raise an exception.
- */
- virtual Expr exprFromString(const std::string& e,
- InputLanguage lang = PRESENTATION_LANG);
-
- /*@}*/ // End of General Expr Methods
-
- /***************************************************************************/
- /*!
- *\name Core expression methods
- * Methods for manipulating core expressions
- *
- * Except for equality and ite, the children provided as arguments must be of
- * type Boolean.
- *@{
- */
- /***************************************************************************/
-
- //! Return TRUE Expr
- virtual Expr trueExpr();
-
- //! Return FALSE Expr
- virtual Expr falseExpr();
-
- //! Create negation
- virtual Expr notExpr(const Expr& child);
-
- //! Create 2-element conjunction
- virtual Expr andExpr(const Expr& left, const Expr& right);
-
- //! Create n-element conjunction
- virtual Expr andExpr(const std::vector<Expr>& children);
-
- //! Create 2-element disjunction
- virtual Expr orExpr(const Expr& left, const Expr& right);
-
- //! Create n-element disjunction
- virtual Expr orExpr(const std::vector<Expr>& children);
-
- //! Create Boolean implication
- virtual Expr impliesExpr(const Expr& hyp, const Expr& conc);
-
- //! Create left IFF right (boolean equivalence)
- virtual Expr iffExpr(const Expr& left, const Expr& right);
-
- //! Create an equality expression.
- /*!
- The two children must have the same type, and cannot be of type
- Boolean.
- */
- virtual Expr eqExpr(const Expr& child0, const Expr& child1);
-
- //! Create IF ifpart THEN thenpart ELSE elsepart ENDIF
- /*!
- \param ifpart must be of type Boolean.
- \param thenpart and \param elsepart must have the same type, which will
- also be the type of the ite expression.
- */
- virtual Expr iteExpr(const Expr& ifpart, const Expr& thenpart,
- const Expr& elsepart);
-
- /**
- * Create an expression asserting that all the children are different.
- * @param children the children to be asserted different
- */
- virtual Expr distinctExpr(const std::vector<Expr>& children);
-
- /*@}*/ // End of Core expression methods
-
- /***************************************************************************/
- /*!
- *\name User-defined (uninterpreted) function methods
- * Methods for manipulating uninterpreted function expressions
- *@{
- */
- /***************************************************************************/
-
- //! Create a named uninterpreted function with a given type
- /*!
- \param name is the new function's name (as ID Expr)
- \param type is a function type ( [range -> domain] )
- */
- virtual Op createOp(const std::string& name, const Type& type);
-
- //! Create a named user-defined function with a given type
- virtual Op createOp(const std::string& name, const Type& type,
- const Expr& def);
-
- //! Get the Op associated with a name, and its type
- /*!
- \param name is the operator name
- \param type is where the type value is returned
-
- \return an Op by the name. If there is no such Op, a NULL \
- Op is returned.
- */
- virtual Op lookupOp(const std::string& name, Type* type);
-
- //! Unary function application (op must be of function type)
- virtual Expr funExpr(const Op& op, const Expr& child);
-
- //! Binary function application (op must be of function type)
- virtual Expr funExpr(const Op& op, const Expr& left, const Expr& right);
-
- //! Ternary function application (op must be of function type)
- virtual Expr funExpr(const Op& op, const Expr& child0,
- const Expr& child1, const Expr& child2);
-
- //! n-ary function application (op must be of function type)
- virtual Expr funExpr(const Op& op, const std::vector<Expr>& children);
-
- /*@}*/ // End of User-defined (uninterpreted) function methods
-
- /***************************************************************************/
- /*!
- *\name Arithmetic expression methods
- * Methods for manipulating arithmetic expressions
- *
- * These functions create arithmetic expressions. The children provided
- * as arguments must be of type Real.
- *@{
- */
- /***************************************************************************/
-
- /*!
- * Add the pair of variables to the variable ordering for aritmetic solving.
- * Terms that are not arithmetic will be ignored.
- * \param smaller the smaller variable
- * \param bigger the bigger variable
- */
- virtual bool addPairToArithOrder(const Expr& smaller, const Expr& bigger);
-
- //! Create a rational number with numerator n and denominator d.
- /*!
- \param n the numerator
- \param d the denominator, cannot be 0.
- */
- virtual Expr ratExpr(int n, int d = 1);
-
- //! Create a rational number with numerator n and denominator d.
- /*!
- Here n and d are given as strings. They are converted to
- arbitrary-precision integers according to the given base.
- */
- virtual Expr ratExpr(const std::string& n, const std::string& d, int base);
-
- //! Create a rational from a single string.
- /*!
- \param n can be a string containing an integer, a pair of integers
- "nnn/ddd", or a number in the fixed or floating point format.
- \param base is the base in which to interpret the string.
- */
- virtual Expr ratExpr(const std::string& n, int base = 10);
-
- //! Unary minus.
- virtual Expr uminusExpr(const Expr& child);
-
- //! Create 2-element sum (left + right)
- virtual Expr plusExpr(const Expr& left, const Expr& right);
-
- //! Create n-element sum
- virtual Expr plusExpr(const std::vector<Expr>& children);
-
- //! Make a difference (left - right)
- virtual Expr minusExpr(const Expr& left, const Expr& right);
-
- //! Create a product (left * right)
- virtual Expr multExpr(const Expr& left, const Expr& right);
-
- //! Create a power expression (x ^ n); n must be integer
- virtual Expr powExpr(const Expr& x, const Expr& n);
-
- //! Create expression x / y
- virtual Expr divideExpr(const Expr& numerator, const Expr& denominator);
-
- //! Create (left < right)
- virtual Expr ltExpr(const Expr& left, const Expr& right);
-
- //! Create (left <= right)
- virtual Expr leExpr(const Expr& left, const Expr& right);
-
- //! Create (left > right)
- virtual Expr gtExpr(const Expr& left, const Expr& right);
-
- //! Create (left >= right)
- virtual Expr geExpr(const Expr& left, const Expr& right);
-
- /*@}*/ // End of Arithmetic expression methods
-
- /***************************************************************************/
- /*!
- *\name Record expression methods
- * Methods for manipulating record expressions
- *@{
- */
- /***************************************************************************/
-
- //! Create a 1-element record value (# field := expr #)
- /*! Fields will be sorted automatically */
- virtual Expr recordExpr(const std::string& field, const Expr& expr);
-
- //! Create a 2-element record value (# field0 := expr0, field1 := expr1 #)
- /*! Fields will be sorted automatically */
- virtual Expr recordExpr(const std::string& field0, const Expr& expr0,
- const std::string& field1, const Expr& expr1);
-
- //! Create a 3-element record value (# field_i := expr_i #)
- /*! Fields will be sorted automatically */
- virtual Expr recordExpr(const std::string& field0, const Expr& expr0,
- const std::string& field1, const Expr& expr1,
- const std::string& field2, const Expr& expr2);
-
- //! Create an n-element record value (# field_i := expr_i #)
- /*!
- * \param fields
- * \param exprs must be the same length as fields
- *
- * Fields will be sorted automatically
- */
- virtual Expr recordExpr(const std::vector<std::string>& fields,
- const std::vector<Expr>& exprs);
-
- //! Create record.field (field selection)
- /*! Create an expression representing the selection of a field from
- a record. */
- virtual Expr recSelectExpr(const Expr& record, const std::string& field);
-
- //! Record update; equivalent to "record WITH .field := newValue"
- /*! Notice the `.' before field in the presentation language (and
- the comment above); this is to distinguish it from datatype
- update.
- */
- virtual Expr recUpdateExpr(const Expr& record, const std::string& field,
- const Expr& newValue);
-
- /*@}*/ // End of Record expression methods
-
- /***************************************************************************/
- /*!
- *\name Array expression methods
- * Methods for manipulating array expressions
- *@{
- */
- /***************************************************************************/
-
- //! Create an expression array[index] (array access)
- /*! Create an expression for the value of array at the given index */
- virtual Expr readExpr(const Expr& array, const Expr& index);
-
- //! Array update; equivalent to "array WITH index := newValue"
- virtual Expr writeExpr(const Expr& array, const Expr& index,
- const Expr& newValue);
-
- /*@}*/ // End of Array expression methods
-
- /***************************************************************************/
- /*!
- *\name Bitvector expression methods
- * Methods for manipulating bitvector expressions
- *@{
- */
- /***************************************************************************/
-
- // Bitvector constants
- // From a string of digits in a given base
- virtual Expr newBVConstExpr(const std::string& s, int base = 2);
- // From a vector of bools
- virtual Expr newBVConstExpr(const std::vector<bool>& bits);
- // From a rational: bitvector is of length 'len', or the min. needed length when len=0.
- virtual Expr newBVConstExpr(const Rational& r, int len = 0);
-
- // Concat and extract
- virtual Expr newConcatExpr(const Expr& t1, const Expr& t2);
- virtual Expr newConcatExpr(const std::vector<Expr>& kids);
- virtual Expr newBVExtractExpr(const Expr& e, int hi, int low);
-
- // Bitwise Boolean operators: Negation, And, Nand, Or, Nor, Xor, Xnor
- virtual Expr newBVNegExpr(const Expr& t1);
-
- virtual Expr newBVAndExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVAndExpr(const std::vector<Expr>& kids);
-
- virtual Expr newBVOrExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVOrExpr(const std::vector<Expr>& kids);
-
- virtual Expr newBVXorExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVXorExpr(const std::vector<Expr>& kids);
-
- virtual Expr newBVXnorExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVXnorExpr(const std::vector<Expr>& kids);
-
- virtual Expr newBVNandExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVNorExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVCompExpr(const Expr& t1, const Expr& t2);
-
- // Unsigned bitvector inequalities
- virtual Expr newBVLTExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVLEExpr(const Expr& t1, const Expr& t2);
-
- // Signed bitvector inequalities
- virtual Expr newBVSLTExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVSLEExpr(const Expr& t1, const Expr& t2);
-
- // Sign-extend t1 to a total of len bits
- virtual Expr newSXExpr(const Expr& t1, int len);
-
- // Bitvector arithmetic: unary minus, plus, subtract, multiply
- virtual Expr newBVUminusExpr(const Expr& t1);
- virtual Expr newBVSubExpr(const Expr& t1, const Expr& t2);
- //! 'numbits' is the number of bits in the result
- virtual Expr newBVPlusExpr(int numbits, const std::vector<Expr>& k);
- virtual Expr newBVPlusExpr(int numbits, const Expr& t1, const Expr& t2);
- virtual Expr newBVMultExpr(int numbits,
- const Expr& t1, const Expr& t2);
-
- virtual Expr newBVUDivExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVURemExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVSDivExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVSRemExpr(const Expr& t1, const Expr& t2);
- virtual Expr newBVSModExpr(const Expr& t1, const Expr& t2);
-
- // Left shift by r bits: result is old size + r bits
- virtual Expr newFixedLeftShiftExpr(const Expr& t1, int r);
- // Left shift by r bits: result is same size as t1
- virtual Expr newFixedConstWidthLeftShiftExpr(const Expr& t1, int r);
- // Logical right shift by r bits: result is same size as t1
- virtual Expr newFixedRightShiftExpr(const Expr& t1, int r);
- // Left shift with shift parameter an arbitrary bit-vector expr
- virtual Expr newBVSHL(const Expr& t1, const Expr& t2);
- // Logical right shift with shift parameter an arbitrary bit-vector expr
- virtual Expr newBVLSHR(const Expr& t1, const Expr& t2);
- // Arithmetic right shift with shift parameter an arbitrary bit-vector expr
- virtual Expr newBVASHR(const Expr& t1, const Expr& t2);
- // Get value of BV Constant
- virtual Rational computeBVConst(const Expr& e);
-
- /*@}*/ // End of Bitvector expression methods
-
- /***************************************************************************/
- /*!
- *\name Other expression methods
- * Methods for manipulating other kinds of expressions
- *@{
- */
- /***************************************************************************/
-
- //! Tuple expression
- virtual Expr tupleExpr(const std::vector<Expr>& exprs);
-
- //! Tuple select; equivalent to "tuple.n", where n is an numeral (e.g. tup.5)
- virtual Expr tupleSelectExpr(const Expr& tuple, int index);
-
- //! Tuple update; equivalent to "tuple WITH index := newValue"
- virtual Expr tupleUpdateExpr(const Expr& tuple, int index,
- const Expr& newValue);
-
- //! Datatype constructor expression
- virtual Expr datatypeConsExpr(const std::string& constructor, const std::vector<Expr>& args);
-
- //! Datatype selector expression
- virtual Expr datatypeSelExpr(const std::string& selector, const Expr& arg);
-
- //! Datatype tester expression
- virtual Expr datatypeTestExpr(const std::string& constructor, const Expr& arg);
-
- //! Create a bound variable with a given name, unique ID (uid) and type
- /*!
- \param name is the name of the variable
- \param uid is the unique ID (a string), which must be unique for
- each variable
- \param type is its type. The type cannot be a function type.
- \return an Expr representation of a new variable
- */
- virtual Expr boundVarExpr(const std::string& name,
- const std::string& uid,
- const Type& type);
-
- //! Universal quantifier
- virtual Expr forallExpr(const std::vector<Expr>& vars, const Expr& body);
- //! Universal quantifier with a trigger
- virtual Expr forallExpr(const std::vector<Expr>& vars, const Expr& body,
- const Expr& trigger);
- //! Universal quantifier with a set of triggers.
- virtual Expr forallExpr(const std::vector<Expr>& vars, const Expr& body,
- const std::vector<Expr>& triggers);
- //! Universal quantifier with a set of multi-triggers.
- virtual Expr forallExpr(const std::vector<Expr>& vars, const Expr& body,
- const std::vector<std::vector<Expr> >& triggers);
-
- //! Set triggers for quantifier instantiation
- /*!
- * \param e the expression for which triggers are being set.
- * \param triggers Each item in triggers is a vector of Expr containing one
- * or more patterns. A pattern is a term or Atomic predicate sub-expression
- * of e. A vector containing more than one pattern is treated as a
- * multi-trigger. Patterns will be matched in the order they occur in
- * the vector.
- */
- virtual void setTriggers(const Expr& e, const std::vector<std::vector<Expr> > & triggers);
- //! Set triggers for quantifier instantiation (no multi-triggers)
- virtual void setTriggers(const Expr& e, const std::vector<Expr>& triggers);
- //! Set a single trigger for quantifier instantiation
- virtual void setTrigger(const Expr& e, const Expr& trigger);
- //! Set a single multi-trigger for quantifier instantiation
- virtual void setMultiTrigger(const Expr& e, const std::vector<Expr>& multiTrigger);
-
- //! Existential quantifier
- virtual Expr existsExpr(const std::vector<Expr>& vars, const Expr& body);
-
- //! Lambda-expression
- virtual Op lambdaExpr(const std::vector<Expr>& vars, const Expr& body);
-
- //! Transitive closure of a binary predicate
- virtual Op transClosure(const Op& op);
-
- //! Symbolic simulation expression
- /*!
- * \param f is the next state function (LAMBDA-expression)
- * \param s0 is the initial state
- * \param inputs is the vector of LAMBDA-expressions representing
- * the sequences of inputs to f
- * \param n is a constant, the number of cycles to run the simulation.
- */
- virtual Expr simulateExpr(const Expr& f, const Expr& s0,
- const std::vector<Expr>& inputs,
- const Expr& n);
-
- /*@}*/ // End of Other expression methods
-
- /***************************************************************************/
- /*!
- *\name Validity checking methods
- * Methods related to validity checking
- *
- * This group includes methods for asserting formulas, checking
- * validity in the given logical context, manipulating the scope
- * level of the context, etc.
- *@{
- */
- /***************************************************************************/
-
- //! Set the resource limit (0==unlimited, 1==exhausted).
- /*! Currently, the limit is the total number of processed facts. */
- virtual void setResourceLimit(unsigned limit);
-
- //! Set a time limit in tenth of a second,
- /*! counting the cpu time used by the current process from now on.
- * Currently, when the limit is reached, cvc3 tries to quickly
- * terminate, probably with the status unknown.
- */
- virtual void setTimeLimit(unsigned limit);
-
- //! Assert a new formula in the current context.
- /*! This creates the assumption e |- e. The formula must have Boolean type.
- */
- virtual void assertFormula(const Expr& e);
-
- //! Register an atomic formula of interest.
- /*! Registered atoms are tracked by the decision procedures. If one of them
- is deduced to be true or false, it is added to a list of implied literals.
- Implied literals can be retrieved with the getImpliedLiteral function */
- virtual void registerAtom(const Expr& e);
-
- //! Return next literal implied by last assertion. Null Expr if none.
- /*! Returned literals are either registered atomic formulas or their negation
- */
- virtual Expr getImpliedLiteral();
-
- //! Simplify e with respect to the current context
- virtual Expr simplify(const Expr& e);
-
- //! Check validity of e in the current context.
- /*! If it returns VALID, the scope and context are the same
- * as when called. If it returns INVALID, the context will be one which
- * falsifies the query. If it returns UNKNOWN, the context will falsify the
- * query, but the context may be inconsistent. Finally, if it returns
- * ABORT, the context will be one which satisfies as much as possible.
- *
- * \param e is the queried formula
- */
- virtual QueryResult query(const Expr& e);
-
- //! Check satisfiability of the expr in the current context.
- /*! Equivalent to query(!e) */
- virtual QueryResult checkUnsat(const Expr& e);
-
- //! Get the next model
- /*! This method should only be called after a query which returns
- INVALID. Its return values are as for query(). */
- virtual QueryResult checkContinue();
-
- //! Restart the most recent query with e as an additional assertion.
- /*! This method should only be called after a query which returns
- INVALID. Its return values are as for query(). */
- virtual QueryResult restart(const Expr& e);
-
- //! Returns to context immediately before last invalid query.
- /*! This method should only be called after a query which returns false.
- */
- virtual void returnFromCheck();
-
- //! Get assumptions made by the user in this and all previous contexts.
- /*! User assumptions are created either by calls to assertFormula or by a
- * call to query. In the latter case, the negated query is added as an
- * assumption.
- * \param assumptions should be empty on entry.
- */
- virtual void getUserAssumptions(std::vector<Expr>& assumptions);
-
- //! Get assumptions made internally in this and all previous contexts.
- /*! Internal assumptions are literals assumed by the sat solver.
- * \param assumptions should be empty on entry.
- */
- virtual void getInternalAssumptions(std::vector<Expr>& assumptions);
-
- //! Get all assumptions made in this and all previous contexts.
- /*! \param assumptions should be empty on entry.
- */
- virtual void getAssumptions(std::vector<Expr>& assumptions);
-
- //! Returns the set of assumptions used in the proof of queried formula.
- /*! It returns a subset of getAssumptions(). If the last query was false
- * or there has not yet been a query, it does nothing.
- * NOTE: this functionality is not supported yet
- * \param assumptions should be empty on entry.
- */
- virtual void getAssumptionsUsed(std::vector<Expr>& assumptions);
-
- virtual Expr getProofQuery();
-
-
- //! Return the internal assumptions that make the queried formula false.
- /*! This method should only be called after a query which returns
- false. It will try to return the simplest possible subset of
- the internal assumptions sufficient to make the queried expression
- false.
- \param assumptions should be empty on entry.
- \param inOrder if true, returns the assumptions in the order they
- were made. This is slightly more expensive than inOrder = false.
- */
- virtual void getCounterExample(std::vector<Expr>& assumptions,
- bool inOrder=true);
-
- //! Will assign concrete values to all user created variables
- /*! This function should only be called after a query which return false.
- */
- virtual void getConcreteModel(ExprMap<Expr> & m);
-
- //! If the result of the last query was UNKNOWN try to actually build the model
- //! to verify the result.
- /*! This function should only be called after a query which return unknown.
- */
- virtual QueryResult tryModelGeneration();
-
- //:ALEX: returns the current truth value of a formula
- // returns UNKNOWN_VAL if e is not associated
- // with a boolean variable in the SAT module,
- // i.e. if its value can not determined without search.
- virtual FormulaValue value(const Expr& e);
-
- //! Returns true if the current context is inconsistent.
- /*! Also returns a minimal set of assertions used to determine the
- inconsistency.
- \param assumptions should be empty on entry.
- */
- virtual bool inconsistent(std::vector<Expr>& assumptions);
-
- //! Returns true if the current context is inconsistent.
- virtual bool inconsistent();
-
- //! Returns true if the invalid result from last query() is imprecise
- /*!
- * Some decision procedures in CVC are incomplete (quantifier
- * elimination, non-linear arithmetic, etc.). If any incomplete
- * features were used during the last query(), and the result is
- * "invalid" (query() returns false), then this result is
- * inconclusive. It means that the system gave up the search for
- * contradiction at some point.
- */
- virtual bool incomplete();
-
- //! Returns true if the invalid result from last query() is imprecise
- /*!
- * \sa incomplete()
- *
- * The argument is filled with the reasons for incompleteness (they
- * are intended to be shown to the end user).
- */
- virtual bool incomplete(std::vector<std::string>& reasons);
-
- //! Returns the proof term for the last proven query
- /*! If there has not been a successful query, it should return a NULL proof
- */
- virtual Proof getProof();
-
- //! Evaluate an expression and return a concrete value in the model
- /*! If the last query was not invalid, should return NULL expr */
- virtual Expr getValue(const Expr& e);
-
- //! Returns the TCC of the last assumption or query
- /*! Returns Null if no assumptions or queries were performed. */
- virtual Expr getTCC();
-
- //! Return the set of assumptions used in the proof of the last TCC
- virtual void getAssumptionsTCC(std::vector<Expr>& assumptions);
-
- //! Returns the proof of TCC of the last assumption or query
- /*! Returns Null if no assumptions or queries were performed. */
- virtual Proof getProofTCC();
-
- //! After successful query, return its closure |- Gamma => phi
- /*! Turn a valid query Gamma |- phi into an implication
- * |- Gamma => phi.
- *
- * Returns Null if last query was invalid.
- */
- virtual Expr getClosure();
-
- //! Construct a proof of the query closure |- Gamma => phi
- /*! Returns Null if last query was Invalid. */
- virtual Proof getProofClosure();
-
- /*@}*/ // End of Validity checking methods
-
- /***************************************************************************/
- /*!
- *\name Context methods
- * Methods for manipulating contexts
- *
- * Contexts support stack-based push and pop. There are two
- * separate notions of the current context stack. stackLevel(), push(),
- * pop(), and popto() work with the user-level notion of the stack.
- *
- * scopeLevel(), pushScope(), popScope(), and poptoScope() work with
- * the internal stack which is more fine-grained than the user
- * stack.
- *
- * Do not use the scope methods unless you know what you are doing.
- * *@{
- */
- /***************************************************************************/
-
- //! Returns the current stack level. Initial level is 0.
- virtual int stackLevel();
-
- //! Checkpoint the current context and increase the scope level
- virtual void push();
-
- //! Restore the current context to its state at the last checkpoint
- virtual void pop();
-
- //! Restore the current context to the given stackLevel.
- /*!
- \param stackLevel should be greater than or equal to 0 and less
- than or equal to the current scope level.
- */
- virtual void popto(int stackLevel);
-
- //! Returns the current scope level. Initially, the scope level is 1.
- virtual int scopeLevel();
-
- /*! @brief Checkpoint the current context and increase the
- * <strong>internal</strong> scope level. Do not use unless you
- * know what you're doing!
- */
- virtual void pushScope();
-
- /*! @brief Restore the current context to its state at the last
- * <strong>internal</strong> checkpoint. Do not use unless you know
- * what you're doing!
- */
- virtual void popScope();
-
- //! Restore the current context to the given scopeLevel.
- /*!
- \param scopeLevel should be less than or equal to the current scope level.
-
- If scopeLevel is less than 1, then the current context is reset
- and the scope level is set to 1.
- */
- virtual void poptoScope(int scopeLevel);
-
- //! Get the current context
- virtual Context* getCurrentContext();
-
- //! Destroy and recreate validity checker: resets everything except for flags
- virtual void reset();
-
- //! Add an annotation to the current script - prints annot when translating
- virtual void logAnnotation(const Expr& annot);
-
- /*@}*/ // End of Context methods
-
- /***************************************************************************/
- /*!
- *\name Reading files
- * Methods for reading external files
- *@{
- */
- /***************************************************************************/
-
- //! Read and execute the commands from a file given by name ("" means stdin)
- virtual void loadFile(const std::string& fileName,
- InputLanguage lang = PRESENTATION_LANG,
- bool interactive = false,
- bool calledFromParser = false);
-
- //! Read and execute the commands from a stream
- virtual void loadFile(std::istream& is,
- InputLanguage lang = PRESENTATION_LANG,
- bool interactive = false);
-
- /*@}*/ // End of methods for reading files
-
- /***************************************************************************/
- /*!
- *\name Reporting Statistics
- * Methods for collecting and reporting run-time statistics
- *@{
- */
- /***************************************************************************/
-
- //! Get statistics object
- virtual Statistics getStatistics();
-
- //! Print collected statistics to stdout
- virtual void printStatistics();
-
- /*@}*/ // End of Statistics Methods
-
-};/* class ValidityChecker */
-
-template <class T>
-void ExprHashMap<T>::insert(Expr a, Expr b) {
- (*this)[a] = b;
-}
-
-// Comparison (the way that CVC3 does it)
-int compare(const Expr& e1, const Expr& e2);
-
-}/* CVC3 namespace */
-
-#endif /* _cvc3__include__vc_h_ */
-#endif /* __CVC4__CVC3_COMPAT_H */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback