summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2021-03-01Refactor collection of debug and trace tags (#5996)Gereon Kremer
We have a mechanism to collect all debug and trace tags used throughout the code base to allow checking for valid tags. This mechanism relies on a collection of more or less readable shell scripts. #5921 hinted to a problem with the current setup, as it passes all source files via command line. This PR refactors this setup so that the scripts collect the files internally, and only the base directory is passed on the command line. As I was touching this code anyway, I ported everything to python and combined it into a single script, in the hope to make it more maintainable. Fixes #5921.
2021-02-27google test: theory: Migrate theory_white. (#6006)Aina Niemetz
This moves test utils for theory tests to test_smt.h and consolidates two implementations of dummy theories into one.
2021-02-26Some formatting and better tracing in prop engine (#6022)Haniel Barbosa
Miscellaneous changes from proof-new.
2021-02-26Minor improvement and fix to smt2 printer (#6009)Andrew Reynolds
This permits access to the static method string smtKindString(Kind k, Variant v) which is required for LFSC proof conversion. It also makes a fix to how a string kind is printed.
2021-02-26Optionally permit creation of non-flat function types (#6010)Andrew Reynolds
This is required for creating the representation of closues in LFSC, which are of the form ((forall x T) P) where notice that forall has non-flat function type (-> Int Sort (-> Bool Bool)).
2021-02-25Store Node instead of TNode (#5993)Gereon Kremer
The justification heuristic stores a "copy" of assertions as TNode. As witnessed by #5938, these TNodes may invalid. This PR changes this to store Nodes instead. Fixes #5938.
2021-02-25(proof-new) Fix regular expression unfolding under substitution (#5958)Andrew Reynolds
This case was previously unhandled and exercised by a recently added regression.
2021-02-26Move (optional) rewrite from TrustSubstitutionMap to SubstitutionMap. (#5992)Gereon Kremer
This PR adds optional rewriting to the SubstitutionMap class. Before, only the new TrustSubstitutionMap added optional rewriting, leading to unexpected inconsistencies between the two. In particular, cases exist where the substitution and the rewriting cancel each other (see #5943). This PR moves the optional rewriting from TrustSubstitutionMap into SubstitutionMap. While the former enables it by default, it is disabled by default for the latter and thus does not change current behavior. We now use this new option in an assertion in the non-clausal simplification. Fixes #5943.
2021-02-25Datatypes lemmas: share only external types (#5997)yoni206
Forcing lemmas in datatypes used to be done only for external types. This was changed to consider all types, which is not needed. This PR brings back the restriction to external types.
2021-02-24Enable -Werror. (#5969)Mathias Preiner
2021-02-24Ensure static-learning adds rewritten assertions. (#5982)Gereon Kremer
The static-learning preprocessing sometimes added non-rewritten assertions, despite being used in a part of the preprocessor that assumes all assertions to be rewritten. This may then break other passes further down, in the case of #5729 the non-clausal simplification which explicitly asserts that assertions are rewritten. This PR rewrites the respective assertion properly in the static-learning pass. Fixes #5729.
2021-02-24(proof-new) Add proofs for CAD solver (#5981)Gereon Kremer
This PR adds proofs for the CAD solver, based on the proof generator from the previous PR. Note that the level of detail of these CAD proofs is significantly higher than for other proofs. Making these proofs more fine-grained and maybe at some point accessible to proof checkers is probably still quite a bit of work. Thus, the CAD proof rules are both trusted rules for now.
2021-02-23Add state and inference manager to inst match generator (#5968)Andrew Reynolds
In preparation for refactoring E-matching to not pass QuantifiersEngine pointer to its utilities.
2021-02-23Add interface to TheoryState for sort inference and facts (#5967)Andrew Reynolds
This eliminates the need for direct references to TheoryEngine from quantifiers and UF+cardinality. This PR also eliminates an unnecessary reference to TheoryEngine in TheoryModelBuilder and breaks a few more dependencies in quantifiers modules.
2021-02-23Switch to C++17. (#5959)Mathias Preiner
Co-authored-by: Gereon Kremer <nafur42@gmail.com>
2021-02-23Add proof for mult sign lemma (#5966)Gereon Kremer
This PR adds the proof for a nonlinear refinement lemma that infers the sign of a monomial from the sign of the variables.
2021-02-23[proof-new] Fix dangling pointer in SAT proof generation (#5963)Haniel Barbosa
When a clause is being explained, the negation of each of its literals, other than the one it propagates, needs to be explained. This process may lead to the creation of new clauses in the SAT solver (because if a literal being explained was propagated and an explanation was not yet given, it will then be computed and added). This may lead to changes in the memory where clauses are, which may break the reference to the original clause being explained. To avoid this issue we store the literals in the reason before we start explaining their negations. We then iterate over them rather than over the clause, as before.
2021-02-23Add proof for monomial bounds check (#5965)Gereon Kremer
This PR adds proofs for a nonlinear refinement lemma that deals with multiplication of inequalities with some term. This lemma is split into two proof rules for positive or negative factors.
2021-02-23(proof-new) Add proof generator for CAD solver (#5964)Gereon Kremer
This PR adds a proof generator for the CAD solver, including two new proof rules. The code is not yet used, but will be integrated into the CAD solver itself in another PR.
2021-02-23[proof-new] Fix handling of removable clauses in proof cnf stream (#5961)Haniel Barbosa
Previously the removable information was not being communicated from the proof cnf stream to the cnf stream, which is the one that actually uses this when asserting clauses into the SAT solver. This commit fixes this by having the proof cnf stream directly use the cnf stream d_removable attribute.
2021-02-22Add trans secant proofs. (#5957)Gereon Kremer
This PR adds proofs for secant lemmas in the transcendental lemmas for both exponential and sine functions. It also adds proof rules and corresponding proof checkers.
2021-02-22Explanation of failure for instantiate, use in enumerative instantiation (#5951)Andrew Reynolds
This makes enumerative instantiation generalize the failures in Instantiate::addInstantiate and increment its enumeration accordingly. This leads to (+104-6) using enumerative instantiation only on SMT-LIB quantified benchmarks, 60 second timeout. This is in preparation for further improvements to enumerative instantiation.
2021-02-22Eliminate raw use of output channel and valuation in quantifiers (#5933)Andrew Reynolds
This makes all lemmas in quantifiers sent through the inference manager. It begins adding InferenceId values for some of these calls. All uses of Valuation are replaced by calls to QuantifiersState.
2021-02-22Move quantifiers attributes to quantifiers registry (#5929)Andrew Reynolds
This moves the utility class beneath quantifiers registry.
2021-02-22(proof-new) Change proof-new option to proof (#5955)Andrew Reynolds
Also moves several proof-specific options to proof_options.
2021-02-22(proof-new) Add proofs for exponential functions (#5956)Gereon Kremer
This PR adds proofs for lemmas concerned with the exponential function. If also adds the necessary proof rules and corresponding proof checker.
2021-02-22Require length-in-conclusion form for strings inferences (#5953)Andrew Reynolds
Previously, it was optional whether to put length constraints in conclusion for deq string inferences. However, due to optimizations in skolem caching, it is now required to guard these length constraints. It furthermore changes the policy to not ignore the lengths for the registered skolem, since it may be shared elsewhere. Fixes #5940. Notice that proof-new already requires this option to be enabled when proofs are enabled. Hence, this will simplify proof-new when merged.
2021-02-22(proof-new) Option to automatically add SYMM steps during proof node update. ↵Andrew Reynolds
(#5939) Required for work on external proof conversions.
2021-02-22[proof-new] Optionally print conclusion in the AST proof (#5954)Haniel Barbosa
Adds an option to optionally print conclusion in the AST proof.
2021-02-22Add the LazyTreeProofGenerator. (#5948)Gereon Kremer
This PR adds a new proof utility to construct tree-shaped proofs in a lazy fashion. The LazyTreeProofGenerator is currently intended to be used for CAD proofs, where we need to construct proofs that consist of nested case-splits, but the exact split (in a form suitable for proof construction) is only known when the whole subtree is finished. We thus store the proof in a tree structure similar to proof nodes, and transform the whole proof to a proper proof node once all data is available.
2021-02-22(proof-new) Add new arithmetic kind INDEXED_ROOT_PREDICATE. (#5949)Gereon Kremer
This PR introduces a new arithmetic kind for indexed root predicates. An indexed root predicate compares a real variable to the k'th root of a given polynomial as follows: Let IRP_k(x ~ 0, p) an indexed root predicate with k a non-negative number, x some real variable, ~ an arithmetic relation (e.g. =, <, ...), and p a polynomial over x (and possibly other variables). If p contains variables apart from x, we can only evaluate the expression over a suitable assignment for at least these variables. The evaluation of this expression is equivalent to computing the k'th real root of p in x (with all other variables evaluated over a given assignment) and comparing this real root to zero (according to the relation symbol ~). Note that we currently do not intend to use this structure for solving, but require it for representing and printing CAD proofs.
2021-02-22(proof-new) Add proofs for sine lemmas in the transcendental solver (#5952)Gereon Kremer
This PR adds proofs for the lemmas related to the sine function in the transcendental solver. It introduces several new proof rules with corresponding proof checkers and produces proofs in the sine solver.
2021-02-22Cleanup in transcendental solver, add ApproximationBounds struct. (#5945)Gereon Kremer
This PR merges some cleanup in the transcendental solver from proof-new. It adds a new struct ApproximationBounds that replaces an opaque std::vector and does some general refactoring in the TaylorGenerator class, removing dead code and using fixed-width integers.
2021-02-22add pruneRedundantIntervals (#5950)Gereon Kremer
Adds a simple helper for CAD to prune redundant intervals. It is just a wrapper for cleanIntervals right now, but will be responsible to making sure the CAD proof is pruned as well.
2021-02-22Fix datatypes inference manager when proofs are enabled (#5937)Andrew Reynolds
Accidentally was not sending lemmas in one interface when proofs are enabled due to recent refactoring.
2021-02-19Simplify interface to instantiate (#5926)Andrew Reynolds
Does not support InstMatch interfaces anymore, which are spurious.
2021-02-19Fill in missing inference ids in datatypes theory (#5931)Andrew Reynolds
Also updates its inference manager to not track stats since the standard ones are now used. This also sets up some dependencies in the sygus extension which will be used to implement InferenceId for the sygus extension, to be done on a separate PR.
2021-02-19Refactoring theory inference process (#5920)Andrew Reynolds
This PR refactors TheoryInference so that it is not responsible for calling back into InferenceManager, instead it sets data so that InferenceManagerBuffered has enough information to do this itself. It also makes the decision of whether to cache lemmas in theory inference manager a global choice per-theory instead of per-lemma.
2021-02-19Fix rewrite for contains over replace (#5924)Andrew Reynolds
Fixes model soundness issue (fixes #5915).
2021-02-19Remove string stat for inferences (#5932)Andrew Reynolds
This is now subsumed by the general stat in TheoryInferenceManager
2021-02-19Cleanup of inferences in arithmetic theory (#5927)Gereon Kremer
This PR cleans up several issues in the arithmetic theory mostly related to its usage of InferenceId and the TheoryInferenceManager: remove the ArithLemma class and uses SimpleTheoryLemma instead only use NlLemma if we actually need it use proper InferenceIds everywhere remove unused code in the nonlinear extension
2021-02-18Add statistic for InferenceId to TheoryInferenceManager. (#5913)Gereon Kremer
This PR uses the IntegralHistogramStat to obtain statistics about the sent inferences within the TheoryInferenceManager. All theories are adapted to provide a proper name (prefix) for the name of the statistic.
2021-02-18Add InferenceIds for sets theory. (#5900)Gereon Kremer
This PR introduces new InferenceId for the theory of sets and uses them instead of InferenceId::UNKNOWN.
2021-02-18New InferenceIds for BV theory (#5909)Gereon Kremer
This PR introduces new InferenceId for the BV theory and uses them instead of InferenceId::UNKNOWN.
2021-02-18Document UF inferences (#5917)Andrew Reynolds
Document UF entries of InferenceId enum.
2021-02-17Eliminate non-static members in term util (#5919)Andrew Reynolds
This makes it so that TermUtil is now a collection of static methods. Further refactoring will make this a standalone file of utility methods. This breaks all dependencies on the TermUtil object in QuantifiersEngine. It also starts breaking some of the depenendencies on quantifiers engine in sygus.
2021-02-17Move first order model for full model check to own file (#5918)Andrew Reynolds
This moves the derived model class used in finite model finding to its own file, in the src/theory/quantifiers/fmf directory. Updates the code to meet guidelines, no behavior changes.
2021-02-17Move methods from term util to quantifiers registry (#5916)Andrew Reynolds
Towards eliminating dependencies on quantifiers engine, and eliminating the TermUtil class. Note that QuantifiersModule had to be moved to its own file to avoid circular include dependencies.
2021-02-17Compute fact or lemma in datatypes prior to buffering (#5914)Andrew Reynolds
This is necessary for the planned refactoring of TheoryInference::process. This forces datatypes to decide lemma vs. fact prior to buffering inferences.
2021-02-17Use InferenceId in sep theory. (#5912)Gereon Kremer
This PR uses the new InferenceIds in the separation logic theory.
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback