00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "sparse.h"
00017 #include "mincov.h"
00018
00019 #include "util_hack.h"
00020
00021 #define ptime() util_cpu_time()
00022 #define print_time(t) util_print_time(t)
00023
00024 #ifdef IBM_WATC
00025 #define void int
00026 #include "short.h"
00027 #endif
00028
00029 #ifdef IBMPC
00030 #define NO_INLINE
00031 #define BPI 16
00032 #endif
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 #ifndef BPI
00059 #define BPI 32
00060 #endif
00061
00062 #if BPI == 32
00063 #define LOGBPI 5
00064 #else
00065 #define LOGBPI 4
00066 #endif
00067
00068
00069 typedef unsigned int *pset;
00070
00071
00072 typedef struct set_family {
00073 int wsize;
00074 int sf_size;
00075 int capacity;
00076 int count;
00077 int active_count;
00078 pset data;
00079 struct set_family *next;
00080 } set_family_t, *pset_family;
00081
00082
00083 #define WHICH_WORD(element) (((element) >> LOGBPI) + 1)
00084 #define WHICH_BIT(element) ((element) & (BPI-1))
00085
00086
00087 #if BPI == 32
00088 #define SET_SIZE(size) ((size) <= BPI ? 2 : (WHICH_WORD((size)-1) + 1))
00089 #else
00090 #define SET_SIZE(size) ((size) <= BPI ? 3 : (WHICH_WORD((size)-1) + 2))
00091 #endif
00092
00093
00094
00095
00096
00097
00098
00099
00100 #define LOOP(set) (set[0] & 0x03ff)
00101 #define PUTLOOP(set, i) (set[0] &= ~0x03ff, set[0] |= (i))
00102 #if BPI == 32
00103 #define LOOPCOPY(set) LOOP(set)
00104 #define SIZE(set) (set[0] >> 16)
00105 #define PUTSIZE(set, size) (set[0] &= 0xffff, set[0] |= ((size) << 16))
00106 #else
00107 #define LOOPCOPY(set) (LOOP(set) + 1)
00108 #define SIZE(set) (set[LOOP(set)+1])
00109 #define PUTSIZE(set, size) ((set[LOOP(set)+1]) = (size))
00110 #endif
00111
00112 #define NELEM(set) (BPI * LOOP(set))
00113 #define LOOPINIT(size) ((size <= BPI) ? 1 : WHICH_WORD((size)-1))
00114
00115
00116
00117
00118 #define SET(set, flag) (set[0] |= (flag))
00119 #define RESET(set, flag) (set[0] &= ~ (flag))
00120 #define TESTP(set, flag) (set[0] & (flag))
00121
00122
00123 #define PRIME 0x8000
00124 #define NONESSEN 0x4000
00125 #define ACTIVE 0x2000
00126 #define REDUND 0x1000
00127 #define COVERED 0x0800
00128 #define RELESSEN 0x0400
00129
00130
00131 #define foreach_set(R, last, p)\
00132 for(p=R->data,last=p+R->count*R->wsize;p<last;p+=R->wsize)
00133 #define foreach_remaining_set(R, last, pfirst, p)\
00134 for(p=pfirst+R->wsize,last=R->data+R->count*R->wsize;p<last;p+=R->wsize)
00135 #define foreach_active_set(R, last, p)\
00136 foreach_set(R,last,p) if (TESTP(p, ACTIVE))
00137
00138
00139 #define foreachi_set(R, i, p)\
00140 for(p=R->data,i=0;i<R->count;p+=R->wsize,i++)
00141 #define foreachi_active_set(R, i, p)\
00142 foreachi_set(R,i,p) if (TESTP(p, ACTIVE))
00143
00144
00145
00146
00147
00148
00149
00150
00151 #define foreach_set_element(p, i, val, base) \
00152 for(i = LOOP(p); i > 0; ) \
00153 for(val = p[i], base = --i << LOGBPI; val != 0; base++, val >>= 1) \
00154 if (val & 1)
00155
00156
00157 #define GETSET(family, index) ((family)->data + (family)->wsize * (index))
00158
00159
00160 #define set_new(size) set_clear(ALLOC(unsigned int, SET_SIZE(size)), size)
00161 #define set_full(size) set_fill(ALLOC(unsigned int, SET_SIZE(size)), size)
00162 #define set_save(r) set_copy(ALLOC(unsigned int, SET_SIZE(NELEM(r))), r)
00163 #define set_free(r) FREE(r)
00164
00165
00166 #define is_in_set(set, e) (set[WHICH_WORD(e)] & (1 << WHICH_BIT(e)))
00167 #define set_remove(set, e) (set[WHICH_WORD(e)] &= ~ (1 << WHICH_BIT(e)))
00168 #define set_insert(set, e) (set[WHICH_WORD(e)] |= 1 << WHICH_BIT(e))
00169
00170
00171 #ifdef NO_INLINE
00172 #define INLINEset_copy(r, a) (void) set_copy(r,a)
00173 #define INLINEset_clear(r, size) (void) set_clear(r, size)
00174 #define INLINEset_fill(r, size) (void) set_fill(r, size)
00175 #define INLINEset_and(r, a, b) (void) set_and(r, a, b)
00176 #define INLINEset_or(r, a, b) (void) set_or(r, a, b)
00177 #define INLINEset_diff(r, a, b) (void) set_diff(r, a, b)
00178 #define INLINEset_ndiff(r, a, b, f) (void) set_ndiff(r, a, b, f)
00179 #define INLINEset_xor(r, a, b) (void) set_xor(r, a, b)
00180 #define INLINEset_xnor(r, a, b, f) (void) set_xnor(r, a, b, f)
00181 #define INLINEset_merge(r, a, b, mask) (void) set_merge(r, a, b, mask)
00182 #define INLINEsetp_implies(a, b, when_false) \
00183 if (! setp_implies(a,b)) when_false
00184 #define INLINEsetp_disjoint(a, b, when_false) \
00185 if (! setp_disjoint(a,b)) when_false
00186 #define INLINEsetp_equal(a, b, when_false) \
00187 if (! setp_equal(a,b)) when_false
00188
00189 #else
00190
00191 #define INLINEset_copy(r, a)\
00192 {register int i_=LOOPCOPY(a); do r[i_]=a[i_]; while (--i_>=0);}
00193 #define INLINEset_clear(r, size)\
00194 {register int i_=LOOPINIT(size); *r=i_; do r[i_] = 0; while (--i_ > 0);}
00195 #define INLINEset_fill(r, size)\
00196 {register int i_=LOOPINIT(size); *r=i_; \
00197 r[i_]=((unsigned int)(~0))>>(i_*BPI-size); while(--i_>0) r[i_]=~0;}
00198 #define INLINEset_and(r, a, b)\
00199 {register int i_=LOOP(a); PUTLOOP(r,i_);\
00200 do r[i_] = a[i_] & b[i_]; while (--i_>0);}
00201 #define INLINEset_or(r, a, b)\
00202 {register int i_=LOOP(a); PUTLOOP(r,i_);\
00203 do r[i_] = a[i_] | b[i_]; while (--i_>0);}
00204 #define INLINEset_diff(r, a, b)\
00205 {register int i_=LOOP(a); PUTLOOP(r,i_);\
00206 do r[i_] = a[i_] & ~ b[i_]; while (--i_>0);}
00207 #define INLINEset_ndiff(r, a, b, fullset)\
00208 {register int i_=LOOP(a); PUTLOOP(r,i_);\
00209 do r[i_] = fullset[i_] & (a[i_] | ~ b[i_]); while (--i_>0);}
00210 #ifdef IBM_WATC
00211 #define INLINEset_xor(r, a, b) (void) set_xor(r, a, b)
00212 #define INLINEset_xnor(r, a, b, f) (void) set_xnor(r, a, b, f)
00213 #else
00214 #define INLINEset_xor(r, a, b)\
00215 {register int i_=LOOP(a); PUTLOOP(r,i_);\
00216 do r[i_] = a[i_] ^ b[i_]; while (--i_>0);}
00217 #define INLINEset_xnor(r, a, b, fullset)\
00218 {register int i_=LOOP(a); PUTLOOP(r,i_);\
00219 do r[i_] = fullset[i_] & ~ (a[i_] ^ b[i_]); while (--i_>0);}
00220 #endif
00221 #define INLINEset_merge(r, a, b, mask)\
00222 {register int i_=LOOP(a); PUTLOOP(r,i_);\
00223 do r[i_] = (a[i_]&mask[i_]) | (b[i_]&~mask[i_]); while (--i_>0);}
00224 #define INLINEsetp_implies(a, b, when_false)\
00225 {register int i_=LOOP(a); do if (a[i_]&~b[i_]) break; while (--i_>0);\
00226 if (i_ != 0) when_false;}
00227 #define INLINEsetp_disjoint(a, b, when_false)\
00228 {register int i_=LOOP(a); do if (a[i_]&b[i_]) break; while (--i_>0);\
00229 if (i_ != 0) when_false;}
00230 #define INLINEsetp_equal(a, b, when_false)\
00231 {register int i_=LOOP(a); do if (a[i_]!=b[i_]) break; while (--i_>0);\
00232 if (i_ != 0) when_false;}
00233
00234 #endif
00235
00236 #if BPI == 32
00237 #define count_ones(v)\
00238 (bit_count[v & 255] + bit_count[(v >> 8) & 255]\
00239 + bit_count[(v >> 16) & 255] + bit_count[(v >> 24) & 255])
00240 #else
00241 #define count_ones(v) (bit_count[v & 255] + bit_count[(v >> 8) & 255])
00242 #endif
00243
00244
00245 extern int bit_count[256];
00246
00247
00248
00249
00250 #define bool int
00251 #define FALSE 0
00252 #define TRUE 1
00253 #define MAYBE 2
00254 #define print_bool(x) ((x) == 0 ? "FALSE" : ((x) == 1 ? "TRUE" : "MAYBE"))
00255
00256
00257 #define pcube pset
00258 #define new_cube() set_new(cube.size)
00259 #define free_cube(r) set_free(r)
00260 #define pcover pset_family
00261 #define new_cover(i) sf_new(i, cube.size)
00262 #define free_cover(r) sf_free(r)
00263 #define free_cubelist(T) FREE(T[0]); FREE(T);
00264
00265
00266
00267 typedef struct cost_struct {
00268 int cubes;
00269 int in;
00270 int out;
00271 int mv;
00272 int total;
00273 int primes;
00274 } cost_t, *pcost;
00275
00276
00277
00278 typedef struct pair_struct {
00279 int cnt;
00280 int *var1;
00281 int *var2;
00282 } pair_t, *ppair;
00283
00284
00285
00286 typedef struct symbolic_list_struct {
00287 int variable;
00288 int pos;
00289 struct symbolic_list_struct *next;
00290 } symbolic_list_t;
00291
00292
00293
00294 typedef struct symbolic_label_struct {
00295 char *label;
00296 struct symbolic_label_struct *next;
00297 } symbolic_label_t;
00298
00299
00300
00301 typedef struct symbolic_struct {
00302 symbolic_list_t *symbolic_list;
00303 int symbolic_list_length;
00304 symbolic_label_t *symbolic_label;
00305 int symbolic_label_length;
00306 struct symbolic_struct *next;
00307 } symbolic_t;
00308
00309
00310
00311 typedef struct {
00312 pcover F, D, R;
00313 char *filename;
00314 int pla_type;
00315 pcube phase;
00316 ppair pair;
00317 char **label;
00318 symbolic_t *symbolic;
00319 symbolic_t *symbolic_output;
00320 } PLA_t, *pPLA;
00321
00322 #define equal(a,b) (strcmp(a,b) == 0)
00323
00324
00325 #define CUBELISTSIZE(T) (((pcube *) T[1] - T) - 3)
00326
00327
00328 #define IN
00329 #define OUT
00330 #define INOUT
00331
00332
00333 #define F_type 1
00334 #define D_type 2
00335 #define R_type 4
00336 #define PLEASURE_type 8
00337 #define EQNTOTT_type 16
00338 #define KISS_type 128
00339 #define CONSTRAINTS_type 256
00340 #define SYMBOLIC_CONSTRAINTS_type 512
00341 #define FD_type (F_type | D_type)
00342 #define FR_type (F_type | R_type)
00343 #define DR_type (D_type | R_type)
00344 #define FDR_type (F_type | D_type | R_type)
00345
00346
00347 #define COMPL 0x0001
00348 #define ESSEN 0x0002
00349 #define EXPAND 0x0004
00350 #define EXPAND1 0x0008
00351 #define GASP 0x0010
00352 #define IRRED 0x0020
00353 #define REDUCE 0x0040
00354 #define REDUCE1 0x0080
00355 #define SPARSE 0x0100
00356 #define TAUT 0x0200
00357 #define EXACT 0x0400
00358 #define MINCOV 0x0800
00359 #define MINCOV1 0x1000
00360 #define SHARP 0x2000
00361 #define IRRED1 0x4000
00362
00363 #define VERSION\
00364 "UC Berkeley, Espresso Version #2.3, Release date 01/31/88"
00365
00366
00367 #define TIME_COUNT 16
00368 #define READ_TIME 0
00369 #define COMPL_TIME 1
00370 #define ONSET_TIME 2
00371 #define ESSEN_TIME 3
00372 #define EXPAND_TIME 4
00373 #define IRRED_TIME 5
00374 #define REDUCE_TIME 6
00375 #define GEXPAND_TIME 7
00376 #define GIRRED_TIME 8
00377 #define GREDUCE_TIME 9
00378 #define PRIMES_TIME 10
00379 #define MINCOV_TIME 11
00380 #define MV_REDUCE_TIME 12
00381 #define RAISE_IN_TIME 13
00382 #define VERIFY_TIME 14
00383 #define WRITE_TIME 15
00384
00385
00386
00387 #define NUMINPUTS cube.num_binary_vars
00388 #define NUMOUTPUTS cube.part_size[cube.num_vars - 1]
00389
00390 #define POSITIVE_PHASE(pos)\
00391 (is_in_set(PLA->phase, cube.first_part[cube.output]+pos) != 0)
00392
00393 #define INLABEL(var) PLA->label[cube.first_part[var] + 1]
00394 #define OUTLABEL(pos) PLA->label[cube.first_part[cube.output] + pos]
00395
00396 #define GETINPUT(c, pos)\
00397 ((c[WHICH_WORD(2*pos)] >> WHICH_BIT(2*pos)) & 3)
00398 #define GETOUTPUT(c, pos)\
00399 (is_in_set(c, cube.first_part[cube.output] + pos) != 0)
00400
00401 #define PUTINPUT(c, pos, value)\
00402 c[WHICH_WORD(2*pos)] = (c[WHICH_WORD(2*pos)] & ~(3 << WHICH_BIT(2*pos)))\
00403 | (value << WHICH_BIT(2*pos))
00404 #define PUTOUTPUT(c, pos, value)\
00405 c[WHICH_WORD(pos)] = (c[WHICH_WORD(pos)] & ~(1 << WHICH_BIT(pos)))\
00406 | (value << WHICH_BIT(pos))
00407
00408 #define TWO 3
00409 #define DASH 3
00410 #define ONE 2
00411 #define ZERO 1
00412
00413
00414 #define EXEC(fct, name, S)\
00415 {long t=ptime();fct;if(trace)print_trace(S,name,ptime()-t);}
00416 #define EXEC_S(fct, name, S)\
00417 {long t=ptime();fct;if(summary)print_trace(S,name,ptime()-t);}
00418 #define EXECUTE(fct,i,S,cost)\
00419 {long t=ptime();fct;totals(t,i,S,&(cost));}
00420
00421
00422
00423
00424
00425 extern unsigned int debug;
00426 extern bool verbose_debug;
00427 extern char *total_name[TIME_COUNT];
00428 extern long total_time[TIME_COUNT];
00429 extern int total_calls[TIME_COUNT];
00430
00431 extern bool echo_comments;
00432 extern bool echo_unknown_commands;
00433 extern bool force_irredundant;
00434 extern bool skip_make_sparse;
00435 extern bool kiss;
00436 extern bool pos;
00437 extern bool print_solution;
00438 extern bool recompute_onset;
00439 extern bool remove_essential;
00440 extern bool single_expand;
00441 extern bool summary;
00442 extern bool trace;
00443 extern bool unwrap_onset;
00444 extern bool use_random_order;
00445 extern bool use_super_gasp;
00446 extern char *filename;
00447 extern bool debug_exact_minimization;
00448
00449
00450
00451
00452
00453 struct pla_types_struct {
00454 char *key;
00455 int value;
00456 };
00457
00458
00459
00460
00461
00462
00463
00464
00465 #define CUBE_TEMP 10
00466
00467 struct cube_struct {
00468 int size;
00469 int num_vars;
00470 int num_binary_vars;
00471 int *first_part;
00472 int *last_part;
00473 int *part_size;
00474 int *first_word;
00475 int *last_word;
00476 pset binary_mask;
00477 pset mv_mask;
00478 pset *var_mask;
00479 pset *temp;
00480 pset fullset;
00481 pset emptyset;
00482 unsigned int inmask;
00483 int inword;
00484 int *sparse;
00485 int num_mv_vars;
00486 int output;
00487 };
00488
00489 struct cdata_struct {
00490 int *part_zeros;
00491 int *var_zeros;
00492 int *parts_active;
00493 bool *is_unate;
00494 int vars_active;
00495 int vars_unate;
00496 int best;
00497 };
00498
00499
00500 extern struct pla_types_struct pla_types[];
00501 extern struct cube_struct cube, temp_cube_save;
00502 extern struct cdata_struct cdata, temp_cdata_save;
00503
00504 #ifdef lint
00505 #define DISJOINT 0x5555
00506 #else
00507 #if BPI == 32
00508 #define DISJOINT 0x55555555
00509 #else
00510 #define DISJOINT 0x5555
00511 #endif
00512 #endif
00513
00514
00515
00516 extern int binate_split_select();
00517 extern pcover cubeunlist();
00518 extern pcube *cofactor();
00519 extern pcube *cube1list();
00520 extern pcube *cube2list();
00521 extern pcube *cube3list();
00522 extern pcube *scofactor();
00523 extern void massive_count();
00524 extern pcover complement();
00525 extern pcover simplify();
00526 extern void simp_comp();
00527 extern int d1_rm_equal();
00528 extern int rm2_contain();
00529 extern int rm2_equal();
00530 extern int rm_contain();
00531 extern int rm_equal();
00532 extern int rm_rev_contain();
00533 extern pset *sf_list();
00534 extern pset *sf_sort();
00535 extern pset_family d1merge();
00536 extern pset_family dist_merge();
00537 extern pset_family sf_contain();
00538 extern pset_family sf_dupl();
00539 extern pset_family sf_ind_contain();
00540 extern pset_family sf_ind_unlist();
00541 extern pset_family sf_merge();
00542 extern pset_family sf_rev_contain();
00543 extern pset_family sf_union();
00544 extern pset_family sf_unlist();
00545 extern void cube_setup();
00546 extern void restore_cube_struct();
00547 extern void save_cube_struct();
00548 extern void setdown_cube();
00549 extern PLA_labels();
00550 extern char *get_word();
00551 extern int label_index();
00552 extern int read_pla();
00553 extern int read_symbolic();
00554 extern pPLA new_PLA();
00555 extern void PLA_summary();
00556 extern void free_PLA();
00557 extern void parse_pla();
00558 extern void read_cube();
00559 extern void skip_line();
00560 extern foreach_output_function();
00561 extern int cubelist_partition();
00562 extern int so_both_do_espresso();
00563 extern int so_both_do_exact();
00564 extern int so_both_save();
00565 extern int so_do_espresso();
00566 extern int so_do_exact();
00567 extern int so_save();
00568 extern pcover cof_output();
00569 extern pcover lex_sort();
00570 extern pcover mini_sort();
00571 extern pcover random_order();
00572 extern pcover size_sort();
00573 extern pcover sort_reduce();
00574 extern pcover uncof_output();
00575 extern pcover unravel();
00576 extern pcover unravel_range();
00577 extern void so_both_espresso();
00578 extern void so_espresso();
00579 extern char *fmt_cost();
00580 extern char *print_cost();
00581 extern char *strsav();
00582 extern void copy_cost();
00583 extern void cover_cost();
00584 extern void fatal();
00585 extern void print_trace();
00586 extern void size_stamp();
00587 extern void totals();
00588 extern char *fmt_cube();
00589 extern char *fmt_expanded_cube();
00590 extern char *pc1();
00591 extern char *pc2();
00592 extern char *pc3();
00593 extern int makeup_labels();
00594 extern kiss_output();
00595 extern kiss_print_cube();
00596 extern output_symbolic_constraints();
00597 extern void cprint();
00598 extern void debug1_print();
00599 extern void debug_print();
00600 extern void eqn_output();
00601 extern void fpr_header();
00602 extern void fprint_pla();
00603 extern void pls_group();
00604 extern void pls_label();
00605 extern void pls_output();
00606 extern void print_cube();
00607 extern void print_expanded_cube();
00608 extern void sf_debug_print();
00609 extern find_equiv_outputs();
00610 extern int check_equiv();
00611 extern pcover espresso();
00612 extern bool essen_cube();
00613 extern pcover cb_consensus();
00614 extern pcover cb_consensus_dist0();
00615 extern pcover essential();
00616 extern pcover minimize_exact();
00617 extern pcover minimize_exact_literals();
00618 extern bool feasibly_covered();
00619 extern int most_frequent();
00620 extern pcover all_primes();
00621 extern pcover expand();
00622 extern pcover find_all_primes();
00623 extern void elim_lowering();
00624 extern void essen_parts();
00625 extern void essen_raising();
00626 extern void expand1();
00627 extern void mincov();
00628 extern void select_feasible();
00629 extern void setup_BB_CC();
00630 extern pcover expand_gasp();
00631 extern pcover irred_gasp();
00632 extern pcover last_gasp();
00633 extern pcover super_gasp();
00634 extern void expand1_gasp();
00635 extern int util_getopt();
00636 extern find_dc_inputs();
00637 extern find_inputs();
00638 extern form_bitvector();
00639 extern map_dcset();
00640 extern map_output_symbolic();
00641 extern map_symbolic();
00642 extern pcover map_symbolic_cover();
00643 extern symbolic_hack_labels();
00644 extern bool cube_is_covered();
00645 extern bool taut_special_cases();
00646 extern bool tautology();
00647 extern pcover irredundant();
00648 extern void mark_irredundant();
00649 extern void irred_split_cover();
00650 extern sm_matrix *irred_derive_table();
00651 extern pset minterms();
00652 extern void explode();
00653 extern void map();
00654 extern output_phase_setup();
00655 extern pPLA set_phase();
00656 extern pcover opo();
00657 extern pcube find_phase();
00658 extern pset_family find_covers();
00659 extern pset_family form_cover_table();
00660 extern pset_family opo_leaf();
00661 extern pset_family opo_recur();
00662 extern void opoall();
00663 extern void phase_assignment();
00664 extern void repeated_phase_assignment();
00665 extern generate_all_pairs();
00666 extern int **find_pairing_cost();
00667 extern int find_best_cost();
00668 extern int greedy_best_cost();
00669 extern int minimize_pair();
00670 extern int pair_free();
00671 extern pair_all();
00672 extern pcover delvar();
00673 extern pcover pairvar();
00674 extern ppair pair_best_cost();
00675 extern ppair pair_new();
00676 extern ppair pair_save();
00677 extern print_pair();
00678 extern void find_optimal_pairing();
00679 extern void set_pair();
00680 extern void set_pair1();
00681 extern pcover primes_consensus();
00682 extern bool sccc_special_cases();
00683 extern pcover reduce();
00684 extern pcube reduce_cube();
00685 extern pcube sccc();
00686 extern pcube sccc_cube();
00687 extern pcube sccc_merge();
00688 extern bool set_andp();
00689 extern bool set_orp();
00690 extern bool setp_disjoint();
00691 extern bool setp_empty();
00692 extern bool setp_equal();
00693 extern bool setp_full();
00694 extern bool setp_implies();
00695 extern char *pbv1();
00696 extern char *ps1();
00697 extern int *sf_count();
00698 extern int *sf_count_restricted();
00699 extern int bit_index();
00700 extern int set_dist();
00701 extern int set_ord();
00702 extern void set_adjcnt();
00703 extern pset set_and();
00704 extern pset set_clear();
00705 extern pset set_copy();
00706 extern pset set_diff();
00707 extern pset set_fill();
00708 extern pset set_merge();
00709 extern pset set_or();
00710 extern pset set_xor();
00711 extern pset sf_and();
00712 extern pset sf_or();
00713 extern pset_family sf_active();
00714 extern pset_family sf_addcol();
00715 extern pset_family sf_addset();
00716 extern pset_family sf_append();
00717 extern pset_family sf_bm_read();
00718 extern pset_family sf_compress();
00719 extern pset_family sf_copy();
00720 extern pset_family sf_copy_col();
00721 extern pset_family sf_delc();
00722 extern pset_family sf_delcol();
00723 extern pset_family sf_inactive();
00724 extern pset_family sf_join();
00725 extern pset_family sf_new();
00726 extern pset_family sf_permute();
00727 extern pset_family sf_read();
00728 extern pset_family sf_save();
00729 extern pset_family sf_transpose();
00730 extern void set_write();
00731 extern void sf_bm_print();
00732 extern void sf_cleanup();
00733 extern void sf_delset();
00734 extern void sf_free();
00735 extern void sf_print();
00736 extern void sf_write();
00737 extern bool ccommon();
00738 extern bool cdist0();
00739 extern bool full_row();
00740 extern int ascend();
00741 extern int cactive();
00742 extern int cdist();
00743 extern int cdist01();
00744 extern int cvolume();
00745 extern int d1_order();
00746 extern int d1_order_size();
00747 extern int desc1();
00748 extern int descend();
00749 extern int lex_order();
00750 extern int lex_order1();
00751 extern pset force_lower();
00752 extern void consensus();
00753 extern pcover cb1_dsharp();
00754 extern pcover cb_dsharp();
00755 extern pcover cb_recur_dsharp();
00756 extern pcover cb_recur_sharp();
00757 extern pcover cb_sharp();
00758 extern pcover cv_dsharp();
00759 extern pcover cv_intersect();
00760 extern pcover cv_sharp();
00761 extern pcover dsharp();
00762 extern pcover make_disjoint();
00763 extern pcover sharp();
00764 pset do_sm_minimum_cover();
00765 extern pcover make_sparse();
00766 extern pcover mv_reduce();
00767 #if !defined(__osf__) && !defined(__STDC__) && !defined(__hpux)
00768 extern qsort();
00769 #endif
00770 extern qst();
00771 extern pcover find_all_minimal_covers_petrick();
00772 extern pcover map_cover_to_unate();
00773 extern pcover map_unate_to_cover();
00774 extern pset_family exact_minimum_cover();
00775 extern pset_family gen_primes();
00776 extern pset_family unate_compl();
00777 extern pset_family unate_complement();
00778 extern pset_family unate_intersect();
00779 extern PLA_permute();
00780 extern bool PLA_verify();
00781 extern bool check_consistency();
00782 extern bool verify();