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