The linear decision command solves predicates in linear arithmetic.
Any predicate comprising only
first-order logical connectives
(,
,
,
,
,
),
the predicates true and false,
quantifiers provided that when the predicate is put into
prenex normal form (quantifiers outermost) it does not use a mixture
of both universal quantifiers and existential quantifiers,
the arithmetic ordering relations (<,
, =,
, >),
simple membership predicates to give information as to whether a variable is
constrained to be a known numeric set
(
,
,
1,
,
+,
, but not
),
the arithmetic functions (+, -, * by a constant, division by a constant),
the if-then-else construct,
numeric literals,
and arithmetic variables bound by the quantifiers,
is a linear arithmetic predicate.
Linear arithmetic predicates can be decided by the linear decision command:
it replaces each by either true of false.
All the numeric functions and relations used must have been declared in the prelude, or in sections called numkit or numdefs or toolkit.
For example, the linear decision command can decide the following predicate.
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
The algorithm implemented is Bledsoe's SUP-INF method with Shostak's improved method. See
(1) Bledsoe W.W The SUP-INF method in Presburger arithmetic. Memo ATP-18, Math. Dept., U of Texas at Austin, Austin, Tex., Dec. 1974
and
(2) Shostak R.E. On the SUP-INF Method for Proving Presburger Formulas JACM Vol 24 No 4 October 1977 pp 529-543.
See also the linear solution command.
"linear decision" p1 p2
This example applies the linear decision command to predicates p1 and p2.