3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-13 14:40:55 +00:00
Commit graph

65 commits

Author SHA1 Message Date
Jakob Rath
c6ee5b76ad viable_slicing_interface 2023-12-21 15:31:18 +01:00
Jakob Rath
828f74db73 slicing::explain_simple_overlap 2023-12-01 13:15:45 +01:00
Jakob Rath
f09d37f93f slicing: fix dependency tracking for values 2023-11-06 14:17:28 +01:00
Jakob Rath
b4902f374b slicing equivalent vars + explain 2023-08-18 16:21:59 +02:00
Jakob Rath
49ca2d983d remove abandoned code 2023-08-18 14:55:40 +02:00
Jakob Rath
cb14cb5743 (abandoned) attempt to propagate values upwards 2023-08-18 14:52:48 +02:00
Jakob Rath
9bffb34ce1 helpers 2023-08-18 14:47:29 +02:00
Jakob Rath
c95ff56d2d slicing: change how values are tracked
Do not eagerly merge equivalence classes with the same constant value.

Reason:
- when we split a value slice, the subslice might already exist in the
  egraph and already have subslices itself, which breaks assumptions in
  split/split_core.
- introduces unnecessary splits

Now:
- wrap constants into fresh function symbol before creating the enode
- check value compatibility in on_merge callback instead
- track pointer to value_node for each enode, and update it in on_merge
2023-08-17 17:14:18 +02:00
Jakob Rath
bc6f0729a0 Add lemma: y = x[h:l] & y != 0 ==> x >= 2^l 2023-08-16 09:58:56 +02:00
Jakob Rath
586dcba661 slicing::collect_fixed should start at low-order base slice 2023-08-11 14:49:17 +02:00
Jakob Rath
f9cbee3b3d explain_fixed is currently just explain_value for a slice 2023-08-08 17:26:52 +02:00
Jakob Rath
6eb81fbb9d use struct 2023-08-08 17:19:46 +02:00
Jakob Rath
3573305917 no need to keep an enode_pair, since the other is always the root 2023-08-08 17:13:05 +02:00
Jakob Rath
46a794ff67 slicing with fixed bits (wip) 2023-08-08 16:04:21 +02:00
Jakob Rath
036a3f31ca call m_egraph.merge() at a single point 2023-08-07 17:56:43 +02:00
Jakob Rath
bc0119f333 Treat constraints of the form "x = val" more like variable assignments 2023-08-07 15:28:17 +02:00
Jakob Rath
aa81f6c9fb Propagate value assignments discovered by the slicing e-graph 2023-08-07 15:20:04 +02:00
Jakob Rath
1d9322b5ae slicing bugfixes 2023-08-03 14:53:14 +02:00
Jakob Rath
f6fb9bf316 minor refactor 2023-08-01 16:08:42 +02:00
Jakob Rath
9335b6eed6 refactor slicing dep 2023-07-27 15:35:59 +02:00
Jakob Rath
eb20b8971b slicing notes 2023-07-27 15:33:36 +02:00
Jakob Rath
6cb84dc4cd collect_simple_overlaps 2023-07-26 14:39:46 +02:00
Jakob Rath
19c1ba5158 update tests 2023-07-26 09:47:34 +02:00
Jakob Rath
16188945ab better slicing conflict clauses 2023-07-26 09:41:52 +02:00
Jakob Rath
12e9356f0f pvar deps also need to track the slice they're coming from 2023-07-26 09:38:29 +02:00
Jakob Rath
2f0d74fca8 fix 2023-07-26 09:34:45 +02:00
Jakob Rath
a75daf8681 replay mk_extract/mk_concat 2023-07-25 10:49:47 +02:00
Jakob Rath
857f25f54a add notes 2023-07-21 15:54:28 +02:00
Jakob Rath
e45d13ffdf refactor creation of concat nodes 2023-07-20 17:11:01 +02:00
Jakob Rath
4b3cfa8c50 Add recognizers for different kinds of enodes 2023-07-20 17:06:23 +02:00
Jakob Rath
e533c6c78d extract method add_equation 2023-07-20 15:21:22 +02:00
Jakob Rath
4142201d88 fix disequality conflict shortcut 2023-07-20 15:10:58 +02:00
Jakob Rath
73757e3fa4 mk_extract 2023-07-19 19:37:21 +02:00
Jakob Rath
69e54b62c5 no need to store bit-width separately 2023-07-19 12:56:35 +02:00
Jakob Rath
114e7b73e5 move callback into member function 2023-07-19 12:51:35 +02:00
Jakob Rath
af73f26941 slicing: track disequalities 2023-07-19 12:04:45 +02:00
Jakob Rath
970e68c70e slicing: use proper bv sorts for expressions 2023-07-19 08:58:34 +02:00
Jakob Rath
28ed3bd7ab fix backtracking of m_needs_congruence 2023-07-18 16:00:26 +02:00
Jakob Rath
4742985906 add proposed query interface 2023-07-18 15:07:53 +02:00
Jakob Rath
c124cbae97 Add virtual concat terms on demand during propagation 2023-07-18 14:48:32 +02:00
Jakob Rath
0d80e47350 update deps handling (need to support pvars as well) 2023-07-18 11:22:02 +02:00
Jakob Rath
11d9e5c862 minor 2023-07-17 19:04:17 +02:00
Jakob Rath
d1cb02b735 use abstract sort also for value slices 2023-07-17 18:31:17 +02:00
Jakob Rath
490b77d8a1 mk_value_slice 2023-07-17 14:41:45 +02:00
Jakob Rath
741e37c2d7 find is now get_root 2023-07-17 14:41:45 +02:00
Jakob Rath
b8d118a558 use enode* instead of custom slice index; extract explanations from egraph 2023-07-17 14:41:45 +02:00
Jakob Rath
8c17e231ad don't 'find' when creating subslice 2023-07-12 16:45:51 +02:00
Jakob Rath
0fb81fc437 use z3's egraph (wip) 2023-07-12 16:21:38 +02:00
Jakob Rath
d8d8c67a3b slicing interface 2023-07-12 15:56:27 +02:00
Jakob Rath
f61bf0843b display 2023-07-12 15:46:40 +02:00