15static void fcube_is_covered();
16static void ftautology();
17static bool ftaut_special_cases();
66 p1 =
GETSET(F, pe->col_num);
71 printf(
"# IRRED: F=%d E=%d R=%d Rt=%d Rp=%d Rc=%d Final=%d Bound=%d\n",
72 F->count, E->count, Rt->count+Rp->count, Rt->count, Rp->count,
122 (void) printf(
"IRRED1: zr=%d ze=%d to-go=%d time=%s\n",
123 R->count, (*E)->count, F->count - (R->count + (*E)->count),
138 (void) printf(
"IRRED1: zr=%d zrt=%d to-go=%d time=%s\n",
139 (*Rp)->count, (*Rt)->count,
158 register pcube last,
p, *list;
160 int size_last_dominance, i;
178 size_last_dominance = 0;
181 Rp_current =
SIZE(
p);
182 fcube_is_covered(list,
p, table);
185 (void) printf(
"IRRED1: %d of %d to-go=%d, table=%dx%d time=%s\n",
186 i, Rp->count, Rp->count - i,
190 if (table->nrows - size_last_dominance > 1000) {
192 size_last_dominance = table->nrows;
194 (void) printf(
"IRRED1: delete redundant rows, now %dx%d\n",
195 table->nrows, table->ncols);
220 register pcube cl, cr;
221 register int best, result;
222 static int taut_level = 0;
240 printf(
"exit TAUTOLOGY[%d]: %s\n", --taut_level,
print_bool(result));
253 register pcube *T1, *Tsave,
p, ceil=
cube.temp[0], temp=
cube.temp[1];
258 for(T1 = T+2; (
p = *T1++) != NULL; ) {
268 for(T1 = T+2; (
p = *T1++) != NULL; ) {
280 if (cdata.vars_unate == cdata.vars_active) {
285 }
else if (cdata.vars_active == 1) {
290 }
else if (cdata.vars_unate != 0) {
293 for(var = 0; var <
cube.num_vars; var++) {
294 if (cdata.is_unate[var]) {
300 for(Tsave = T1 = T+2; (
p = *T1++) != 0; ) {
306 T[1] = (
pcube) Tsave;
309 printf(
"UNATE_REDUCTION: %d unate variables, reduced to %d\n",
315 }
else if (cdata.var_zeros[cdata.best] <
CUBELISTSIZE(T) / 2) {
335fcube_is_covered(T, c, table)
349 register pcube cl, cr;
351 static int ftaut_level = 0;
357 if (ftaut_special_cases(T, table) ==
MAYBE) {
362 ftautology(
scofactor(T, cl, best), table);
363 ftautology(
scofactor(T, cr, best), table);
371 (void) printf(
"exit FIND_TAUTOLOGY[%d]: table is %d by %d\n",
372 --ftaut_level, table->nrows, table->ncols);
377ftaut_special_cases(T, table)
381 register pcube *T1, *Tsave,
p, temp =
cube.temp[0], ceil =
cube.temp[1];
385 for(T1 = T+2; (
p = *T1++) != 0; ) {
400 if (cdata.vars_unate == cdata.vars_active) {
402 rownum = table->last_row ? table->last_row->row_num+1 : 0;
403 (void)
sm_insert(table, rownum, Rp_current);
404 for(T1 = T+2; (
p = *T1++) != 0; ) {
416 }
else if (cdata.vars_unate != 0) {
420 if (cdata.is_unate[var]) {
426 for(Tsave = T1 = T+2; (
p = *T1++) != 0; ) {
432 T[1] = (
pcube) Tsave;
435 printf(
"UNATE_REDUCTION: %d unate variables, reduced to %d\n",
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define INLINEset_or(r, a, b)
pset_family sf_inactive()
#define PUTSIZE(set, size)
bool taut_special_cases()
ABC_NAMESPACE_HEADER_END int binate_split_select()
#define GETSET(family, index)
#define INLINEset_copy(r, a)
#define foreach_set(R, last, p)
sm_matrix * irred_derive_table()
ABC_NAMESPACE_IMPL_START sm_matrix * sm_alloc()
sm_row * sm_minimum_cover()
typedefABC_NAMESPACE_HEADER_START struct sm_element_struct sm_element
#define sm_foreach_row_element(prow, p)
struct sm_matrix_struct sm_matrix
struct sm_row_struct sm_row