summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2020-09-01Removes old proof code (#4964)Haniel Barbosa
This deletes much of the old proof code. Basically everything but the minimal necessary infra-structure for producing unsat cores. That includes dependency tracking in preprocessing, the prop engine proof and the unsat core computation code in the old proof manager. These should also go once we fully integrate into master the new proof infrastructure. It also cleans interfaces that were using old-proof-code-specific constructs (such as LemmaProofRecipe). When possible or when it made sense standalone local proof production code was kept, but deactivated (such is in the equality engine and in the arithmetic solver).
2020-09-01 (new theory) Update TheoryDatatypes to the new standard (#4986)Andrew Reynolds
Updates it to use the new inference manager as well as updating its check to the standard callbacks.
2020-09-01Add TheoryInference base class (#4990)Andrew Reynolds
This introduces a TheoryInference base class, which is a generalization and cleaner version of the former Lemma object. This changes the name of Lemma -> SimpleTheoryLemma, and makes the callback responsible for calling the inference manager. This PR also updates the datatypes inference manager to use the new style. This required adding some additional interfaces to TheoryInferenceManager.
2020-09-01Add arithmetic-specific, runtime, proof-macros. (#4992)Alex Ozdemir
We'll use this to gate farkas-coefficient machinery after we remove the old proof-macros. I've changed the macros slightly from the proof-new branch: I removed the dependence on options::proof() (no longer wanted) and options::unsatCores() (I had copied this from the original proof macros, but it's not needed either, since we're in a theory).
2020-08-31'fix-install-headers.sh' should respect DESTDIR environment variable (#4978)FabianWolff
When using CMake with Unix Makefiles, one can invoke `make install` as ``` make install DESTDIR=/a/b/c ``` so that the files will be installed into `$DESTDIR$CMAKE_INSTALL_PREFIX` (see the [documentation](https://cmake.org/cmake/help/latest/envvar/DESTDIR.html) for details). This currently doesn't work with the `fix-install-headers.sh` script: ``` [...] -- Installing: /<<PKGBUILDDIR>>/debian/tmp/usr/include/cvc4/util/integer.h -- Installing: /<<PKGBUILDDIR>>/debian/tmp/usr/include/cvc4/util/rational.h find: ‘/usr/include/cvc4/’: No such file or directory ``` Here, `CMAKE_INSTALL_PREFIX` is `/usr` but `DESTDIR` is `/<<PKGBUILDDIR>>/debian/tmp/`. This commit makes the script consider `DESTDIR` (if it is not set, then `$DESTDIR` will be empty and nothing changes) to fix this issue. Signed-off-by: Fabian Wolff <fabi.wolff@arcor.de>
2020-08-31Add the inference manager for datatypes (#4968)Andrew Reynolds
This is in preparation for converting datatypes to the new standard. It adds a specialized version of inference manager buffered that datatypes uses. This required adding several utility methods to its base classes. A follow up PR will connect this to TheoryDatatypes.
2020-08-31Fix spelling errors (#4977)FabianWolff
Signed-off-by: Fabian Wolff <fabi.wolff@arcor.de>
2020-08-31(new theory) Update TheoryStrings to new standard (#4963)Andrew Reynolds
This updates theory of strings to the new standard. This makes strings use the standard template for check and collectModelInfo. It also updates its inference manager to the standard and makes use of assertFactInternal for processing internal facts. This now enables preNotifyFact and notifyFact to be defined in TheoryStrings instead of inside inference manager, which is clearer and eliminates some dependencies within inference manager. Note that the inference manager of strings for now inherits from TheoryInferenceManager. Further standardization will make it inherit from the new InferenceManagerBuffered class. This design will be merged into proof-new, which also has significant changes to strings inference manager.
2020-08-31Fix --ackermann in the presence on syntactically different but possibly ↵Gereon Kremer
equal selects (#4981) The implementation of --ackermann mishandled selects in a subtle way: If select is applied to two syntactically different arrays (that may be semantically equal), the ackermann preprocessing failed to generate the "all arguments equal implies terms equal" lemmas. The problem is that we used the first argument (that is: the array) as lookup to identify terms that need to be considered for these lemmas. Instead we now use their operator (select) just like for uninterpreted function applications. Fixes #4957 . Also adds a regression.
2020-08-31Simplify interface for computing relevant terms. (#4966)Andrew Reynolds
This is a followup to #4945 which simplifies the contract for computeRelevantTerms.
2020-08-31Basic proof support in inference manager (#4975)Andrew Reynolds
This adds basic support for asserting internal facts with proofs in the inference manager class. The purpose of this PR is twofold: (1) From the point of view of proofs, this PR standardizes the management of proof equality engine within inference manager. Theories no longer have to manually construct proof equality engines, and instead are recommended to create inference managers. (2) From the point of view of the new approach to theory combination, this PR ensures standard theory callbacks (preNotifyFact / notifyFact) are used for internal facts, regardless of whether proofs are enabled. This will simplify several of the current (unmerged) changes for proof production in theory solvers on proof-new. Notice this PR adds the utility method NodeManager::mkAnd, which is arguably long overdue. Also notice this code is not yet active, but will be used on proof-new after this PR is merged.
2020-08-28(proof-new) More term context utilities. (#4912)Andrew Reynolds
These utilities will be used for making some of the core proof utilities term-context-sensitve.
2020-08-28New C++ API: Add REGEXP_{REPEAT,LOOP}_OP handling in getIndices. (#4969)Mathias Preiner
2020-08-28Replace Theory::Set with TheoryIdSet (#4959)Andrew Reynolds
This makes it so that equality_engine.h does not include theory.h. This is a bad dependency since Theory contains EqualityEngine. This dependency between equality engine and theory was due to the use of a helper (Theory::Set) for representing sets of theories that is inlined into Theory. This PR moves this definition and utilities to theory_id.h. It fixes the resulting include dependencies which are broken by changing the include theory.h -> theory_id.h in equality_engine.h. This avoids a circular dependency in the includes between Theory -> InferenceManager -> ProofEqualityEngine -> EqualityEngine -> Theory.
2020-08-28Incremental support for bv_to_int (#4967)yoni206
This PR adds support for incremental solving in bv_to_int. This amounts to: using context dependent data structures adding a test In addition, we check for parametrized operations in a more robust way (using kind::metakind::PARAMETERIZED) and rename some tests for convenience.
2020-08-28(proof-new) Make CombinationEngine proof producing (#4955)Andrew Reynolds
Makes combination engine proof producing (for Boolean splits). Followup PRs will start to add proof production in TheoryEngine.
2020-08-28(new theory) Update TheoryQuantifiers to the new interface (#4950)Andrew Reynolds
TheoryQuantifiers is a theory that passes quantified formulas to QuantifiersEngine. This updates it to the new check template (see #4929). Also does some minor cleanup in the cpp file.
2020-08-28(proof-new) Add the SMT proof post processor (#4913)Andrew Reynolds
This PR adds the proof post-processor, which is the final authority on putting together the overall proof. It additionally implements lazy pedantic failures and statistics. This PR also corrects a subtle bug in the elimination of SUBS which requires a TRUE_INTRO/FALSE_INTRO in certain cases.
2020-08-28(new theory) Update TheoryFP to the new interface (#4953)Andrew Reynolds
This updates the theory of floating points to the new interface (see #4929). Notice that TheoryFP was not adding trigger terms to its equality engine (which should be done during notifySharedTerm), and thus was not propagating equalities between shared terms in combined theories. This PR updates its notifySharedTerm method to the default one. FYI @martin-cs
2020-08-28(cad-solver) Fixed excluding lemma generation. (#4958)Gereon Kremer
The lemma generation for partial cad checks had a number of issues that have been fixed in this PR. The previous version had both soundness issues and a very naive approach to handling algebraic numbers. This new version is sound (fingers crossed) and allows to construct more precise, but also more complex lemmas. To avoid constructing very large lemmas, a (somewhat arbitrary) limit based on the size of coefficients was added.
2020-08-28Do not delay processing equivalence class merges in datatypes (#4952)Andrew Reynolds
Currently, the theory of datatypes buffers its processing of when equivalence class merges are processed. This was an earlier design to avoid using the equality engine while it was doing internal operations. Now, equivalence class merge callbacks are called at a time when it is safe to use the equality engine and thus this level of indirection is unnecessary. This will simplify further work on datatypes towards having a standard inference manager.
2020-08-27Add the buffered inference manager (#4954)Andrew Reynolds
This class implements a highly common pattern of buffering facts and lemmas to send on the output channel. It is planned that the inference managers of strings, sets, datatypes, (non-linear) arithmetic, sep, quantifiers will inherit from this class. This PR adds basic calls to add lemmas on the output channel from InferenceManager. It introduces a Lemma virtual class which arith::nl::NlLemma and strings::InferInfo will inherit from. This is required to begin refactoring a flexible configurable strategy for non-linear arithmetic, and will make it easier to further develop towards a configurable approach for theory combination.
2020-08-27(new theory) Update TheorySep to new interface (#4947)Andrew Reynolds
This updates the theory of separation logic to the new interface, which involves splitting up its check method based on the 4 check callbacks and using the theory state in the standard way. No behavior changes, unfortunately a lot of code had to change indentation and was updated to new coding guidelines.
2020-08-27Make iand lemmas use proper Inference types. (#4956)Gereon Kremer
For some reason, the nl subsolver for IAND did not annotate its lemmas with `Inference` types yet. This commit adds appropriate `Inference` values and makes the IAND solver use them.
2020-08-27(proof-new) Add the proof equality engine (#4881)Andrew Reynolds
This is a (partial) layer on top of EqualityEngine that is a universal black box proof generator for users of the equality engine.
2020-08-26Add irrelevant kinds infrastructure to TheoryModel (#4945)Andrew Reynolds
Currently, Theory is responsible for implementing a computeRelevantTerms method collects the union of: (1) The terms appearing in its assertions and its shared terms, (2) The set of additional terms the theory believes are relevant. Currently, (1) is computed by an internal Theory method computeRelevantTermsInternal, and the overall computeRelevantTerms is overridden by the theory (for datatypes and arrays only) for also including (2). The new plan is that Theory will only need to compute (2). Computing (1) will be the job of ModelManager::collectAssertedTerms and the model manager will call Theory::computeRelevantTerms as an additional step prior to its calls to collect model info. This will make certain optimizations possible in theory combination (e.g. tracking asserted terms incrementally). This PR adds the ModelManager::collectAssertedTerms method and also adds infrastructure for irrelevant kinds in the model object (which have an analogous interface as when "unevaluated" kinds are marked during initialization). It does not connect the implementation yet. FYI @barrettcw
2020-08-26Add the theory inference manager (#4948)Andrew Reynolds
This class is a wrapper around OutputChannel and EqualityEngine. It is preferred that the Theory use this interface when asserting "internal facts" to the equality engine, and for sending lemmas, conflicts and propagations on the output channel. This class will be useful when trying new methods for theory combination, where all theories behavior can be modified in a standard way based on modifications to the base inference manager class.
2020-08-26(new theory) Update TheoryUF to new interface (#4944)Andrew Reynolds
This updates TheoryUF to use the 4 check callbacks instead of implementing check, and uses the official TheoryState object instead of its context::CDO<bool> d_conflict field. It also makes a minor change to collectModelValues for const and to preNotifyFact to include an isInternal flag.
2020-08-25Connect combination engine to theory engine (#4940)Andrew Reynolds
This connects the implementation of CombinationEngine into TheoryEngine. By default, the combination engine of theory engine is CombinationCareGraph. This PR also consolidates and simplifies how models are built, note that: The TheoryModel object no longer tracks whether it is built, instead that is the job of ModelManager, The TheoryModelBuilder object is no longer responsible for calling TheoryEngine's collect model info method. Quantifiers engine uses a simpler interface for ensuring that TheoryEngine's model is built. This PR also makes some minor simplifications to TheoryEngine from the centralEe branch. Note that no significant behavior changes are intended in this PR.
2020-08-25Replace Expr-level datatype with Node-level DType (#4875)Andrew Reynolds
This PR makes two simultaneous changes: The new API uses Node-level DType instead of Expr-level Datatype. This required converting 2 of the last remaining calls in the parser that used Expr to use the new API. Internally constructed datatypes (e.g. for sygus) use Node-level DType instead of Expr-level Datatype. Note this required moving a block of code for handling a corner case of sygus from Datatype -> DType. This PR removes : ExprManger::mkDatatypeType. The Expr-level datatype itself. This PR removes all references to its include file. It also updates one remaining unit test from Expr -> Node. This PR will enable further removal of other datatype-specific things in the Expr layer.
2020-08-25Eliminating spurious replay of commands for define funs expansion when ↵Haniel Barbosa
checking unsat cores (#4941) Doing it via commands being added to the coreChecker SMT engine is not necessary since we can directly add assertions after expansion from the original SMT engine.
2020-08-25Add the combination engine (#4939)Andrew Reynolds
This adds the combination engine, which is the module of TheoryEngine which implements the combineTheories method and owns the various components of theory combination, which includes equality engine manager, model manager, and the "shared solver" (to come later). It will have two variants, CombinationCareGraph and CombinationModelBased, the former is added with this PR. FYI @barrettcw The next PR will connect this module to TheoryEngine and remove a few existing methods from TheoryEngine, as they are implemented in the modules of this class.
2020-08-24Add a few basic extensions for equality engine (#4937)Andrew Reynolds
This includes a standard method for safe explanations and the option to disable all trigger terms.
2020-08-24Fix memory issue in AntlrInput::parseError (#4873)Gereon Kremer
The `parseErrorHelper` message can run into memory errors when the it prints the last line and this last line is not terminated by a newline. I suspect other conditions may trigger it as well (like only using `\r` as line terminator). This comit computes the size of the buffer from the start of the current line to the end of the buffer and makes sure that we never go beyond this buffer. The calculation looks a bit awkward, I've not been able to obtain this information from the ANTLR input stream in a nicer way... (I found this issue when looking at #4866). Fixes #4069 .
2020-08-24Do not use relevance during non-linear check model (#4938)Andrew Reynolds
This led to a model soundness issue in rare cases where a relevant literal was dropped due to an entailment check by an irrelevant literal.
2020-08-24Add the distributed model manager (#4934)Andrew Reynolds
This class is responsible for model building when using a distributed approach for equality engines. This PR defines the class but does not yet activate it in TheoryEngine. This includes some model-specific things from TheoryEngine which will be migrated to this class on the next PR.
2020-08-24Extend the standard Theory template based on equality engine (#4929)Andrew Reynolds
Apart from { quantifiers, bool, builtin }, each Theory now has an official equality engine. This PR elaborates on the standard recommended template that Theory should follow, which applies to all theories, regardless of whether they have an equality engine. This includes: A standard check method. The Theory is now expected to implement 4 callbacks (preCheck, postCheck, preNotifyFact, notifyFact). A standard collectModelInfo method. The Theory is now expected to implement 2 callbacks (computeRelevantTerms, collectModelValues). Additionally, 2 more methods have an obvious default: (1) getEqualityStatus, which returns information based on an equality engine if it exists, (2) addSharedTerm, which adds the term as a trigger term to the equality engine of the theory if it exists. Notice that for the sake of more consistent naming, theories now implement notifySharedTerm (previously TheoryEngine called theory-independent addSharedTermInternal which called addSharedTerm, this is updated now to addSharedTerm/notifySharedTerm). Other methods will not be standardized yet e.g. preRegisterTerm, since they vary per theory. FYI @barrettcw Each theory on the branch https://github.com/ajreynol/CVC4/tree/centralEe conforms to this template (e.g. they do not override check or collectModelInfo). The next step will be to pull the new implementation of each Theory from that branch.
2020-08-21Remove unecessary theory model builder base class (#4933)Andrew Reynolds
2020-08-21Dynamic allocation of model equality engine (#4911)Andrew Reynolds
This makes the equality engine manager responsible for initializing the equality engine of the model. It also moves the base equality engine manager class to its own file. Notice the code in TheoryEngine will undergo significant cleaning in forthcoming PRs when the "ModelManagerDistributed" is added. This PR adds temporary calls there to preserve the current behavior.
2020-08-21Limit trigger terms to shared terms in arrays (#4932)Andrew Reynolds
There is a non-standard use of trigger terms in the array theory via `EqualityEngine::addTriggerTerm`. Trigger terms are only supposed to be shared terms, and are added to the equality engine for the sake of propagating equalities between shared terms. The array theory does two non-standard things: (1) it registers (possibly) non-shared terms as triggers in its `preRegisterInternal` method, (2) it filters propagations between anything except non-shared arrays in its `eqNotifyTriggerTermEquality` method. The latter is only necessary because of the former. It is unnecessary to do *either* of these things. Instead, the array theory should simply add the terms to the equality engine (as non-triggers) during preRegisterInternal. Note that it additionally correctly adds trigger terms in its `notifySharedTerm` method. With this commit, the array theory uses the equality engine (wrt propagation) in a standard way.
2020-08-21Remove spurious theory methods calls (#4931)Andrew Reynolds
This PR removes spurious theory method calls that are not implemented. It also renames a common "propagate(TNode lit)" pattern to "propagateLit(TNode lit)" to avoid confusion with "propagate(Effort e)".
2020-08-21Connect the relevance manager to TheoryEngine and use it in non-linear ↵Andrew Reynolds
arithmetic (#4930) This PR activates the use of the relevance manager in TheoryEngine and makes use of it (via Valuation) in the non-linear extension in arith. It removes a deprecated hack (addTautology) for doing this. This addresses CVC4/cvc4-projects#113. Note that the best method for relevance is interleaving, where roughly you gain on SMT-LIB: QF_NIA: +484-53 unsat +792-440 sat QF_NRA: +32-19 unsat +57-23 sat However, this PR does not (yet) enable this method by default. Note that more work is necessary to determine which lemmas require NEEDS_JUSTIFY, this PR identifies 2 cases of lemmas that need justification (skolemization and strings reductions). Regardless, the use of the relevance manager is limited to non-linear arithmetic for now, which is only able to answer "sat" when only arithmetic is present in assertions.
2020-08-21Simplify and fix care graph for ufHo (#4924)Andrew Reynolds
We now separate APPLY_UF and HO_APPLY. We do not generate care pairs based on comparing APPLY_UF terms with HO_APPLY terms, which led to type errors previously. Fixes #4990.
2020-08-21Remove BV equality slicer (#4928)Andrew Reynolds
This class is not used based on our coverage tests (although it appears to be possibly enabled based on non-standard runtime checking of assertions), and uses the equality engine in a highly nonstandard way that will be a burden to the new standardization of equality engine in theory solvers. FYI @aniemetz @mpreiner
2020-08-20Add TheoryState objects to each Theory (#4920)Andrew Reynolds
This initializes all theories with a TheoryState object (apart from bool and builtin which do not require one). Two additional theories are known to require special state objects: TheoryArith, which has a custom way of detecting when in conflict, and TheoryQuantifiers, which can leverage a special state object for the purposes of refactoring and splitting apart QuantifiersEngine further. All other theories use default TheoryState objects. Notice this PR does not update the theories to use these states yet, it simply adds the objects.
2020-08-20Split QuantElimSolver from SmtEngine (#4919)Andrew Reynolds
Towards refactoring SmtEngine / converting Expr -> Node.
2020-08-19Simplify trigger notifications in equality engine (#4921)Andrew Reynolds
This is further work towards a centralized approach for equality engines. This PR merges the eqNotifyTriggerEquality callback with the eqNotifyTriggerPredicate callback, and adds assertions that capture the current behavior. It furthermore makes addTriggerEquality private in equality engine and invoked as a special case of addTriggerPredicate. Note this PR does not impact the internal implementation of these methods in equality engine, which indeed is different. There are two reasons to merge these callbacks: (1) all theories implement exactly the same method for the two callbacks, whenever they implement both. It would be trivial to do something different (by case splitting on the kind of predicate that is being notified), and moreover it is not recommended they do anything other than immediately propagate the predicate (regardless of whether it is an equality). (2) It leads to some confusion with eqNotifyTriggerTermEquality, which is invoked when two trigger terms are merged.
2020-08-19Remove example theory (#4922)Andrew Reynolds
This code is unused and obsolete.
2020-08-19(cad solver) Add a partial check method. (#4904)Gereon Kremer
This PR extends the CAD-based solver to enable partial checks. Essentially, we only collect the first interval that is excluded for the first variable and return that one as a lemma. This does not leave a lot of choice on "how partial" the check should be, but it is fairly easy to implement and does not add additional overhead. It also fixes some confusion in excluding_interval_to_lemma...
2020-08-19Make sets and strings solver states inherit from TheoryState (#4918)Andrew Reynolds
This is towards the new standard for theory solvers. This PR makes the custom states of sets and strings inherit from the standard base class TheoryState. It also makes a minor change to InferenceManager/SolverState to make sets more in line with the plan for a standard base class InferenceManager. Followup PRs will establish the official TheoryState classes for all other theories (which in most cases will be an instance of the base class).
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback