1 #include "reduce_domain.h"
3 Polyhedron
*reduce_domain(Polyhedron
*D
, Matrix
*CT
, Polyhedron
*CEq
,
4 Polyhedron
**fVD
, int nd
, unsigned MaxRays
)
10 Dt
= CT
? DomainPreimage(D
, CT
, MaxRays
) : D
;
11 rVD
= CEq
? DomainIntersection(Dt
, CEq
, MaxRays
) : Domain_Copy(Dt
);
13 /* if rVD is empty or too small in geometric dimension */
14 if(!rVD
|| emptyQ(rVD
) ||
15 (CEq
&& rVD
->Dimension
-rVD
->NbEq
< Dt
->Dimension
-Dt
->NbEq
-CEq
->NbEq
)) {
20 return 0; /* empty validity domain */
26 fVD
[nd
] = Domain_Copy(rVD
);
27 for (i
= 0 ; i
< nd
; ++i
) {
29 Polyhedron
*I
= DomainIntersection(fVD
[nd
], fVD
[i
], MaxRays
);
34 F
= DomainSimplify(I
, fVD
[nd
], MaxRays
);
37 rVD
= DomainDifference(rVD
, F
, MaxRays
);
44 rVD
= DomainConstraintSimplify(rVD
, MaxRays
);
52 barvinok_count(rVD
, &c
, MaxRays
);
53 if (value_zero_p(c
)) {