PIPS
pnome-reduc.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include "linear_assert.h"
#include "boolean.h"
#include "arithmetique.h"
#include "vecteur.h"
#include "polynome.h"
+ Include dependency graph for pnome-reduc.c:

Go to the source code of this file.

Functions

Ppolynome polynome_var_subst (Ppolynome pp, Variable var, Ppolynome ppsubst)
 Ppolynome polynome_var_subst(Ppolynome pp, Variable var, Ppolynome ppsubst) creates and returns a Ppolynome copied from pp in which every occurrence of variable var is substituted by polynomial ppsubst, which must not contain var. More...
 
int polynome_degree (Ppolynome pp, Variable var)
 int polynome_degree(Ppolynome pp, Variable var) returns the degree of polynomial pp viewed as a polynomial of one variable, var. More...
 
int polynome_max_degree (Ppolynome pp)
 int polynome_max_degree(Ppolynome pp) returns the degree of polynomial pp Let's hope there aren't too many negative powers... More...
 
Ppolynome polynome_factorize (Ppolynome pp, Variable var, int n)
 Ppolynome polynome_factorize(Ppolynome pp, Variable var, int n) returns the (polynomial) coefficient of var^n in polynomial pp. More...
 
float polynome_TCST (Ppolynome pp)
 float polynome_TCST(Ppolynome pp) returns the constant term of polynomial pp. More...
 
bool polynome_constant_p (Ppolynome pp)
 bool polynome_constant_p(Ppolynome pp) return true if pp is a constant polynomial (including null polynomial) If pp is POLYNOME_UNDEFINED: abort. More...
 
Pbase polynome_used_var (Ppolynome pp, int *is_inferior_var)
 Pbase polynome_used_var(Ppolynome pp, bool *is_inferior_var()) PRIVATE Returns, in a Pbase, a list of the variables used in pp, sorted according to the function is_inferior_var() More...
 
bool polynome_contains_var (Ppolynome pp, Variable var)
 bool polynome_contains_var(Ppolynome pp, Variable var) PRIVATE returns true if variable var is in polynomial pp. More...
 
bool polynome_equal (Ppolynome pp1, Ppolynome pp2)
 bool polynome_equal(Ppolynome pp1, Ppolynome pp2) return (pp1 == pp2) >>>TO BE CONTINUED<<< More...
 

Function Documentation

◆ polynome_constant_p()

bool polynome_constant_p ( Ppolynome  pp)

bool polynome_constant_p(Ppolynome pp) return true if pp is a constant polynomial (including null polynomial) If pp is POLYNOME_UNDEFINED: abort.

[???]

polynome_constant_p: polynome is undefined

Parameters
ppp

Definition at line 180 of file pnome-reduc.c.

182 {
183  /* polynome_constant_p: polynome is undefined */
185 
186  if (POLYNOME_NUL_P(pp))
187  return(true);
188  else {
189  Pvecteur pvTCST = vect_new((Variable) TCST, VALUE_ONE);
190  bool b = (vect_equal(pvTCST, monome_term(polynome_monome(pp)))
191  && (polynome_succ(pp) == POLYNOME_NUL));
192 
193  vect_rm(pvTCST);
194  return(b);
195  }
196 }
#define VALUE_ONE
bool vect_equal(Pvecteur v1, Pvecteur v2)
bool vect_equal(Pvecteur v1, Pvecteur v2): test a egalite de deux vecteurs
Definition: reductions.c:278
#define assert(ex)
Definition: newgen_assert.h:41
#define POLYNOME_NUL
#define POLYNOME_UNDEFINED_P(pp)
#define monome_term(pm)
#define polynome_monome(pp)
#define POLYNOME_NUL_P(pp)
#define polynome_succ(pp)
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60
Pvecteur vect_new(Variable var, Value coeff)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
Definition: alloc.c:110
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Definition: alloc.c:78

References assert, monome_term, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED_P, TCST, VALUE_ONE, vect_equal(), vect_new(), and vect_rm().

Referenced by complexity_constant_p(), if_conv_init_statement(), and polynome_sum_of_power().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_contains_var()

bool polynome_contains_var ( Ppolynome  pp,
Variable  var 
)

bool polynome_contains_var(Ppolynome pp, Variable var) PRIVATE returns true if variable var is in polynomial pp.

Parameters
ppp
varar

Definition at line 238 of file pnome-reduc.c.

241 {
242  if ( POLYNOME_UNDEFINED_P(pp) )
243  return (false);
244  else {
245  for ( ; pp != POLYNOME_NUL; pp = polynome_succ(pp))
246  if (vect_coeff(var, monome_term(polynome_monome(pp))) != 0)
247  return (true);
248  return(false);
249  }
250 }
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228

References monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED_P, and vect_coeff().

Referenced by complexity_sigma(), include_trans_in_poly(), and is_uniform_rec().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_degree()

int polynome_degree ( Ppolynome  pp,
Variable  var 
)

int polynome_degree(Ppolynome pp, Variable var) returns the degree of polynomial pp viewed as a polynomial of one variable, var.

If pp is POLYNOME_UNDEFINED: abort. [???]

polynome_degree: polynome is undefined

Parameters
ppp
varar

Definition at line 93 of file pnome-reduc.c.

96 {
97  int power, deg = 0;
98 
99  /* polynome_degree: polynome is undefined */
101  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp)) {
102  power = (int) vect_coeff(var, monome_term(polynome_monome(pp)));
103  if (deg < power) deg = power;
104  }
105  return(deg);
106 }
void const char const char const int

References assert, int, monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED_P, and vect_coeff().

Referenced by polynome_roots(), and polynome_sigma().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_equal()

bool polynome_equal ( Ppolynome  pp1,
Ppolynome  pp2 
)

bool polynome_equal(Ppolynome pp1, Ppolynome pp2) return (pp1 == pp2) >>>TO BE CONTINUED<<<

TO BE CONTINUED

Parameters
pp1p1
pp2p2

Definition at line 257 of file pnome-reduc.c.

259 {
260  Ppolynome ppcopy1 = polynome_dup(pp1);
261  Ppolynome ppcopy2 = polynome_dup(pp2);
262 
265 
266 
267  /* TO BE CONTINUED */
268  polynome_error ("polynome_equal", "To be implemented!\n");
269  return false;
270 }
Ppolynome polynome_dup(Ppolynome pp)
Ppolynome polynome_dup(Ppolynome pp) creates and returns a copy of pp.
Definition: pnome-alloc.c:211
void polynome_error(const char *name, char *fmt,...)
INTLIBRARY.
Definition: pnome-error.c:62
int default_is_inferior_pvarval(Pvecteur *pvarval1, Pvecteur *pvarval2)
bool default_is_inferior_pvarval(Pvecteur * pvarval1, Pvecteur * pvarval2) return true if var1 is bef...
Definition: pnome-io.c:286
Ppolynome polynome_sort(Ppolynome *ppp, int *is_inferior_var)
Ppolynome polynome_sort((Ppolynome *) ppp, bool (*is_inferior_var)()) Sorts the polynomial *ppp: mono...

References default_is_inferior_pvarval(), polynome_dup(), polynome_error(), and polynome_sort().

+ Here is the call graph for this function:

◆ polynome_factorize()

Ppolynome polynome_factorize ( Ppolynome  pp,
Variable  var,
int  n 
)

Ppolynome polynome_factorize(Ppolynome pp, Variable var, int n) returns the (polynomial) coefficient of var^n in polynomial pp.

Parameters
ppp
varar

Definition at line 131 of file pnome-reduc.c.

135 {
136  Ppolynome ppfact = POLYNOME_NUL;
137  Pmonome pm;
138 
139  if (POLYNOME_UNDEFINED_P(pp))
140  return (POLYNOME_UNDEFINED);
141  else {
142  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp))
143  if (n == (int) vect_coeff(var, monome_term(polynome_monome(pp)))) {
144  pm = monome_del_var(polynome_monome(pp), var);
145  polynome_monome_add(&ppfact, pm);
146  }
147 
148  return(ppfact);
149  }
150 }
void polynome_monome_add(Ppolynome *ppp, Pmonome pm)
void polynome_monome_add(Ppolynome* ppp, Pmonome pm) PRIVATE Add monomial pm to polynomial *ppp,...
Definition: pnome-bin.c:50
Pmonome monome_del_var(Pmonome pm, Variable var)
Pmonome monome_del_var(Pmonome pm, Variable var) PRIVATE returns a copy of monomial pm,...
Definition: pnome-private.c:47
#define POLYNOME_UNDEFINED

References monome_del_var(), monome_term, polynome_monome, polynome_monome_add(), POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and vect_coeff().

Referenced by old_polynome_to_sc(), and polynome_sigma().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_max_degree()

int polynome_max_degree ( Ppolynome  pp)

int polynome_max_degree(Ppolynome pp) returns the degree of polynomial pp Let's hope there aren't too many negative powers...

If pp is POLYNOME_UNDEFINED: abort. [???]

polynome_degree: polynome is undefined

Parameters
ppp

Definition at line 113 of file pnome-reduc.c.

114 {
115  int power, deg = 0;
117 
118  /* polynome_degree: polynome is undefined */
120  for(m = pp ; m != POLYNOME_NUL; m = polynome_succ(m)) {
121  power = (int) vect_sum(monome_term(polynome_monome(m)));
122  if (deg < power) deg = power;
123  }
124  return deg;
125 }
Value vect_sum(Pvecteur v)
Value vect_sum(Pvecteur v): somme des coefficients d'un vecteur (i.e.
Definition: reductions.c:261

References assert, int, monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and vect_sum().

Referenced by complexity_degree(), do_computation_intensity(), and polynomial_to_numerical().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_TCST()

float polynome_TCST ( Ppolynome  pp)

float polynome_TCST(Ppolynome pp) returns the constant term of polynomial pp.

If pp is POLYNOME_UNDEFINED: abort. [???]

polynome_TCST: polynome is undefined

Parameters
ppp

Definition at line 156 of file pnome-reduc.c.

158 {
159  Pmonome pm;
160  Pvecteur pvTCST = vect_new((Variable) TCST, VALUE_ONE);
161 
162  /* polynome_TCST: polynome is undefined */
164  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp) ) {
165  pm = polynome_monome(pp);
166  if (vect_equal(pvTCST, monome_term(pm)))
167  return(monome_coeff(pm));
168  }
169 
170  vect_rm(pvTCST);
171  return ((float) 0);
172 
173 }
#define monome_coeff(pm)
Macros definitions.

References assert, monome_coeff, monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED_P, TCST, VALUE_ONE, vect_equal(), vect_new(), and vect_rm().

Referenced by complexity_TCST(), if_conv_init_statement(), old_prototype_factorize(), polynome_sum_of_power(), and prototype_factorize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_used_var()

Pbase polynome_used_var ( Ppolynome  pp,
int is_inferior_var 
)

Pbase polynome_used_var(Ppolynome pp, bool *is_inferior_var()) PRIVATE Returns, in a Pbase, a list of the variables used in pp, sorted according to the function is_inferior_var()

FI: I do not understand what has been done here! (20/09/95)

b2 = (Pbase) vect_tri((Pvecteur) b, is_inferior_var);

FI: vect_compare() seems only good when Value=char *

b2 = (Pbase) vect_sort((Pvecteur) b, vect_compare);

Definition at line 204 of file pnome-reduc.c.

207 {
208  Pbase b = BASE_NULLE;
209  Pbase b2 = BASE_NULLE;
211 
212  if (!POLYNOME_UNDEFINED_P(pp)) {
213  for (pm = pp; !POLYNOME_NUL_P(pm); pm = polynome_succ(pm)) {
215  b = b2;
216  }
217 
218  /* FI: I do not understand what has been done here! (20/09/95) */
219  /* b2 = (Pbase) vect_tri((Pvecteur) b, is_inferior_var); */
220  /* FI: vect_compare() seems only good when Value=char * */
221  /* b2 = (Pbase) vect_sort((Pvecteur) b, vect_compare); */
223  vect_rm((Pvecteur) b);
224  }
225  else {
226  polynome_error("polynome_used_var",
227  "POLYNOME_UNDEFINED out of domain\n");
228  b2 = BASE_UNDEFINED;
229  }
230  return b2;
231 }
Pbase base_union(Pbase b1, Pbase b2)
Pbase base_union(Pbase b1, Pbase b2): compute a new basis containing all elements of b1 and all eleme...
Definition: base.c:428
bool is_inferior_var(Variable, Variable)
Definition: polynome_ri.c:118
Value b2
Definition: sc_gram.c:105
struct Svecteur * Pbase
#define BASE_UNDEFINED
#define BASE_NULLE
MACROS SUR LES BASES.
Pvecteur vect_sort(Pvecteur v, int *compare)
Pvecteur vect_sort(v, compare) Pvecteur v; int (*compare)();.
Definition: unaires.c:335

References b2, BASE_NULLE, BASE_UNDEFINED, base_union(), is_inferior_var(), monome_term, polynome_error(), polynome_monome, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, vect_rm(), and vect_sort().

Referenced by apply_farkas(), block_to_complexity(), final_statement_to_complexity_evaluation(), polynome_sprint(), translate_complexity_from_local_to_current_name(), and vvs_on_polynome().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_var_subst()

Ppolynome polynome_var_subst ( Ppolynome  pp,
Variable  var,
Ppolynome  ppsubst 
)

Ppolynome polynome_var_subst(Ppolynome pp, Variable var, Ppolynome ppsubst) creates and returns a Ppolynome copied from pp in which every occurrence of variable var is substituted by polynomial ppsubst, which must not contain var.

pnome-reduc.c

the monomial curpm contains the variable var.

We duplicate it, remove variable var from it,

we multiply it with ppsubst^n (where n was the

power of var), and we add the result to newpp.

Parameters
ppp
varar
ppsubstpsubst

Definition at line 47 of file pnome-reduc.c.

51 {
52  Ppolynome ppsubst_n, ppmult;
53  Ppolynome newpp = POLYNOME_NUL;
54  Pmonome curpm, newpm;
55  int varpower;
56 
57  if (POLYNOME_UNDEFINED_P(pp))
58  return (POLYNOME_UNDEFINED);
59  else {
60  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp)) {
61  curpm = polynome_monome(pp);
62  if ((varpower = (int) vect_coeff(var, monome_term(curpm))) == 0)
63  polynome_monome_add(&newpp, curpm);
64  else {
65  /* the monomial curpm contains the variable var. */
66  /* We duplicate it, remove variable var from it, */
67  /* we multiply it with ppsubst^n (where n was the */
68  /* power of var), and we add the result to newpp. */
69 
70  if (POLYNOME_UNDEFINED_P(ppsubst))
71  return (POLYNOME_UNDEFINED);
72  else {
73  newpm = monome_del_var(curpm, var);
74  ppsubst_n = polynome_power_n(ppsubst, varpower);
75  ppmult = polynome_monome_mult(ppsubst_n, newpm);
76  polynome_add(&newpp, ppmult);
77 
78  polynome_rm(&ppmult);
79  polynome_rm(&ppsubst_n);
80  monome_rm(&newpm);
81  }
82  }
83  }
84  return(newpp);
85  }
86 }
void monome_rm(Pmonome *ppm)
void monome_rm(Pmonome* ppm) PRIVATE frees space occupied by monomial *ppm returns *ppm pointing to M...
Definition: pnome-alloc.c:154
void polynome_rm(Ppolynome *ppp)
void polynome_rm(Ppolynome* ppp) frees space occupied by polynomial *ppp returns *ppp pointing to POL...
Definition: pnome-alloc.c:170
Ppolynome polynome_monome_mult(Ppolynome pp, Pmonome pm)
Ppolynome polynome_monome_mult(Ppolynome pp, Pmonome pm) PRIVATE returns pp * pm.
Definition: pnome-bin.c:266
void polynome_add(Ppolynome *ppp, Ppolynome pp2)
void polynome_add(Ppolynome* ppp, Ppolynome pp2) (*ppp) = (*ppp) + pp2.
Definition: pnome-bin.c:171
Ppolynome polynome_power_n(Ppolynome pp, int n)
Ppolynome polynome_power_n(Ppolynome pp, int n) returns pp ^ n (n>=0)
Definition: pnome-scal.c:121

References monome_del_var(), monome_rm(), monome_term, polynome_add(), polynome_monome, polynome_monome_add(), polynome_monome_mult(), POLYNOME_NUL, polynome_power_n(), polynome_rm(), polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and vect_coeff().

Referenced by complexity_var_subst(), number_replaces_var(), and prototype_var_subst().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: