module Combine: sig end
Combined inference system
Author(s): Harald Ruess, N. Shankar
Inference system for the union of the theories
Th.u
of uninterpreted functions,
Th.la
of linear arithmetic,
Th.nl
of nonlinear multiplication,
Th.p
of products,
Th.cop
of coproducts,
Th.app
of combinatory logic,
Th.arr
of functional arrays,
Th.set
of propositional sets,
Th.bv
of bitvectors.
val sigma : Sym.t -> Term.t list -> Term.t
Theory-specific canonizers.
val solve : Th.t -> Term.Equal.t -> Term.Subst.t
Theory-specific solvers.
module E: sig end
Combination of individual equality sets.
type t = E.t Infsys.Config.t
Configurations
(g, e, p)
for the combined inference system consist
- of a global input
g
,
- a combined euqality set
e
, and
- a variable partition
p
.
val process : Fact.t -> E.t * Partition.t -> E.t * Partition.t
Given a starting configuration ({fct}, e, p)
, process applies
all rules of the combined inference system (except branching rules).
The source and target configuration of process
are equivalent,
although the target configuration might contain internally generated
variables not present in the source configuration.
val is_sat : E.t * Partition.t -> (E.t * Partition.t) option
is_sat [c]
applies applicable branching rules until
it finds a satisfiable configuration d
(with empty input) for
which no branching rule is applicable; in this case Some(d)
is returned.
Otherwise, all branching states are unsatisfiable, and None
is returned.
val dom : E.t * Partition.t -> Term.t -> Dom.t * Jst.t
dom p a
returns a domain d
for a term a
together with
a justification rho
such that rho |- a in d
. This function
is extended to arithmetic constraints using an abstract domain
interpretation. Raises Not_found
if no domain constraint is found.
val can : E.t * Partition.t -> Jst.Eqtrans.t
Given an equality set e
and a partition p
as obtained
from processing, can (e, p) a
returns a term b
equivalent
to a
in (e, p)
together with a justification rho
. If
no further branching is applicable on (e, p)
, then can (e, p)
is a canonizer in the sense that can (e, p) a
is syntactically
equal to can (e, p) b
iff the equality a = b
follows from (e, p)
in the supported union of theories.
val simplify : E.t * Partition.t -> Atom.t -> Atom.t * Jst.t
Simplification of atoms in a context
(e, p)
by canonizing
component terms using
Combine.can
. Simplification is
incomplete in the sense that there are
- valid atoms
a
in (e, p)
which do not reduce to Atom.mk_true
,
- unsatisfiable atoms
a
in (e, p)
which do not reduce to Atom.mk_false
.
val cheap : bool Pervasives.ref
If
cheap
is set,
Combine.simplify
only performs cheap
simplifications for disequalities and inequalities. Setting
cheap
to
false
make
Combine.simplify
more complete.
val gc : t -> unit
gc c
garbage collects internal variables in configuration
c
as introduced by
Combine.process
.
val maximize : E.t * Partition.t -> Jst.Eqtrans.t
maximize c a
returns either
(b, rho)
such that b+
is empty and rho |- la => a = b
, or
- raises
La.Unbounded
if a
is unbounded in the linear
arithmetic la
equality set of c
.
val minimize : E.t * Partition.t -> Jst.Eqtrans.t
Minimize is the dual of maximize.
val model : E.t * Partition.t -> Term.t list -> Term.t Term.Map.t
Model construction. Experimental.