Omega

NAME

Omega - solves a universally quantified problem in Presburger Arithmetic

SYNOPSIS

Omega;

Flag Omega "[+-]{time|system|action}".

DESCRIPTION

Omega solves a goal in Presburger arithmetic, ie a universally quantified formula made of equations and inequations.

Equations may be specified either on the type nat or on the type Z. Formulas on nat are automatically injected into Z. The procedure may use any hypothesis to solve the goal.

Overview of the tactic

Overview of the decision procedure

We use a small subset of the decision procedure presented in
"The Omega Test: a fast and practical integer programming algorithm for dependence analysis", William Pugh, CACM [8], 1992, p 102-114
Here is an overview. The reader is refered to the original paper for more information. It may happen that there is a real solution and no integer one. The last steps of the Omega procedure (dark shadow) are not implemented, so the decision procedure is only partial.

Restrictions

Connectors recognised by the tactic

/\, \/, ~, ->

Operators on nat recognized by the tactic

=, le, lt, gt, ge, plus, minus, mult, S

Operators on Z recognized by the tactic

=, Zle, Zlt, Zgt, Zge, Zplus, Zminus, Zinv, Zmult, Zs

Control over the output

There are some flags that can be set to get more information on the procedure Use Omega Flag followed by a string to change the state of a flag. +<flag> to set it, -<flag> to unset it and <flag> to toggle it.

EXAMPLE

Coq < Flag Omega "+time". Coq < Goal (m,n:Z) ~((Zle (Zplus (1) (Zmult (2) m)) (Zmult (2) n)) /\ Coq < (Zle (Zmult (2) n) (Zplus (1) (Zmult (2) m)))). 1 subgoal ============================ (m,n:Z) ~((Zle (Zplus (##1) (Zmult (##10) m)) (Zmult (##10) n)) /\(Zle (Zmult (##10) n) (Zplus (##1) (Zmult (##10) m)))) Unnamed_thm < Intros; Omega. Rewrites : tu=0.60 ts=0.02 (* Time taken to perform rewriting *) Omega : tu=3.57 ts=0.03 (* Global time *) Elim : tu=0.08 ts=0.00 (* Time taken by Elim *) Simpl : tu=0.48 ts=0.00 (* Time taken by Simpl *) Generalize : tu=1.08 ts=0.00 (* Time taken by Generalize *) Solver : tu=2.83 ts=0.03 (* Global time - normalization time *) Subtree proved!

BUGS

The procedure does not fail nicely so an Undo step may be necessary if the goal can't be solved.

The simplification procedure is very dumb and this results in many redundant cases to explore.

Much too slow.

Certainely plenty other bugs !! You can report them to

cregut@lannion.cnet.fr