Namespaces | Classes | Typedefs | Enumerations | Functions | Variables

Parma_Polyhedra_Library Namespace Reference

The entire library is confined to this namespace. More...

Namespaces

namespace  IO_Operators
 

All input/output operators are confined to this namespace.


Classes

class  Throwable
 User objects the PPL can throw. More...
struct  Recycle_Input
 A tag class. More...
struct  Is_Checked
struct  Is_Checked< Checked_Number< T, P > >
struct  Is_Native_Or_Checked
class  Checked_Number
 A wrapper for numeric types implementing a given policy. More...
class  Variable
 A dimension of the vector space. More...
class  Linear_Expression
 A linear expression. More...
class  Constraint_System
 A system of constraints. More...
class  Constraint
 A linear equality or inequality. More...
class  Poly_Con_Relation
 The relation between a polyhedron and a constraint. More...
class  Generator_System
 A system of generators. More...
class  Generator
 A line, ray, point or closure point. More...
class  Congruence_System
 A system of congruences. More...
class  Congruence
 A linear congruence. More...
class  Grid_Generator_System
 A system of grid generators. More...
class  Grid_Generator
 A grid line, parameter or grid point. More...
class  Variables_Set
 An std::set of variables' indexes. More...
class  PIP_Problem
 A Parametric Integer (linear) Programming problem. More...
class  PIP_Tree_Node
 A node of the PIP solution tree. More...
class  PIP_Solution_Node
 A tree node representing part of the space of solutions. More...
class  PIP_Decision_Node
 A tree node representing a decision in the space of solutions. More...
class  BHRZ03_Certificate
 The convergence certificate for the BHRZ03 widening operator. More...
class  H79_Certificate
 A convergence certificate for the H79 widening operator. More...
class  Poly_Gen_Relation
 The relation between a polyhedron and a generator. More...
class  Polyhedron
 The base class for convex polyhedra. More...
class  MIP_Problem
 A Mixed Integer (linear) Programming problem. More...
class  Interval
 A generic, not necessarily closed, possibly restricted interval. More...
class  Grid_Certificate
 The convergence certificate for the Grid widening operator. More...
class  C_Polyhedron
 A closed convex polyhedron. More...
class  NNC_Polyhedron
 A not necessarily closed convex polyhedron. More...
class  Grid
 A grid. More...
class  Box
 A not necessarily closed, iso-oriented hyperrectangle. More...
class  BD_Shape
 A bounded difference shape. More...
class  Octagonal_Shape
 An octagonal shape. More...
class  Smash_Reduction
 This class provides the reduction method for the Smash_Product domain. More...
class  Constraints_Reduction
 This class provides the reduction method for the Constraints_Product domain. More...
class  Congruences_Reduction
 This class provides the reduction method for the Congruences_Product domain. More...
class  Shape_Preserving_Reduction
 This class provides the reduction method for the Shape_Preserving_Product domain. More...
class  No_Reduction
 This class provides the reduction method for the Direct_Product domain. More...
class  Partially_Reduced_Product
 The partially reduced product of two abstractions. More...
class  Domain_Product
 This class is temporary and will be removed when template typedefs will be supported in C++. More...
class  Determinate
 A wrapper for PPL pointsets, providing them with a determinate constraint system interface, as defined in [Bag98]. More...
class  Powerset
 The powerset construction on a base-level domain. More...
class  Pointset_Powerset
 The powerset construction instantiated on PPL pointset domains. More...
class  GMP_Integer
 Unbounded integers as provided by the GMP library. More...

Typedefs

typedef size_t dimension_type
 An unsigned integral type for representing space dimensions.
typedef size_t memory_size_type
 An unsigned integral type for representing memory size in bytes.
typedef PPL_COEFFICIENT_TYPE Coefficient
 An alias for easily naming the type of PPL coefficients.

Enumerations

enum  Result_Class { VC_NORMAL, VC_MINUS_INFINITY, VC_PLUS_INFINITY, VC_NAN }
enum  Result_Relation {
  VR_EMPTY, VR_EQ, VR_LT, VR_GT,
  VR_NE, VR_LE, VR_GE, VR_LGE
}
enum  Result {
  V_EMPTY, V_EQ, V_LT, V_GT,
  V_NE, V_LE, V_GE, V_LGE,
  V_OVERFLOW, V_LT_INF, V_GT_SUP, V_LT_PLUS_INFINITY,
  V_GT_MINUS_INFINITY, V_EQ_MINUS_INFINITY, V_EQ_PLUS_INFINITY, V_NAN,
  V_CVT_STR_UNK, V_DIV_ZERO, V_INF_ADD_INF, V_INF_DIV_INF,
  V_INF_MOD, V_INF_MUL_ZERO, V_INF_SUB_INF, V_MOD_ZERO,
  V_SQRT_NEG, V_UNKNOWN_NEG_OVERFLOW, V_UNKNOWN_POS_OVERFLOW, V_UNREPRESENTABLE
}
 

Possible outcomes of a checked arithmetic computation.

More...
enum  Degenerate_Element { UNIVERSE, EMPTY }
 

Kinds of degenerate abstract elements.

More...
enum  Relation_Symbol {
  EQUAL, LESS_THAN, LESS_OR_EQUAL, GREATER_THAN,
  GREATER_OR_EQUAL, NOT_EQUAL
}
 

Relation symbols.

More...
enum  Complexity_Class { POLYNOMIAL_COMPLEXITY, SIMPLEX_COMPLEXITY, ANY_COMPLEXITY }
 

Complexity pseudo-classes.

More...
enum  Optimization_Mode { MINIMIZATION, MAXIMIZATION }
 

Possible optimization modes.

More...
enum  Bounded_Integer_Type_Width {
  BITS_8, BITS_16, BITS_32, BITS_64,
  BITS_128
}
 

Widths of bounded integer types.

More...
enum  Bounded_Integer_Type_Representation { UNSIGNED, SIGNED_2_COMPLEMENT }
 

Representation of bounded integer types.

More...
enum  Bounded_Integer_Type_Overflow { OVERFLOW_WRAPS, OVERFLOW_UNDEFINED, OVERFLOW_IMPOSSIBLE }
 

Overflow behavior of bounded integer types.

More...
enum  Rounding_Dir {
  ROUND_DOWN, ROUND_UP, ROUND_IGNORE , ROUND_NOT_NEEDED ,
  ROUND_STRICT_RELATION
}
 

Rounding directions for arithmetic computations.

More...
enum  PIP_Problem_Status { UNFEASIBLE_PIP_PROBLEM, OPTIMIZED_PIP_PROBLEM }
 

Possible outcomes of the PIP_Problem solver.

More...
enum  MIP_Problem_Status { UNFEASIBLE_MIP_PROBLEM, UNBOUNDED_MIP_PROBLEM, OPTIMIZED_MIP_PROBLEM }
 

Possible outcomes of the MIP_Problem solver.

More...
enum  I_Result {
  I_EMPTY = 1, I_SINGLETON = 2, I_SOME = 4, I_UNIVERSE = 8,
  I_NOT_EMPTY = I_SINGLETON | I_SOME | I_UNIVERSE, I_ANY = I_EMPTY | I_NOT_EMPTY, I_NOT_UNIVERSE = I_EMPTY | I_SINGLETON | I_SOME, I_NOT_DEGENERATE = I_SINGLETON | I_SOME,
  I_EXACT = 16, I_INEXACT = 32, I_CHANGED = 64, I_UNCHANGED = 128,
  I_SINGULARITIES = 256
}

Functions

unsigned version_major ()
 Returns the major number of the PPL version.
unsigned version_minor ()
 Returns the minor number of the PPL version.
unsigned version_revision ()
 Returns the revision number of the PPL version.
unsigned version_beta ()
 Returns the beta number of the PPL version.
const char * version ()
 Returns a character string containing the PPL version.
const char * banner ()
 Returns a character string containing the PPL banner.
void set_rounding_for_PPL ()
 Sets the FPU rounding mode so that the PPL abstractions based on floating point numbers work correctly.
void restore_pre_PPL_rounding ()
 Sets the FPU rounding mode as it was before initialization of the PPL.
void fpu_initialize_control_functions ()
 Initializes the FPU control functions.
fpu_rounding_direction_type fpu_get_rounding_direction ()
 Returns the current FPU rounding direction.
void fpu_set_rounding_direction (fpu_rounding_direction_type dir)
 Sets the FPU rounding direction to dir.
fpu_rounding_control_word_type fpu_save_rounding_direction (fpu_rounding_direction_type dir)
 Sets the FPU rounding direction to dir and returns the rounding control word previously in use.
fpu_rounding_control_word_type fpu_save_rounding_direction_reset_inexact (fpu_rounding_direction_type dir)
 Sets the FPU rounding direction to dir, clears the inexact computation status, and returns the rounding control word previously in use.
void fpu_restore_rounding_direction (fpu_rounding_control_word_type w)
 Restores the FPU rounding rounding control word to cw.
void fpu_reset_inexact ()
 Clears the inexact computation status.
int fpu_check_inexact ()
 Queries the inexact computation status.
Result_Class result_class (Result r)
 Extracts the value class part of r (representable number, unrepresentable minus/plus infinity or nan).
Result_Relation result_relation (Result r)
 Extracts the relation part of r.
dimension_type not_a_dimension ()
 Returns a value that does not designate a valid dimension.
Rounding_Dir inverse (Rounding_Dir dir)
 Returns the inverse rounding mode of dir, ROUND_IGNORE being the inverse of itself.
void initialize ()
 Initializes the library.
void finalize ()
 Finalizes the library.
unsigned irrational_precision ()
 Returns the precision parameter used for irrational calculations.
void set_irrational_precision (const unsigned p)
 Sets the precision parameter used for irrational calculations.
Coefficient_traits::const_reference Coefficient_zero ()
 Returns a const reference to a Coefficient with value 0.
Coefficient_traits::const_reference Coefficient_one ()
 Returns a const reference to a Coefficient with value 1.
unsigned long isqrt (unsigned long x)
 Returns the integer square root of x.
dimension_type max_space_dimension ()
 Returns the maximum space dimension this library can handle.
template<typename PSET >
bool termination_test_MS (const PSET &pset)
 Termination test using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
bool termination_test_MS_2 (const PSET &pset_before, const PSET &pset_after)
 Termination test using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
bool one_affine_ranking_function_MS (const PSET &pset, Generator &mu)
 Termination test with witness ranking function using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
bool one_affine_ranking_function_MS_2 (const PSET &pset_before, const PSET &pset_after, Generator &mu)
 Termination test with witness ranking function using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
void all_affine_ranking_functions_MS (const PSET &pset, C_Polyhedron &mu_space)
 Termination test with ranking function space using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
void all_affine_ranking_functions_MS_2 (const PSET &pset_before, const PSET &pset_after, C_Polyhedron &mu_space)
 Termination test with ranking function space using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
void all_affine_quasi_ranking_functions_MS (const PSET &pset, C_Polyhedron &decreasing_mu_space, C_Polyhedron &bounded_mu_space)
 Computes the spaces of affine quasi ranking functions using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
void all_affine_quasi_ranking_functions_MS_2 (const PSET &pset_before, const PSET &pset_after, C_Polyhedron &decreasing_mu_space, C_Polyhedron &bounded_mu_space)
 Computes the spaces of affine quasi ranking functions using an improvement of the method by Mesnard and Serebrenik [BMPZ10].
template<typename PSET >
bool termination_test_PR (const PSET &pset)
 Like termination_test_MS() but using the method by Podelski and Rybalchenko [BMPZ10].
template<typename PSET >
bool termination_test_PR_2 (const PSET &pset_before, const PSET &pset_after)
 Like termination_test_MS_2() but using an alternative formalization of the method by Podelski and Rybalchenko [BMPZ10].
template<typename PSET >
bool one_affine_ranking_function_PR (const PSET &pset, Generator &mu)
 Like one_affine_ranking_function_MS() but using the method by Podelski and Rybalchenko [BMPZ10].
template<typename PSET >
bool one_affine_ranking_function_PR_2 (const PSET &pset_before, const PSET &pset_after, Generator &mu)
 Like one_affine_ranking_function_MS_2() but using an alternative formalization of the method by Podelski and Rybalchenko [BMPZ10].
template<typename PSET >
void all_affine_ranking_functions_PR (const PSET &pset, NNC_Polyhedron &mu_space)
 Like all_affine_ranking_functions_MS() but using the method by Podelski and Rybalchenko [BMPZ10].
template<typename PSET >
void all_affine_ranking_functions_PR_2 (const PSET &pset_before, const PSET &pset_after, NNC_Polyhedron &mu_space)
 Like all_affine_ranking_functions_MS_2() but using an alternative formalization of the method by Podelski and Rybalchenko [BMPZ10].
Memory Size Inspection Functions
template<typename T >
Enable_If< Is_Native< T >
::value, memory_size_type >
::type 
total_memory_in_bytes (const T &)
template<typename T >
Enable_If< Is_Native< T >
::value, memory_size_type >
::type 
external_memory_in_bytes (const T &)
memory_size_type total_memory_in_bytes (const mpz_class &x)
memory_size_type external_memory_in_bytes (const mpz_class &x)
memory_size_type total_memory_in_bytes (const mpq_class &x)
memory_size_type external_memory_in_bytes (const mpq_class &x)
Relational Operators and Comparison Functions
template<typename T1 , typename T2 >
Enable_If
< Is_Native_Or_Checked< T1 >
::value &&Is_Native_Or_Checked
< T2 >::value, bool >::type 
equal (const T1 &x, const T2 &y)
template<typename T1 , typename T2 >
Enable_If
< Is_Native_Or_Checked< T1 >
::value &&Is_Native_Or_Checked
< T2 >::value, bool >::type 
not_equal (const T1 &x, const T2 &y)
template<typename T1 , typename T2 >
Enable_If
< Is_Native_Or_Checked< T1 >
::value &&Is_Native_Or_Checked
< T2 >::value, bool >::type 
greater_or_equal (const T1 &x, const T2 &y)
template<typename T1 , typename T2 >
Enable_If
< Is_Native_Or_Checked< T1 >
::value &&Is_Native_Or_Checked
< T2 >::value, bool >::type 
greater_than (const T1 &x, const T2 &y)
template<typename T1 , typename T2 >
Enable_If
< Is_Native_Or_Checked< T1 >
::value &&Is_Native_Or_Checked
< T2 >::value, bool >::type 
less_or_equal (const T1 &x, const T2 &y)
template<typename T1 , typename T2 >
Enable_If
< Is_Native_Or_Checked< T1 >
::value &&Is_Native_Or_Checked
< T2 >::value, bool >::type 
less_than (const T1 &x, const T2 &y)
Input-Output Operators
template<typename T >
Enable_If
< Is_Native_Or_Checked< T >
::value, void >::type 
ascii_dump (std::ostream &s, const T &t)
 Ascii dump for native or checked.
template<typename T >
Enable_If
< Is_Native_Or_Checked< T >
::value, bool >::type 
ascii_load (std::ostream &s, T &t)
 Ascii load for native or checked.

Variables

const Throwable *volatile abandon_expensive_computations
 A pointer to an exception object.

Detailed Description

The entire library is confined to this namespace.


Enumeration Type Documentation

Enumerator:
VC_NORMAL 

Representable number result class.

VC_MINUS_INFINITY 

Negative infinity result class.

VC_PLUS_INFINITY 

Positive infinity result class.

VC_NAN 

Not a number result class.

Enumerator:
VR_EMPTY 

No values satisfies the relation.

VR_EQ 

Equal. This need to be accompanied by a value.

VR_LT 

Less than. This need to be accompanied by a value.

VR_GT 

Greater than. This need to be accompanied by a value.

VR_NE 

Not equal. This need to be accompanied by a value.

VR_LE 

Less or equal. This need to be accompanied by a value.

VR_GE 

Greater or equal. This need to be accompanied by a value.

VR_LGE 

All values satisfy the relation.

Enumerator:
I_EMPTY 

The resulting set may be empty.

I_SINGLETON 

The resulting set may have only one value.

I_SOME 

The resulting set may have more than one value and to be not the domain universe.

I_UNIVERSE 

The resulting set may be the domain universe.

I_NOT_EMPTY 

The resulting set is not empty.

I_ANY 

The resulting set may be empty or not empty.

I_NOT_UNIVERSE 

The resulting set may be empty or not empty.

I_NOT_DEGENERATE 

The resulting set can'be empty or the domain universe.

I_EXACT 

The resulting set is definitely exact.

I_INEXACT 

The resulting set is definitely inexact.

I_CHANGED 

The operation has definitely changed the set.

I_UNCHANGED 

The operation has left the set definitely unchanged.

I_SINGULARITIES 

The operation is undefined for some combination of values.


Function Documentation

const char* Parma_Polyhedra_Library::banner (  ) 

Returns a character string containing the PPL banner.

The banner provides information about the PPL version, the licensing, the lack of any warranty whatsoever, the C++ compiler used to build the library, where to report bugs and where to look for further information.

void Parma_Polyhedra_Library::set_rounding_for_PPL (  )  [inline]

Sets the FPU rounding mode so that the PPL abstractions based on floating point numbers work correctly.

This is performed automatically at initialization-time. Calling this function is needed only if restore_pre_PPL_rounding() has been previously called.

void Parma_Polyhedra_Library::restore_pre_PPL_rounding (  )  [inline]

Sets the FPU rounding mode as it was before initialization of the PPL.

After calling this function it is absolutely necessary to call set_rounding_for_PPL() before using any PPL abstractions based on floating point numbers. This is performed automatically at finalization-time.

int Parma_Polyhedra_Library::fpu_check_inexact (  )  [inline]

Queries the inexact computation status.

Returns 0 if the computation was definitely exact, 1 if it was definitely inexact, -1 if definite exactness information is unavailable.

void Parma_Polyhedra_Library::set_irrational_precision ( const unsigned  p  )  [inline]

Sets the precision parameter used for irrational calculations.

The lesser between numerator and denominator is limited to 2**p.

If p is less than or equal to INT_MAX, sets the precision parameter used for irrational calculations to p.

Exceptions:
std::invalid_argument Thrown if p is greater than INT_MAX.
template<typename PSET >
bool Parma_Polyhedra_Library::termination_test_MS ( const PSET &  pset  ) 

Termination test using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset A pointset approximating the behavior of a loop whose termination is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

where unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update.

Returns:
true if any loop approximated by pset definitely terminates; false if the test is inconclusive. However, if pset precisely characterizes the effect of the loop body onto the loop-relevant program variables, then true is returned if and only if the loop terminates.
template<typename PSET >
bool Parma_Polyhedra_Library::termination_test_MS_2 ( const PSET &  pset_before,
const PSET &  pset_after 
)

Termination test using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset_before A pointset approximating the values of loop-relevant variables before the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x_1, \ldots, x_n $ go onto space dimensions $ 0, \ldots, n-1 $.
pset_after A pointset approximating the values of loop-relevant variables after the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

Note that unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update. Note also that unprimed variables are assigned to different space dimensions in pset_before and pset_after.

Returns:
true if any loop approximated by pset definitely terminates; false if the test is inconclusive. However, if pset_before and pset_after precisely characterize the effect of the loop body onto the loop-relevant program variables, then true is returned if and only if the loop terminates.
template<typename PSET >
bool Parma_Polyhedra_Library::one_affine_ranking_function_MS ( const PSET &  pset,
Generator &  mu 
)

Termination test with witness ranking function using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset A pointset approximating the behavior of a loop whose termination is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

where unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update.

mu When true is returned, this is assigned a point of space dimension $ n+1 $ encoding one (not further specified) affine ranking function for the loop being analyzed. The ranking function is of the form $ \mu_0 + \sum_{i=1}^n \mu_i x_i $ where $ \mu_0, \mu_1, \ldots, \mu_n $ are the coefficients of mu corresponding to the space dimensions $ n, 0, \ldots, n-1 $, respectively.
Returns:
true if any loop approximated by pset definitely terminates; false if the test is inconclusive. However, if pset precisely characterizes the effect of the loop body onto the loop-relevant program variables, then true is returned if and only if the loop terminates.
template<typename PSET >
bool Parma_Polyhedra_Library::one_affine_ranking_function_MS_2 ( const PSET &  pset_before,
const PSET &  pset_after,
Generator &  mu 
)

Termination test with witness ranking function using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset_before A pointset approximating the values of loop-relevant variables before the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x_1, \ldots, x_n $ go onto space dimensions $ 0, \ldots, n-1 $.
pset_after A pointset approximating the values of loop-relevant variables after the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

Note that unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update. Note also that unprimed variables are assigned to different space dimensions in pset_before and pset_after.

Parameters:
mu When true is returned, this is assigned a point of space dimension $ n+1 $ encoding one (not further specified) affine ranking function for the loop being analyzed. The ranking function is of the form $ \mu_0 + \sum_{i=1}^n \mu_i x_i $ where $ \mu_0, \mu_1, \ldots, \mu_n $ are the coefficients of mu corresponding to the space dimensions $ n, 0, \ldots, n-1 $, respectively.
Returns:
true if any loop approximated by pset definitely terminates; false if the test is inconclusive. However, if pset_before and pset_after precisely characterize the effect of the loop body onto the loop-relevant program variables, then true is returned if and only if the loop terminates.
template<typename PSET >
void Parma_Polyhedra_Library::all_affine_ranking_functions_MS ( const PSET &  pset,
C_Polyhedron &  mu_space 
)

Termination test with ranking function space using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset A pointset approximating the behavior of a loop whose termination is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

where unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update.

mu_space This is assigned a closed polyhedron of space dimension $ n+1 $ representing the space of all the affine ranking functions for the loops that are precisely characterized by pset. These ranking functions are of the form $ \mu_0 + \sum_{i=1}^n \mu_i x_i $ where $ \mu_0, \mu_1, \ldots, \mu_n $ identify any point of the mu_space polyhedron. The variables $ \mu_0, \mu_1, \ldots, \mu_n $ correspond to the space dimensions of mu_space $ n, 0, \ldots, n-1 $, respectively. When mu_space is empty, it means that the test is inconclusive. However, if pset precisely characterizes the effect of the loop body onto the loop-relevant program variables, then mu_space is empty if and only if the loop does not terminate.
template<typename PSET >
void Parma_Polyhedra_Library::all_affine_ranking_functions_MS_2 ( const PSET &  pset_before,
const PSET &  pset_after,
C_Polyhedron &  mu_space 
)

Termination test with ranking function space using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset_before A pointset approximating the values of loop-relevant variables before the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x_1, \ldots, x_n $ go onto space dimensions $ 0, \ldots, n-1 $.
pset_after A pointset approximating the values of loop-relevant variables after the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

Note that unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update. Note also that unprimed variables are assigned to different space dimensions in pset_before and pset_after.

Parameters:
mu_space This is assigned a closed polyhedron of space dimension $ n+1 $ representing the space of all the affine ranking functions for the loops that are precisely characterized by pset. These ranking functions are of the form $ \mu_0 + \sum_{i=1}^n \mu_i x_i $ where $ \mu_0, \mu_1, \ldots, \mu_n $ identify any point of the mu_space polyhedron. The variables $ \mu_0, \mu_1, \ldots, \mu_n $ correspond to the space dimensions of mu_space $ n, 0, \ldots, n-1 $, respectively. When mu_space is empty, it means that the test is inconclusive. However, if pset_before and pset_after precisely characterize the effect of the loop body onto the loop-relevant program variables, then mu_space is empty if and only if the loop does not terminate.
template<typename PSET >
void Parma_Polyhedra_Library::all_affine_quasi_ranking_functions_MS ( const PSET &  pset,
C_Polyhedron &  decreasing_mu_space,
C_Polyhedron &  bounded_mu_space 
)

Computes the spaces of affine quasi ranking functions using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset A pointset approximating the behavior of a loop whose termination is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

where unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update.

decreasing_mu_space This is assigned a closed polyhedron of space dimension $ n+1 $ representing the space of all the decreasing affine functions for the loops that are precisely characterized by pset.
bounded_mu_space This is assigned a closed polyhedron of space dimension $ n+1 $ representing the space of all the lower bounded affine functions for the loops that are precisely characterized by pset.

These quasi-ranking functions are of the form $ \mu_0 + \sum_{i=1}^n \mu_i x_i $ where $ \mu_0, \mu_1, \ldots, \mu_n $ identify any point of the decreasing_mu_space and bounded_mu_space polyhedrons. The variables $ \mu_0, \mu_1, \ldots, \mu_n $ correspond to the space dimensions $ n, 0, \ldots, n-1 $, respectively. When decreasing_mu_space (resp., bounded_mu_space) is empty, it means that the test is inconclusive. However, if pset precisely characterizes the effect of the loop body onto the loop-relevant program variables, then decreasing_mu_space (resp., bounded_mu_space) will be empty if and only if there is no decreasing (resp., lower bounded) affine function, so that the loop does not terminate.

template<typename PSET >
void Parma_Polyhedra_Library::all_affine_quasi_ranking_functions_MS_2 ( const PSET &  pset_before,
const PSET &  pset_after,
C_Polyhedron &  decreasing_mu_space,
C_Polyhedron &  bounded_mu_space 
)

Computes the spaces of affine quasi ranking functions using an improvement of the method by Mesnard and Serebrenik [BMPZ10].

Template Parameters:
PSET Any pointset supported by the PPL that provides the minimized_constraints() method.
Parameters:
pset_before A pointset approximating the values of loop-relevant variables before the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x_1, \ldots, x_n $ go onto space dimensions $ 0, \ldots, n-1 $.
pset_after A pointset approximating the values of loop-relevant variables after the update performed in the loop body that is being analyzed. The variables indices are allocated as follows:

  • $ x'_1, \ldots, x'_n $ go onto space dimensions $ 0, \ldots, n-1 $,
  • $ x_1, \ldots, x_n $ go onto space dimensions $ n, \ldots, 2n-1 $,

Note that unprimed variables represent the values of the loop-relevant program variables before the update performed in the loop body, and primed variables represent the values of those program variables after the update. Note also that unprimed variables are assigned to different space dimensions in pset_before and pset_after.

Parameters:
decreasing_mu_space This is assigned a closed polyhedron of space dimension $ n+1 $ representing the space of all the decreasing affine functions for the loops that are precisely characterized by pset.
bounded_mu_space This is assigned a closed polyhedron of space dimension $ n+1 $ representing the space of all the lower bounded affine functions for the loops that are precisely characterized by pset.

These ranking functions are of the form $ \mu_0 + \sum_{i=1}^n \mu_i x_i $ where $ \mu_0, \mu_1, \ldots, \mu_n $ identify any point of the decreasing_mu_space and bounded_mu_space polyhedrons. The variables $ \mu_0, \mu_1, \ldots, \mu_n $ correspond to the space dimensions $ n, 0, \ldots, n-1 $, respectively. When decreasing_mu_space (resp., bounded_mu_space) is empty, it means that the test is inconclusive. However, if pset_before and pset_after precisely characterize the effect of the loop body onto the loop-relevant program variables, then decreasing_mu_space (resp., bounded_mu_space) will be empty if and only if there is no decreasing (resp., lower bounded) affine function, so that the loop does not terminate.