Functor Shostak.Make


module Make: functor (Sh : T) -> sig  end
Constructing an inference system from a Shostak theory Th. For a description of the correctness statement of these inference rules, see module Infsys.

As an invariant, equality sets for representing contexts of Shostak theories are ordered equalities of the form x = a with x a variable and a a nonvariable, Sh.th-pure term. In addition, these equality sets are in

In case of convex Shostak theories, disjunction always fails, and there is no branching.

In case of incomplete Shostak theories, solve might raise Exc.Incomplete on an equality a = b. Now, a, b are named apart and the corresponding variable equality is merged. Notice, that incomplete solvers might lead to an incompleteness in the inference procedure.

Parameters:
Sh : Shostak.T


type e
val current : unit -> e
Parameters:
? : unit
val initialize : e -> unit
Intitialize inference system with equality set.
Parameters:
? : e
val finalize : unit -> e
Retrieve modified equality set.
Parameters:
? : unit
val abstract : Term.t -> unit
(g[a]; e; p) ==> (g[x]; e, x = a; p) with
Parameters:
? : Term.t
val merge : Fact.Equal.t -> unit
(g, a = b; e; p) ==> (g; e'; p') with
Parameters:
? : Fact.Equal.t
val propagate : Fact.Equal.t -> unit
(g, e; p) ==> (g; e'; p) with
Parameters:
? : Fact.Equal.t
val dismerge : Fact.Diseq.t -> unit
(g, a <> a; e; p) ==> (g; e'; p') with a, b i-pure, |= e', p' <=> |= e, p, a <> b.
Parameters:
? : Fact.Diseq.t
val propagate_diseq : Fact.Diseq.t -> unit
(g; e; p) ==> (g; e'; p') with
Parameters:
? : Fact.Diseq.t
val branch : unit -> unit
(g; e; p) ==> (g, c1; e; p) | ... | (g, cn; e; p) with
Parameters:
? : unit
val normalize : unit -> unit
(g; e; p) ==> (g'; e'; p') where source and target configuration are equivalent.
Parameters:
? : unit