PIPS
sc-red-int.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include "boolean.h"
#include "arithmetique.h"
#include "vecteur.h"
#include "contrainte.h"
#include "sc.h"
#include "matrix.h"
#include "sommet.h"
#include "plint.h"
+ Include dependency graph for sc-red-int.c:

Go to the source code of this file.

Macros

#define MALLOC(s, t, f)   malloc(s)
 package plint More...
 

Functions

Psysteme sys_int_redond (Psysteme sys)
 Psysteme sys_int_redond(Psysteme sys): elimination des contraintes lineaires redondantes d'un systeme lineaire en nombres entiers par tests de faisabilite exacts. More...
 

Macro Definition Documentation

◆ MALLOC

#define MALLOC (   s,
  t,
  f 
)    malloc(s)

package plint

Definition at line 44 of file sc-red-int.c.

Function Documentation

◆ sys_int_redond()

Psysteme sys_int_redond ( Psysteme  sys)

Psysteme sys_int_redond(Psysteme sys): elimination des contraintes lineaires redondantes d'un systeme lineaire en nombres entiers par tests de faisabilite exacts.

Chaque inegalite est inversee tour a tour, et la faisabilite de chacun des systemes ainsi obtenus est teste par sys_int_fais(), l'algorithme des congruences decroissantes.

inversion du sens de l'inegalite par multiplication

par -1 du coefficient de chaque variable

test de faisabilite avec la nouvelle inegalite

si le systeme est non faisable ==> inegalite redondante ==> elimination de cette inegalite

Definition at line 53 of file sc-red-int.c.

55 {
56 
57  Pcontrainte eq,eq1;
58 
59  sys = sc_normalize(sc_dup(sys));
60  if (sys && (sys->nb_ineq <= NB_INEQ_MAX2) && sys_int_fais(sys) &&
61  sys != NULL) {
62  for (eq = sys->inegalites;
63  eq != NULL && sys->nb_ineq > 1;
64  eq = eq1)
65  {
66  eq1 = eq->succ;
67  /* inversion du sens de l'inegalite par multiplication */
68  /* par -1 du coefficient de chaque variable */
71  /* test de faisabilite avec la nouvelle inegalite */
72  if (sys_int_fais(sys) == false)
73  {
74  /* si le systeme est non faisable
75  ==> inegalite redondante
76  ==> elimination de cette inegalite */
79  }
80  else
81  {
84  }
85  }
86  }
87  return (sys);
88 }
#define VALUE_MONE
#define VALUE_ONE
void eq_set_vect_nul(Pcontrainte)
void_eq_set_vect_nul(Pcontrainte c): transformation d'une contrainte en une contrainte triviale 0 == ...
Definition: unaires.c:84
bool sys_int_fais(Psysteme sys1)
bool sys_int_fais(Psysteme sys1): Test de faisabilite d'un systeme lineaire syst1 en nombres entiers ...
Definition: sc-fais-int.c:57
Psysteme sc_dup(Psysteme ps)
Psysteme sc_dup(Psysteme ps): should becomes a link.
Definition: sc_alloc.c:176
void sc_rm_empty_constraints(Psysteme ps, bool process_equalities)
package sc: elimination de redondance simple
Definition: sc_elim_eq.c:56
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Definition: sc_gram.c:108
Psysteme sc_normalize(Psysteme ps)
Psysteme sc_normalize(Psysteme ps): normalisation d'un systeme d'equation et d'inequations lineaires ...
void vect_chg_sgn(Pvecteur v)
void vect_chg_sgn(Pvecteur v): multiplie v par -1
Definition: scalaires.c:151
Pvecteur vecteur
struct Scontrainte * succ
Pcontrainte inegalites
Definition: sc-local.h:71
int nb_ineq
Definition: sc-local.h:73
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
void vect_add_elem(Pvecteur *pvect, Variable var, Value val)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Definition: unaires.c:72

References eq, eq_set_vect_nul(), sc_dup(), sc_normalize(), sc_rm_empty_constraints(), Scontrainte::succ, sys_int_fais(), TCST, VALUE_MONE, VALUE_ONE, vect_add_elem(), vect_chg_sgn(), and Scontrainte::vecteur.

+ Here is the call graph for this function: