tab->max_con = n_row;
tab->n_col = n_var;
tab->n_var = n_var;
+ tab->n_param = 0;
+ tab->n_div = 0;
tab->n_dead = 0;
tab->n_redundant = 0;
tab->need_undo = 0;
dup->max_con = tab->max_con;
dup->n_col = tab->n_col;
dup->n_var = tab->n_var;
+ dup->n_param = tab->n_param;
+ dup->n_div = tab->n_div;
dup->n_dead = tab->n_dead;
dup->n_redundant = tab->n_redundant;
dup->rational = tab->rational;
fprintf(out, "%*s[", indent, "");
for (i = 0; i < tab->n_var; ++i) {
if (i)
- fprintf(out, ", ");
+ fprintf(out, (i == tab->n_param ||
+ i == tab->n_var - tab->n_div) ? "; "
+ : ", ");
fprintf(out, "%c%d%s", tab->var[i].is_row ? 'r' : 'c',
tab->var[i].index,
tab->var[i].is_zero ? " [=0]" :
* since the constraint has been reduced to 0 = 0 and is therefore always
* satisfied.
*
+ * There are "n_var" variables in total. The first "n_param" of these
+ * are called parameters and the last "n_div" of these are called divs.
+ * The basic tableau operations makes no distinction between different
+ * kinds of variables.
+ *
* Dead columns and redundant rows are detected on the fly.
* However, the basic operations do not ensure that all dead columns
* or all redundant rows are detected.
unsigned n_redundant;
unsigned n_var;
+ unsigned n_param;
+ unsigned n_div;
unsigned n_con;
unsigned n_eq;
unsigned max_con;