Closed daemontus closed 7 months ago
Attention: 45 lines
in your changes are missing coverage. Please review.
Comparison is base (
1070fc3
) 80.26% compared to head (e72e4b1
) 80.04%.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
This PR should finally enable fully symbolic network reduction at the level of
SymbolicAsyncGraph
.Specifically:
FnUpdate::to_string
can now skip parenthesis around nested and/or functions, meaning the output is more readable, especially in witness networks (e.g.a & b & (a | c | d)
instead of((a & b) & ((a | c) | d))
.FnUpdate::mk_conjunction
andFnUpdate::mk_disjunction
that can be used to create update functions using n-ary operators. This also simplifiesFnUpdate::build_from_bdd
.Space::new_raw
which takes the number of variables instead of the whole network.SymbolicAsyncGraph::new
and other variants now only need a reference to a Boolean network, since the network is no longer a required part of the structure (although in most cases, it is simply copied).SymbolicAsyncGraph::empty_vertices
andSymbolicAsyncGraph::mk_empty_vertices
renamed toempty_colored_vertices
. This was a typo and we should have done this a long time ago.SymbolicAsyncGraph::unit_vertices
andSymbolicAsyncGraph::empty_vertices
methods.SymbolicAsyncGraph::as_network
now returnsOption<BooleanNetwork>
. The code that was using the underlying network was rewritten to use one of the new utility methods instead. With that said...SymbolicAsyncGraph
andSymbolicContext
for managingVariableId
objects without the underlyingBooleanNetwork
(namelySymbolicContext::find_network_variable
,SymbolicContext::get_network_variable_name
,SymbolicContext::network_variables
,SymbolicContext::find_state_variable
,SymbolicAsyncGraph::get_symbolic_fn_update
,SymbolicAsyncGraph::get_variable_name
,SymbolicAsyncGraph::num_vars
, andSymbolicAsyncGraph::variables
).SymbolicContext::eliminate_variable
which is used by the reduction.SymbolicContext::mk_instantiated_fn_update
which is a utility function used by witness generation and projected iteration.SymbolicAsyncGraph::new_raw
which can be used to create a graph from BDDs, without the underlying Boolean network.SymbolicAsyncGraph::inline_symbolic
, which implements the actual variable inlining.