. More...
#include <vc.h>
Inheritance diagram for CVCL::ValidityChecker:
class ExprManager
Except for equality and ite, the children provided as arguments must be of type Boolean.
These functions create arithmetic expressions. The children provided as arguments must be of type Real.
This group includes methods for asserting formulas, checking validity in the given logical context, manipulating the scope level of the context, etc.
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. *
Author: Clark Barrett
Created: Tue Nov 26 18:24:25 2002
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.
Definition at line 92 of file vc.h.
|
Constructor.
|
|
Destructor.
|
|
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. Implemented in CVCL::VCL. Referenced by CVCL::VCCmd::evaluateNext(), main(), CVCL::VCCmd::reportResult(), and sighandler(). |
|
Force reprocessing of all flags.
Implemented in CVCL::VCL. |
|
Create the set of command line flags with default values;.
Definition at line 71 of file vcl.cpp. References CVCL::CLFlags::addFlag(), and IF_DEBUG(). |
|
Create an instance of ValidityChecker.
|
|
Create an instance of ValidityChecker using default flag values.
Definition at line 235 of file vcl.cpp. References createFlags(). Referenced by main(). |
|
Create type BOOLEAN.
Implemented in CVCL::VCL. |
|
Create type REAL.
Implemented in CVCL::VCL. |
|
Create type INT.
Implemented in CVCL::VCL. |
|
Create a subrange type [l..r]. l and r can be Null; l=Null represents minus infinity, r=Null is plus infinity. Implemented in CVCL::VCL. |
|
Creates a subtype defined by the given predicate.
Implemented in CVCL::VCL. |
|
2-element tuple
Implemented in CVCL::VCL. |
|
3-element tuple
Implemented in CVCL::VCL. |
|
n-element tuple (from a vector of types)
Implemented in CVCL::VCL. |
|
1-element record
Implemented in CVCL::VCL. |
|
2-element record Fields will be sorted automatically Implemented in CVCL::VCL. |
|
3-element record Fields will be sorted automatically Implemented in CVCL::VCL. |
|
n-element record (fields and types must be of the same length) Fields will be sorted automatically Implemented in CVCL::VCL. |
|
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. Implemented in CVCL::VCL. |
|
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. Implemented in CVCL::VCL. |
|
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. Implemented in CVCL::VCL. |
|
Create an array type (ARRAY typeIndex OF typeData).
Implemented in CVCL::VCL. |
|
Create a function type typeDom -> typeRan.
Implemented in CVCL::VCL. |
|
Create a function type (t1,t2,...,tn) -> typeRan.
Implemented in CVCL::VCL. |
|
Create named user-defined uninterpreted type.
Implemented in CVCL::VCL. |
|
Create named user-defined interpreted type (type abbreviation).
Implemented in CVCL::VCL. |
|
Lookup a user-defined (uninterpreted) type by name.
Implemented in CVCL::VCL. |
|
Return the ExprManager.
Implemented in CVCL::VCL. Referenced by main(). |
|
Create a variable with a given name and type.
Implemented in CVCL::VCL. |
|
Create a variable with a given name, type, and value.
Implemented in CVCL::VCL. |
|
Create a bound variable with a given name, unique ID (uid) and type.
Implemented in CVCL::VCL. |
|
Get the variable associated with a name, and its type.
Implemented in CVCL::VCL. |
|
Get the type of the Expr.
Implemented in CVCL::VCL. |
|
Get the largest supertype of the Expr.
Implemented in CVCL::VCL. |
|
Get the largest supertype of the Type.
Implemented in CVCL::VCL. |
|
Get the subtype predicate.
Implemented in CVCL::VCL. |
|
Create a string Expr.
Implemented in CVCL::VCL. |
|
Create an ID Expr.
Implemented in CVCL::VCL. |
|
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); Implemented in CVCL::VCL. |
|
Overloaded version of listExpr with one argument.
Implemented in CVCL::VCL. |
|
Overloaded version of listExpr with two arguments.
Implemented in CVCL::VCL. |
|
Overloaded version of listExpr with three arguments.
Implemented in CVCL::VCL. |
|
Overloaded version of listExpr with string operator and many arguments.
Implemented in CVCL::VCL. |
|
Overloaded version of listExpr with string operator and one argument.
Implemented in CVCL::VCL. |
|
Overloaded version of listExpr with string operator and two arguments.
Implemented in CVCL::VCL. |
|
Overloaded version of listExpr with string operator and three arguments.
Implemented in CVCL::VCL. |
|
Prints e to the standard output.
Implemented in CVCL::VCL. |
|
Prints e to the given ostream.
Implemented in CVCL::VCL. |
|
Parse an expression using a Theory-specific parser.
Implemented in CVCL::VCL. |
|
Parse a type expression using a Theory-specific parser.
Implemented in CVCL::VCL. |
|
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. Implemented in CVCL::VCL. |
|
Import the Type from another instance of ValidityChecker.
Implemented in CVCL::VCL. |
|
Return TRUE Expr.
Implemented in CVCL::VCL. |
|
Return FALSE Expr.
Implemented in CVCL::VCL. |
|
Create negation.
Implemented in CVCL::VCL. |
|
Create 2-element conjunction.
Implemented in CVCL::VCL. |
|
Create n-element conjunction.
Implemented in CVCL::VCL. |
|
Create 2-element disjunction.
Implemented in CVCL::VCL. |
|
Create n-element disjunction.
Implemented in CVCL::VCL. |
|
Create Boolean implication.
Implemented in CVCL::VCL. |
|
Create left IFF right (boolean equivalence).
Implemented in CVCL::VCL. |
|
Create an equality expression. The two children must have the same type, and cannot be of type Boolean. Implemented in CVCL::VCL. |
|
Create IF ifpart THEN thenpart ELSE elsepart ENDIF.
Implemented in CVCL::VCL. |
|
Create a named uninterpreted function with a given type.
Implemented in CVCL::VCL. |
|
Create a named user-defined function with a given type.
Implemented in CVCL::VCL. |
|
Unary function application (op must be of function type).
Implemented in CVCL::VCL. |
|
Binary function application (op must be of function type).
Implemented in CVCL::VCL. |
|
Ternary function application (op must be of function type).
Implemented in CVCL::VCL. |
|
n-ary function application (op must be of function type)
Implemented in CVCL::VCL. |
|
Create a rational number with numerator n and denominator d.
Implemented in CVCL::VCL. |
|
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. Implemented in CVCL::VCL. |
|
Create a rational from a single string.
Implemented in CVCL::VCL. |
|
Unary minus.
Implemented in CVCL::VCL. |
|
Create 2-element sum (left + right).
Implemented in CVCL::VCL. |
|
Make a difference (left - right).
Implemented in CVCL::VCL. |
|
Create a product (left * right).
Implemented in CVCL::VCL. |
|
Create a power expression (x ^ n); n must be integer.
Implemented in CVCL::VCL. |
|
Create expression x / y.
Implemented in CVCL::VCL. |
|
Create (left < right).
Implemented in CVCL::VCL. |
|
Create (left <= right).
Implemented in CVCL::VCL. |
|
Create (left > right).
Implemented in CVCL::VCL. |
|
Create (left >= right).
Implemented in CVCL::VCL. |
|
Create a 1-element record value (# field := expr #). Fields will be sorted automatically Implemented in CVCL::VCL. |
|
Create a 2-element record value (# field0 := expr0, field1 := expr1 #). Fields will be sorted automatically Implemented in CVCL::VCL. |
|
Create a 3-element record value (# field_i := expr_i #). Fields will be sorted automatically Implemented in CVCL::VCL. |
|
Create an n-element record value (# field_i := expr_i #).
Implemented in CVCL::VCL. |
|
Create record.field (field selection). Create an expression representing the selection of a field from a record. Implemented in CVCL::VCL. |
|
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. Implemented in CVCL::VCL. |
|
Create an expression array[index] (array access). Create an expression for the value of array at the given index Implemented in CVCL::VCL. |
|
Array update; equivalent to "array WITH index := newValue".
Implemented in CVCL::VCL. |
|
Tuple expression.
Implemented in CVCL::VCL. |
|
Tuple select; equivalent to "tuple.n", where n is an numeral (e.g. tup.5).
Implemented in CVCL::VCL. |
|
Tuple update; equivalent to "tuple WITH index := newValue".
Implemented in CVCL::VCL. |
|
Datatype constructor expression.
Implemented in CVCL::VCL. |
|
Datatype selector expression.
Implemented in CVCL::VCL. |
|
Datatype tester expression.
Implemented in CVCL::VCL. |
|
Universal quantifier.
Implemented in CVCL::VCL. |
|
Existential quantifier.
Implemented in CVCL::VCL. |
|
Lambda-expression.
Implemented in CVCL::VCL. |
|
Symbolic simulation expression.
Implemented in CVCL::VCL. |
|
Set the resource limit (0==unlimited, 1==exhausted). Currently, the limit is the total number of processed facts. Implemented in CVCL::VCL. |
|
Assert a new formula in the current context. This creates the assumption e |- e. The formula must have Boolean type. Implemented in CVCL::VCL. |
|
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 Implemented in CVCL::VCL. |
|
Return next literal implied by last assertion. Null Expr if none. Returned literals are either registered atomic formulas or their negation Implemented in CVCL::VCL. |
|
Simplify e with respect to the current context.
Implemented in CVCL::VCL. |
|
Simplify e into e', and return the Theorem3 object for e = e'. This function must be called only when +tcc flag is set. The resulting Theorem3 (a 3-valued theorem object) can be used to extract the simplified expression and the proof of its equivalence to the origital expression: thm.getExpr() [to get e=e'], thm.getRHS() [to get just e'], and thm.getProof() [to get a Proof object]. Implemented in CVCL::VCL. |
|
Simpfy e, ignoring TCCs (assumes total interpretation).
Implemented in CVCL::VCL. |
|
Dump all variables in e.
Implemented in CVCL::VCL. |
|
Check validity of e in the current context. If the result is true, then the resulting context is the same as the starting context. If the result is false, then the resulting context is a context in which e is false. e must have Boolean type.
Implemented in CVCL::VCL. |
|
Check satisfiability of the expr in the current context. Returns false if the context is satisfiable and true if it is unsatisfiable. Note that this is equivalent to QUERY !e Implemented in CVCL::VCL. |
|
Get the next model. This method should only be called after a query which returns false. Returns false if another counterexample is found, true otherwise. Implemented in CVCL::VCL. |
|
Restart the most recent query with e as an additional assertion. This method should only be called after a query which returns false. Returns true if the resulting query is valid and false otherwise. Implemented in CVCL::VCL. |
|
Returns to context immediately before last invalid query. This method should only be called after a query which returns false. Implemented in CVCL::VCL. |
|
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.
Implemented in CVCL::VCL. |
|
Get assumptions made internally in this and all previous contexts. Internal assumptions are literals assumed by the sat solver.
Implemented in CVCL::VCL. |
|
Get all assumptions made in this and all previous contexts.
Implemented in CVCL::VCL. |
|
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.
Implemented in CVCL::VCL. |
|
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.
Implemented in CVCL::VCL. |
|
Will assign concrete values to all user created variables. This function should only be called after a query which return false. Implemented in CVCL::VCL. |
|
Returns true if the current context is inconsistent. Also returns a minimal set of assertions used to determine the inconsistency.
Implemented in CVCL::VCL. |
|
Returns true if the invalid result from last query() is imprecise. Some decision procedures in CVC Lite 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. Implemented in CVCL::VCL. Referenced by CVCL::VCCmd::reportResult(). |
|
Returns true if the invalid result from last query() is imprecise.
Implemented in CVCL::VCL. |
|
Returns the proof term for the last proven query. If there has not been a successful query, it should return a NULL proof Implemented in CVCL::VCL. |
|
Returns the TCC of the last assumption or query. Returns Null if no assumptions or queries were performed. Implemented in CVCL::VCL. |
|
Return the set of assumptions used in the proof of the last TCC.
Implemented in CVCL::VCL. |
|
Returns the proof of TCC of the last assumption or query. Returns Null if no assumptions or queries were performed. Implemented in CVCL::VCL. |
|
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. Implemented in CVCL::VCL. |
|
Construct a proof of the query closure |- Gamma => phi. Returns Null if last query was Invalid. Implemented in CVCL::VCL. |
|
Returns the current stack level. Initial level is 0.
Implemented in CVCL::VCL. |
|
Checkpoint the current context and increase the scope level.
Implemented in CVCL::VCL. |
|
Restore the current context to its state at the last checkpoint.
Implemented in CVCL::VCL. |
|
Restore the current context to the given stackLevel.
Implemented in CVCL::VCL. |
|
Returns the current scope level. Initially, the scope level is 1.
Implemented in CVCL::VCL. |
|
Checkpoint the current context and increase the internal scope level. Do not use unless you know what you're doing!
Implemented in CVCL::VCL. |
|
Restore the current context to its state at the last internal checkpoint. Do not use unless you know what you're doing!
Implemented in CVCL::VCL. |
|
Restore the current context to the given scopeLevel.
Implemented in CVCL::VCL. |
|
Get the current context.
Implemented in CVCL::VCL. Referenced by CVCL::VCCmd::VCCmd(). |
|
Read and execute the commands from a file given by name ("" means stdin).
Implemented in CVCL::VCL. Referenced by main(). |
|
Read and execute the commands from a stream.
Implemented in CVCL::VCL. |
|
Get statistics object.
Implemented in CVCL::VCL. Referenced by sighandler(). |
|
Print collected statistics to stdout.
Implemented in CVCL::VCL. Referenced by main(). |