[PPL-devel] [GIT] ppl/ppl(master): More work on the documentation of approximations for bounded integer arithmetic .
Roberto Bagnara
bagnara at cs.unipr.it
Sat May 16 22:25:53 CEST 2009
Module: ppl/ppl
Branch: master
Commit: abda7dc37e19d5e24ced391417d8216a2d1aaa10
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=abda7dc37e19d5e24ced391417d8216a2d1aaa10
Author: Roberto Bagnara <bagnara at cs.unipr.it>
Date: Sat May 16 22:25:18 2009 +0200
More work on the documentation of approximations for bounded integer arithmetic.
---
doc/definitions.dox | 30 +++++++++++++++++++++++-------
src/globals.types.hh | 7 +++++--
2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/doc/definitions.dox b/doc/definitions.dox
index bcb5b61..c11b9cc 100644
--- a/doc/definitions.dox
+++ b/doc/definitions.dox
@@ -454,18 +454,18 @@ Supported overflow behaviors are:
and then wrapped. For unsigned integers, the wrapping function is
simply \f$x \bmod 2^w\f$, most conveniently defined as
\f[
- \mathrm{wrap}_\mathrm{u}(x)
+ \mathrm{wrap}^\mathrm{u}_w(x)
\defeq
x - 2^w \lfloor x/2^w \rfloor.
\f]
For signed integers the wrapping function is, instead,
\f[
- \mathrm{wrap}_\mathrm{s}(x)
+ \mathrm{wrap}^\mathrm{s}_w(x)
\defeq
\begin{cases}
- \mathrm{wrap}_\mathrm{u}(x),
- &\text{if $\mathrm{wrap}_\mathrm{u}(x) < 2^{w-1}$;} \\
- \mathrm{wrap}_\mathrm{u}(x) - 2^w,
+ \mathrm{wrap}^\mathrm{u}_w(x),
+ &\text{if $\mathrm{wrap}^\mathrm{u}_w(x) < 2^{w-1}$;} \\
+ \mathrm{wrap}^\mathrm{u}_w(x) - 2^w,
&\text{otherwise.}
\end{cases}
\f]
@@ -492,12 +492,28 @@ Supported overflow behaviors are:
</DL>
FIXME(0.11): to be continued.
-\ref SK07 "[SK07]"
\subsection Wrapping_Operator Wrapping Operator
-FIXME(0.11): to be written.
+One possibility to precisely approximate the semantics of programs that
+operate on bounded integer variables is to follow the approach described
+in \ref SK07 "[SK07]". The idea is to associate space dimensions to the
+<EM>unwrapped values</EM> of bounded variables. Suppose <CODE>j</CODE>
+is a \f$w\f$-bit, unsigned program variable associated to a space dimension
+labeled by the variable \f$x\f$. If \f$x\f$ is constrained by some
+numerical abstraction to take values in a set \f$S \sseq \Rset\f$, then
+the program variable <CODE>j</CODE> can only take values in
+\f$\bigl\{\, \mathrm{wrap}^\mathrm{u}_w(z) \bigm| z \in S \,\bigr\}\f$.
+There are two reasons why this is interesting: firstly, this allows
+to retain relational information by using a single numerical abstraction
+tracking multiple program variables. Secondly, the integers modulo
+\f$2^w\f$ form a ring of equivalence classes on which addition
+and multiplication are well defined. This means, e.g., that assignments
+with affine right-hand sides and involving only variables with the same
+bit-width and representation can be safely modeled by affine images.
+
+FIXME(0.11): to be continued.
\section convex_polys Convex Polyhedra
diff --git a/src/globals.types.hh b/src/globals.types.hh
index 340e8e7..5ed9e76 100644
--- a/src/globals.types.hh
+++ b/src/globals.types.hh
@@ -101,10 +101,13 @@ enum Bounded_Integer_Type_Width {
\ref Approximating_Bounded_Arithmetic "approximating bounded arithmetic".
*/
enum Bounded_Integer_Type_Representation {
- //! Unsigned integer.
+ //! Unsigned binary.
UNSIGNED,
- //! Signed integer represented by the two's complement of the absolute value.
+ /*! \brief
+ Signed binary where negative values are represented by the two's
+ complement of the absolute value.
+ */
SIGNED_2_COMPLEMENT
};
More information about the PPL-devel
mailing list