PIPS
sc.h
Go to the documentation of this file.
1 /* Warning! Do not modify this file that is automatically generated! */
2 /* Modify src/Libs/sc/sc-local.h instead, to add your own modifications. */
3 
4 /* header file built by cproto */
5 
6 #ifndef sc_header_included
7 #define sc_header_included
8 /* sc-local.h */
9 /*
10 
11  $Id: sc-local.h 1664 2017-02-03 09:58:23Z coelho $
12 
13  Copyright 1989-2016 MINES ParisTech
14 
15  This file is part of Linear/C3 Library.
16 
17  Linear/C3 Library is free software: you can redistribute it and/or modify it
18  under the terms of the GNU Lesser General Public License as published by
19  the Free Software Foundation, either version 3 of the License, or
20  any later version.
21 
22  Linear/C3 Library is distributed in the hope that it will be useful, but WITHOUT ANY
23  WARRANTY; without even the implied warranty of MERCHANTABILITY or
24  FITNESS FOR A PARTICULAR PURPOSE.
25 
26  See the GNU Lesser General Public License for more details.
27 
28  You should have received a copy of the GNU Lesser General Public License
29  along with Linear/C3 Library. If not, see <http://www.gnu.org/licenses/>.
30 
31 */
32 
33  /* package sc sur les Systemes de Contraintes lineaires. Une contrainte
34  * peut etre une egalite lineaire ou une inegalite lineaire
35  *
36  * Malik Imadache, Corinne Ancourt, Neil Butler, Francois Irigoin,
37  * Remi Triolet
38  *
39  * Autres packages necessaires:
40  * - types.h
41  * - boolean.h
42  * - vecteur.h
43  * - contrainte.h
44  *
45  * Modifications:
46  * - redefinition de la structure "Ssysteme"; le champ "nbvars" est renomme
47  * "dimension"; il reste de type "int"; le champ "num_var" est remplace
48  * par un champ "base" de type "Pbase"; le champ "base" ne contient pas
49  * le terme constant; FI, 13/12/89;
50  */
51 
52 
53 #ifndef SYSTEME
54 /* constante definissant le type Systeme */
55 #define SYSTEME 1001
56 
57 #include "arithmetique.h"
58 
59 
60 /*
61  * Le champ dimension donne le nombre de variables utilisees dans
62  * les egalites et les inegalites, ou si l'on prefere, la dimension
63  * de l'espace dans lequel est defini le polyedre correspondant.
64  * Le terme constant ne fait pas partie de l'espace.
65  *
66  * La champ base contient tous les vecteurs de base, i.e. toutes les
67  * variables apparaissant dans les egalites et les inegalites.
68  * Le terme constant ne fait pas partie de la base. La taille de la
69  * base est donc egale a la dimension du systeme.
70  * Si certaines fonctions ajoutent temporairement le terme constant a la
71  * base, elles doivent l'oter apres traitement.
72  * Le champ base est utilise par des algorithmes comme celui du test
73  * de faisabilite mais il n'est pas entretenu automatiquement lors de
74  * l'ajout de nouvelles contraintes. Il faut penser aux mises a jour.
75  *
76  */
77 typedef struct Ssysteme {
80  int nb_eq;
81  int nb_ineq;
82  int dimension;
83  Pbase base;
85 
86 /* - Traitement des overflows :
87  * ~~~~~~~~~~~~~~~~~~~~~~~~~~
88  * Pour ne pas dupliquer trop de fonctions pour le traitement des
89  * overflows, nous avons fait une seule fonction prenant en parametre ofl_ctrl.
90  *
91  * NO_OFL_CTRL : pas de traitement des overflows.
92  *
93  * FWD_OFL_CTRL : les overflows doivent e^tre re'cupe're's par les
94  * fonctions appelantes.
95  * OFL_CTRL : le setjmp est fait dans la fonction appele'e, et donc il est
96  * inutile de faire un setjmp dans la fonction appelante. Cette dernie`re
97  * option n'est pas disponible dans toutes les fonctions, car pour cela,
98  * il faut rajouter un parame`tre permettant de savoir quoi retourner en
99  * cas d'overflow, et ce n'e'tait pas toujours possible. Voir les
100  * commentaires au dessus des fonctions pour cela.
101  *
102  * Toutes les fonctions qui acceptent ces valeurs en (dernier) parame`tre
103  * ont leur nom qui finit par _ofl_ctrl.
104  *
105  * Ceci concerne quasiment toutes les fonctions de projection, les
106  * fonctions de test de faisabilite', la fonction du simplexe, les
107  * fonctions d'e'limination de redondances, la fonction de valeur absolue
108  * (abs_ofl_ctrl), les fonctions de combinaisons line'aires de vecteurs.
109  * Ceci n'est pas force'ment exhaustif...
110  *
111  *
112  * - SC_EMPTY, SC_RN, sc_empty, sc_rn
113  * ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
114  * Le systeme vide "sc_empty" est represente par l'egalite "0==-1".
115  * le systeme representant l'espace Rn "sc_rn" est un systeme
116  * ne contenant aucune contrainte.
117  * Avant ces deux systemes etaient representes par Le pointeur (Psysteme) NULL.
118  * Progressivement, les (Psysteme) NULL sont replaces par des appels aux
119  * fonctions sc_empty et sc_rn.
120  * SC_EMPTY et SC_RN representent des valeurs obsoletes qu'ils faudraient
121  * remplacer par les sc_empty et sc_rn.
122  *
123  * - entier ou rationnel ?
124  * ~~~~~~~~~~~~~~~~~~~~~
125  * Les tests de faisabilite' e'taient fait en entier. Les deux tests
126  * (entier et rationnel) sont maintenant disponibles (voir
127  * sc_feasibility.c, il y a des commentaires). Le test appele' par
128  * l'ancienne fonction sc_faisabilite est celui en rationnel.
129  *
130  * Les fonctions d'elimination des contraintes redondantes utilisent
131  * toujours la meme technique : inversion de la contrainte et ajout de
132  * la constante 1, avant de tester la faisabilite de cette contrainte inversee
133  * dans le contexte choisi. Ce contexte est soit le systeme entier pour
134  * "sc_elim_redund" ou le systeme non redondant prealablement construit
135  * pour les fonctions "build_sc_nredund..." et "sc_triang_elim_redund".
136  * Le test de faisabilite qui est applique est en rationnel pour les
137  * fonctions "build_sc_nredund..." et en entiers pour les
138  * "sc_triang_elim_redund". L'utilisation du test rationel permet de conserver
139  * des contraintes qui reduisent l'ensemble convexe des points entiers du
140  * polyedre. Ces contraintes peuvent etre redondantes en entiers, mais utiles
141  * si l'on veut tester l'exactitude de la projection. Ce type de contraintes
142  * est considere comme redondant par "sc_triang_elim_redund".
143  * "sc_triang_elim_redund" est principalement utilise
144  * pour parcourir les nids de boucles. En cas de projection non exacte,
145  * l'une des bornes inf. peut alors etre superieure a une borne sup.
146  * L'utilisation d'un test rationel pour "sc_triang_elim_redund" peut conduire
147  * a conserver des contraintes redondantes.
148  *
149  * Note: l'inversion entiere de contrainte peut conduire a une augmentation
150  * du polyedre correspondant au systeme traite. Le nombre de contraintes est
151  * minimise en entier mais le polyedre rationnel correspondant peut augmenter.
152  * Si une enveloppe convexe est calculee ulterieurement, le resultat peut donc
153  * etre degrade par une elimination de redondance anterieure.
154  *
155  */
156 
157 #define get_sc_debug_level() sc_debug_level
158 #define ifscdebug(l) if (get_sc_debug_level()>=l)
159 
160 /* MACROS */
161 
162 #define sc_nbre_egalites(psc) ((psc)->nb_eq)
163 #define sc_nbre_inegalites(psc) ((psc)->nb_ineq)
164 #define sc_egalites(psc) ((psc)->egalites)
165 #define sc_inegalites(psc) ((psc)->inegalites)
166 #define sc_base(psc) ((psc)->base)
167 #define sc_dimension(psc) ((psc)->dimension)
168 
171 
172 /* For the parsers: */
173 extern void sc_init_lex(void);
174 extern int syst_parse(void);
175 extern void syst_restart(FILE * input_file );
176 
177 
178 /* old compatible... */
179 #define sc_add_eg(p,c) sc_add_egalite(p, c)
180 #define sc_add_ineg(p,c) sc_add_inegalite(p, c)
181 
182 /* ex-definition d'un systeme de contraintes infaisable, representant un
183  * polyedre vide.
184  *
185  * Utiliser sc_empty() et sc_empty_p() plutot que ces macros obsoletes.
186  */
187 #define SC_EMPTY ((Psysteme) NULL)
188 #define SC_EMPTY_P(sc) ((sc)==SC_EMPTY)
189 
190 /* ex-definition d'un systeme de contraintes vide, representant tout l'espace,
191  * dont la base se trouve eventuellement dans "base" (quand ce champ est
192  * alloue); quand la base et la dimension ne sont pas definies, cela
193  * represente un espace de dimension quelconque.
194  *
195  * Utiliser sc_rn() et sc_rn_p() plutot que ces macros obsoletes.
196  */
197 #define SC_RN ((Psysteme) NULL)
198 #define SC_RN_P(sc) ((sc)==(Psysteme) NULL)
199 
200 /* definition du systeme de contraintes non initialise
201  */
202 #define SC_UNDEFINED ((Psysteme) NULL)
203 #define SC_UNDEFINED_P(sc) ((sc)==(Psysteme) NULL)
204 
205 /* nombre maximum d'inequations que doit comporter un systeme lineaire
206 pour que l'elimination des redondances en nombres REELS s'effectue en un
207 temps raisonnable */
208 #define NB_INEQ_MAX1 100
209 
210 /* nombre maximum d'inequations que doit comporter un systeme lineaire
211 pour que l'elimination des redondances en nombres ENTIERS s'effectue en
212 un temps raisonnable */
213 #define NB_INEQ_MAX2 50
214 
215 /* ensemble de macros permettant de compiler les programmes utilisant
216 les anciens noms des fonctions */
217 
218 #define sc_faisabilite(sc) sc_rational_feasibility_ofl_ctrl((sc), NO_OFL_CTRL,true)
219 #define sc_faisabilite_ofl(sc) \
220  sc_rational_feasibility_ofl_ctrl((sc), FWD_OFL_CTRL, true)
221 #define sc_feasible_ofl(sc, b) sc_rational_feasibility_ofl_ctrl((sc), OFL_CTRL, (b))
222 #define sc_elim_redond(ps) sc_elim_redund((ps))
223 #define sc_triang_elim_redond(x,y) sc_triang_elim_redund(x,y)
224 #define sc_rm_empty_constraints( ps,b) sc_elim_empty_constraints((ps),(b))
225 #define sc_kill_db_eg( ps) sc_elim_db_constraints((ps))
226 #define sc_safe_kill_db_eg( ps) sc_safe_elim_db_constraints((ps))
227 #define non_redundent_subsystem( s1, s2) extract_nredund_subsystem((s1), (s2))
228 #define sc_nredund_ofl( psc) build_sc_nredund_2pass_ofl_ctrl((psc),FWD_OFL_CTRL)
229 #define sc_nredund_optim( psc) build_sc_nredund_2pass((psc))
230 #define sc_nredund( psc) build_sc_nredund_2pass((psc))
231 #define sc_projection_on_list_of_variables(sc,ib,pv) \
232  sc_projection_on_variables((sc),(ib),(pv))
233 #define combiner(sc, v) \
234  sc_fourier_motzkin_variable_elimination_ofl_ctrl((sc),(v),false,false,NO_OFL_CTRL)
235 #define combiner_ofl(sc, v) \
236  sc_fourier_motzkin_variable_elimination_ofl_ctrl((sc),(v),false,false,FWD_OFL_CTRL)
237 #define exact_combiner_ofl(sc, v, b) \
238  sc_fourier_motzkin_variable_elimination_ofl_ctrl((sc),(v),true, (b), FWD_OFL_CTRL)
239 #define eq_v_min_coeff(c, v, cf) contrainte_var_min_coeff((c), (v), (cf), false)
240 #define sc_projection_ofl_with_eq(sc, eq, v) \
241  sc_variable_substitution_with_eq_ofl_ctrl((sc), (eq), (v), FWD_OFL_CTRL)
242 #define cond_suff_comb_integer(sc,pos,neg, v) \
243  cond_suff_comb_integer_ofl_ctrl((sc),(pos),(neg), (v), NO_OFL_CTRL)
244 #define cond_suff_comb_integer_ofl(sc,pos,neg, v) \
245  cond_suff_comb_integer_ofl_ctrl((sc),(pos),(neg), (v), FWD_OFL_CTRL)
246 #define sc_projection_int_along_vecteur(fsc,sc,ib,pv,ti,dim,n) \
247  sc_integer_projection_along_variables((fsc),(sc),(ib),(pv),(ti),(dim),(n))
248 #define integer_projection(sci,sc,v) \
249  sc_integer_projection_along_variable((sci),(sc),(v))
250 
251 typedef int two_int_info[2];
252 typedef two_int_info *two_int_infop;
253 
254 typedef int (* constraint_cmp_func_t)
255 (const Pcontrainte *, const Pcontrainte *, void *);
256 
257 #endif /* SYSTEME */
258 /* cproto-generated files */
259 /* sc_alloc.c */
260 extern Psysteme sc_new(void);
261 extern Pbase sc_to_minimal_basis(Psysteme /*ps*/);
262 extern void sc_creer_base(Psysteme /*ps*/);
263 extern void sc_fix(Psysteme /*s*/);
264 extern Pbase sc_base_dup(int /*nbv*/, Pbase /*b*/);
265 extern Psysteme sc_dup(Psysteme /*ps*/);
266 extern Psysteme sc_copy(Psysteme /*ps*/);
267 extern void sc_rm(Psysteme /*ps*/);
268 extern Psysteme sc_init_with_sc(Psysteme /*sc*/);
269 extern Psysteme sc_empty(Pbase /*b*/);
270 extern Psysteme sc_rn(Pbase /*b*/);
271 extern bool sc_empty_p(Psysteme /*sc*/);
272 extern bool sc_rn_p(Psysteme /*sc*/);
273 extern void sc_add_egalite(Psysteme /*p*/, Pcontrainte /*e*/);
274 extern void sc_add_inegalite(Psysteme /*p*/, Pcontrainte /*i*/);
275 extern void sc_add_egalites(Psysteme /*p*/, Pcontrainte /*i*/);
276 extern void sc_add_inegalites(Psysteme /*p*/, Pcontrainte /*i*/);
277 /* sc_projection.c */
278 extern void sc_projection_along_variable_ofl_ctrl(Psysteme volatile */*psc*/, Variable /*v*/, int /*ofl_ctrl*/);
279 extern void sc_and_base_projection_along_variable_ofl_ctrl(Psysteme volatile */*psc*/, Variable /*v*/, int /*ofl_ctrl*/);
280 extern void sc_projection_along_variables_ofl_ctrl(Psysteme */*psc*/, Pvecteur /*pv*/, int /*ofl_ctrl*/);
281 extern void sc_projection_along_variables_with_test_ofl_ctrl(Psysteme */*psc*/, Pvecteur /*pv*/, bool */*is_proj_exact*/, int /*ofl_ctrl*/);
282 extern Psysteme sc_variable_substitution_with_eq_ofl_ctrl(Psysteme /*sc*/, Pcontrainte /*eq*/, Variable /*v*/, int /*ofl_ctrl*/);
283 extern Psysteme sc_simple_variable_substitution_with_eq_ofl_ctrl(Psysteme /*sc*/, Pcontrainte /*def*/, Variable /*v*/, int /*ofl_ctrl*/);
284 extern bool sc_fourier_motzkin_variable_elimination_ofl_ctrl(Psysteme /*sc*/, Variable /*v*/, bool /*integer_test_p*/, bool */*integer_test_res_p*/, int /*ofl_ctrl*/);
285 extern Psysteme sc_projection_on_variables(Psysteme /*sc*/, Pbase /*index_base*/, Pvecteur /*pv*/);
286 extern Pcontrainte sc_integer_inequalities_combination_ofl_ctrl(Psysteme /*sc*/, Pcontrainte /*posit*/, Pcontrainte /*negat*/, Variable /*v*/, bool */*integer_combination_p*/, int /*ofl_ctrl*/);
287 extern Psysteme sc_projection(Psysteme /*sc*/, Variable /*v*/);
288 extern Psysteme sc_projection_ofl(Psysteme /*sc*/, Variable /*v*/);
289 extern Psysteme sc_projection_pure(Psysteme /*sc*/, Variable /*v*/);
290 extern Psysteme sc_projection_ofl_along_variables(Psysteme /*sc*/, Pvecteur /*pv*/);
291 extern Psysteme sc_projection_ofl_along_variables_with_test(Psysteme /*sc*/, Pvecteur /*pv*/, bool */*is_proj_exact*/);
292 extern Psysteme sc_projection_by_eq(Psysteme /*sc*/, Pcontrainte /*eq*/, Variable /*v*/);
293 extern bool cond_suff_comb_integer_ofl_ctrl(Psysteme /*sc*/, Pcontrainte /*posit*/, Pcontrainte /*negat*/, Variable /*v*/, int /*ofl_ctrl*/);
294 extern Psysteme sc_projection_optim_along_vecteur(volatile Psysteme /*sc*/, Pvecteur /*pv*/);
295 extern Pcontrainte eq_v_coeff_min(Pcontrainte /*contraintes*/, Variable /*v*/);
296 extern bool sc_expensive_projection_p(Psysteme /*sc*/, Variable /*v*/);
297 extern void sc_extract_exact_common_equalities(Psysteme /*cl*/, Psysteme /*common*/, Psysteme /*s1*/, Psysteme /*s2*/);
298 extern void sc_project_very_simple_equalities(Psysteme /*s*/);
299 extern void sc_projection_along_variable_ofl_ctrl_timeout_ctrl(Psysteme volatile */*psc*/, Variable /*v*/, int /*ofl_ctrl*/);
300 extern Psysteme sc_system_projection_along_variables(Psysteme /*ps*/, Pvecteur /*pv*/);
301 /* sc_read.c */
302 extern Pcontrainte p_eg_fin;
303 extern Pcontrainte p_ineg_fin;
304 extern Pvecteur p_pred;
306 extern Pvecteur cp;
307 extern char *nom_var[100];
308 extern void init_globals(void);
309 extern void new_ident(Psysteme /*ps*/, Variable /*s*/);
310 extern Variable rec_ident(Psysteme /*ps*/, Variable /*s*/);
311 extern void creer_eg(Psysteme /*ps*/, Pcontrainte /*peq*/);
312 extern void creer_ineg(Psysteme /*ps*/, Pcontrainte /*peq*/, int /*sens*/);
313 extern Psysteme sc_reversal(Psysteme /*sc*/);
315 /* sc.c */
316 extern void norm_syst(Psysteme /*sc*/);
317 extern Psysteme sc_make(Pcontrainte /*leg*/, Pcontrainte /*lineg*/);
318 extern Psysteme sc_translate(Psysteme /*s*/, Pbase /*b*/, char *(* /*variable_name*/)(void));
319 extern Psysteme sc_substitute_dimension(Psysteme /*s*/, Variable /*i*/, Pvecteur /*v*/);
320 extern Psysteme sc_variable_rename(Psysteme /*s*/, Variable /*v_old*/, Variable /*v_new*/);
321 extern Psysteme sc_rename_variables(Psysteme /*s*/, bool (* /*renamed_p*/)(void), Variable (* /*new_variable*/)(void));
322 extern Psysteme sc_variables_rename(Psysteme /*s*/, Pvecteur /*pv_old*/, Pvecteur /*pv_new*/, get_variable_name_t /*variable_name*/);
323 extern void sc_base_remove_variable(Psysteme /*sc*/, Variable /*v*/);
324 extern void sc_base_add_variable(Psysteme /*sc*/, Variable /*var*/);
325 extern bool sc_consistent_p(Psysteme /*sc*/);
326 extern bool sc_weak_consistent_p(Psysteme /*sc*/);
327 extern void sc_separate_on_vars(Psysteme /*s*/, Pbase /*b*/, Psysteme */*pwith*/, Psysteme */*pwithout*/);
328 /* sc_integer_analyze.c */
329 extern bool var_with_unity_coeff_p(Psysteme /*sc*/, Variable /*var*/);
330 extern void sc_integer_projection_information(Psysteme /*sc*/, Pbase /*index_base*/, int /*sc_info*/[][4], int /*dim_h*/, int /*n*/);
331 extern void constraint_integer_combination(Pbase /*index_base*/, Pcontrainte /*ineq1*/, Pcontrainte /*ineq2*/, int /*rank*/, Variable */*right_var*/, int */*right_rank*/, Value */*right_coeff*/, Variable */*left_var*/, int */*left_rank*/, Value */*left_coeff*/);
332 /* sc_feasibility.c */
333 extern bool FM_timeout;
334 extern bool J_timeout;
335 extern bool S_timeout;
336 extern bool sc_rational_feasibility_ofl_ctrl(Psysteme /*sc*/, int /*ofl_ctrl*/, bool /*ofl_res*/);
337 extern bool sc_integer_feasibility_ofl_ctrl(Psysteme /*sc*/, int /*ofl_ctrl*/, bool /*ofl_res*/);
338 extern void decision_data(Pcontrainte /*c*/, int volatile */*pc*/, int volatile */*pv*/, Value */*magnitude*/, int /*weight*/);
339 extern bool sc_feasibility_ofl_ctrl(Psysteme /*sc*/, bool /*integer_p*/, volatile int /*ofl_ctrl*/, volatile bool /*ofl_res*/);
340 extern bool sc_fourier_motzkin_feasibility_ofl_ctrl(Psysteme /*s*/, bool /*integer_p*/, int /*ofl_ctrl*/);
341 extern bool sc_fourier_motzkin_feasibility_ofl_ctrl_timeout_ctrl(Psysteme /*sc*/, bool /*int_p*/, int /*ofl_ctrl*/);
342 extern bool sc_simplexe_feasibility_ofl_ctrl_timeout_ctrl(Psysteme /*sc*/, bool /*project_eq_p*/, bool /*int_p*/, int /*ofl_ctrl*/);
343 extern bool sc_janus_feasibility_ofl_ctrl_timeout_ctrl(Psysteme /*sc*/, bool /*ofl_ctrl*/);
344 extern bool efficient_sc_check_inequality_feasibility(Pvecteur /*v*/, Psysteme /*prec*/);
345 /* sc_intersection.c */
346 extern Psysteme sc_fusion(Psysteme /*s1*/, Psysteme /*s2*/);
347 extern Psysteme sc_intersection(Psysteme /*s1*/, Psysteme /*s2*/, Psysteme /*s3*/);
348 extern Psysteme sc_append(Psysteme /*s1*/, Psysteme /*s2*/);
349 extern Psysteme sc_safe_intersection(Psysteme /*s1*/, Psysteme /*s2*/, Psysteme /*s3*/);
350 extern Psysteme sc_safe_append(Psysteme /*s1*/, Psysteme /*s2*/);
351 extern bool sc_intersection_empty_p_ofl(Psysteme /*ps1*/, Psysteme /*ps2*/);
352 extern Psysteme extract_common_syst(Psysteme /*s1*/, Psysteme /*s2*/);
353 /* sc_integer_projection.c */
354 extern bool sc_integer_fourier_motzkin_variable_elimination(Psysteme /*sci*/, Psysteme /*sc*/, Variable /*v*/);
355 extern Psysteme sc_integer_projection_along_variable(Psysteme /*sci*/, volatile Psysteme /*sc*/, Variable /*v*/);
356 extern Psysteme sc_integer_projection_along_variables(Psysteme /*fsc*/, Psysteme /*sc*/, Pbase /*index_base*/, Pvecteur /*pv*/, int /*tab_info*/[][4], int /*dim*/, int /*n*/);
357 /* sc_normalize.c */
358 extern Pcontrainte find_intermediate_constraints_recursively(Pvecteur /*v*/, Variable /*x*/, Variable /*y*/, Value /*lmpx*/, Value /*lmpy*/, Value /*rmpx*/, Value /*rmpy*/);
359 extern Pcontrainte find_intermediate_constraints(Pvecteur /*v*/, Variable /*x*/, Variable /*y*/, Value /*lmpx*/, Value /*lmpy*/, Value /*rmpx*/, Value /*rmpy*/);
361 extern Psysteme sc_normalize(Psysteme /*ps*/);
362 extern Psysteme sc_normalize2(volatile Psysteme /*ps*/);
363 extern Psysteme sc_add_normalize_eq(Psysteme /*ps*/, Pcontrainte /*eq*/);
364 extern Psysteme sc_add_normalize_ineq(Psysteme /*ps*/, Pcontrainte /*ineq*/);
365 extern Psysteme sc_safe_normalize(Psysteme /*ps*/);
366 extern Psysteme sc_strong_normalize(Psysteme /*ps*/);
367 extern Psysteme sc_strong_normalize3(Psysteme /*ps*/);
368 extern Psysteme sc_strong_normalize_and_check_feasibility(volatile Psysteme /*ps*/, Psysteme (* /*check_feasibility*/)(Psysteme));
369 extern Psysteme sc_strong_normalize2(volatile Psysteme /*ps*/);
370 extern Psysteme sc_strong_normalize4(Psysteme /*ps*/, char *(* /*variable_name*/)(Variable));
371 extern Psysteme sc_strong_normalize5(Psysteme /*ps*/, char *(* /*variable_name*/)(Variable));
372 extern Psysteme sc_strong_normalize_and_check_feasibility2(volatile Psysteme /*ps*/, Psysteme (* /*check_feasibility*/)(Psysteme), char *(* /*variable_name*/)(Variable), int /*level*/);
373 extern void sc_gcd_normalize(Psysteme /*ps*/);
374 /* sc_build_sc_nredund.c */
375 extern bool ineq_redund_with_sc_p(Psysteme /*sc*/, Pcontrainte /*ineq*/);
376 extern bool eq_redund_with_sc_p(Psysteme /*sc*/, Pcontrainte /*eq*/);
377 extern Psysteme extract_nredund_subsystem(Psysteme /*s1*/, Psysteme /*s2*/);
378 extern void build_sc_nredund_1pass_ofl_ctrl(Psysteme volatile */*psc*/, int /*ofl_ctrl*/);
379 extern void sc_safe_build_sc_nredund_1pass(Psysteme volatile */*ps*/);
380 extern void build_sc_nredund_1pass(Psysteme volatile */*ps*/);
381 extern void build_sc_nredund_2pass_ofl_ctrl(Psysteme volatile */*psc*/, int /*ofl_ctrl*/);
382 extern void sc_safe_build_sc_nredund_2pass(Psysteme volatile */*ps*/);
383 extern void build_sc_nredund_2pass(Psysteme volatile */*psc*/);
384 extern Psysteme build_integer_sc_nredund(volatile Psysteme /*ps*/, Pbase /*index_base*/, int /*tab_info*/[][4], int /*loop_level*/, int /*dim_h*/, int /*n*/);
385 extern bool bound_redund_with_sc_p(Psysteme /*sc*/, Pcontrainte /*ineq1*/, Pcontrainte /*ineq2*/, Variable /*var*/);
386 /* sc_oppose.c */
387 extern Psysteme sc_oppose(Psysteme /*ps*/);
388 /* sc_triang_elim_redond.c */
389 extern Pvecteur highest_rank_pvector(Pvecteur /*v*/, Pbase /*b*/, int */*prank*/);
390 extern Pcontrainte constraints_sort_with_compare(Pcontrainte /*c*/, Pbase /*sort_base*/, constraint_cmp_func_t /*compare*/, void */*context*/);
391 extern Pcontrainte contrainte_sort(Pcontrainte /*c*/, Pbase /*base*/, Pbase /*sort_base*/, bool /*inner_first*/, bool /*complex_first*/);
392 extern Psysteme sc_sort_constraints(Psysteme /*ps*/, Pbase /*base_index*/);
393 extern Psysteme sc_triang_elim_redund(Psysteme /*ps*/, Pbase /*base_index*/);
394 extern void move_n_first_constraints(Pcontrainte */*source*/, Pcontrainte */*target*/, int /*n*/);
395 extern void sc_triang_elim_redund_n_first(Psysteme /*s*/, int /*n*/);
396 extern Psysteme sc_build_triang_elim_redund(Psysteme /*s*/, Pbase /*indexes*/);
397 extern Psysteme sc_sort_constraints_simplest_first(Psysteme /*ps*/, Pbase /*base_index*/);
398 /* sc_elim_redund.c */
400 extern Psysteme sc_elim_redund(Psysteme /*ps*/);
401 extern Psysteme sc_safe_elim_redund(Psysteme /*ps*/);
402 /* sc_elim_simple_redund.c */
403 extern bool sc_elim_simple_redund_with_eq(Psysteme /*ps*/, Pcontrainte /*eg*/);
404 extern bool sc_elim_simple_redund_with_ineq(Psysteme /*ps*/, Pcontrainte /*ineg*/);
405 extern int sc_check_inequality_redundancy(Pcontrainte /*ineq*/, Psysteme /*ps*/);
406 extern void sc_elim_empty_constraints(Psysteme /*ps*/, bool /*process_equalities*/);
410 /* sc_insert_eq.c */
411 extern void insert_ineq_begin_sc(Psysteme /*sc*/, Pcontrainte /*ineq*/);
412 extern void insert_2ineq_end_sc(Psysteme /*sc*/, Pcontrainte /*ineq*/);
413 extern void insert_ineq_end_sc(Psysteme /*sc*/, Pcontrainte /*ineq*/);
414 extern Psysteme sc_equation_add(Psysteme /*sc*/, Pcontrainte /*c*/);
415 extern Psysteme sc_inequality_add(Psysteme /*sc*/, Pcontrainte /*c*/);
416 extern Psysteme sc_constraint_add(Psysteme /*sc*/, Pcontrainte /*c*/, bool /*equality*/);
417 /* sc_transformation.c */
418 extern void sc_transform_eg_in_ineg(Psysteme /*sc*/);
419 extern void sc_transform_ineg_in_eg(Psysteme /*sc*/);
420 extern void sc_find_equalities(Psysteme */*ps*/);
421 /* sc_var.c */
422 extern Variable creat_new_var(Psysteme /*ps*/);
423 extern bool var_in_lcontrainte_p(Pcontrainte /*pc*/, Variable /*var*/);
424 extern bool var_in_sc_p(Psysteme /*sc*/, Variable /*var*/);
425 /* sc_eval.c */
426 extern bool sc_value_of_variable(Psysteme /*ps*/, Variable /*var*/, Value */*pval*/);
427 extern bool sc_minmax_of_variable(Psysteme /*ps*/, Variable /*var*/, Value */*pmin*/, Value */*pmax*/);
428 extern void sc_minmax_of_variables(Psysteme /*ps1*/, Psysteme /*ps2*/, Pbase /*b*/);
429 extern void sc_force_variable_to_zero(Psysteme /*ps*/, Variable /*var*/);
430 extern bool sc_minmax_of_variable2(volatile Psysteme /*ps*/, Variable /*var*/, Value */*pmin*/, Value */*pmax*/);
431 /* sc_unaires.c */
432 extern Psysteme sc_elim_var(Psysteme /*sc*/, Variable /*v*/);
433 extern void sc_chg_var(Psysteme /*s*/, Variable /*v_old*/, Variable /*v_new*/);
434 extern void sc_vect_sort(Psysteme /*s*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
435 extern void sc_sort(Psysteme /*sc*/, Pbase /*sort_base*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
436 extern Pvecteur vect_printout_order(Pvecteur /*v*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
437 extern void sc_lexicographic_sort(Psysteme /*sc*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
438 extern bool sc_remove_large_coef(Psysteme /*sc*/, Value /*val*/, bool /*equalities*/, bool /*inequalities*/);
439 /* sc_error.c */
440 extern void sc_error(char */*name*/, char */*fmt*/, ...);
441 /* sc_io.c */
442 extern Psysteme *sc_read(char */*nomfic*/);
443 extern bool sc_fscan(FILE */*f*/, Psysteme */*ps*/);
444 extern void sc_dump(Psysteme /*sc*/);
445 extern void sc_default_dump(Psysteme /*sc*/);
446 extern void sc_print(Psysteme /*ps*/, get_variable_name_t /*nom_var*/);
447 extern void sc_fprint(FILE */*fp*/, Psysteme /*ps*/, get_variable_name_t /*nom_var*/);
448 extern void sc_fprint_for_sc_fscan(FILE */*f*/, Psysteme /*sc*/, char *(* /*nom_var*/)(Variable));
449 extern void sc_default_dump_to_files(Psysteme /*sc*/, int /*sc_nb*/, char */*directory_name*/);
450 /* sc_new_loop_bound.c */
451 extern Psysteme new_loop_bound(Psysteme /*scn*/, Pbase /*base_index*/);
452 extern Psysteme get_other_constraints(Psysteme */*psyst*/, Pbase /*vars*/);
453 extern void algorithm_row_echelon_generic(Psysteme /*scn*/, Pbase /*base_index*/, Psysteme */*pcondition*/, Psysteme */*penumeration*/, bool /*redundancy*/);
454 extern void algorithm_row_echelon(Psysteme /*scn*/, Pbase /*base_index*/, Psysteme */*pcondition*/, Psysteme */*penumeration*/);
455 extern void sc_set_row_echelon_redundancy(bool /*b*/);
456 extern void algorithm_tiling(Psysteme /*syst*/, Pbase /*outer*/, Pbase /*inner*/, Psysteme */*pcondition*/, Psysteme */*ptile_enum*/, Psysteme */*piter_enum*/);
457 /* sc_simplex_feasibility_fixprec.c */
458 extern void frac_init(frac */*f*/, int /*n*/);
459 extern void frac_simpl(Value */*a*/, Value */*b*/);
460 extern void frac_simplifie(frac */*f*/);
461 extern void frac_div(frac */*x*/, frac /*y*/, frac /*z*/, bool /*ofl_ctrl*/);
462 extern void frac_mul(frac */*x*/, frac /*y*/, frac /*z*/, bool /*ofl_ctrl*/);
463 extern void frac_sub(frac */*X*/, frac /*A*/, frac /*B*/, bool /*ofl_ctrl*/);
464 extern void full_pivot_sioux(frac */*X*/, frac /*A*/, frac /*B*/, frac /*C*/, frac /*D*/, bool /*ofl_ctrl*/);
465 extern void full_pivot_direct(frac */*X*/, frac /*A*/, frac /*B*/, frac /*C*/, frac /*D*/, bool /*ofl_ctrl*/);
466 extern void full_pivot(frac */*X*/, frac /*A*/, frac /*B*/, frac /*C*/, frac /*D*/, bool /*ofl_ctrl*/);
467 extern void partial_pivot_sioux(frac */*X*/, frac /*B*/, frac /*C*/, frac /*D*/, bool /*ofl_ctrl*/);
468 extern void partial_pivot_direct(frac */*X*/, frac /*B*/, frac /*C*/, frac /*D*/, bool /*ofl_ctrl*/);
469 extern void partial_pivot(frac */*X*/, frac /*B*/, frac /*C*/, frac /*D*/, bool /*ofl_ctrl*/);
470 extern void pivot(frac */*X*/, frac /*A*/, frac /*B*/, frac /*C*/, frac /*D*/, bool /*ofl_ctrl*/);
471 extern bool sc_simplex_feasibility_ofl_ctrl_fixprec(Psysteme /*sc*/, int /*ofl_ctrl*/);
472 /* sc_simplex_feasibility_mulprec.c */
473 /* sc_simplex_feasibility.c */
474 extern bool sc_simplex_feasibility_ofl_ctrl(Psysteme /*sys*/, int /*ofl_ctrl*/);
475 /* sc_debug.c */
476 extern int sc_debug_level;
477 extern int sc_switch_heuristic_flag;
478 extern void set_sc_debug_level(int /*l*/);
479 extern void sc_variable_name_push(char *(* /*fun*/)(Variable));
480 extern void sc_variable_name_pop(void);
481 extern char *default_variable_to_string(Variable /*v*/);
482 extern void initialize_sc(char *(* /*var_to_string*/)(Variable));
483 /* sc_janus_feasibility.c */
484 extern bool sc_janus_feasibility_fallback(Psysteme /*sc*/);
485 extern bool sc_janus_feasibility(Psysteme /*sc*/);
486 extern void set_sc_janus_feasibility(bool (* /*sc_janus_feasibility_fct*/)(Psysteme));
487 /* sc_belong.c */
488 extern bool sc_belongs_p(Psysteme /*ps*/, Pvecteur /*v*/);
489 extern bool sc_internal_p(Psysteme /*ps*/, Pvecteur /*v*/);
490 /* sc_misc.c */
492 extern bool sc_constrains_variable_p(Psysteme /*sc*/, Variable /*var*/, bool /*is_equations_p*/);
493 extern bool sc_equations_constrain_variable_p(Psysteme /*sc*/, Variable /*var*/);
494 extern bool sc_inequalities_constrain_variable_p(Psysteme /*sc*/, Variable /*var*/);
495 /* sc_gram.c */
496 extern bool syst_syntax_error;
497 extern Psysteme ps_yacc;
498 extern Value fac;
499 extern int sens;
500 extern short int cote;
501 extern Value b1;
502 extern Value b2;
503 extern Pcontrainte eq;
504 extern short int operat;
505 extern int syst_char;
506 extern int syst_nerrs;
507 extern int syst_parse(void);
508 /* sc_lex.c */
509 extern int syst_leng;
510 extern FILE *syst_in;
511 extern FILE *syst_out;
512 extern int syst_lineno;
513 extern int syst__flex_debug;
514 extern char *syst_text;
515 extern int syst_lex(void);
516 extern void syst_restart(FILE */*input_file*/);
517 extern void syst_pop_buffer_state(void);
518 extern int syst_get_lineno(void);
519 extern FILE *syst_get_in(void);
520 extern FILE *syst_get_out(void);
521 extern int syst_get_leng(void);
522 extern char *syst_get_text(void);
523 extern void syst_set_lineno(int /*_line_number*/);
524 extern void syst_set_in(FILE */*_in_str*/);
525 extern void syst_set_out(FILE */*_out_str*/);
526 extern int syst_get_debug(void);
527 extern void syst_set_debug(int /*_bdebug*/);
528 extern int syst_lex_destroy(void);
529 extern void *syst_alloc(yy_size_t /*size*/);
530 extern void *syst_realloc(void */*ptr*/, yy_size_t /*size*/);
531 extern void syst_free(void */*ptr*/);
532 extern char *sc_internal_symbol_table(char */*name*/);
533 extern int syst_input(void);
534 extern int syst_wrap(void);
535 extern void sc_init_lex(void);
536 extern int syst_error(char */*s*/);
537 #endif /* sc_header_included */
void const char const char const int
int Value
size_t yy_size_t
Definition: genread_lex.c:413
bool sc_janus_feasibility_fallback(Psysteme sc __attribute__((unused)))
Fallback function to compute feasibility with Janus, used when no custom function is set.
bool sc_janus_feasibility(Psysteme sc)
Compute feasibility, using custom Janus function if set, fallback function otherwise.
void set_sc_janus_feasibility(bool(*sc_janus_feasibility_fct)(Psysteme))
Set custom Janus feasibility function.
int sc_debug_level
Definition: sc_debug.c:89
void sc_init_lex(void)
void sc_base_add_variable(Psysteme sc, Variable var)
Definition: sc.c:248
void sc_base_remove_variable(Psysteme sc, Variable v)
Definition: sc.c:239
void norm_syst(Psysteme sc)
norm_syst(Psysteme): division des contraintes, egalites ou inegalites, par le PGCD des coefficients d...
Definition: sc.c:53
bool sc_consistent_p(Psysteme sc)
bool sc_consistent_p(Psysteme sc): check that sc is well defined, that the numbers of equalities and ...
Definition: sc.c:282
Psysteme sc_rename_variables(Psysteme s, bool(*renamed_p)(), Variable(*new_variable)())
Psysteme sc_rename_variables(s, renamed_p, new_variable) Psysteme s; bool (*renamed_p)(Variable); Var...
Definition: sc.c:198
Psysteme sc_translate(Psysteme s, Pbase b, char *(*variable_name)())
Psysteme sc_translate(Psysteme s, Pbase b, char * (*variable_name)()): reecriture du systeme s dans l...
Definition: sc.c:99
Psysteme sc_make(Pcontrainte leg, Pcontrainte lineg)
Psysteme sc_make(Pcontrainte leg, Pcontrainte lineg): allocation et initialisation d'un systeme d'equ...
Definition: sc.c:78
void sc_separate_on_vars(Psysteme s, Pbase b, Psysteme *pwith, Psysteme *pwithout)
Definition: sc.c:418
Psysteme sc_variables_rename(Psysteme s, Pvecteur pv_old, Pvecteur pv_new, get_variable_name_t variable_name)
Psysteme sc_variables_rename(Psysteme s, Pvecteur pv_old, Pvecteur pv_new): reecriture du systeme s r...
Definition: sc.c:224
Psysteme sc_variable_rename(Psysteme s, Variable v_old, Variable v_new)
Psysteme sc_variable_rename(Psysteme s, Variable v_old, Variable v_new): reecriture du systeme s remp...
Definition: sc.c:157
bool sc_weak_consistent_p(Psysteme sc)
check that sc is well defined, that the numbers of equalities and inequalities are consistent with th...
Definition: sc.c:362
Psysteme sc_substitute_dimension(Psysteme s, Variable i, Pvecteur v)
Psysteme sc_substitute_dimension(Psysteme s, Variable i, Pvecteur v): The ith dimension of all constr...
Definition: sc.c:130
struct Ssysteme * Psysteme
struct Ssysteme Ssysteme
bool sc_rn_p(Psysteme sc)
bool sc_rn_p(Psysteme sc): check if the set associated to sc is the whole space, rn
Definition: sc_alloc.c:369
Psysteme sc_empty(Pbase b)
Psysteme sc_empty(Pbase b): build a Psysteme with one unfeasible constraint to define the empty subsp...
Definition: sc_alloc.c:319
Psysteme sc_rn(Pbase b)
Psysteme sc_rn(Pbase b): build a Psysteme without constraints to define R^n, where n is b's dimension...
Definition: sc_alloc.c:336
void sc_creer_base(Psysteme ps)
void sc_creer_base(Psysteme ps): initialisation des parametres dimension et base d'un systeme lineair...
Definition: sc_alloc.c:129
void sc_fix(Psysteme s)
fix system s for coherency of the base and number of things.
Definition: sc_alloc.c:141
void sc_rm(Psysteme ps)
void sc_rm(Psysteme ps): liberation de l'espace memoire occupe par le systeme de contraintes ps;
Definition: sc_alloc.c:277
void sc_add_egalite(Psysteme p, Pcontrainte e)
void sc_add_egalite(Psysteme p, Pcontrainte e): macro ajoutant une egalite e a un systeme p; la base ...
Definition: sc_alloc.c:389
void sc_add_inegalites(Psysteme p, Pcontrainte i)
Definition: sc_alloc.c:432
Pbase sc_to_minimal_basis(Psysteme ps)
creation d'une base contenant toutes les variables apparaissant avec des coefficients non-nuls dans l...
Definition: sc_alloc.c:76
Psysteme sc_new(void)
Psysteme sc_new(): alloue un systeme vide, initialise tous les champs avec des valeurs nulles,...
Definition: sc_alloc.c:55
Psysteme sc_init_with_sc(Psysteme sc)
This function returns a new empty system which has been initialized with the same dimension and base ...
Definition: sc_alloc.c:303
bool sc_empty_p(Psysteme sc)
bool sc_empty_p(Psysteme sc): check if the set associated to sc is the constant sc_empty or not.
Definition: sc_alloc.c:350
void sc_add_inegalite(Psysteme p, Pcontrainte i)
void sc_add_inegalite(Psysteme p, Pcontrainte i): macro ajoutant une inegalite i a un systeme p; la b...
Definition: sc_alloc.c:406
Psysteme sc_dup(Psysteme ps)
Psysteme sc_dup(Psysteme ps): should becomes a link.
Definition: sc_alloc.c:176
Pbase sc_base_dup(int nbv, Pbase b)
Variable * sc_base_dup(int nbv, Variable * b): duplication de la table des variables base,...
Definition: sc_alloc.c:162
void sc_add_egalites(Psysteme p, Pcontrainte i)
Definition: sc_alloc.c:415
Psysteme sc_copy(Psysteme ps)
Psysteme sc_copy(Psysteme ps): duplication d'un systeme (allocation et copie complete des champs sans...
Definition: sc_alloc.c:230
bool sc_internal_p(Psysteme ps, Pvecteur v)
Check if the integer point defined by vector v is stricly inside the set defined by the constraints o...
Definition: sc_belong.c:85
bool sc_belongs_p(Psysteme ps, Pvecteur v)
package sc
Definition: sc_belong.c:51
void build_sc_nredund_1pass(Psysteme volatile *ps)
Computation of a new system sc from the system ps, where each constraint of the system ps is added to...
void build_sc_nredund_2pass_ofl_ctrl(Psysteme volatile *psc, int ofl_ctrl)
bool ineq_redund_with_sc_p(Psysteme sc, Pcontrainte ineq)
This function returns true if the inequation ineq is redundant for the system ps and false otherwise.
void sc_safe_build_sc_nredund_2pass(Psysteme volatile *ps)
void build_sc_nredund_2pass(Psysteme volatile *psc)
void build_sc_nredund_2pass Psysteme *psc;
Psysteme build_integer_sc_nredund(volatile Psysteme ps, Pbase index_base, int tab_info[][4], int loop_level, int dim_h __attribute__((unused)), int n __attribute__((unused)))
Computation of a new system sc from the system ps, where each constraint of the system ps is added to...
bool bound_redund_with_sc_p(Psysteme sc, Pcontrainte ineq1, Pcontrainte ineq2, Variable var)
This function returns true if the constraint C (resulting of the combination of the two constraints i...
Psysteme extract_nredund_subsystem(Psysteme s1, Psysteme s2)
Psysteme extract_nredund_subsystem(s1, s2) Psysteme s1, s2;.
bool eq_redund_with_sc_p(Psysteme sc, Pcontrainte eq)
bool eq_redund_with_sc_p(sc, eq) Psysteme sc; Pcontrainte eq;
void sc_safe_build_sc_nredund_1pass(Psysteme volatile *ps)
void build_sc_nredund_1pass_ofl_ctrl(Psysteme volatile *psc, int ofl_ctrl)
Psysteme build_sc_nredund_1pass_ofl_ctrl(Psysteme ps, int ofl_ctrl) input : a system in which redunda...
int sc_switch_heuristic_flag
Definition: sc_debug.c:90
char * default_variable_to_string(Variable v)
Definition: sc_debug.c:245
void set_sc_debug_level(int l)
SET FUNCTIONS.
Definition: sc_debug.c:121
void sc_variable_name_pop(void)
Definition: sc_debug.c:239
void sc_variable_name_push(char *(*fun)(Variable))
Definition: sc_debug.c:217
void initialize_sc(char *(*var_to_string)(Variable))
Definition: sc_debug.c:253
Psysteme sc_inequations_elim_redund(Psysteme ps)
package sc
Psysteme sc_elim_redund(Psysteme ps)
Psysteme sc_elim_redund(Psysteme ps): elimination des contraintes lineaires redondantes dans le syste...
Psysteme sc_safe_elim_redund(Psysteme ps)
Same as above, but the basis is preserved and sc_empty is returned is the system is not feasible.
bool sc_elim_simple_redund_with_ineq(Psysteme ps, Pcontrainte ineg)
bool sc_elim_simple_redund_with_ineq(Psysteme ps, Pcontrainte ineg): elimination des contraintes redo...
Psysteme sc_elim_double_constraints(Psysteme ps)
Psysteme sc_elim_double_constraints(Psysteme ps): elimination des egalites et des inegalites identiqu...
void sc_elim_empty_constraints(Psysteme ps, bool process_equalities)
void sc_elim_empty_constraints(Psysteme ps, bool process_equalities): elimination des "fausses" contr...
Psysteme sc_safe_elim_db_constraints(Psysteme ps)
The returned value must be used because they argument is freed when the system is not feasible.
bool sc_elim_simple_redund_with_eq(Psysteme ps, Pcontrainte eg)
package sc
Psysteme sc_elim_db_constraints(Psysteme ps)
Psysteme sc_elim_db_constraints(Psysteme ps): elimination des egalites et des inegalites identiques o...
int sc_check_inequality_redundancy(Pcontrainte ineq, Psysteme ps)
int sc_check_inequality_redundancy(Pcontrainte ineq, Psysteme ps) Check if an inequality ineq,...
void sc_error(char *name, char *fmt,...)
package sc
Definition: sc_error.c:46
void sc_force_variable_to_zero(Psysteme ps, Variable var)
void sc_force_variable_to_zero(Psysteme ps, Variable var): force la variable var a prendre la valeur ...
Definition: sc_eval.c:251
bool sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, Value *pmax)
void sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, *pmax): examine un systeme pour tr...
Definition: sc_eval.c:143
bool sc_value_of_variable(Psysteme ps, Variable var, Value *pval)
bool sc_value_for_variable(Psysteme ps, Variable var, Value *pval): examine les egalites du systeme p...
Definition: sc_eval.c:70
void sc_minmax_of_variables(Psysteme ps1, Psysteme ps2, Pbase b)
This function uses sc_minmax_of_variable to compute the min and max of each variable belonging to bas...
Definition: sc_eval.c:212
bool sc_minmax_of_variable2(volatile Psysteme ps, Variable var, Value *pmin, Value *pmax)
void sc_minmax_of_variable2(Psysteme ps, Variable var, Value *pmin, *pmax): examine un systeme pour t...
Definition: sc_eval.c:330
bool sc_fourier_motzkin_feasibility_ofl_ctrl(Psysteme s, bool integer_p, int ofl_ctrl)
bool sc_fourier_motzkin_faisabilite_ofl(Psysteme s): test de faisabilite d'un systeme de contraintes ...
bool efficient_sc_check_inequality_feasibility(Pvecteur v, Psysteme prec)
void decision_data(Pcontrainte c, int volatile *pc, int volatile *pv, Value *magnitude, int weight)
just a test to improve the Simplex/FM decision.
bool sc_rational_feasibility_ofl_ctrl(Psysteme sc, int ofl_ctrl, bool ofl_res)
bool sc_integer_feasibility_ofl_ctrl(Psysteme sc, int ofl_ctrl, bool ofl_res)
bool sc_fourier_motzkin_feasibility_ofl_ctrl_timeout_ctrl(Psysteme sc, bool int_p, int ofl_ctrl)
bool sc_simplexe_feasibility_ofl_ctrl_timeout_ctrl(Psysteme sc, bool project_eq_p, bool int_p, int ofl_ctrl)
bool sc_feasibility_ofl_ctrl(Psysteme sc, bool integer_p, volatile int ofl_ctrl, volatile bool ofl_res)
return true is the system is feasible
bool S_timeout
bool FM_timeout
bool J_timeout
bool sc_janus_feasibility_ofl_ctrl_timeout_ctrl(Psysteme sc, bool ofl_ctrl)
int syst_parse(void)
Value b2
Definition: sc_gram.c:105
bool syst_syntax_error
detection des erreurs de syntaxe par sc_gram.y
Definition: sc_gram.c:93
int syst_error(char *)
First part of user prologue.
Definition: sc_lex.c:2196
int syst_lex(void)
Value b1
booleen indiquant quel membre est en cours d'analyse
Definition: sc_gram.c:105
short int operat
pointeur sur le membre courant
Definition: sc_gram.c:113
short int cote
indique le sens de l'inegalite sens = -1 ==> l'operateur est soit > ,soit >=, sens = 1 ==> l'operateu...
Definition: sc_gram.c:103
int sens
facteur multiplicatif suivant qu'on analyse un terme
Definition: sc_gram.c:100
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Definition: sc_gram.c:108
Psysteme ps_yacc
package sc
Definition: sc_gram.c:95
Pvecteur cp
pointeur sur l'egalite ou l'inegalite courante
Definition: sc_read.c:87
Value fac
Definition: sc_gram.c:97
Psysteme sc_inequality_add(Psysteme sc, Pcontrainte c)
Definition: sc_insert_eq.c:108
Psysteme sc_equation_add(Psysteme sc, Pcontrainte c)
The basis of the constraint system is updated.
Definition: sc_insert_eq.c:101
void insert_ineq_end_sc(Psysteme sc, Pcontrainte ineq)
This function inserts one constraint ineq at the end of the system of inequalities of sc.
Definition: sc_insert_eq.c:81
void insert_ineq_begin_sc(Psysteme sc, Pcontrainte ineq)
This function inserts the constraint ineq at the beginning of the system of inequalities of sc.
Definition: sc_insert_eq.c:40
void insert_2ineq_end_sc(Psysteme sc, Pcontrainte ineq)
This function inserts two constraints ineq and ineq->succ at the end of the system of inequalities of...
Definition: sc_insert_eq.c:54
Psysteme sc_constraint_add(Psysteme sc, Pcontrainte c, bool equality)
Definition: sc_insert_eq.c:115
void sc_integer_projection_information(Psysteme sc, Pbase index_base, int sc_info[][4], int dim_h, int n)
This function gives information about the variables and the constraints of the system.
bool var_with_unity_coeff_p(Psysteme sc, Variable var)
This function returns true: if all positive OR all negative coefficients of the variable var in the s...
void constraint_integer_combination(Pbase index_base, Pcontrainte ineq1, Pcontrainte ineq2, int rank, Variable *right_var, int *right_rank, Value *right_coeff, Variable *left_var, int *left_rank, Value *left_coeff)
This function computes the coefficients of the constraint resulting from the elimination of the varia...
Psysteme sc_append(Psysteme s1, Psysteme s2)
Psysteme sc_append(Psysteme s1, Psysteme s2): calcul de l'intersection des polyedres definis par s1 e...
bool sc_intersection_empty_p_ofl(Psysteme ps1, Psysteme ps2)
bool sc_intersection_empty_p_ofl(ps1, ps2) input : two polyhedra output : true if their intersection ...
Psysteme sc_safe_intersection(Psysteme s1, Psysteme s2, Psysteme s3)
Psysteme sc_safe_intersection(Psysteme s1, Psysteme s2, Psysteme s3) input : output : calcul d'un sys...
Psysteme sc_safe_append(Psysteme s1, Psysteme s2)
Psysteme sc_safe_append(Psysteme s1, Psysteme s2) input : output : calcul de l'intersection des polye...
Psysteme extract_common_syst(Psysteme s1, Psysteme s2)
returns the common subsystem if appropriate...
Psysteme sc_fusion(Psysteme s1, Psysteme s2)
package sc
Psysteme sc_intersection(Psysteme s1, Psysteme s2, Psysteme s3)
Psysteme sc_intersection(Psysteme s1, Psysteme s2, Psysteme s3): calcul d'un systeme de contraintes s...
void sc_fprint(FILE *fp, Psysteme ps, get_variable_name_t nom_var)
void sc_fprint(FILE * f, Psysteme ps, char * (*nom_var)()): cette fonction imprime dans le fichier po...
Definition: sc_io.c:220
void sc_print(Psysteme ps, get_variable_name_t nom_var)
void sc_print()
Definition: sc_io.c:194
void sc_default_dump_to_files(Psysteme sc, int sc_nb, char *directory_name)
void sc_default_dump_to_files(Psysteme sc, sc_nb,directory_name):
Definition: sc_io.c:288
Psysteme * sc_read(char *nomfic)
Psysteme * sc_read(char * nomfic): construit un systeme d'inegalites lineaires a partir d'une represe...
Definition: sc_io.c:74
void sc_fprint_for_sc_fscan(FILE *f, Psysteme sc, char *(*nom_var)(Variable))
void sc_fprint_for_sc_fscan(FILE *f, Psysteme sc, char * (*nom_var)(Variable))
Definition: sc_io.c:260
FILE * syst_in
fichier lu par sc_lex.l
bool sc_fscan(FILE *f, Psysteme *ps)
bool sc_fscan(FILE * f, Psysteme * ps): construit un systeme d'inegalites et d'egalites lineaires a p...
Definition: sc_io.c:121
void sc_dump(Psysteme sc)
void sc_dump(Psysteme sc): dump to stderr
Definition: sc_io.c:142
void sc_default_dump(Psysteme sc)
void sc_default_dump(Psysteme sc): dump to stderr
Definition: sc_io.c:170
char * sc_internal_symbol_table(char *)
bool sc_inequalities_constrain_variable_p(Psysteme sc, Variable var)
Definition: sc_misc.c:195
Psysteme sc_restricted_to_variables_transitive_closure(Psysteme sc, Pbase variables)
for an improved dependence test (Beatrice Creusillet)
Definition: sc_misc.c:64
bool sc_constrains_variable_p(Psysteme sc, Variable var, bool is_equations_p)
Does "var" appears with a non-zero coefficient in any equation or inequality of constraint system "sc...
Definition: sc_misc.c:177
bool sc_equations_constrain_variable_p(Psysteme sc, Variable var)
Definition: sc_misc.c:190
void sc_set_row_echelon_redundancy(bool b __attribute__((unused)))
void algorithm_tiling(Psysteme syst, Pbase outer, Pbase inner, Psysteme *pcondition, Psysteme *ptile_enum, Psysteme *piter_enum)
Psysteme new_loop_bound(Psysteme scn, Pbase base_index)
Psysteme new_loop_bound(Psysteme scn, Pbase base_index) computation of the new iteration space (given...
void algorithm_row_echelon_generic(Psysteme scn, Pbase base_index, Psysteme *pcondition, Psysteme *penumeration, bool redundancy)
each variable should be at least within one <= and one >=; scn IS NOT modified.
Psysteme get_other_constraints(Psysteme *psyst, Pbase vars)
Psysteme get_other_constraints(psyst, vars) Psysteme *psyst; Pbase vars;.
void algorithm_row_echelon(Psysteme scn, Pbase base_index, Psysteme *pcondition, Psysteme *penumeration)
see comments above.
Psysteme sc_add_normalize_ineq(Psysteme ps, Pcontrainte ineq)
Psysteme sc_normalize2(volatile Psysteme ps)
Psysteme sc_normalize2(Psysteme ps): normalisation d'un systeme d'equation et d'inequations lineaires...
Psysteme sc_strong_normalize3(Psysteme ps)
Psysteme sc_strong_normalize5(Psysteme ps, char *(*variable_name)(Variable))
Psysteme sc_strong_normalize_and_check_feasibility2(volatile Psysteme ps, Psysteme(*check_feasibility)(Psysteme), char *(*variable_name)(Variable), int level)
Psysteme sc_strong_normalize_and_check_feasibility2 (Psysteme ps, Psysteme (*check_feasibility)(Psyst...
Psysteme sc_strong_normalize4(Psysteme ps, char *(*variable_name)(Variable))
Psysteme sc_strong_normalize4(Psysteme ps, char * (*variable_name)(Variable))
Pcontrainte find_intermediate_constraints_recursively(Pvecteur v, Variable x, Variable y, Value lmpx, Value lmpy, Value rmpx, Value rmpy)
Find a set ineq of 2-D constraints equivalent to 2-D constraint v==ax+by+c over the interval [lmpx,...
Definition: sc_normalize.c:995
Psysteme sc_strong_normalize_and_check_feasibility(volatile Psysteme ps, Psysteme(*check_feasibility)(Psysteme))
void sc_gcd_normalize(Psysteme ps)
sc_gcd_normalize(ps)
Psysteme sc_strong_normalize2(volatile Psysteme ps)
Psysteme sc_strong_normalize2(Psysteme ps)
Psysteme sc_add_normalize_eq(Psysteme ps, Pcontrainte eq)
Psysteme sc_safe_normalize(Psysteme ps)
Psysteme sc_safe_normalize(Psysteme ps) output : ps, normalized.
Psysteme sc_normalize(Psysteme ps)
Psysteme sc_normalize(Psysteme ps): normalisation d'un systeme d'equation et d'inequations lineaires ...
Psysteme sc_bounded_normalization(Psysteme ps)
Eliminate trivially redundant integer constraint using a O(n x d^2) algorithm, where n is the number ...
Psysteme sc_strong_normalize(Psysteme ps)
Psysteme sc_strong_normalize(Psysteme ps)
Pcontrainte find_intermediate_constraints(Pvecteur v, Variable x, Variable y, Value lmpx, Value lmpy, Value rmpx, Value rmpy)
Find a set ineq of 2-D constraints equivalent to 2-D constraint v==ax+by+c over the interval [lmpx,...
Psysteme sc_oppose(Psysteme ps)
package sc
Definition: sc_oppose.c:58
Pcontrainte p_eg_fin
ensemble des fonctions utilisees dans le programme 'sc_gram.y' permettant de construire la structure ...
Definition: sc_read.c:76
Pvecteur p_pred
pointeur sur le predecesseur du couple courant
Definition: sc_read.c:82
char * nom_var[100]
Definition: sc_read.c:89
Psysteme sc_reversal(Psysteme sc)
Psysteme sc_reversal(Psysteme sc)
Definition: sc_read.c:208
void new_ident(Psysteme ps, Variable s)
void new_ident(Psysteme ps, char s[]): fonction introduisant un nouvel identificateur dans la liste d...
Definition: sc_read.c:118
void init_globals()
void init_globals: initialisation des variables globales
Definition: sc_read.c:102
Variable rec_ident(Psysteme ps, Variable s)
int rec_ident(Psysteme ps, char * s): cette fonction recherche dans la liste des variables du systeme...
Definition: sc_read.c:136
Pcontrainte contrainte_reversal(Pcontrainte c)
Pcontrainte contrainte_reversal(Pcontrainte c)
Definition: sc_read.c:227
Pcontrainte p_ineg_fin
pointeur sur la derniere inegalite
Definition: sc_read.c:79
Pvecteur p_membre_courant
Definition: sc_read.c:84
void creer_eg(Psysteme ps, Pcontrainte peq)
void creer_eg(Psysteme ps,Pcontrainte peq): ajout de la contrainte (egalite) peq au systeme ps.
Definition: sc_read.c:159
void creer_ineg(Psysteme ps, Pcontrainte peq, int sens)
void creer_ineg(Psysteme ps, Pcontrainte peq, int sens): ajout d'une nouvelle inegalite peq dans la l...
Definition: sc_read.c:185
bool sc_simplex_feasibility_ofl_ctrl(Psysteme sys, int ofl_ctrl)
Main Function.
void partial_pivot_direct(frac *X, frac B, frac C, frac D, bool ofl_ctrl)
void frac_simpl(Value *a, Value *b)
void full_pivot(frac *X, frac A, frac B, frac C, frac D, bool ofl_ctrl)
void pivot(frac *X, frac A, frac B, frac C, frac D, bool ofl_ctrl)
void frac_div(frac *x, frac y, frac z, bool ofl_ctrl)
void partial_pivot(frac *X, frac B, frac C, frac D, bool ofl_ctrl)
void frac_mul(frac *x, frac y, frac z, bool ofl_ctrl)
computes x = simplify(y*z)
bool sc_simplex_feasibility_ofl_ctrl_fixprec(Psysteme sc, int ofl_ctrl)
fonction de calcul de la faisabilite' d'un systeme d'equations et d'inequations Auteur : Robert Mahl,...
void full_pivot_direct(frac *X, frac A, frac B, frac C, frac D, bool ofl_ctrl)
computes X = A - B*C/D, but does not try to avoid arithmetic exceptions
void partial_pivot_sioux(frac *X, frac B, frac C, frac D, bool ofl_ctrl)
idem if A==0
void frac_sub(frac *X, frac A, frac B, bool ofl_ctrl)
void full_pivot_sioux(frac *X, frac A, frac B, frac C, frac D, bool ofl_ctrl)
void frac_init(frac *f, int n)
void frac_simplifie(frac *f)
simplifie normalizes fraction f
void sc_find_equalities(Psysteme *ps)
void sc_transform_ineg_in_eg(Psysteme sc)
Transform the two constraints A.x <= b and -A.x <= -b of system sc into an equality A....
void sc_transform_eg_in_ineg(Psysteme sc)
Package sc.
Psysteme sc_sort_constraints(Psysteme ps, Pbase base_index)
void sc_triang_elim_redund_n_first(Psysteme s, int n)
void sc_triang_elim_redund_n_first(s, n) Psysteme s; int n;
Pvecteur highest_rank_pvector(Pvecteur v, Pbase b, int *prank)
returns the highest rank pvector of v in b, of rank *prank
Pcontrainte contrainte_sort(Pcontrainte c, Pbase base, Pbase sort_base, bool inner_first, bool complex_first)
Psysteme sc_build_triang_elim_redund(Psysteme s, Pbase indexes)
outer to inner
Pcontrainte constraints_sort_with_compare(Pcontrainte c, Pbase sort_base, constraint_cmp_func_t compare, void *context)
Psysteme sc_sort_constraints_simplest_first(Psysteme ps, Pbase base_index)
Psysteme sc_triang_elim_redund(Psysteme ps, Pbase base_index)
sort contrainte c, base b, relatively to sort_base, as defined by the switches.
void move_n_first_constraints(Pcontrainte *source, Pcontrainte *target, int n)
void move_n_first_constraints(source, target, n) Pcontrainte *source, *target; int n;
Pvecteur vect_printout_order(Pvecteur v, int(*compare)(Pvecteur *, Pvecteur *))
Try to guess the print out order for an equality already lexicographically sorted.
Definition: sc_unaires.c:170
bool sc_remove_large_coef(Psysteme sc, Value val, bool equalities, bool inequalities)
remove constraints with large coefs, possibly to avoid overflows and to keep systems as simple as pos...
Definition: sc_unaires.c:277
Psysteme sc_elim_var(Psysteme sc, Variable v)
package sur les systemes de contraintes sc
Definition: sc_unaires.c:49
void sc_chg_var(Psysteme s, Variable v_old, Variable v_new)
void sc_chg_var(Psysteme s, Variable v_old, Variable v_new) this function replace the variable v_old ...
Definition: sc_unaires.c:98
void sc_vect_sort(Psysteme s, int(*compare)(Pvecteur *, Pvecteur *))
the name is self explanatory, I guess.
Definition: sc_unaires.c:116
void sc_lexicographic_sort(Psysteme sc, int(*compare)(Pvecteur *, Pvecteur *))
Minimize first the lexico-graphic weight of each constraint according to the comparison function "com...
Definition: sc_unaires.c:206
void sc_sort(Psysteme sc, Pbase sort_base, int(*compare)(Pvecteur *, Pvecteur *))
SORT a Psysteme according to sort_base and compare (given to qsort).
Definition: sc_unaires.c:137
bool var_in_sc_p(Psysteme sc, Variable var)
bool var_in_sc_p(Psysteme sc, Variable var) Cette fonction teste si la variable est contrainte par le...
Definition: sc_var.c:139
bool var_in_lcontrainte_p(Pcontrainte pc, Variable var)
Check if variable var appears in at least on of the constraints in constraint list pc with a non-zero...
Definition: sc_var.c:122
Variable creat_new_var(Psysteme ps)
char * noms_var(int i): cette fonction convertit un numero de variable en chaine de caracteres
Definition: sc_var.c:102
Pcontrainte inegalites
Definition: sc-local.h:71
Pcontrainte egalites
Definition: sc-local.h:70
Pbase base
Definition: sc-local.h:75
int dimension
Definition: sc-local.h:74
int nb_ineq
Definition: sc-local.h:73
int nb_eq
Definition: sc-local.h:72
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
char *(* get_variable_name_t)(Variable)
Definition: vecteur-local.h:62
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