3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-16 05:48:44 +00:00
Commit graph

9282 commits

Author SHA1 Message Date
Arie Gurfinkel b51251f394 Move tout under TRACE 2018-06-14 16:08:48 -07:00
Arie Gurfinkel fd7bcc7afc Format 2018-06-14 16:08:48 -07:00
Yakir Vizel 5df7a08d1c A simple version for finding the stride between different indices in a POB
This current version is very limited.
It assumes a pre-defined structure (namely, an ADDER).
2018-06-14 16:08:48 -07:00
Arie Gurfinkel 04a778f2fd Option to enable cube normalization in quic generalizer 2018-06-14 16:08:48 -07:00
Arie Gurfinkel 852e181fed New quic3 lemma generalizer 2018-06-14 16:08:48 -07:00
Arie Gurfinkel 9cdb63ae4a Handle conversion of quantified lemma to quantifier free
When a cube is updated, a lemma might loose all of its quantified
variables. In this case, it is effectively quantifier free
and might be a version of an already existing lemma.

For that reason, we convert it to quantifier free lemma when
this happens.
2018-06-14 16:08:48 -07:00
Yakir Vizel 23a8e59493 Initial commit of QGen
Controlled by fixedpoint.spacer.use_quanti_generalizer

measure cumulative time, number of invocations, and number of failed
SMT calls

Relaxing equality in a pattern: if a variable equals a numeral, relax with GE

pob::get_skolems() returns all skolems that might appear in the pob.
New skolems must be added above the largest index in that map,
even if they are not used in the pob itself.

pattern generalization should be done before the pattern is skolemized and
added into the new cube.
2018-06-14 16:08:47 -07:00
Arie Gurfinkel a1efb88318 Semantic matcher
Extends matcher with rewrites based on semantics of arithmetic operations

Like matcher, but uses arithmetic and logic rewrites to try to
get a semantic match.
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 7dee36358d Allow bool_ind_generalizer to skip non-array literals
Currently a hack to skip generalizing some literals.
Used together with quic generalizer to remove all array terms if possible
before quic generalization
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 46fb0d928a Fix in spacer_term_graph 2018-06-14 16:08:47 -07:00
Yakir Vizel 068b77d43a Normalizing LE and GE with constants 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 0c1ef7155a Option to rewrite expression in term_graph
Rewrite expressions to minimize uses of constants 0 and 1
Currently disabled due to interaction with quic
2018-06-14 16:08:47 -07:00
Arie Gurfinkel ecf9c629b0 Fix binding handling for quantifier free lemmas 2018-06-14 16:08:47 -07:00
Arie Gurfinkel a8318b8822 Fix lemma::has_binding() 2018-06-14 16:08:47 -07:00
Arie Gurfinkel ec179da0fa API to get num of free variables in a pob 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 05e876d684 Fix n-arry applications in spacer_term_graph 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 7b82ec1bee Attempt bug fix 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 981e521b18 Cleanup lemma definition
exposes a potential bug. See comments in code.
2018-06-14 16:08:47 -07:00
Yakir Vizel f51c07adf6 Moving skolems to lemma 2018-06-14 16:08:47 -07:00
Arie Gurfinkel ea73acef45 Implements mk_num_pat
Abstracts interpreted numeric constants with variables in a ground expression
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 9bc11b2122 Wire term graph into eq_generalizer 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 09d54c10a6 Wire term graph into spacer normalizer 2018-06-14 16:08:47 -07:00
Arie Gurfinkel be77b1de39 Improve interface of term_graph 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 6407ec8725 spacer_term_graph: an egraph of terms
Used to determine and factor out equalities
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 088bd3ed8e Fix compiler warning 2018-06-14 16:08:47 -07:00
Bernhard Gleiss 25fad153d1 added option fixedpoint.spacer.iuc.debug_proof to debug proof which is used for generation of iuc 2018-06-14 16:08:47 -07:00
Bernhard Gleiss c3a66217e1 improved options for IUC computation 2018-06-14 16:08:47 -07:00
Bernhard Gleiss 370667722d New option fixedpoint.spacer.print_farkas_stats
Prints the number of Farkas lemmas in each proof
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 880fc77655 Further rewrite equalities 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 6818eb3340 Improve factor equalities 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 5a37518e58 Improve statistics from spacer 2018-06-14 16:08:47 -07:00
Bernhard Gleiss 00a99f01b4 improved options for IUC computation 2018-06-14 16:08:47 -07:00
Bernhard Gleiss fba995294d refactored options regarding farkas lemma handling 2018-06-14 16:08:47 -07:00
Bernhard Gleiss 56fcb8e6fd added option fixedpoint.spacer.print_farkas_stats to print number of Farkas lemmas in each proof 2018-06-14 16:08:47 -07:00
Bernhard Gleiss 4148ee128c fixed bug, which added too many edges between super-source and source in the case where the source was used by multiple inferences 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 9b050e8d30 Fix benign warning 2018-06-14 16:08:47 -07:00
Arie Gurfinkel e7815c703c Fix a typo 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 321cad70d6 improve comments for scoped_weakness 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 890bc0f7c9 fix scoped_weakness
forgot to save current state of params before resetting them
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 68518b0e32 propagate weakness from pob down to all related checks
If a pob was discharged with a weak solver, propagate the level of
weakness to inductive generalization and to lemma propagation.
2018-06-14 16:08:47 -07:00
Arie Gurfinkel b8b3703511 improved implementation of is_qblocked()
Disabled by default. Has no effect if ran with the default set of
options where qlemmas=true  and instantiate=true
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 371ba4fbc0 added parameters that seem to work well with quantifiers and arith 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 27d8fa4a34 hard-code quantifier weight to 15
With default settings, the eager threshold is 10 and lazy is 20.  15
puts us in the middle ensuring that lemmas are instantiated when UNSAT
and otherwise delayed.
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 135a4a765f Adding grounding of the current lemma
In addition to adding the necessary instance of a quantified lemma,
add its grounding over the global set of skolems.
2018-06-14 16:08:47 -07:00
Arie Gurfinkel e8befc072c cleaned up lemma instantiation code 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 6917aa3eb9 debug print 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 1d478bd8d3 using sk_lt_proc order instead of ast_lt_proc when creating a lemma 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 6cf68bee80 app ordering that puts special skolem constants first 2018-06-14 16:08:47 -07:00
Arie Gurfinkel 9f0eb367b1 ground lemmas during propagation when qlemmas are disabled
When asserting quantified lemmas are disabled, ground a lemma
explicitly during propagate to make sure that it is ground using our
local set of skolem constants.
2018-06-14 16:08:47 -07:00
Arie Gurfinkel 5da0753269 (spacer) add instances even when a q-lemma already exists
It is possible that a new instance of a quantified lemma is discovered
even though a quantified lemma it already known. In this case, the
instance should be added to a corresponding context, even though the
lemma is not new.
2018-06-14 16:08:47 -07:00