Spacer has a different defintion of is_clause() than ast_util.
It is currently only used in assertions.
Main difference:
x=y
where x and y are Bool atoms is considered to be an atom, so that
(or (= x y) (not (= z y)))
is a literal
Co-authored-by: Arie Gurfinkel <arie.gurfinkel@uwaterloo.ca>
better proof generation for the case when the query is reachable from initial
states. This case needs to be handled better so that spacer can assume
the problem is non-trivial.
* [spacer] logging solver events
New option fp.spacer.trace_file='file.log' enables logging solving events
into a file.
These events are useful for debugging the solver, but also for visualizing
the solving process in a variety of ways
* [spacer] allow setting logic for solvers used by spacer
* [spacer] option to set arithmetic solver explicitly
* [spacer] improve of dumping solver_pool state for debugging
* fix propagate_ineqs to handle strict inequality
Co-authored-by: Nham Van Le <nv3le@precious3.eng.uwaterloo.ca>
Must check that newly constructed generalization blocks
the proof obligation.
Was only checking that generalization is entailed by the transition system!
Exceptions caught by value incur needless cost in C++, most of them can
be caught by const-reference, especially as nearly none are actually
used. This could allow compiler generate a slightly more efficient code.
Background external invariants are constraints that are assumed to be
true of the system. This commit introduces a mode in which
background invariants are used only duing inductive generalization
and lemma pushing, but not during predecessor computation.
It is believed that this will be more efficient used of background
external invariants since they will not be able to disturb how
predecessors are generalized and computed.
Based on a patch by Jorge Navas
When equality propagation is disabled for arithmetic,
equality atoms are expanded into inequality for potentially
better generalization with interpolation
pob_queue is a priority queue. Changing a pob while it is in the queue might change
the priority. This is a source of subtle bugs. The flag is ment to help defend
against this issues in the future.
As a side-effect, a pob that is already in the queue will be silently not added
to it, and a new version of a pob might be created if a version being looked
for is already in the queue.